diff --git a/BabbleApp/Locale/Afrikaans/locale.json b/BabbleApp/Locale/Afrikaans/locale.json new file mode 100644 index 0000000..8536962 --- /dev/null +++ b/BabbleApp/Locale/Afrikaans/locale.json @@ -0,0 +1,156 @@ +{ + "general.header": "General Settings", + "general.checkForUpdates": "Check For Updates", + "general.toolTip": "Toggle update check on launch", + "general.oscSettings": "OSC Settings", + "general.locationPrefix": "Location Prefix", + "general.locationTooltip": "Prefix for OSC address", + "general.address": "Address", + "general.addressTooltip": "IP address we send OSC data to", + "general.port": "Port", + "general.portTooltip": "OSC port we send data to", + "general.receiver": "Receive functions", + "general.receiverTooltip": "Toggle OSC receive functions", + "general.receiverPort": "Receiver Port", + "general.receiverPortTooltip": "Port we receive OSC data from (used to recalibrate from within VRChat", + "general.recalibrate": "Recalibrate Address", + "general.recalibrateTooltip": "OSC address we use for recalibrating", + "general.uvcCameraSettings": "UVC Camera Settings", + "general.windowFocus": "Koppelvlak gepauseer", + "general.useRedChannel": "Use Red Channel", + "general.useRedChannelTooltip": "Uses only the red channel for Omnicept capture", + "general.xResolution": "X Resolution", + "general.xResolutionTooltip": "X capture resolution. Default = 0", + "general.yResolution": "Y Resolution", + "general.yResolutionTooltip": "Y capture resolution. Default = 0", + "general.framerate": "Framerate", + "general.framerateTooltip": "Capture framerate. Default = 0", + "general.language": "Language Settings", + "general.languageInstructions": "Restart the Babble App to see your changes", + "general.languageTooltip": "Change the language", + "error.oscPort": "OSC port value must be an integer 0-65535", + "error.oscValue": "OSC port value cannot be empty and must be an integer 0-65535", + "error.notAnInt": "Not an Int", + "error.notAFloat": "Not a Float", + "error.improperTabValue": "Improper tab value", + "error.frame": "Problem while getting frame", + "error.size": "Size of frames to display are of unequal sizes", + "error.capture": "Frame capture issue detected", + "warn.frameDrop": "Frame drop. Corrupted JPEG", + "warn.captureProblem": "Capture source problem, assuming camera disconnected, waiting for reconnect", + "warn.serialCapture": "Serial capture source problem, assuming camera disconnected, waiting for reconnect", + "warn.backpressure1": "CAPTURE QUEUE BACKPRESSURE OF", + "warn.backpressure2": "CHECK FOR CRASH OR TIMING ISSUES IN ALGORITHM", + "warn.oneEuroValues": "OneEuroFilter values must be a legal number", + "info.moveToTrackingMode": "Moving to tracking mode", + "info.moveToROIMode": "Moving to ROI mode", + "info.setROI": "Set ROI", + "info.enabled": "Enabled", + "info.disabled": "Disabled", + "info.newValue": "New value", + "info.discardingSerial": "Discarding the serial buffer", + "info.refreshedCameraList": "Refreshed Camera List", + "info.ETVRConnected": "ETVR Serial Tracker device connected on", + "info.ETVRFailiure": "Failed to connect on", + "info.enterCaptureOne": "Capture source", + "info.enterCaptureTwo": "not found, retrying...", + "info.exitCaptureThread": "Exiting capture thread", + "info.exitTrackingThread": "Exiting tracking thread", + "info.serialCapture": "Failed to get serial picture", + "log.info": "INFO", + "log.warn": "WARN", + "log.error": "ERROR", + "algorithm.header": "Model Settings", + "algorithm.modelFile": "Model file", + "algorithm.modelFileTooptip": "Name of the model file", + "algorithm.inferenceThreads": "Inference Threads", + "algorithm.inferenceThreadsTooltip": "How many threads to use for processing the model", + "algorithm.runtime": "Runtime", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "GPU Index", + "algorithm.GPUIndexTooltip": "Select which device to run inference", + "algorithm.useGPU": "Use GPU", + "algorithm.useGPUTooltip": "Toggle GPU execution", + "algorithm.modelOutputMultiplier": "Model output multiplier", + "algorithm.modelOutputMultiplierTooltip": "Model output modifier", + "algorithm.calibrationDeadzone": "Calibration Deadzone", + "algorithm.calibrationDeadzoneTooltip": "Offset the minimum calibrated values", + "algorithm.oneEuroFilterParameters": "One Euro Filter Parameters", + "algorithm.minFrequencyCutoff": "Min Frequency Cutoff", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "Speed Coefficient", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "Select Entire Frame", + "camera.selectEntireFrameTooltip": "Automatically set ROI", + "camera.rotation": "Rotation", + "camera.rotationTooltip": "Adjust the rotation of your cameras, make them level", + "camera.startCalibration": "Start Calibration", + "camera.startCalibrationTooltip": "Neutural Calibration: Hold a relaxed face, press [Start Calibration] and then press [Stop Calibraion]. \nFull Calibration: Press [Start Calibration] and make as many face movements as you can until it switches back to tracking mode or press [Stop Calibration]", + "camera.stopCalibration": "Stop Calibration", + "camera.stopCalibrationTooltip": "Stop calibration manually", + "camera.enableCalibration": "Enable Calibration", + "camera.enableCalibrationTooltip": "Checked = Calibrated model output. Unchecked = Raw model output", + "camera.mode": "Mode", + "camera.calibrating": "Calibration", + "camera.verticalFlip": "Vertical Flip", + "camera.verticalFlipTooltip": "Vertically flip camera feed", + "camera.horizontalFlip": "Horizontal Flip", + "camera.horizontalFlipTooltip": "Horizontally flip camera feed", + "camera.crop": "Please set a Crop", + "camera.cameraAddress": "Camera Address", + "camera.cameraAddressTooltip": "Enter the IP address or UVC port of your camera. (Include the 'http://')", + "camera.refreshCameraList": "Refresh List", + "camera.saveAndRestartTracking": "Save and Restart Tracking", + "camera.trackingMode": "Tracking Mode", + "camera.trackingModeTooltip": "Go here to track your mouth", + "camera.croppingMode": "Cropping Mode", + "camera.croppingModeToolTip": "Go here to crop out your mouth", + "camera.waiting": "Waiting for camera address", + "camera.connecting": "Camera Connecting", + "camera.reconnecting": "Camera Reconnecting", + "camera.waitingOnMouthCrop": "Awating Mouth Crop", + "camera.calibration": "Calibration", + "camera.tracking": "Tracking", + "config.noSettingsFile": "No settings file, using base settings", + "config.failedToLoadSettings": "Failed to load settings file", + "config.usingBackupSettings": "Using backup settings", + "config.usingBaseSettings": "Using base settings", + "config.saved": "Config saved successfully", + "babble.latestVersion": "App is the latest version", + "babble.needUpdateOne": "You have app version", + "babble.needUpdateTwo": "installed. Please update to", + "babble.needUpdateThree": "for the newest features", + "babble.name": "Babble App", + "babble.updatePresent": "New Update Available", + "babble.updateTo": "Please update to", + "babble.downloadPage": "Download Page", + "babble.noToast": "Toast notifications not supported", + "babble.noInternet": "Internet connection failed, no update check occured", + "babble.camPage": "Cam", + "babble.settingsPage": "Settings", + "babble.algoSettingsPage": "Algo Settings", + "babble.calibrationPage": "Calibration", + "babble.exit": "Exiting Babble App", + "calibration.header": "Calibration Settings", + "calibration.mode": "Calibration Mode", + "calibration.modeTooltip": "Neutral = Only Min values are set when starting and stopping calibration. Full = Min and Max values are set based on recorded values when starting calibration.", + "calibration.left": "Left", + "calibration.shape": "Shape", + "calibration.right": "Right", + "calibration.center": "Center", + "calibration.min": "Min", + "calibration.max": "Max", + "calibration.resetMin": "Reset Min", + "calibration.resetMinTooltip": "Reset minimum values", + "calibration.resetMax": "Reset Max", + "calibration.resetMaxTooltip": "Reset maximum values", + "calibration.minLeftValue": "Min Left Value", + "calibration.maxLeftValue": "Max Left Value", + "calibration.minRightValue": "Min Right Value", + "calibration.maxRightValue": "Max Right Value", + "general.theme": "Theme", + "general.theme.system": "System", + "general.theme.light": "Light", + "general.theme.dark": "Dark", + "general.useOSCQuery": "Use OSCQuery" +} \ No newline at end of file diff --git a/BabbleApp/Locale/Dansk/locale.json b/BabbleApp/Locale/Dansk/locale.json new file mode 100644 index 0000000..8ec211b --- /dev/null +++ b/BabbleApp/Locale/Dansk/locale.json @@ -0,0 +1,156 @@ +{ + "general.header": "Generelle Indstillinger", + "general.checkForUpdates": "Tjek For Opdateringer", + "general.toolTip": "Slå opdateringstjek ved start til eller fra", + "general.oscSettings": "OSC Indstillinger", + "general.locationPrefix": "Stedpræfiks", + "general.locationTooltip": "Præfiks for OSC adresse", + "general.address": "Adresse", + "general.addressTooltip": "IP adresse vi sender OSC data til", + "general.port": "Port", + "general.portTooltip": "OSC port vi sender data til", + "general.receiver": "Modtage funktioner", + "general.receiverTooltip": "Slå OSC modtager funktioner til eller fra", + "general.receiverPort": "Modtager Port", + "general.receiverPortTooltip": "Port vi modtager OSC data fra (bruges til at kalibrere inden i VRChat)", + "general.recalibrate": "Genkalibrerings adresse", + "general.recalibrateTooltip": "OSC address we use for recalibrating", + "general.uvcCameraSettings": "UVC Camera Settings", + "general.windowFocus": "Grænseflade pausere", + "general.useRedChannel": "Use Red Channel", + "general.useRedChannelTooltip": "Uses only the red channel for Omnicept capture", + "general.xResolution": "X Resolution", + "general.xResolutionTooltip": "X capture resolution. Default = 0", + "general.yResolution": "Y Resolution", + "general.yResolutionTooltip": "Y capture resolution. Default = 0", + "general.framerate": "Framerate", + "general.framerateTooltip": "Capture framerate. Default = 0", + "general.language": "Language Settings", + "general.languageInstructions": "Restart the Babble App to see your changes", + "general.languageTooltip": "Change the language", + "error.oscPort": "OSC port value must be an integer 0-65535", + "error.oscValue": "OSC port value cannot be empty and must be an integer 0-65535", + "error.notAnInt": "Not an Int", + "error.notAFloat": "Not a Float", + "error.improperTabValue": "Improper tab value", + "error.frame": "Problem while getting frame", + "error.size": "Size of frames to display are of unequal sizes", + "error.capture": "Frame capture issue detected", + "warn.frameDrop": "Frame drop. Corrupted JPEG", + "warn.captureProblem": "Capture source problem, assuming camera disconnected, waiting for reconnect", + "warn.serialCapture": "Serial capture source problem, assuming camera disconnected, waiting for reconnect", + "warn.backpressure1": "CAPTURE QUEUE BACKPRESSURE OF", + "warn.backpressure2": "CHECK FOR CRASH OR TIMING ISSUES IN ALGORITHM", + "warn.oneEuroValues": "OneEuroFilter values must be a legal number", + "info.moveToTrackingMode": "Moving to tracking mode", + "info.moveToROIMode": "Moving to ROI mode", + "info.setROI": "Set ROI", + "info.enabled": "Enabled", + "info.disabled": "Disabled", + "info.newValue": "New value", + "info.discardingSerial": "Discarding the serial buffer", + "info.refreshedCameraList": "Refreshed Camera List", + "info.ETVRConnected": "ETVR Serial Tracker device connected on", + "info.ETVRFailiure": "Failed to connect on", + "info.enterCaptureOne": "Capture source", + "info.enterCaptureTwo": "not found, retrying...", + "info.exitCaptureThread": "Exiting capture thread", + "info.exitTrackingThread": "Exiting tracking thread", + "info.serialCapture": "Failed to get serial picture", + "log.info": "INFO", + "log.warn": "WARN", + "log.error": "ERROR", + "algorithm.header": "Model Settings", + "algorithm.modelFile": "Model file", + "algorithm.modelFileTooptip": "Name of the model file", + "algorithm.inferenceThreads": "Inference Threads", + "algorithm.inferenceThreadsTooltip": "How many threads to use for processing the model", + "algorithm.runtime": "Runtime", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "GPU Index", + "algorithm.GPUIndexTooltip": "Select which device to run inference", + "algorithm.useGPU": "Use GPU", + "algorithm.useGPUTooltip": "Toggle GPU execution", + "algorithm.modelOutputMultiplier": "Model output multiplier", + "algorithm.modelOutputMultiplierTooltip": "Model output modifier", + "algorithm.calibrationDeadzone": "Calibration Deadzone", + "algorithm.calibrationDeadzoneTooltip": "Offset the minimum calibrated values", + "algorithm.oneEuroFilterParameters": "One Euro Filter Parameters", + "algorithm.minFrequencyCutoff": "Min Frequency Cutoff", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "Speed Coefficient", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "Select Entire Frame", + "camera.selectEntireFrameTooltip": "Automatically set ROI", + "camera.rotation": "Rotation", + "camera.rotationTooltip": "Adjust the rotation of your cameras, make them level", + "camera.startCalibration": "Start Calibration", + "camera.startCalibrationTooltip": "Neutural Calibration: Hold a relaxed face, press [Start Calibration] and then press [Stop Calibraion]. \nFull Calibration: Press [Start Calibration] and make as many face movements as you can until it switches back to tracking mode or press [Stop Calibration]", + "camera.stopCalibration": "Stop Calibration", + "camera.stopCalibrationTooltip": "Stop calibration manually", + "camera.enableCalibration": "Enable Calibration", + "camera.enableCalibrationTooltip": "Checked = Calibrated model output. Unchecked = Raw model output", + "camera.mode": "Mode", + "camera.calibrating": "Calibration", + "camera.verticalFlip": "Vertical Flip", + "camera.verticalFlipTooltip": "Vertically flip camera feed", + "camera.horizontalFlip": "Horizontal Flip", + "camera.horizontalFlipTooltip": "Horizontally flip camera feed", + "camera.crop": "Please set a Crop", + "camera.cameraAddress": "Camera Address", + "camera.cameraAddressTooltip": "Enter the IP address or UVC port of your camera. (Include the 'http://')", + "camera.refreshCameraList": "Refresh List", + "camera.saveAndRestartTracking": "Save and Restart Tracking", + "camera.trackingMode": "Tracking Mode", + "camera.trackingModeTooltip": "Go here to track your mouth", + "camera.croppingMode": "Cropping Mode", + "camera.croppingModeToolTip": "Go here to crop out your mouth", + "camera.waiting": "Waiting for camera address", + "camera.connecting": "Camera Connecting", + "camera.reconnecting": "Camera Reconnecting", + "camera.waitingOnMouthCrop": "Awating Mouth Crop", + "camera.calibration": "Calibration", + "camera.tracking": "Tracking", + "config.noSettingsFile": "No settings file, using base settings", + "config.failedToLoadSettings": "Failed to load settings file", + "config.usingBackupSettings": "Using backup settings", + "config.usingBaseSettings": "Using base settings", + "config.saved": "Config saved successfully", + "babble.latestVersion": "App is the latest version", + "babble.needUpdateOne": "You have app version", + "babble.needUpdateTwo": "installed. Please update to", + "babble.needUpdateThree": "for the newest features", + "babble.name": "Babble App", + "babble.updatePresent": "New Update Available", + "babble.updateTo": "Please update to", + "babble.downloadPage": "Download Page", + "babble.noToast": "Toast notifications not supported", + "babble.noInternet": "Internet connection failed, no update check occured", + "babble.camPage": "Cam", + "babble.settingsPage": "Settings", + "babble.algoSettingsPage": "Algo Settings", + "babble.calibrationPage": "Calibration", + "babble.exit": "Exiting Babble App", + "calibration.header": "Calibration Settings", + "calibration.mode": "Calibration Mode", + "calibration.modeTooltip": "Neutral = Only Min values are set when starting and stopping calibration. Full = Min and Max values are set based on recorded values when starting calibration.", + "calibration.left": "Left", + "calibration.shape": "Shape", + "calibration.right": "Right", + "calibration.center": "Center", + "calibration.min": "Min", + "calibration.max": "Max", + "calibration.resetMin": "Reset Min", + "calibration.resetMinTooltip": "Reset minimum values", + "calibration.resetMax": "Reset Max", + "calibration.resetMaxTooltip": "Reset maximum values", + "calibration.minLeftValue": "Min Left Value", + "calibration.maxLeftValue": "Max Left Value", + "calibration.minRightValue": "Min Right Value", + "calibration.maxRightValue": "Max Right Value", + "general.theme": "Theme", + "general.theme.system": "System", + "general.theme.light": "Light", + "general.theme.dark": "Dark", + "general.useOSCQuery": "Use OSCQuery" +} \ No newline at end of file diff --git a/BabbleApp/Locale/Deutsch/locale.json b/BabbleApp/Locale/Deutsch/locale.json new file mode 100644 index 0000000..0c09d3b --- /dev/null +++ b/BabbleApp/Locale/Deutsch/locale.json @@ -0,0 +1,156 @@ +{ + "general.header": "Allgemeine Einstellungen", + "general.checkForUpdates": "Nach Updates suchen", + "general.toolTip": "Beim Start nach Updates suchen", + "general.oscSettings": "OSC Einstellungen", + "general.locationPrefix": "Sprache Präfix", + "general.locationTooltip": "OSC Adressen-Präfix", + "general.address": "Adresse", + "general.addressTooltip": "IP-Adresse an die Daten gesendet werden", + "general.port": "Port", + "general.portTooltip": "OSC Port an den die Daten gesendet werden", + "general.receiver": "Empfangsfunktionen", + "general.receiverTooltip": "OSC-Empfangsfunktionen umschalten", + "general.receiverPort": "Empfangsport", + "general.receiverPortTooltip": "Port, von dem wir OSC-Daten empfangen (wird zur Neukalibrierung innerhalb von VRChat verwendet", + "general.recalibrate": "Neukalibrierung Adresse", + "general.recalibrateTooltip": "OSC-Adresse, die wir zur Neukalibrierung verwenden", + "general.uvcCameraSettings": "UVC-Kameraeinstellungen", + "general.windowFocus": "Schnittstelle pausiert", + "general.useRedChannel": "Roten Farbkanal verwenden", + "general.useRedChannelTooltip": "Verwendet nur den roten Kanal für die Omnicept-Aufnahme", + "general.xResolution": "X-Achsenauflösung", + "general.xResolutionTooltip": "X-Aufnahmeauflösung. Standard = 0", + "general.yResolution": "Y-Achsenauflösung", + "general.yResolutionTooltip": "Y-Aufnahmeauflösung. Standard = 0", + "general.framerate": "Bildfrequenz", + "general.framerateTooltip": "Aufnahmebildrate. Standard = 0", + "general.language": "Spracheinstellungen", + "general.languageInstructions": "Starten Sie die Babble App neu, um Ihre Änderungen anzuzeigen", + "general.languageTooltip": "Sprache ändern", + "error.oscPort": "Der OSC-Portwert muss eine Ganzzahl von 0 bis65535 sein", + "error.oscValue": "Der OSC-Portwert darf nicht leer sein und muss eine Ganzzahl von 0 bis 65535 sein", + "error.notAnInt": "Keine Ganzzahl", + "error.notAFloat": "Keine Gleitkommazahl", + "error.improperTabValue": "Unzulässiger Tab-Wert", + "error.frame": "Problem beim Abrufen des Bildes", + "error.size": "Die Größe der anzuzeigenden Frames ist ungleich", + "error.capture": "Problem bei der Bilderfassung erkannt", + "warn.frameDrop": "Frame-Drop. Beschädigtes JPEG", + "warn.captureProblem": "Problem mit der Aufnahmequelle. Kamera wurde getrennt, warte auf erneute Verbindung", + "warn.serialCapture": "Problem mit der seriellen Aufnahmequelle. Kamera wurde getrennt, warte auf erneute Verbindung", + "warn.backpressure1": "Aufnahmewarteschlange Rückstau von", + "warn.backpressure2": "Überprüfe auf Absturz oder Timingprobleme im Algorithmus", + "warn.oneEuroValues": "OneEuroFilter Werte müssen eine gültige Zahl sein", + "info.moveToTrackingMode": "Wechsel zu Tracking Modus", + "info.moveToROIMode": "Wechsel zu ROI Modus", + "info.setROI": "Setze ROI", + "info.enabled": "Aktiviert", + "info.disabled": "Deaktiviert", + "info.newValue": "Neuer Wert", + "info.discardingSerial": "Verwerfe seriellen Puffer", + "info.refreshedCameraList": "Kameraliste aktualisiert", + "info.ETVRConnected": "ETVR serielles Tracker-Gerät angeschlossen an", + "info.ETVRFailiure": "Verbindung konnte nicht hergestellt werden an", + "info.enterCaptureOne": "Aufnahmequelle", + "info.enterCaptureTwo": "nicht gefunden, erneuter Versuch...", + "info.exitCaptureThread": "Aufnahme-Thread wird verlassen", + "info.exitTrackingThread": "Tracking-Thread wird verlassen", + "info.serialCapture": "Serielles Bild konnte nicht abgerufen werden", + "log.info": "INFO", + "log.warn": "WARNUNG", + "log.error": "FEHLER", + "algorithm.header": "Modelleinstellungen", + "algorithm.modelFile": "Modelldatei", + "algorithm.modelFileTooptip": "Name der Modelldatei", + "algorithm.inferenceThreads": "Inferenz-Threads", + "algorithm.inferenceThreadsTooltip": "Wie viele Threads zur Verarbeitung des Modells verwendet werden sollen", + "algorithm.runtime": "Laufzeit", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "GPU-Index", + "algorithm.GPUIndexTooltip": "Wählen Sie aus, auf welchem ​​Gerät die Inferenz ausgeführt werden soll", + "algorithm.useGPU": "GPU verwenden", + "algorithm.useGPUTooltip": "GPU-Ausführung umschalten", + "algorithm.modelOutputMultiplier": "Modellausgabemultiplikator", + "algorithm.modelOutputMultiplierTooltip": "Modellausgabemodifikator", + "algorithm.calibrationDeadzone": "Kalibrierungs-Totzone", + "algorithm.calibrationDeadzoneTooltip": "Offset der minimal kalibrierten Werte", + "algorithm.oneEuroFilterParameters": "OneEuroFilter Parameter", + "algorithm.minFrequencyCutoff": "Minimale Grenzfrequenz", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "Geschwindigkeitskoeffizient", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "Gesamten Bild auswählen", + "camera.selectEntireFrameTooltip": "Automatisch festgelegter ROI", + "camera.rotation": "Drehung", + "camera.rotationTooltip": "Passen Sie die Drehung Ihrer Kameras an, stellen diese waagerecht ein", + "camera.startCalibration": "Kalibrierung starten", + "camera.startCalibrationTooltip": "Neutrale Kalibrierung: Machen Sie ein entspanntes Gesicht, drücken Sie [Kalibrierung starten] und dann [Kalibrierung stoppen].\nVollständige Kalibrierung: Drücken Sie [Kalibrierung starten] und machen Sie so viele Gesichtsbewegungen wie möglich, bis es wieder in den Tracking-Modus wechselt, oder drücken Sie [Kalibrierung stoppen]", + "camera.stopCalibration": "Kalibrierung stoppen", + "camera.stopCalibrationTooltip": "Kalibrierung manuell stoppen", + "camera.enableCalibration": "Kalibrierung aktivieren", + "camera.enableCalibrationTooltip": "Aktiviert = Kalibrierte Modellausgabe. Nicht aktiviert = Rohe Modellausgabe", + "camera.mode": "Modus", + "camera.calibrating": "Kalibrierung", + "camera.verticalFlip": "Vertikales Spiegeln", + "camera.verticalFlipTooltip": "Kamerabild vertikal spiegeln", + "camera.horizontalFlip": "Horizontale Spiegelung", + "camera.horizontalFlipTooltip": "Kamerabild horizontal spiegeln", + "camera.crop": "Bitte legen Sie einen Zuschnitt fest", + "camera.cameraAddress": "Kameraadresse", + "camera.cameraAddressTooltip": "Geben Sie die IP-Adresse oder den UVC-Port Ihrer Kamera ein. (Inklusive dem „http://“)", + "camera.refreshCameraList": "Liste aktualisieren", + "camera.saveAndRestartTracking": "Speichern und Tracking neu starten", + "camera.trackingMode": "Tracking-Modus", + "camera.trackingModeTooltip": "Gehen Sie hierhin, um Ihren Mund zu tracken", + "camera.croppingMode": "Zuschnittmodus", + "camera.croppingModeToolTip": "Klicken Sie hier, um Ihren Mund zuzuschneiden", + "camera.waiting": "Warten auf Kameraadresse", + "camera.connecting": "Kamera wird Verbunden", + "camera.reconnecting": "Kamera wird erneut verbunden", + "camera.waitingOnMouthCrop": "Warte auf Zuschnitt für den Mund", + "camera.calibration": "Kalibrierung", + "camera.tracking": "Tracking", + "config.noSettingsFile": "Keine Einstellungsdatei, Basiseinstellungen werden verwendet", + "config.failedToLoadSettings": "Die Einstellungsdatei konnte nicht geladen werden", + "config.usingBackupSettings": "Verwende Sicherungseinstellungen", + "config.usingBaseSettings": "Verwende Basiseinstellungen", + "config.saved": "Konfiguration erfolgreich gespeichert", + "babble.latestVersion": "App ist die neuste Version", + "babble.needUpdateOne": "Sie haben die App-Version", + "babble.needUpdateTwo": "installiert. Bitte aktualisieren Sie auf", + "babble.needUpdateThree": "für die neuesten Funktionen", + "babble.name": "Babble App", + "babble.updatePresent": "Neues Update verfügbar", + "babble.updateTo": "Bitte aktualisieren Sie auf", + "babble.downloadPage": "Download-Seite", + "babble.noToast": "Toast-Benachrichtigungen werden nicht unterstützt", + "babble.noInternet": "Konnte keine Verbindung zum Internet herstellen, Updatesuche übersprungen", + "babble.camPage": "Kamera", + "babble.settingsPage": "Einstellungen", + "babble.algoSettingsPage": "Algo-Einstellungen", + "babble.calibrationPage": "Kalibrierung", + "babble.exit": "Babble-App wird beendet", + "calibration.header": "Kalibrierungseinstellungen", + "calibration.mode": "Kalibrierungs-Modus", + "calibration.modeTooltip": "Neutral = Beim Starten und Stoppen der Kalibrierung werden nur Mindestwerte festgelegt. Voll = Beim Starten der Kalibrierung werden Mindest- und Höchstwerte basierend auf den aufgezeichneten Werten festgelegt.", + "calibration.left": "Links", + "calibration.shape": "Form", + "calibration.right": "Rechts", + "calibration.center": "Mitte", + "calibration.min": "Minimum", + "calibration.max": "Maximum", + "calibration.resetMin": "Minimum zurücksetzen", + "calibration.resetMinTooltip": "Minimumwerte zurücksetzen", + "calibration.resetMax": "Maximum zurücksetzen", + "calibration.resetMaxTooltip": "Maximumwerte zurücksetzen", + "calibration.minLeftValue": "Minimale Links-werte", + "calibration.maxLeftValue": "Maximale Links-werte", + "calibration.minRightValue": "Minimale Rechts-werte", + "calibration.maxRightValue": "Maximale Rechts-werte", + "general.theme": "Theme", + "general.theme.system": "System", + "general.theme.light": "Light", + "general.theme.dark": "Dark", + "general.useOSCQuery": "Use OSCQuery" +} \ No newline at end of file diff --git "a/BabbleApp/Locale/Fran\303\247aise/locale.json" "b/BabbleApp/Locale/Fran\303\247aise/locale.json" new file mode 100644 index 0000000..5e50c0f --- /dev/null +++ "b/BabbleApp/Locale/Fran\303\247aise/locale.json" @@ -0,0 +1,156 @@ +{ + "general.header": "Paramètres généraux", + "general.checkForUpdates": "Vérifier les mises à jour", + "general.toolTip": "Activer la vérification des mises à jour au démarrage", + "general.oscSettings": "Paramètres OSC", + "general.locationPrefix": "Préfixe de localisation", + "general.locationTooltip": "Préfixe de l'adresse OSC", + "general.address": "Adresse", + "general.addressTooltip": "Adresse IP d'envoi des données vers OSC", + "general.port": "Port", + "general.portTooltip": "Port OSC d'envoi des données", + "general.receiver": "Fonctions de réception", + "general.receiverTooltip": "Activer les fonctions de réception OSC", + "general.receiverPort": "Port de réception", + "general.receiverPortTooltip": "Port de réception des données depuis OSC (à utiliser pour la recalibration dans VRChat)", + "general.recalibrate": "Adresse de recalibration", + "general.recalibrateTooltip": "Adresse OSC à utiliser pour la recalibration", + "general.uvcCameraSettings": "Paramètres de la Caméra UVC", + "general.windowFocus": "Interface en pause", + "general.useRedChannel": "Utiliser le canal Rouge", + "general.useRedChannelTooltip": "Utiliser uniquement le canal rouge pour la capture Omnicept", + "general.xResolution": "Résolution X", + "general.xResolutionTooltip": "Résolution de capture X. Par défaut = 0", + "general.yResolution": "Résolution Y", + "general.yResolutionTooltip": "Résolution de capture Y. Par défaut = 0", + "general.framerate": "Images par seconde", + "general.framerateTooltip": "Images par seconde de la capture. Par défaut = 0", + "general.language": "Paramètres de la langue", + "general.languageInstructions": "Redémarrez l'application Babble pour voir vos changements", + "general.languageTooltip": "Changer la langue", + "error.oscPort": "La valeur \"integer\" du port OSC doit être comprise entre 0-65535", + "error.oscValue": "La valeur \"integer\" du port OSC ne peut être vide et doit être comprise entre 0-65535", + "error.notAnInt": "Pas une valeur Int", + "error.notAFloat": "Pas une valeur Float", + "error.improperTabValue": "", + "error.frame": "Problème lors de récupération des images", + "error.size": "La taille des images à afficher est inégale", + "error.capture": "", + "warn.frameDrop": "Perte d'image. JPEG corrompu", + "warn.captureProblem": "Problème de source de capture, la caméra doit être déconnectée ou en attente de reconnexion", + "warn.serialCapture": "", + "warn.backpressure1": "La queue est saturée", + "warn.backpressure2": "Vérifiez les crashs ou les erreurs de timing de l'algorithme", + "warn.oneEuroValues": "Les valeurs OneEuroFilter doivent être des nombres légaux", + "info.moveToTrackingMode": "Changement vers le mode de suivi", + "info.moveToROIMode": "Changement vers le mode ROI", + "info.setROI": "Attribuer le ROI", + "info.enabled": "Activer", + "info.disabled": "Désactiver", + "info.newValue": "Nouvelle valeur", + "info.discardingSerial": "Effacement du tampon", + "info.refreshedCameraList": "Liste de caméra actualisée", + "info.ETVRConnected": "Appareil de suivi ETVR connecté", + "info.ETVRFailiure": "Erreur de connexion", + "info.enterCaptureOne": "Source de capture", + "info.enterCaptureTwo": "non trouvé, nouvelle tentative...", + "info.exitCaptureThread": "Sortie du thread de capture", + "info.exitTrackingThread": "Sortie du fil de suivi", + "info.serialCapture": "Échec de l'obtention de l'image source", + "log.info": "INFO", + "log.warn": "AVERTISSEMENT", + "log.error": "ERREUR", + "algorithm.header": "Paramètres du modèle", + "algorithm.modelFile": "Fichier du modèle", + "algorithm.modelFileTooptip": "Nom du fichier du modèle", + "algorithm.inferenceThreads": "Threads d'inférence", + "algorithm.inferenceThreadsTooltip": "Combien de threads voulez-vous utiliser pour le processus du modèle", + "algorithm.runtime": "Temps d'exécution", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "Index GPU", + "algorithm.GPUIndexTooltip": "Sélectionnez l'appareil pour exécuter l'inférence", + "algorithm.useGPU": "Utiliser le GPU", + "algorithm.useGPUTooltip": "Activer l'exécution avec le GPU", + "algorithm.modelOutputMultiplier": "Multiplicateur de sortie du modèle", + "algorithm.modelOutputMultiplierTooltip": "Modificateur de sortie du modèle", + "algorithm.calibrationDeadzone": "Calibration de la zone morte", + "algorithm.calibrationDeadzoneTooltip": "Décalage minimum des valeurs de calibration", + "algorithm.oneEuroFilterParameters": "Paramètre du One Euro Filter", + "algorithm.minFrequencyCutoff": "Fréquence minimale de la coupure", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "Coefficient de vitesse", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "Sélectionner l'image entièrement", + "camera.selectEntireFrameTooltip": "Définir automatiquement le ROI", + "camera.rotation": "Rotation", + "camera.rotationTooltip": "Ajustez la rotation des caméras, au même niveau", + "camera.startCalibration": "Commencer la calibration", + "camera.startCalibrationTooltip": "Calibration Neutre : Maintenez un visage neutre, appuyez sur [Commencer la calibration] et ensuite sur [Arrêter la calibration].\nCalibration Complète : Appuyez sur [Commencer la calibration] et faites autant de mouvements que vous pouvez jusqu'à ça reviennent en mode de suivi ou appuyez sur [Arrêter la calibration]", + "camera.stopCalibration": "Arrêter la calibration", + "camera.stopCalibrationTooltip": "Arrêter la calibration manuellement", + "camera.enableCalibration": "Activer la calibration", + "camera.enableCalibrationTooltip": "", + "camera.mode": "Mode", + "camera.calibrating": "Calibration", + "camera.verticalFlip": "Inversement vertical", + "camera.verticalFlipTooltip": "Inversement vertical du flux de la caméra", + "camera.horizontalFlip": "Inversement horizontal", + "camera.horizontalFlipTooltip": "Inversement horizontal du flux de la caméra", + "camera.crop": "Définissez un découpage", + "camera.cameraAddress": "Adresse de la caméra", + "camera.cameraAddressTooltip": "Entrez l'adresse IP ou le port UVC de la caméra (inclure le 'http://')", + "camera.refreshCameraList": "Rafraichir la liste", + "camera.saveAndRestartTracking": "Sauvegarder et redémarrer le suivi", + "camera.trackingMode": "Mode de suivi", + "camera.trackingModeTooltip": "Allez ici pour suivre la bouche", + "camera.croppingMode": "Mode de découpage", + "camera.croppingModeToolTip": "Allez ici pour découper la bouche", + "camera.waiting": "En attente de l'adresse de la caméra", + "camera.connecting": "Connexion de la caméra", + "camera.reconnecting": "Reconnexion de la caméra", + "camera.waitingOnMouthCrop": "En attente du découpage de la bouche", + "camera.calibration": "Calibration", + "camera.tracking": "Suivi", + "config.noSettingsFile": "Aucun fichier de paramètres, utilisation des paramètres de base", + "config.failedToLoadSettings": "Échec du chargement du fichier des paramètres", + "config.usingBackupSettings": "Utilisation des fichiers de récupération", + "config.usingBaseSettings": "Utilisation des paramètres de base", + "config.saved": "Sauvegarde de la configuration avec succès", + "babble.latestVersion": "L'application est à jour", + "babble.needUpdateOne": "Votre version d'application est", + "babble.needUpdateTwo": "installé. Mettez à jour vers", + "babble.needUpdateThree": "pour les nouvelles fonctions", + "babble.name": "Application Babble", + "babble.updatePresent": "Nouvelle mise à jour disponible", + "babble.updateTo": "Mettez à jour vers", + "babble.downloadPage": "Page de téléchargement", + "babble.noToast": "Les notifications flottantes ne sont pas supportées", + "babble.noInternet": "Échec de la connexion à internet, aucune vérification effectuée", + "babble.camPage": "Caméra", + "babble.settingsPage": "Options", + "babble.algoSettingsPage": "Paramètres d'algorithme", + "babble.calibrationPage": "Calibration", + "babble.exit": "Sortie de l'application Babble", + "calibration.header": "Paramètres de calibration", + "calibration.mode": "Mode de calibration", + "calibration.modeTooltip": "Neutre = Seulement les valeurs minimales sont appliquées au démarrage et à l'arrêt de la calibration. Entière = Les valeurs minimales et maximales sont appliquées en fonction des valeurs enregistrées au début de la calibration.", + "calibration.left": "Gauche", + "calibration.shape": "Forme", + "calibration.right": "Droite", + "calibration.center": "Centre", + "calibration.min": "Minimum", + "calibration.max": "Maximum", + "calibration.resetMin": "Réinitialiser le minimum", + "calibration.resetMinTooltip": "Réinitialiser les valeurs minimales", + "calibration.resetMax": "Réinitialiser le maximum", + "calibration.resetMaxTooltip": "Réinitialiser les valeurs maximales", + "calibration.minLeftValue": "Valeur minimale de gauche", + "calibration.maxLeftValue": "Valeur maximale de gauche", + "calibration.minRightValue": "Valeur minimale de droite", + "calibration.maxRightValue": "Valeur maximale de droite", + "general.theme": "Theme", + "general.theme.system": "System", + "general.theme.light": "Light", + "general.theme.dark": "Dark", + "general.useOSCQuery": "Use OSCQuery" +} \ No newline at end of file diff --git a/BabbleApp/Locale/Indonesian/locale.json b/BabbleApp/Locale/Indonesian/locale.json new file mode 100644 index 0000000..7455612 --- /dev/null +++ b/BabbleApp/Locale/Indonesian/locale.json @@ -0,0 +1,156 @@ +{ + "general.header": "Pengaturan Umum", + "general.checkForUpdates": "Periksa Pembaruan", + "general.toolTip": "Aktifkan Memeriksa perbaruan saat buka aplikasi", + "general.oscSettings": "Pengaturan OSC", + "general.locationPrefix": "Awalan Lokasi", + "general.locationTooltip": "Awalan untuk OSC address", + "general.address": "Address", + "general.addressTooltip": "IP address kami kirimkan ke OSC data untuk", + "general.port": "Port", + "general.portTooltip": "Port OSC kami kirim data ke", + "general.receiver": "Fungsi diterima", + "general.receiverTooltip": "Aktifkan fungsi menerima OSC", + "general.receiverPort": "Port Penerima", + "general.receiverPortTooltip": "Port yang kami terima dari Data OSC (digunakan untuk kalibrasi ulang dari dalam VRChat", + "general.recalibrate": "Kalibarsi ulang Address", + "general.recalibrateTooltip": "Alamat OSC kami gunakan untuk kalibrasi ulang", + "general.uvcCameraSettings": "Pengaturan Kamera UVC", + "general.windowFocus": "Antarmuka Dijeda", + "general.useRedChannel": "Gunakan Channel Merah", + "general.useRedChannelTooltip": "Hanya menggunakan channel merah untuk Omnicept capture", + "general.xResolution": "X Resolusi", + "general.xResolutionTooltip": "X rekaman resolusi. Default = 0", + "general.yResolution": "Y Resolusi", + "general.yResolutionTooltip": "Y rekaman resolusi. Default = 0", + "general.framerate": "Framerate", + "general.framerateTooltip": "Framerate rekaman. Default = 0", + "general.language": "Seting Bahasa", + "general.languageInstructions": "Memulai ulang App Babble untuk melihat perubahan", + "general.languageTooltip": "Ganti Bahasa", + "error.oscPort": "Nilai port OSC harus berisi interger 0-65535", + "error.oscValue": "Nilai Port OSC tidak bisa kosong dan harus terdiri dari integer 0-65535", + "error.notAnInt": "Bukan Int", + "error.notAFloat": "Bukan Float", + "error.improperTabValue": "Tab value tidak sesuai", + "error.frame": "Masalah saat mendapatkan frame", + "error.size": "Ukuran bingkai untuk menampilkan gambar tidak setara", + "error.capture": "Terdeteksi masalah pada frame capture", + "warn.frameDrop": "Frame drop. JPEG korup", + "warn.captureProblem": "Masalah sumber rekaman, perkiraan koneksi kamera terputus, menunggu koneksi ulang", + "warn.serialCapture": "Masalah sumber serial rekaman, perkiraan koneksi kamera terputus, menunggu koneksi ulang", + "warn.backpressure1": "REKAM ANTRIAN BACKPRESSURE DARI", + "warn.backpressure2": "PERIKSA MASALAH CRASH ATAU MASALAH WAKTU PADA ALGORITMA", + "warn.oneEuroValues": "Nilai OneEuroFilter harus terdiri dari nomor legal", + "info.moveToTrackingMode": "Berpindah ke mode pelacak", + "info.moveToROIMode": "Pindah ke mode ROI", + "info.setROI": "Tentukan ROI", + "info.enabled": "Diaktifkan", + "info.disabled": "Dimatikan", + "info.newValue": "Nilai baru", + "info.discardingSerial": "Membuang buffer serial", + "info.refreshedCameraList": "Perbarui Daftar Kamera", + "info.ETVRConnected": "Perangkat ETVR Serial Tracker terhubung dengan", + "info.ETVRFailiure": "Gagal mengkoneksi ke", + "info.enterCaptureOne": "Merekam sumber", + "info.enterCaptureTwo": "tidak ditemukan, coba lagi...", + "info.exitCaptureThread": "Keluar dari mode merekam", + "info.exitTrackingThread": "Keluar dari mode melacak", + "info.serialCapture": "Gagal mendapatkan serial gambar", + "log.info": "INFO", + "log.warn": "WARN", + "log.error": "Kesalahan", + "algorithm.header": "Pengaturan Model", + "algorithm.modelFile": "File Model", + "algorithm.modelFileTooptip": "Nama Model file", + "algorithm.inferenceThreads": "Inference Threads", + "algorithm.inferenceThreadsTooltip": "Berapa banyak threads yang digunakan untuk memproses model ini", + "algorithm.runtime": "Waktu Berjalan", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "GPU Index", + "algorithm.GPUIndexTooltip": "Pilih perangkat untuk menjalankan inferensi", + "algorithm.useGPU": "Gunakan GPU", + "algorithm.useGPUTooltip": "Alihkan penggunaan GPU", + "algorithm.modelOutputMultiplier": "Pengandaan hasil model", + "algorithm.modelOutputMultiplierTooltip": "Modifikasi hasil model", + "algorithm.calibrationDeadzone": "Kalibrasi Zona mati", + "algorithm.calibrationDeadzoneTooltip": "Tentukan nilai minimum kalibrasi", + "algorithm.oneEuroFilterParameters": "Satu Euro filter parameter", + "algorithm.minFrequencyCutoff": "Batas Frekuensi Minimum", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "Kecepatan koefisien", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "Pilih Seluruh Bingkai", + "camera.selectEntireFrameTooltip": "Otomatis tentukan ROI", + "camera.rotation": "Rotasi", + "camera.rotationTooltip": "Sesuaikan rotasi kamera anda, buatlah sejajar", + "camera.startCalibration": "Mulai Kalibrasi", + "camera.startCalibrationTooltip": "Kalibrasi Netral: Tahan wajah rileks, tekan [Mulai Kalibrasi] dan kemudian tekan [Hentikan Kalibrasi].\nKalibrasi Penuh: Tekan [Mulai Kalibrasi] dan buat sebanyak mungkin gerakan wajah sampai kembali ke mode pelacak atau tekan [Hentikan Kalibrasi]", + "camera.stopCalibration": "Hentikan Kalibrasi", + "camera.stopCalibrationTooltip": "Hentikan kalibrasi secara manual", + "camera.enableCalibration": "Mengaktifkan Kalibrasi", + "camera.enableCalibrationTooltip": "Diperiksa = Hasil model yang dikalibrasi. Tidak diperiksa = Hasil model mentah", + "camera.mode": "Mode", + "camera.calibrating": "Kalibrasi", + "camera.verticalFlip": "Balikan Secara Vertikal", + "camera.verticalFlipTooltip": "Balikan kamera secara vertikal", + "camera.horizontalFlip": "Balikan Secara Horizontal", + "camera.horizontalFlipTooltip": "Balikan kamera secara horisontal", + "camera.crop": "Silakan tentukan Potongan", + "camera.cameraAddress": "Camera Address", + "camera.cameraAddressTooltip": "Masukan IP address atau UVC port kamera anda. (masukan 'http://')", + "camera.refreshCameraList": "Perbarui Daftar", + "camera.saveAndRestartTracking": "Simpan dan Memulai Ulang Tracking", + "camera.trackingMode": "Mode Tracking", + "camera.trackingModeTooltip": "Bagian ini untuk melacak mulut anda", + "camera.croppingMode": "Mode Memotong", + "camera.croppingModeToolTip": "Bagian ini untuk memotong kamera pelacak mulut", + "camera.waiting": "Menunggu kamera address", + "camera.connecting": "Kamera Terhubung", + "camera.reconnecting": "Kamera Menghubung", + "camera.waitingOnMouthCrop": "Menunggu potongan bingkai mulut", + "camera.calibration": "Kalibrasi", + "camera.tracking": "Tracking", + "config.noSettingsFile": "Tidak ada file pengaturan, gunakan pengaturan bawaan", + "config.failedToLoadSettings": "Gagal Memuat file seting", + "config.usingBackupSettings": "Gunakan pengaturan cadangan", + "config.usingBaseSettings": "Mengunakan pengaturan bawaan", + "config.saved": "Konfigurasi Berhasil disimpan", + "babble.latestVersion": "Aplikasi di versi terbaru", + "babble.needUpdateOne": "Anda memiliki aplikasi versi", + "babble.needUpdateTwo": "terinstall. Silakan Perbarui ke", + "babble.needUpdateThree": "untuk fitur terbaru", + "babble.name": "Aplikasi Babble", + "babble.updatePresent": "Pembaruaan Tersedia", + "babble.updateTo": "Silakan perbarui ke", + "babble.downloadPage": "Halaman Unduh", + "babble.noToast": "Toast notifikasi tidak mendukung", + "babble.noInternet": "Koneksi internet gagal, tidak ada perbaruan yang terjadi", + "babble.camPage": "Kamera", + "babble.settingsPage": "Pengaturan", + "babble.algoSettingsPage": "Pengaturan Algo", + "babble.calibrationPage": "Kalibrasi", + "babble.exit": "Tutup App Babble", + "calibration.header": "Pengaturan Kalibrasi", + "calibration.mode": "Mode Kalibrasi", + "calibration.modeTooltip": "Neutral = Hanya nilai Min ditentukan ketika mulai dan berhenti kalibrasi. Full = Nilai Min dan Maks menjadi dasar nilai yang terekam ketika memulai kalibrasi.", + "calibration.left": "Kiri", + "calibration.shape": "Bentuk", + "calibration.right": "Kanan", + "calibration.center": "Tengah", + "calibration.min": "Min", + "calibration.max": "Maks", + "calibration.resetMin": "Riset Min", + "calibration.resetMinTooltip": "Reset nilai minimum", + "calibration.resetMax": "Riset Maks", + "calibration.resetMaxTooltip": "Reset nilai maksimum", + "calibration.minLeftValue": "Nilai Kiri Min", + "calibration.maxLeftValue": "Nilai Kiri Maks", + "calibration.minRightValue": "Nilai Kanan Min", + "calibration.maxRightValue": "Nilai Kanan Maks", + "general.theme": "Tema", + "general.theme.system": "Sistem", + "general.theme.light": "Terang", + "general.theme.dark": "Gelap", + "general.useOSCQuery": "Gunakan OSCQuery" +} \ No newline at end of file diff --git a/BabbleApp/Locale/Italiano/locale.json b/BabbleApp/Locale/Italiano/locale.json new file mode 100644 index 0000000..1406aa2 --- /dev/null +++ b/BabbleApp/Locale/Italiano/locale.json @@ -0,0 +1,156 @@ +{ + "general.header": "Impostazioni Generali", + "general.checkForUpdates": "Verifica Disponibilità Aggiornamenti", + "general.toolTip": "Attiva/Disattiva Controllo Aggiornamenti all'Avvio", + "general.oscSettings": "Impostazioni OSC", + "general.locationPrefix": "Prefisso Posizione", + "general.locationTooltip": "Prefisso per l'indirizzo OSC", + "general.address": "Indirizzo", + "general.addressTooltip": "Indirizzo IP al quale inviamo i dati OSC", + "general.port": "Porta", + "general.portTooltip": "Porta OSC alla quale inviamo i dati", + "general.receiver": "Ricevi funzioni", + "general.receiverTooltip": "Attiva/disattiva Ricevi funzioni OSC", + "general.receiverPort": "Porta Ricevitore", + "general.receiverPortTooltip": "La porta da cui riceviamo i dati OSC (utilizzati per ricalibrare dall'interno di VRChat", + "general.recalibrate": "Ricalibra Indirizzo", + "general.recalibrateTooltip": "Indirizzo OSC che utilizziamo per ricalibrare", + "general.uvcCameraSettings": "Impostazioni Telecamera UVC", + "general.windowFocus": "Interfaccia in pausa", + "general.useRedChannel": "Usa Canale Rosso", + "general.useRedChannelTooltip": "Utilizza solo il canale rosso per la cattura Omnicept", + "general.xResolution": "Risoluzione X", + "general.xResolutionTooltip": "Risoluzione acquisizione X. Predefinito = 0", + "general.yResolution": "Risoluzione Y", + "general.yResolutionTooltip": "Risoluzione acquisizione Y. Predefinito = 0", + "general.framerate": "Frequenza dei fotogrammi\n\n", + "general.framerateTooltip": "Acquisisci frequenza dei fotogrammi. Predefinito = 0", + "general.language": "Impostazioni Lingua", + "general.languageInstructions": "Riavvia l'app Babble per vedere i tuoi cambiamenti", + "general.languageTooltip": "Cambia la lingua", + "error.oscPort": "La porta OSC deve essere un numero intero compreso tra 0-65535", + "error.oscValue": "La porta OSC non può essere vuota e deve essere un numero intero compreso tra 0-65535", + "error.notAnInt": "Non un numero intero", + "error.notAFloat": "Non un numero virgola mobile", + "error.improperTabValue": "Valore scheda improprio", + "error.frame": "Problema durante l'acquisizione del fotogramma", + "error.size": "Le dimensioni dei fotogrammi da visualizzare sono di dimensioni diverse", + "error.capture": "Rilevato problema nella cattura del fotogramma", + "warn.frameDrop": "Fotogramma perso. JPEG corrotto", + "warn.captureProblem": "Problema di acquisizione sorgente, supponendo che la telecamera sia disconnessa, in attesa di riconnessione", + "warn.serialCapture": "Problema di acquisizione da sorgente seriale, supponendo che la telecamera sia disconnessa, in attesa di riconnessione", + "warn.backpressure1": "CONTROPRESSIONE DELLA CODA DI CATTURA DI", + "warn.backpressure2": "CONTROLLANDO PER CRASH O PROBLEMI DI TIMING NELL'ALGORITMO", + "warn.oneEuroValues": "I valori OneEuroFilter devono essere un numero valido", + "info.moveToTrackingMode": "Cambio in modalità tracciamento", + "info.moveToROIMode": "Cambio in modalità ROI", + "info.setROI": "Imposta ROI", + "info.enabled": "Abilitato", + "info.disabled": "Disabilitato", + "info.newValue": "Nuovo valore", + "info.discardingSerial": "Scartando il buffer seriale", + "info.refreshedCameraList": "Elenco Telecamere Aggiornate", + "info.ETVRConnected": "Dispositivo di tracciamento seriale ETVR è connesso su", + "info.ETVRFailiure": "Connessione non riuscita su", + "info.enterCaptureOne": "Acquisisci sorgente", + "info.enterCaptureTwo": "non trovato, riprovando...", + "info.exitCaptureThread": "Uscita dal thread di acquisizione", + "info.exitTrackingThread": "Uscita dal thread di tracciamento", + "info.serialCapture": "Recupero dell'immagine da seriale non riuscito", + "log.info": "INFO", + "log.warn": "AVVISO", + "log.error": "ERRORE", + "algorithm.header": "Impostazioni Modello", + "algorithm.modelFile": "File del modello", + "algorithm.modelFileTooptip": "Nome del file del modello", + "algorithm.inferenceThreads": "Thread Di Inferenza", + "algorithm.inferenceThreadsTooltip": "Quanti thread usare per elaborare il modello", + "algorithm.runtime": "Tempo di esecuzione", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "Indice GPU", + "algorithm.GPUIndexTooltip": "Seleziona quale dispositivo eseguire l'inferenza", + "algorithm.useGPU": "Utilizza GPU", + "algorithm.useGPUTooltip": "Attiva/disattiva esecuzione GPU", + "algorithm.modelOutputMultiplier": "Moltiplicatore di uscita del modello", + "algorithm.modelOutputMultiplierTooltip": "Modificatore di uscita del modello", + "algorithm.calibrationDeadzone": "Calibrazione Deadzone", + "algorithm.calibrationDeadzoneTooltip": "Offset dei valori minimi calibrati", + "algorithm.oneEuroFilterParameters": "Parametri Filtro Euro", + "algorithm.minFrequencyCutoff": "Taglio Frequenza Minima", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "Coefficiente Di Velocità", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "Seleziona L'Intero Fotogramma", + "camera.selectEntireFrameTooltip": "Imposta automaticamente ROI", + "camera.rotation": "Rotazione", + "camera.rotationTooltip": "Regola la rotazione delle tue telecamere, rendendole a livello", + "camera.startCalibration": "Avvia Calibrazione", + "camera.startCalibrationTooltip": "Calibrazione neuturale: Tieni un viso rilassato, premi [Avvia Calibrazione] e poi premi [Ferma Calibrazione]. \nCalibrazione completa: Premere [Avvia calibrazione] e fai il maggior numero di movimenti facciali possibili fino a quando non passa automaticamente alla modalità di tracciamento o premere [Ferma calibrazione]", + "camera.stopCalibration": "Ferma Calibrazione", + "camera.stopCalibrationTooltip": "Ferma manualmente la calibrazione", + "camera.enableCalibration": "Abilita Calibrazione", + "camera.enableCalibrationTooltip": "Selezionato = Uscita modello calibrato. Non Selezionato = Uscita modello grezzo", + "camera.mode": "Modalità", + "camera.calibrating": "Calibrazione", + "camera.verticalFlip": "Capovolgimento Verticale", + "camera.verticalFlipTooltip": "Capovolgi verticalmente il flusso della telecamera", + "camera.horizontalFlip": "Capovolgimento Orizzontale", + "camera.horizontalFlipTooltip": "Capovolgi orizzontalmente il flusso della telecamera", + "camera.crop": "Per favore imposta un Ritaglio", + "camera.cameraAddress": "Indirizzo Telecamera", + "camera.cameraAddressTooltip": "Inserisci l'indirizzo IP o la porta UVC della tua telecamera. (Includi 'http://')", + "camera.refreshCameraList": "Aggiorna Lista", + "camera.saveAndRestartTracking": "Salva e riavvia il tracciamento", + "camera.trackingMode": "Modalità Tracciamento", + "camera.trackingModeTooltip": "Vai qui per tracciare la tua bocca", + "camera.croppingMode": "Modalità Ritaglio", + "camera.croppingModeToolTip": "Vai qui per ritagliare la bocca", + "camera.waiting": "In attesa dell'indirizzo della telecamera", + "camera.connecting": "Connettendo alla Telecamera", + "camera.reconnecting": "Riconnessione Telecamera", + "camera.waitingOnMouthCrop": "Aspettando il ritaglio della bocca dall'immagine", + "camera.calibration": "Calibrazione", + "camera.tracking": "Tracciamento", + "config.noSettingsFile": "Nessun file d'impostazioni, usando le impostazioni di base", + "config.failedToLoadSettings": "Impossibile caricare il file d'impostazioni", + "config.usingBackupSettings": "Uso le impostazioni di backup", + "config.usingBaseSettings": "Uso le impostazioni di base", + "config.saved": "Configurazione salvata con successo", + "babble.latestVersion": "L'app è l'ultima versione", + "babble.needUpdateOne": "Hai la versione dell'app", + "babble.needUpdateTwo": "installata. Si prega di aggiornare a", + "babble.needUpdateThree": "per le funzioni più recenti", + "babble.name": "App Babble", + "babble.updatePresent": "Nuovo Aggiornamento Disponibile", + "babble.updateTo": "Si prega di aggiornare a", + "babble.downloadPage": "Pagina Di Download", + "babble.noToast": "Notifiche toast non supportate", + "babble.noInternet": "Connessione a Internet non riuscita, non è stato possibile verificare la presenza di nuovi aggiornamenti", + "babble.camPage": "Cam", + "babble.settingsPage": "Impostazioni", + "babble.algoSettingsPage": "Impostazioni Algoritmo", + "babble.calibrationPage": "Calibrazione", + "babble.exit": "Uscendo Dall'App Babble", + "calibration.header": "Impostazioni Calibrazione", + "calibration.mode": "Modalità Calibrazione", + "calibration.modeTooltip": "Neutrale = Vengono impostati solo i valori minimi all'avvio e all'arresto della calibrazione. Completo = Valori minimi e massimi sono impostati in base ai valori registrati quando si inizia la calibrazione.", + "calibration.left": "Sinistra", + "calibration.shape": "Forma", + "calibration.right": "Destra", + "calibration.center": "Centro", + "calibration.min": "Minimo", + "calibration.max": "Massimo", + "calibration.resetMin": "Reimposta minimi", + "calibration.resetMinTooltip": "Reimposta valori minimi", + "calibration.resetMax": "Reimposta massimi", + "calibration.resetMaxTooltip": "Reimposta i valori massimi", + "calibration.minLeftValue": "Valore Minimo Sinistra", + "calibration.maxLeftValue": "Valore Massimo Sinistra", + "calibration.minRightValue": "Valore Minimo Destra", + "calibration.maxRightValue": "Valore Massimo Destra", + "general.theme": "Tema", + "general.theme.system": "Sistema", + "general.theme.light": "Chiaro", + "general.theme.dark": "Scuro", + "general.useOSCQuery": "Usa OSCQuery" +} \ No newline at end of file diff --git a/BabbleApp/Locale/Nederlands/locale.json b/BabbleApp/Locale/Nederlands/locale.json new file mode 100644 index 0000000..485e969 --- /dev/null +++ b/BabbleApp/Locale/Nederlands/locale.json @@ -0,0 +1,156 @@ +{ + "general.header": "Algemene Instellingen", + "general.checkForUpdates": "Checken Voor Updates", + "general.toolTip": "Update check bij opstarten inschakelen", + "general.oscSettings": "OSC Instellingen", + "general.locationPrefix": "Voorvoegsel voor locatie", + "general.locationTooltip": "Voorvoegsel voor OSC-adres", + "general.address": "Adres", + "general.addressTooltip": "IP-adres voor het ontvangen van OSC-data", + "general.port": "Poort", + "general.portTooltip": "OSC poort voor het ontvangen van data", + "general.receiver": "Ontvang functies", + "general.receiverTooltip": "OSC ontvangt functies inschakelen", + "general.receiverPort": "Ontvanger Poort", + "general.receiverPortTooltip": "Poort vanwaar OSC-data wordt ontvangen (voor het herkalibreren vanuit VRChat)", + "general.recalibrate": "Herkalibratie adres", + "general.recalibrateTooltip": "OSC-adres die we gebruiken voor het herkalibreren", + "general.uvcCameraSettings": "UVC Camera Instellingen", + "general.windowFocus": "Interface Gepauzeerd", + "general.useRedChannel": "Gebruik Rood Kanaal", + "general.useRedChannelTooltip": "Gebruikt alleen het rode kanaal", + "general.xResolution": "X Resolutie", + "general.xResolutionTooltip": "X opname resolutie. Standaard = 0", + "general.yResolution": "Y Resolutie", + "general.yResolutionTooltip": "Y opname resolutie. Standaard = 0", + "general.framerate": "Framerate", + "general.framerateTooltip": "Framerate van opname. Standaard = 0", + "general.language": "Taal Instellingen", + "general.languageInstructions": "Herstart de Babble App om de veranderingen toe te passen", + "general.languageTooltip": "Verander de taal", + "error.oscPort": "Waarde van OSC poort moet een integer zijn 0-65535", + "error.oscValue": "Waarde van OSC poort kan niet leeg zijn en moet een integer zijn 0-65535", + "error.notAnInt": "Niet een Int", + "error.notAFloat": "Niet een Float", + "error.improperTabValue": "Onjuiste waarde van tab", + "error.frame": "Probleem bij het verkrijgen van beeld", + "error.size": "Formaat van de frames voor weergave zijn ongelijk", + "error.capture": "Probleem met frame opname gedetecteerd", + "warn.frameDrop": "Framedaling. Corrupte JPEG", + "warn.captureProblem": "Probleem met opnamebron, verwacht losgekoppelde camera, wachten op nieuwe verbinding", + "warn.serialCapture": "Probleem met serieel opname bron, verwacht losgekoppelde camera, wachten op nieuwe verbinding", + "warn.backpressure1": "OPNAME WACHTRIJ ACHTERDRUK VAN", + "warn.backpressure2": "CONTROLEER OP CRASH OF PROBLEMEN MET TIMING IN HET ALGORITME", + "warn.oneEuroValues": "Waarde van OneEuroFilter moet een legaal nummer zijn", + "info.moveToTrackingMode": "Overstappen op tracking modus", + "info.moveToROIMode": "Overstappen op ROI modus", + "info.setROI": "Stel ROI in", + "info.enabled": "Schakel In", + "info.disabled": "Schakel Uit", + "info.newValue": "Nieuwe waarde", + "info.discardingSerial": "Seriële buffer weggooien", + "info.refreshedCameraList": "Camera Lijst Ververst", + "info.ETVRConnected": "ETVR Seriële Tracker aangesloten op", + "info.ETVRFailiure": "Kon geen verbinding maken op", + "info.enterCaptureOne": "Opname bron", + "info.enterCaptureTwo": "niet gevonden, opnieuw aan het proberen...", + "info.exitCaptureThread": "Opname-thread verlaten", + "info.exitTrackingThread": "Tracking-thread verlaten", + "info.serialCapture": "Kon geen serieel beeld krijgen", + "log.info": "INFO", + "log.warn": "WAARSCHUW", + "log.error": "ERROR", + "algorithm.header": "Model Instellingen", + "algorithm.modelFile": "Model bestand", + "algorithm.modelFileTooptip": "Naam van het model bestand", + "algorithm.inferenceThreads": "Inferentiethreads", + "algorithm.inferenceThreadsTooltip": "Hoe veel threads gebruikt moeten worden voor het verwerken van het model", + "algorithm.runtime": "Doorlooptijd", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "GPU-Index", + "algorithm.GPUIndexTooltip": "Selecteer op welk apparaat de inferentie moet worden uitgevoerd", + "algorithm.useGPU": "Gebruik GPU", + "algorithm.useGPUTooltip": "GPU uitvoering inschakelen", + "algorithm.modelOutputMultiplier": "Model-uitvoer vermenigvuldiger", + "algorithm.modelOutputMultiplierTooltip": "Model-uitvoer modificator", + "algorithm.calibrationDeadzone": "Kalibratie dode zone", + "algorithm.calibrationDeadzoneTooltip": "Minimum kalibratie waardes afstellen", + "algorithm.oneEuroFilterParameters": "Eén Euro Filter Parameters", + "algorithm.minFrequencyCutoff": "Min Frequentie afkapping", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "Snelheidscoëfficiënt", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "Selecteer volledige frame", + "camera.selectEntireFrameTooltip": "Stel ROI automatisch in", + "camera.rotation": "Rotatie", + "camera.rotationTooltip": "Pas de rotatie van je camera's aan, maak ze waterpas", + "camera.startCalibration": "Start Kalibratie", + "camera.startCalibrationTooltip": "Neutrale kalibratie: Hou een ontspannen gezicht vast, druk op [Start Kalibratie] en druk dan op [Stop Kalibratie]. Volledige Kalibratie: Druk op [Start Kalibratie] en maak zoveel mogelijk gezichtsbewegingen totdat naar de tracking-modus wordt teruggeschakeld of druk op [Stop Kalibratie]", + "camera.stopCalibration": "Stop Kalibratie", + "camera.stopCalibrationTooltip": "Stop handmatig de kalibratie", + "camera.enableCalibration": "Kalibratie Inschakelen", + "camera.enableCalibrationTooltip": "Aangevinkt = Gekalibreerd model uitgevoerd. Niet Aangevinkt = Onbewerkt model uitgevoerd", + "camera.mode": "Modus", + "camera.calibrating": "Kalibratie", + "camera.verticalFlip": "Verticaal Spiegelen", + "camera.verticalFlipTooltip": "Spiegel het camerabeeld verticaal", + "camera.horizontalFlip": "Horizontaal Spiegelen", + "camera.horizontalFlipTooltip": "Spiegel het camerabeeld horizontaal", + "camera.crop": "Stel A.U.B een Crop in", + "camera.cameraAddress": "Camera Adres", + "camera.cameraAddressTooltip": "Voer het IP-adres of de UVC poort van je camera in (Voeg de 'http://' toe)", + "camera.refreshCameraList": "Ververs Lijst", + "camera.saveAndRestartTracking": "Opslaan en Opnieuw Tracking Opstarten", + "camera.trackingMode": "Tracking Modus", + "camera.trackingModeTooltip": "Ga hierheen om je mond te tracken", + "camera.croppingMode": "Crop Modus", + "camera.croppingModeToolTip": "Ga hierheen om je mond uit het beeld te snijden", + "camera.waiting": "Aan het wachten voor een camera adres", + "camera.connecting": "Camera aan het Aansluiten", + "camera.reconnecting": "Camera Opnieuw aan het Aansluiten", + "camera.waitingOnMouthCrop": "Aan het wachten op uitsnijden van mond", + "camera.calibration": "Kalibratie", + "camera.tracking": "Aan het Tracken", + "config.noSettingsFile": "Geen bestand met instellingen, basisinstellingen gebruiken", + "config.failedToLoadSettings": "Kon het bestand met instellingen niet laden", + "config.usingBackupSettings": "Backup instellingen gebruiken", + "config.usingBaseSettings": "Basisinstellingen gebruiken", + "config.saved": "Configuratie succesvol opgeslagen", + "babble.latestVersion": "App gebruikt de nieuwste versie", + "babble.needUpdateOne": "Je gebruikt app versie", + "babble.needUpdateTwo": "geïnstalleerd. Update A.U.B naar", + "babble.needUpdateThree": "voor de nieuwste functies", + "babble.name": "Babble App", + "babble.updatePresent": "Nieuwe Update Beschikbaar", + "babble.updateTo": "Update A.U.B naar", + "babble.downloadPage": "Download Pagina", + "babble.noToast": "Toast notificaties niet ondersteund", + "babble.noInternet": "Internetverbinding mislukt, er heeft geen updatecontrole plaatsgevonden", + "babble.camPage": "Cam", + "babble.settingsPage": "Instellingen", + "babble.algoSettingsPage": "Algo Instellingen", + "babble.calibrationPage": "Kalibratie", + "babble.exit": "Babble App Verlaten", + "calibration.header": "Kalibratie-Instellingen", + "calibration.mode": "Kalibratie-Modus", + "calibration.modeTooltip": "Neutraal = Alleen Min waardes zijn ingesteld bij het starten en stoppen van de kalibratie. Volledig = Min en Max waardes zijn ingesteld d.m.v opgenomen waardes bij het starten van de kalibratie", + "calibration.left": "Links", + "calibration.shape": "Vorm", + "calibration.right": "Rechts", + "calibration.center": "Midden", + "calibration.min": "Min", + "calibration.max": "Max", + "calibration.resetMin": "Reset Min", + "calibration.resetMinTooltip": "Reset de minimumwaardes", + "calibration.resetMax": "Reset Max", + "calibration.resetMaxTooltip": "Reset de maximumwaardes", + "calibration.minLeftValue": "Min Linker Waarde", + "calibration.maxLeftValue": "Max Linker Waarde", + "calibration.minRightValue": "Min Rechter Waarde", + "calibration.maxRightValue": "Max Rechter Waarde", + "general.theme": "Theme", + "general.theme.system": "System", + "general.theme.light": "Light", + "general.theme.dark": "Dark", + "general.useOSCQuery": "Use OSCQuery" +} \ No newline at end of file diff --git a/BabbleApp/Locale/Polski/locale.json b/BabbleApp/Locale/Polski/locale.json new file mode 100644 index 0000000..34d2b8e --- /dev/null +++ b/BabbleApp/Locale/Polski/locale.json @@ -0,0 +1,156 @@ +{ + "general.header": "Ustawienia główne", + "general.checkForUpdates": "Sprawdź aktualizacje", + "general.toolTip": "Automatyczne sprawdzanie aktualizacji przy włączeniu", + "general.oscSettings": "Ustawienia OSC", + "general.locationPrefix": "Location Prefix", + "general.locationTooltip": "Prefix for OSC address", + "general.address": "Adres", + "general.addressTooltip": "Adres IP, na który wysyłamy dane OSC", + "general.port": "Port", + "general.portTooltip": "Port OSC, na który wysyłamy dane OSC", + "general.receiver": "Przyjmij funkcje", + "general.receiverTooltip": "Toggle OSC receive functions", + "general.receiverPort": "Port odbiornika", + "general.receiverPortTooltip": "Port, na którym odbieramy dane OSC (używany do ponownej kalibracji z VRChat", + "general.recalibrate": "Skalibruj ponownie adres", + "general.recalibrateTooltip": "Adres OSC używany do re-kalibracji", + "general.uvcCameraSettings": "Ustawienia kamery UVC", + "general.windowFocus": "Interfejs wstrzymany", + "general.useRedChannel": "Użyj Czerwonego Kanału", + "general.useRedChannelTooltip": "Używa tylko czerwonego kanału do przechwytywania Omnicept", + "general.xResolution": "Rozdzielczość X", + "general.xResolutionTooltip": "X capture resolution. Default = 0", + "general.yResolution": "Rozdzielczość Y", + "general.yResolutionTooltip": "Y capture resolution. Default = 0", + "general.framerate": "Framerate", + "general.framerateTooltip": "Capture framerate. Default = 0", + "general.language": "Ustawienia języka", + "general.languageInstructions": "Restart the Babble App to see your changes", + "general.languageTooltip": "Zmień język", + "error.oscPort": "OSC port value must be an integer 0-65535", + "error.oscValue": "OSC port value cannot be empty and must be an integer 0-65535", + "error.notAnInt": "Not an Int", + "error.notAFloat": "Not a Float", + "error.improperTabValue": "Improper tab value", + "error.frame": "Problem while getting frame", + "error.size": "Size of frames to display are of unequal sizes", + "error.capture": "Frame capture issue detected", + "warn.frameDrop": "Frame drop. Corrupted JPEG", + "warn.captureProblem": "Capture source problem, assuming camera disconnected, waiting for reconnect", + "warn.serialCapture": "Serial capture source problem, assuming camera disconnected, waiting for reconnect", + "warn.backpressure1": "CAPTURE QUEUE BACKPRESSURE OF", + "warn.backpressure2": "CHECK FOR CRASH OR TIMING ISSUES IN ALGORITHM", + "warn.oneEuroValues": "OneEuroFilter values must be a legal number", + "info.moveToTrackingMode": "Moving to tracking mode", + "info.moveToROIMode": "Moving to ROI mode", + "info.setROI": "Set ROI", + "info.enabled": "Aktywne", + "info.disabled": "Nieaktywne", + "info.newValue": "Nowa wartość", + "info.discardingSerial": "Discarding the serial buffer", + "info.refreshedCameraList": "Refreshed Camera List", + "info.ETVRConnected": "ETVR Serial Tracker device connected on", + "info.ETVRFailiure": "Nie udało się połączyć na", + "info.enterCaptureOne": "Źródło przechwytywania", + "info.enterCaptureTwo": "", + "info.exitCaptureThread": "Exiting capture thread", + "info.exitTrackingThread": "Exiting tracking thread", + "info.serialCapture": "Failed to get serial picture", + "log.info": "Informacje", + "log.warn": "UWAGA", + "log.error": "ERROR", + "algorithm.header": "Ustawienia modelu", + "algorithm.modelFile": "Plik modelu", + "algorithm.modelFileTooptip": "Nazwa pliku modelu", + "algorithm.inferenceThreads": "Inference Threads", + "algorithm.inferenceThreadsTooltip": "How many threads to use for processing the model", + "algorithm.runtime": "Czas działania", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "Indeks GPU", + "algorithm.GPUIndexTooltip": "Select which device to run inference", + "algorithm.useGPU": "Użyj GPU", + "algorithm.useGPUTooltip": "Toggle GPU execution", + "algorithm.modelOutputMultiplier": "Mnożnik modelu wyjściowego", + "algorithm.modelOutputMultiplierTooltip": "Modyfikator modelu wyjściowego", + "algorithm.calibrationDeadzone": "Martwa strefa kalibracji", + "algorithm.calibrationDeadzoneTooltip": "Offset the minimum calibrated values", + "algorithm.oneEuroFilterParameters": "One Euro Filter Parameters", + "algorithm.minFrequencyCutoff": "Odcięcie przy minimalnej częstotliwości", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "Speed Coefficient", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "Zaznacz cały obraz", + "camera.selectEntireFrameTooltip": "Automatycznie ustaw ROI", + "camera.rotation": "Rotacja", + "camera.rotationTooltip": "Dostosuj obrót kamery, wyrównaj ją", + "camera.startCalibration": "Rozpocznij kalibracje", + "camera.startCalibrationTooltip": "Kalibracja Neutralna: Utrzymaj zrelaksowaną ekspresję, potem naciśnij [Rozpocznij kalibrację] a następnie [Zatrzymaj kalibrację].\nPełna kalibracja: Naciśnij [Rozpocznij kalibrację] a następnie wykonaj jak najwięcej ruchów twarzy aż tryb przełączy się na Śledzenie, lub naciśnij [Zatrzymaj kalibrację]", + "camera.stopCalibration": "Zakończ kalibracje", + "camera.stopCalibrationTooltip": "Ręczne zatrzymanie kalibracji", + "camera.enableCalibration": "Włącz kalibracje", + "camera.enableCalibrationTooltip": "Checked = Calibrated model output. Unchecked = Raw model output", + "camera.mode": "Tryb", + "camera.calibrating": "Kalibracja", + "camera.verticalFlip": "Odwrócenie pionowe", + "camera.verticalFlipTooltip": "Odwróć w pionie kamerę", + "camera.horizontalFlip": "Odwrócenie poziome", + "camera.horizontalFlipTooltip": "Odwróć w poziomie kamerę", + "camera.crop": "Proszę przyciąć obraz", + "camera.cameraAddress": "Adres kamery", + "camera.cameraAddressTooltip": "Wprowadź adres IP lub port UVC swojej kamery. (Razem z 'http://')", + "camera.refreshCameraList": "Odśwież listę", + "camera.saveAndRestartTracking": "Zapisz i zrestartuj śledzenie", + "camera.trackingMode": "Tryb śledzenia", + "camera.trackingModeTooltip": "Śledzenie ust", + "camera.croppingMode": "Tryb przycinania", + "camera.croppingModeToolTip": "Przycinanie obrazu ust", + "camera.waiting": "Oczekuje na adres kamery", + "camera.connecting": "Łączenie z kamerą", + "camera.reconnecting": "Ponowne łączenie z kamerą", + "camera.waitingOnMouthCrop": "Oczekiwanie na ustawienie odpowiedniego przycięcia obrazu", + "camera.calibration": "Kalibracja", + "camera.tracking": "Śledzenie", + "config.noSettingsFile": "Brak pliku ustawień, używanie ustawień podstawowych", + "config.failedToLoadSettings": "Nie udało się załadować pliku ustawień", + "config.usingBackupSettings": "Używanie kopii zapasowej ustawień", + "config.usingBaseSettings": "Używanie ustawień podstawowych", + "config.saved": "Konfiguracja zapisana pomyślnie", + "babble.latestVersion": "Aplikacja jest na ostatniej wersji", + "babble.needUpdateOne": "Twoja wersja aplikacji", + "babble.needUpdateTwo": "zainstalowano. Proszę zaktualizować do", + "babble.needUpdateThree": "po najnowsze funkcje", + "babble.name": "Apka Babble", + "babble.updatePresent": "Nowa aktualizacja dostępna", + "babble.updateTo": "Proszę zaktualizuj do", + "babble.downloadPage": "Strona pobierania", + "babble.noToast": "Powiadomienia Toast nie są obsługiwane", + "babble.noInternet": "Brak dostępu do internetu, sprawdzenie nowej aktualizacji nieudane", + "babble.camPage": "Ustawienia kamery", + "babble.settingsPage": "Ustawienia", + "babble.algoSettingsPage": "Ustawienia algorytmu", + "babble.calibrationPage": "Kalibracja", + "babble.exit": "Wychodzenie z aplikacji", + "calibration.header": "Ustawienia kalibracji", + "calibration.mode": "Tryb kalibracji", + "calibration.modeTooltip": "Neutralna = Tylko Minimalne wartości są ustawiane podczas rozpoczynania i zakańczania kalibracji. Pełna = Minimalne I maksymalne wartości są ustawione na podstawie zapisanych wartości podczas kalibracji.", + "calibration.left": "Lewa", + "calibration.shape": "Kształt", + "calibration.right": "Prawa", + "calibration.center": "Środek typowego polskiego rynku, kostka brukowa wszędzie i jeden Ukrainiec z udarem słonecznym.", + "calibration.min": "Minimum", + "calibration.max": "Maximum", + "calibration.resetMin": "Reset Minimum", + "calibration.resetMinTooltip": "Reset minimalnych wartości", + "calibration.resetMax": "Reset Maximum", + "calibration.resetMaxTooltip": "Reset maksymalnych wartości", + "calibration.minLeftValue": "Lewa minimalna wartość", + "calibration.maxLeftValue": "Lewa maksymalna wartość", + "calibration.minRightValue": "Prawa minimalna wartość", + "calibration.maxRightValue": "Prawa maksymalna wartość", + "general.theme": "Motyw", + "general.theme.system": "System", + "general.theme.light": "Jasny", + "general.theme.dark": "Ciemny", + "general.useOSCQuery": "Użyj OSCQuery" +} \ No newline at end of file diff --git "a/BabbleApp/Locale/P\321\203\321\201\321\201\320\272\320\270\320\271/locale.json" "b/BabbleApp/Locale/P\321\203\321\201\321\201\320\272\320\270\320\271/locale.json" new file mode 100644 index 0000000..81ea331 --- /dev/null +++ "b/BabbleApp/Locale/P\321\203\321\201\321\201\320\272\320\270\320\271/locale.json" @@ -0,0 +1,156 @@ +{ + "general.header": "Общие настройки", + "general.checkForUpdates": "Проверить обновления", + "general.toolTip": "Включить проверку обновлений при запуске", + "general.oscSettings": "Настройки OSC", + "general.locationPrefix": "Префикс местоположения", + "general.locationTooltip": "Префикс для адреса OSC", + "general.address": "Адрес", + "general.addressTooltip": "IP-адрес, на который мы отправляем данные OSC", + "general.port": "Порт", + "general.portTooltip": "Порт OSC, на который мы отправляем данные", + "general.receiver": "Функции приема", + "general.receiverTooltip": "Переключить функции приема OSC", + "general.receiverPort": "Порт приёмника", + "general.receiverPortTooltip": "Порт, с которого мы получаем данные OSC (используется для перекалибровки в VRChat", + "general.recalibrate": "Перекалибровать адрес", + "general.recalibrateTooltip": "Адрес OSC, который мы используем для перекалибровки", + "general.uvcCameraSettings": "Настройки UVC-камеры", + "general.windowFocus": "Интерфейс приостановлен", + "general.useRedChannel": "Использовать красный канал", + "general.useRedChannelTooltip": "Использует только красный канал для захвата Omnicept", + "general.xResolution": "Разрешение X", + "general.xResolutionTooltip": "Разрешение захвата X. По умолчанию = 0", + "general.yResolution": "Разрешение Y", + "general.yResolutionTooltip": "Разрешение захвата Y. По умолчанию = 0", + "general.framerate": "Частота кадров", + "general.framerateTooltip": "Частота захвата кадров. По умолчанию = 0", + "general.language": "Настройки языка", + "general.languageInstructions": "Перезапустите приложение Babble, чтобы увидеть изменения", + "general.languageTooltip": "Изменить язык", + "error.oscPort": "Значение порта OSC должно быть целым числом в диапазоне от 0 до 65535", + "error.oscValue": "Значение порта OSC не может быть пустым и должно быть целым числом в диапазоне от 0 до 65535", + "error.notAnInt": "Не целое число", + "error.notAFloat": "Не число с плавающей запятой", + "error.improperTabValue": "Недопустимое значение вкладки", + "error.frame": "Проблема при получении кадра", + "error.size": "Размеры отображаемых кадров не равны", + "error.capture": "Обнаружена проблема захвата кадров", + "warn.frameDrop": "Пропуск кадра. Поврежденный JPEG", + "warn.captureProblem": "Проблема с источником захвата, предполагается отключение камеры, ожидается повторное подключение", + "warn.serialCapture": "Проблема с последовательным источником захвата, предполагается отключение камеры, ожидается повторное подключение", + "warn.backpressure1": "НАГРУЗКА НА ОЧЕРЕДЬ ЗАХВАТА", + "warn.backpressure2": "ПРОВЕРЬТЕ НА НАЛИЧИЕ СБОЕВ ИЛИ ПРОБЛЕМ С ТАЙМИНГАМИ В АЛГОРИТМЕ", + "warn.oneEuroValues": "Значения OneEuroFilter должны быть допустимыми числами", + "info.moveToTrackingMode": "Переход в режим отслеживания", + "info.moveToROIMode": "Переход в режим ROI", + "info.setROI": "Установить ROI", + "info.enabled": "Включено", + "info.disabled": "Отключено", + "info.newValue": "Новое значение", + "info.discardingSerial": "Сбрасывается последовательный буфер", + "info.refreshedCameraList": "Список камер обновлен", + "info.ETVRConnected": "Устройство ETVR Serial Tracker подключено на", + "info.ETVRFailiure": "Не удалось подключить на", + "info.enterCaptureOne": "Источник захвата", + "info.enterCaptureTwo": "не найден, повторная попытка...", + "info.exitCaptureThread": "Завершение потока захвата", + "info.exitTrackingThread": "Завершение потока отслеживания", + "info.serialCapture": "Не удалось получить последовательное изображение", + "log.info": "ИНФО", + "log.warn": "ПРЕДУПРЕЖДЕНИЕ", + "log.error": "ОШИБКА", + "algorithm.header": "Настройки модели", + "algorithm.modelFile": "Файл модели", + "algorithm.modelFileTooptip": "Имя файла модели", + "algorithm.inferenceThreads": "Потоки инференса", + "algorithm.inferenceThreadsTooltip": "Количество потоков для выполнения инференса модели", + "algorithm.runtime": "Среда выполнения", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "Индекс GPU", + "algorithm.GPUIndexTooltip": "Выберите устройство для выполнения инференции", + "algorithm.useGPU": "Использовать GPU", + "algorithm.useGPUTooltip": "Переключить выполнение на GPU", + "algorithm.modelOutputMultiplier": "Множитель выходных данных модели", + "algorithm.modelOutputMultiplierTooltip": "Модификатор выходных данных модели", + "algorithm.calibrationDeadzone": "Мертвая зона калибровки", + "algorithm.calibrationDeadzoneTooltip": "Смещение минимальных откалиброванных значений", + "algorithm.oneEuroFilterParameters": "Параметры One Euro Filter", + "algorithm.minFrequencyCutoff": "Минимальная частота среза", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "Коэффициент скорости", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "Выбрать весь кадр", + "camera.selectEntireFrameTooltip": "Автоматически устанавливать ROI", + "camera.rotation": "Поворот", + "camera.rotationTooltip": "Настройте поворот ваших камер, чтобы они были выровнены", + "camera.startCalibration": "Начать калибровку", + "camera.startCalibrationTooltip": "Нейтральная калибровка: Держите расслабленное лицо, нажмите [Начать калибровку], а затем нажмите [Остановить калибровку].\nПолная калибровка: Нажмите [Начать калибровку] и сделайте как можно больше движений лицом, пока режим не переключится обратно на отслеживание, или нажмите [Остановить калибровку]", + "camera.stopCalibration": "Остановить калибровку", + "camera.stopCalibrationTooltip": "Остановить калибровку вручную", + "camera.enableCalibration": "Включить калибровку", + "camera.enableCalibrationTooltip": "Отмечено = Откалиброванный вывод модели. Не отмечено = Необработанный вывод модели", + "camera.mode": "Режим", + "camera.calibrating": "Калибровка", + "camera.verticalFlip": "Вертикальный переворот", + "camera.verticalFlipTooltip": "Перевернуть поток из камеры по вертикали", + "camera.horizontalFlip": "Горизонтальный переворот", + "camera.horizontalFlipTooltip": "Перевернуть поток из камеры по горизонтали", + "camera.crop": "Пожалуйста, установите обрезку", + "camera.cameraAddress": "Адрес камеры", + "camera.cameraAddressTooltip": "Введите IP-адрес или UVC-порт вашей камеры. (Укажите 'http://')", + "camera.refreshCameraList": "Обновить список", + "camera.saveAndRestartTracking": "Сохранить и перезапустить отслеживание", + "camera.trackingMode": "Режим отслеживания", + "camera.trackingModeTooltip": "Перейдите сюда для отслеживания рта", + "camera.croppingMode": "Режим обрезки", + "camera.croppingModeToolTip": "Перейдите сюда, чтобы обрезать область вокруг рта", + "camera.waiting": "Ожидание адреса камеры", + "camera.connecting": "Подключение камеры", + "camera.reconnecting": "Переподключение камеры", + "camera.waitingOnMouthCrop": "Ожидание обрезки области вокруг рта", + "camera.calibration": "Калибровка", + "camera.tracking": "Отслеживание", + "config.noSettingsFile": "Файл настроек отсутствует, используются базовые настройки", + "config.failedToLoadSettings": "Не удалось загрузить файл настроек", + "config.usingBackupSettings": "Используются резервные настройки", + "config.usingBaseSettings": "Используются базовые настройки", + "config.saved": "Настройки успешно сохранены", + "babble.latestVersion": "Приложение использует последнюю версию", + "babble.needUpdateOne": "У вас установлена версия приложения", + "babble.needUpdateTwo": ". Пожалуйста, обновитесь до версии", + "babble.needUpdateThree": ", чтобы получить новые функции", + "babble.name": "Приложение Babble", + "babble.updatePresent": "Доступно новое обновление", + "babble.updateTo": "Пожалуйста, обновитесь до", + "babble.downloadPage": "Страница загрузок", + "babble.noToast": "Тост-уведомления не поддерживаются", + "babble.noInternet": "Сбой подключения к Интернету, проверка обновлений не выполнена", + "babble.camPage": "Камера", + "babble.settingsPage": "Настройки", + "babble.algoSettingsPage": "Настройки алгоритма", + "babble.calibrationPage": "Калибровка", + "babble.exit": "Выход из приложения Babble", + "calibration.header": "Настройки калибровки", + "calibration.mode": "Режим калибровки", + "calibration.modeTooltip": "Нейтральный = Устанавливаются только минимальные значения при начале и завершении калибровки. Полный = Устанавливаются минимальные и максимальные значения на основе записанных данных при начале калибровки.", + "calibration.left": "Лево", + "calibration.shape": "Форма", + "calibration.right": "Право", + "calibration.center": "Центр", + "calibration.min": "Мин.", + "calibration.max": "Макс.", + "calibration.resetMin": "Сбросить минимум", + "calibration.resetMinTooltip": "Сбросить минимальные значения", + "calibration.resetMax": "Сбросить максимум", + "calibration.resetMaxTooltip": "Сбросить максимальные значения", + "calibration.minLeftValue": "Мин. значение слева", + "calibration.maxLeftValue": "Макс. значение слева", + "calibration.minRightValue": "Мин. значение справа", + "calibration.maxRightValue": "Макс. значение справа", + "general.theme": "Theme", + "general.theme.system": "System", + "general.theme.light": "Light", + "general.theme.dark": "Dark", + "general.useOSCQuery": "Use OSCQuery" +} \ No newline at end of file diff --git a/BabbleApp/Locale/Svenska/locale.json b/BabbleApp/Locale/Svenska/locale.json new file mode 100644 index 0000000..777c582 --- /dev/null +++ b/BabbleApp/Locale/Svenska/locale.json @@ -0,0 +1,156 @@ +{ + "general.header": "Allmänna Inställningar", + "general.checkForUpdates": "Sök Efter Uppdateringar", + "general.toolTip": "Sök efter uppdateringar vid uppstart", + "general.oscSettings": "OSC Inställningar", + "general.locationPrefix": "Plats Prefix", + "general.locationTooltip": "Prefix för OSC adress", + "general.address": "Adress", + "general.addressTooltip": "IP adress för OSC data mottagning", + "general.port": "Port", + "general.portTooltip": "Port för OSC data mottagning", + "general.receiver": "Mottagarfunktioner", + "general.receiverTooltip": "Slå På/Av OSC mottagarfunktioner", + "general.receiverPort": "Port För Mottagare", + "general.receiverPortTooltip": "Port för OSC data sändare (Används vid kalibrering inne ifrån VRC: hat", + "general.recalibrate": "Kalibreringsadress", + "general.recalibrateTooltip": "OSC Adress för kalibrering", + "general.uvcCameraSettings": "UVC Kamera Inställningar", + "general.windowFocus": "Gränssnittet pausat", + "general.useRedChannel": "Använd Röd Kanal", + "general.useRedChannelTooltip": "Använd endast den röda kanalen för Omnicept-avläsning", + "general.xResolution": "X Upplösning", + "general.xResolutionTooltip": "X avläsningsupplösning. Standard = 0", + "general.yResolution": "Y Upplösning", + "general.yResolutionTooltip": "Y avläsningsupplösning. Standard = 0", + "general.framerate": "Bildhastighet", + "general.framerateTooltip": "Avläsnings bildhastighet. Standard = 0", + "general.language": "Språkinställningar", + "general.languageInstructions": "Starta om Babble Appen för att verkställa dina ändringar", + "general.languageTooltip": "Byt Språk", + "error.oscPort": "OSC portens värde måste vara en integer mellan 0-65535", + "error.oscValue": "OSC portens värde kan inte vara tomt och måste vara en integer mellan 0-65535", + "error.notAnInt": "Inte ett Int värde", + "error.notAFloat": "Inte ett Float värde", + "error.improperTabValue": "Felaktigt tabb- värde", + "error.frame": "Problem vid avläsning", + "error.size": "Bildrutornas storlek till displayen är ojämna", + "error.capture": "Problem med bildrutsavläsningen har upptäckts", + "warn.frameDrop": "Bildrutor tappas. Korrupt JPEG", + "warn.captureProblem": "Problem med bildkälla, Antar att kameran är frånkopplad, Inväntar återkoppling", + "warn.serialCapture": "Problem med serial avbildningskälla, Antar att kameran är frånkopplad, inväntar återkoppling", + "warn.backpressure1": "ÖVERTRYCK PÅ AVBILDNINGS KÖ", + "warn.backpressure2": "UNDERSÖK KRASCH ELLER TIMING PROBLEM I ALGORITMEN", + "warn.oneEuroValues": "OneEuroFilter värden måste vara inom omfånget", + "info.moveToTrackingMode": "Byter till spårningsläge", + "info.moveToROIMode": "Byter till ROI läge", + "info.setROI": "Ställ ROI", + "info.enabled": "På", + "info.disabled": "Av", + "info.newValue": "Nytt värde", + "info.discardingSerial": "Kasserar serial buffer", + "info.refreshedCameraList": "Uppdatera Kamera Lista", + "info.ETVRConnected": "ETVR Serial Spårare kopplad till", + "info.ETVRFailiure": "Misslyckades att koppla till", + "info.enterCaptureOne": "Avläsningskälla", + "info.enterCaptureTwo": "hittades ej, försöker igen...", + "info.exitCaptureThread": "Avslutar avläsningstråd", + "info.exitTrackingThread": "Avslutar spårningstråd", + "info.serialCapture": "Misslyckades att få serial bild", + "log.info": "INFO", + "log.warn": "VARNING", + "log.error": "ERROR", + "algorithm.header": "Modell Inställningar", + "algorithm.modelFile": "Modell fil", + "algorithm.modelFileTooptip": "Modell filens namn", + "algorithm.inferenceThreads": "Inference trådar", + "algorithm.inferenceThreadsTooltip": "Hur många trådar ska användas för att bearbeta modellen", + "algorithm.runtime": "Drivrutin", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "GPU Index", + "algorithm.GPUIndexTooltip": "Välj vilken enhet som ska användas för inference", + "algorithm.useGPU": "Använd GPU", + "algorithm.useGPUTooltip": "Använd GPU Exekvering", + "algorithm.modelOutputMultiplier": "Modell utmatningsmultiplikator", + "algorithm.modelOutputMultiplierTooltip": "Modell utmatningsmodifiering", + "algorithm.calibrationDeadzone": "Dödzon för Kalibrering", + "algorithm.calibrationDeadzoneTooltip": "Offset för minimala kalibrerade värden", + "algorithm.oneEuroFilterParameters": "One Euro Filter Parametrar", + "algorithm.minFrequencyCutoff": "Min Frekvens Cutoff", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "Hastighetskoefficient", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "Välj Hela Bildrutan", + "camera.selectEntireFrameTooltip": "Ställ ROI Automatiskt", + "camera.rotation": "Rotation", + "camera.rotationTooltip": "Justera rotationen av kameran, Säkerställa att de är plana", + "camera.startCalibration": "Starta Kalibrering", + "camera.startCalibrationTooltip": "Neutral Kalibrering: Håll en avslappnad min, Tryck [Starta Kalibrering] och tryck sedan [Stoppa Kalibrering]. Full Kalibrering: Tryck [Starta Kalibrering] och gör sedan så många miner och ansiktsrörelser du kan tills den byter tillbaka till spårningsläge eller tryck [Stoppa Kalibrering]", + "camera.stopCalibration": "Stoppa Kalibrering", + "camera.stopCalibrationTooltip": "Stoppa kalibreringen manuellt", + "camera.enableCalibration": "Slå På Kalibrering", + "camera.enableCalibrationTooltip": "Ibockad = Kalibrerad utmatningsmodell. Ej Ibockad = Rå utmatningsmodell", + "camera.mode": "Läge", + "camera.calibrating": "Kalibrering", + "camera.verticalFlip": "Vänd Vertikalt", + "camera.verticalFlipTooltip": "Vänd kamerans bild vertikalt", + "camera.horizontalFlip": "Vänd Horisontellt", + "camera.horizontalFlipTooltip": "Vänd kamerans bild horisontellt", + "camera.crop": "Var god ställ in urklippning", + "camera.cameraAddress": "Kamera Adress", + "camera.cameraAddressTooltip": "Skriv IP adressen eller UVC porten för din kamera (Inkludera även 'http://')", + "camera.refreshCameraList": "Uppdatera Lista", + "camera.saveAndRestartTracking": "Spara och Starta om Spårning", + "camera.trackingMode": "Spårningsläge", + "camera.trackingModeTooltip": "Klicka här för att spåra din mun", + "camera.croppingMode": "Urklippsläge", + "camera.croppingModeToolTip": "Gå hit för att klippa ut din mun", + "camera.waiting": "Väntar på kamera adress", + "camera.connecting": "Kamera Kopplar", + "camera.reconnecting": "Kamera Återkopplar", + "camera.waitingOnMouthCrop": "Väntar på Mun Urklipp", + "camera.calibration": "Kalibrering", + "camera.tracking": "Spårning", + "config.noSettingsFile": "Inställningsfil saknas, använder standard inställningar", + "config.failedToLoadSettings": "Kan ej läsa in inställningsfilen", + "config.usingBackupSettings": "Använder backup inställningar", + "config.usingBaseSettings": "Använder standard inställningar", + "config.saved": "Config har sparats", + "babble.latestVersion": "Senaste versionen är installerad", + "babble.needUpdateOne": "Du har app version", + "babble.needUpdateTwo": "installerad. Vänligen uppdatera till", + "babble.needUpdateThree": "den senaste funktionerna", + "babble.name": "Babble Appen", + "babble.updatePresent": "Uppdatering Tillgänglig", + "babble.updateTo": "Vänlig uppdatera till", + "babble.downloadPage": "Nedladdningssida", + "babble.noToast": "Toast notifieringsstöd saknas", + "babble.noInternet": "Internetuppkoppling saknas, uppdateringssökning misslyckades", + "babble.camPage": "Kamera", + "babble.settingsPage": "Inställningar", + "babble.algoSettingsPage": "Algo Inställningar", + "babble.calibrationPage": "Kalibrering", + "babble.exit": "Babble Avslutas", + "calibration.header": "Kalibreringsinställningar", + "calibration.mode": "Kalibreringsläge", + "calibration.modeTooltip": "Neutralt = Endast Min värden är inställda vid kalibrering. Full = Min och Max värden är inställda baserat på tidigare sparade värden vid kalibrering.", + "calibration.left": "Vänster", + "calibration.shape": "Form", + "calibration.right": "Höger", + "calibration.center": "Mitten", + "calibration.min": "Min", + "calibration.max": "Max", + "calibration.resetMin": "Återställ Min", + "calibration.resetMinTooltip": "Återställ minimum värden", + "calibration.resetMax": "Återställ Max", + "calibration.resetMaxTooltip": "Återställ maximalt värde", + "calibration.minLeftValue": "Min Värde Vänster", + "calibration.maxLeftValue": "Max Värde Vänster", + "calibration.minRightValue": "Min Värde Höger", + "calibration.maxRightValue": "Max Värde Höger", + "general.theme": "Tema", + "general.theme.system": "System", + "general.theme.light": "Ljust", + "general.theme.dark": "Mörkt", + "general.useOSCQuery": "Använd OSCQuery" +} \ No newline at end of file diff --git "a/BabbleApp/Locale/\347\256\200\344\275\223\344\270\255\346\226\207/locale.json" "b/BabbleApp/Locale/\347\256\200\344\275\223\344\270\255\346\226\207/locale.json" new file mode 100644 index 0000000..373ee08 --- /dev/null +++ "b/BabbleApp/Locale/\347\256\200\344\275\223\344\270\255\346\226\207/locale.json" @@ -0,0 +1,156 @@ +{ + "general.header": "常规设置", + "general.checkForUpdates": "检查更新", + "general.toolTip": "启动时检查更新", + "general.oscSettings": "OSC设置", + "general.locationPrefix": "位置前缀", + "general.locationTooltip": "OSC地址前缀", + "general.address": "地址", + "general.addressTooltip": "OSC接收IP", + "general.port": "端口", + "general.portTooltip": "OSC接收端口", + "general.receiver": "接收方式", + "general.receiverTooltip": "切换OSC接收方式", + "general.receiverPort": "接收端口", + "general.receiverPortTooltip": "接收OSC数据的端口(用于在VRChat内重新校准)", + "general.recalibrate": "重校准地址", + "general.recalibrateTooltip": "用于重新校准的OSC地址", + "general.uvcCameraSettings": "USB UVC摄像头设定", + "general.windowFocus": "界面已暂停", + "general.useRedChannel": "使用红色通道", + "general.useRedChannelTooltip": "仅使用红色通道进行Omnicept捕获", + "general.xResolution": "X轴分辨率", + "general.xResolutionTooltip": "X轴捕获分辨率,默认为0", + "general.yResolution": "Y轴分辨率", + "general.yResolutionTooltip": "Y轴捕获分辨率,默认为0", + "general.framerate": "帧数", + "general.framerateTooltip": "捕获分辨率,默认为0", + "general.language": "语言设置", + "general.languageInstructions": "重启Babble以应用设定", + "general.languageTooltip": "改变语言", + "error.oscPort": "OSC端口值必须为0-65535的整型值", + "error.oscValue": "OSC端口值不能为空且必须为0-65535的整型值", + "error.notAnInt": "不是整型值", + "error.notAFloat": "不是浮点值", + "error.improperTabValue": "标签值不正确", + "error.frame": "获取帧时出现问题", + "error.size": "要显示的帧大小不相等", + "error.capture": "检测到帧捕获问题", + "warn.frameDrop": "丢弃帧:损坏的JPEG", + "warn.captureProblem": "捕获源问题,假设相机已断开连接,正在等待重新连接", + "warn.serialCapture": "串行捕获源问题,假设相机已断开连接,正在等待重新连接", + "warn.backpressure1": "捕获队列背压", + "warn.backpressure2": "检查算法中的崩溃或计时问题", + "warn.oneEuroValues": "OneEuroFilter值必须是合法数字", + "info.moveToTrackingMode": "切换到设置模式", + "info.moveToROIMode": "切换至设置关注区模式", + "info.setROI": "设置关注区", + "info.enabled": "已开启", + "info.disabled": "已关闭", + "info.newValue": "新值", + "info.discardingSerial": "废弃串行缓冲", + "info.refreshedCameraList": "刷新相机列表", + "info.ETVRConnected": "ETVR串行追踪设备已连接在", + "info.ETVRFailiure": "无法连接到", + "info.enterCaptureOne": "捕获源", + "info.enterCaptureTwo": "未找到,正在重试", + "info.exitCaptureThread": "退出捕获线程", + "info.exitTrackingThread": "退出追踪线程", + "info.serialCapture": "读取串行图片失败", + "log.info": "信息", + "log.warn": "警告", + "log.error": "错误", + "algorithm.header": "模型设置", + "algorithm.modelFile": "模型列表", + "algorithm.modelFileTooptip": "模型文件名称", + "algorithm.inferenceThreads": "推理线程", + "algorithm.inferenceThreadsTooltip": "运行模型所用线程数", + "algorithm.runtime": "运行时", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "GPU编号", + "algorithm.GPUIndexTooltip": "选择推理用设备", + "algorithm.useGPU": "使用GPU加速", + "algorithm.useGPUTooltip": "切换GPU执行", + "algorithm.modelOutputMultiplier": "模型输出乘数", + "algorithm.modelOutputMultiplierTooltip": "模型输出修改器", + "algorithm.calibrationDeadzone": "校准死区", + "algorithm.calibrationDeadzoneTooltip": "偏移最小校准值", + "algorithm.oneEuroFilterParameters": "One Euro过滤器参数", + "algorithm.minFrequencyCutoff": "最小截止频率", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "速度系数", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "选择全部帧", + "camera.selectEntireFrameTooltip": "自动设定兴趣区", + "camera.rotation": "旋转", + "camera.rotationTooltip": "调整相机的旋转,使其水平", + "camera.startCalibration": "开始校准", + "camera.startCalibrationTooltip": "中性校准:保持放松的面部,按[开始校准],然后按[停止校准]。\n完全校准:按[开始校准],尽可能多地进行面部移动,直到它切换回跟踪模式或按[停止校准]", + "camera.stopCalibration": "停止校准", + "camera.stopCalibrationTooltip": "手动停止校准", + "camera.enableCalibration": "启用校准", + "camera.enableCalibrationTooltip": "已选中:校准模型输出。未选中:原始模型输出", + "camera.mode": "模式", + "camera.calibrating": "校准", + "camera.verticalFlip": "垂直翻转", + "camera.verticalFlipTooltip": "垂直翻转摄像头馈送", + "camera.horizontalFlip": "水平翻转", + "camera.horizontalFlipTooltip": "水平翻转摄像头馈送", + "camera.crop": "请设置裁切", + "camera.cameraAddress": "摄像机地址", + "camera.cameraAddressTooltip": "输入IP地址或者相机的UVC端口号(包含\"https://\")", + "camera.refreshCameraList": "刷新列表", + "camera.saveAndRestartTracking": "保存并重启追踪", + "camera.trackingMode": "追踪模式", + "camera.trackingModeTooltip": "去这里追踪你的嘴画面", + "camera.croppingMode": "裁切模式", + "camera.croppingModeToolTip": "去这里裁切你的嘴画面", + "camera.waiting": "等待相机地址", + "camera.connecting": "摄像机正在连接", + "camera.reconnecting": "摄像机正在重新连接", + "camera.waitingOnMouthCrop": "等待嘴部裁切", + "camera.calibration": "校准", + "camera.tracking": "追踪", + "config.noSettingsFile": "无设置文件,使用默认设置", + "config.failedToLoadSettings": "读取时设置文件失败", + "config.usingBackupSettings": "使用备份设置", + "config.usingBaseSettings": "使用基础设置", + "config.saved": "成功保存配置", + "babble.latestVersion": "应用目前是最新版本", + "babble.needUpdateOne": "你现在的版本", + "babble.needUpdateTwo": "已被安装,请升级到", + "babble.needUpdateThree": "为了最新的特色", + "babble.name": "Babble应用", + "babble.updatePresent": "新的升级可用", + "babble.updateTo": "请升级到", + "babble.downloadPage": "下载页面", + "babble.noToast": "不支持Toast通知", + "babble.noInternet": "网络连接失败,未进行更新检查", + "babble.camPage": "相机", + "babble.settingsPage": "设定", + "babble.algoSettingsPage": "算法设定", + "babble.calibrationPage": "校准", + "babble.exit": "退出Babble", + "calibration.header": "校准设定", + "calibration.mode": "校准模式", + "calibration.modeTooltip": "中性:开始和停止校准时仅设置最小值。\n完整:开始校准时根据记录值设置最小值和最大值", + "calibration.left": "左", + "calibration.shape": "形状", + "calibration.right": "右", + "calibration.center": "中心", + "calibration.min": "最小", + "calibration.max": "最大", + "calibration.resetMin": "重置最小", + "calibration.resetMinTooltip": "重置最小值", + "calibration.resetMax": "重置最大", + "calibration.resetMaxTooltip": "重置最大值", + "calibration.minLeftValue": "最小左值", + "calibration.maxLeftValue": "最大左值", + "calibration.minRightValue": "最小右值", + "calibration.maxRightValue": "最大右值", + "general.theme": "主题", + "general.theme.system": "系统", + "general.theme.light": "浅色主题", + "general.theme.dark": "深色主题", + "general.useOSCQuery": "使用OSC查询" +} \ No newline at end of file diff --git "a/BabbleApp/Locale/\347\271\201\351\253\224\344\270\255\346\226\207/locale.json" "b/BabbleApp/Locale/\347\271\201\351\253\224\344\270\255\346\226\207/locale.json" new file mode 100644 index 0000000..035eda9 --- /dev/null +++ "b/BabbleApp/Locale/\347\271\201\351\253\224\344\270\255\346\226\207/locale.json" @@ -0,0 +1,156 @@ +{ + "general.header": "一般設定", + "general.checkForUpdates": "檢查更新", + "general.toolTip": "開啟時檢查更新", + "general.oscSettings": "OSC 設定", + "general.locationPrefix": "位置前綴", + "general.locationTooltip": "OSC 位址的前綴", + "general.address": "位址", + "general.addressTooltip": "傳送 OSC 資料的 IP 位址", + "general.port": "通訊埠", + "general.portTooltip": "傳送 OSC 資料的通訊埠", + "general.receiver": "接收功能", + "general.receiverTooltip": "切換 OSC 接收功能", + "general.receiverPort": "接收通訊埠", + "general.receiverPortTooltip": "接收 OSC 資料的通訊埠(用於在 VRChat 內重新校正)", + "general.recalibrate": "重新校正位址", + "general.recalibrateTooltip": "用於重新校正的 OSC 位址", + "general.uvcCameraSettings": "UVC 攝影機設定", + "general.windowFocus": "介面已暫停", + "general.useRedChannel": "使用紅色通道", + "general.useRedChannelTooltip": "僅使用紅色通道進行 Omnicept 擷取", + "general.xResolution": "X 軸解析度", + "general.xResolutionTooltip": "X 軸擷取解析度,預設值 = 0", + "general.yResolution": "Y 軸解析度", + "general.yResolutionTooltip": "Y 軸擷取解析度,預設值 = 0", + "general.framerate": "畫面更新率", + "general.framerateTooltip": "擷取畫面更新率,預設值 = 0", + "general.language": "語言設定", + "general.languageInstructions": "重新啟動 Babble App 以套用變更", + "general.languageTooltip": "變更語言", + "error.oscPort": "OSC 通訊埠必須為 0-65535 之間的整數", + "error.oscValue": "OSC 通訊埠不能為空且必須為 0-65535 之間的整數", + "error.notAnInt": "不是整數", + "error.notAFloat": "不是浮點數", + "error.improperTabValue": "分頁數值不正確", + "error.frame": "取得畫面時發生問題", + "error.size": "顯示畫面大小不一致", + "error.capture": "偵測到畫面擷取問題", + "warn.frameDrop": "畫面遺失,JPEG 檔案損毀", + "warn.captureProblem": "擷取來源問題,假設攝影機已斷線,等待重新連線", + "warn.serialCapture": "序列埠擷取來源問題,假設攝影機已斷線,等待重新連線", + "warn.backpressure1": "擷取佇列壓力為", + "warn.backpressure2": "請檢查演算法是否當機或計時問題", + "warn.oneEuroValues": "OneEuro 過濾器的數值必須是有效數字", + "info.moveToTrackingMode": "切換至追蹤模式", + "info.moveToROIMode": "切換至 ROI 模式", + "info.setROI": "設定 ROI", + "info.enabled": "已啟用", + "info.disabled": "已停用", + "info.newValue": "新數值", + "info.discardingSerial": "清除序列埠緩衝區", + "info.refreshedCameraList": "已重新整理攝影機清單", + "info.ETVRConnected": "ETVR 序列埠追蹤裝置已連線至", + "info.ETVRFailiure": "連線失敗於", + "info.enterCaptureOne": "擷取來源", + "info.enterCaptureTwo": "找不到,重新嘗試中...", + "info.exitCaptureThread": "正在結束擷取執行緒", + "info.exitTrackingThread": "正在結束追蹤執行緒", + "info.serialCapture": "無法取得序列埠圖片", + "log.info": "資訊", + "log.warn": "警告", + "log.error": "錯誤", + "algorithm.header": "演算法設定", + "algorithm.modelFile": "模型檔案", + "algorithm.modelFileTooptip": "模型檔案名稱", + "algorithm.inferenceThreads": "推論執行緒", + "algorithm.inferenceThreadsTooltip": "處理模型使用的執行緒數量", + "algorithm.runtime": "執行環境", + "algorithm.runtimeTooltip": "", + "algorithm.GPUIndex": "GPU 編號", + "algorithm.GPUIndexTooltip": "選擇要執行推論的裝置", + "algorithm.useGPU": "使用 GPU", + "algorithm.useGPUTooltip": "切換 GPU 執行", + "algorithm.modelOutputMultiplier": "模型輸出倍率", + "algorithm.modelOutputMultiplierTooltip": "模型輸出修改器", + "algorithm.calibrationDeadzone": "校正死區", + "algorithm.calibrationDeadzoneTooltip": "偏移最小校正值", + "algorithm.oneEuroFilterParameters": "OneEuro 過濾器參數", + "algorithm.minFrequencyCutoff": "最小頻率截止", + "algorithm.minFrequencyCutoffTooltip": "", + "algorithm.speedCoefficient": "速度係數", + "algorithm.speedCoefficientTooltip": "", + "camera.selectEntireFrame": "選擇整個畫面", + "camera.selectEntireFrameTooltip": "自動設定 ROI", + "camera.rotation": "旋轉", + "camera.rotationTooltip": "調整攝影機角度使其水平", + "camera.startCalibration": "開始校正", + "camera.startCalibrationTooltip": "自然校正:保持放鬆的表情,按下「開始校正」後再按「停止校正」。\n完整校正:按下「開始校正」後,盡可能做出各種表情動作,直到切換回追蹤模式或按下「停止校正」", + "camera.stopCalibration": "停止校正", + "camera.stopCalibrationTooltip": "手動停止校正程序", + "camera.enableCalibration": "啟用校正", + "camera.enableCalibrationTooltip": "勾選 = 使用校正後的模型輸出。未勾選 = 使用原始模型輸出", + "camera.mode": "模式", + "camera.calibrating": "校正中", + "camera.verticalFlip": "垂直翻轉", + "camera.verticalFlipTooltip": "垂直翻轉攝影機畫面", + "camera.horizontalFlip": "水平翻轉", + "camera.horizontalFlipTooltip": "水平翻轉攝影機畫面", + "camera.crop": "請設定裁切範圍", + "camera.cameraAddress": "攝影機位址", + "camera.cameraAddressTooltip": "輸入攝影機的 IP 位址或 UVC 通訊埠(需包含 'http://')", + "camera.refreshCameraList": "重新整理清單", + "camera.saveAndRestartTracking": "儲存並重新啟動追蹤", + "camera.trackingMode": "追蹤模式", + "camera.trackingModeTooltip": "切換至此處以追蹤嘴部", + "camera.croppingMode": "裁切模式", + "camera.croppingModeToolTip": "切換至此處以裁切嘴部範圍", + "camera.waiting": "等待攝影機位址中", + "camera.connecting": "連線攝影機中", + "camera.reconnecting": "重新連線攝影機中", + "camera.waitingOnMouthCrop": "等待設定嘴部裁切範圍", + "camera.calibration": "校正", + "camera.tracking": "追蹤中", + "config.noSettingsFile": "找不到設定檔,使用預設設定", + "config.failedToLoadSettings": "載入設定檔失敗", + "config.usingBackupSettings": "使用備份設定", + "config.usingBaseSettings": "使用基礎設定", + "config.saved": "設定儲存成功", + "babble.latestVersion": "目前使用的是最新版本", + "babble.needUpdateOne": "目前安裝的版本為", + "babble.needUpdateTwo": "請更新至", + "babble.needUpdateThree": "以使用最新功能", + "babble.name": "Babble App", + "babble.updatePresent": "有新版本可用", + "babble.updateTo": "請更新至", + "babble.downloadPage": "下載頁面", + "babble.noToast": "不支援快顯通知", + "babble.noInternet": "網路連線失敗,無法檢查更新", + "babble.camPage": "攝影機", + "babble.settingsPage": "設定", + "babble.algoSettingsPage": "演算法設定", + "babble.calibrationPage": "校正", + "babble.exit": "結束 Babble App", + "calibration.header": "校正設定", + "calibration.mode": "校正模式", + "calibration.modeTooltip": "自然校正 = 僅在開始和停止校正時設定最小值。完整校正 = 根據開始校正時記錄的數值設定最小值和最大值。", + "calibration.left": "左側", + "calibration.shape": "形狀", + "calibration.right": "右側", + "calibration.center": "中央", + "calibration.min": "最小值", + "calibration.max": "最大值", + "calibration.resetMin": "重設最小值", + "calibration.resetMinTooltip": "重設最小值設定", + "calibration.resetMax": "重設最大值", + "calibration.resetMaxTooltip": "重設最大值設定", + "calibration.minLeftValue": "左側最小值", + "calibration.maxLeftValue": "左側最大值", + "calibration.minRightValue": "右側最小值", + "calibration.maxRightValue": "右側最大值", + "general.theme": "Theme", + "general.theme.system": "System", + "general.theme.light": "Light", + "general.theme.dark": "Dark", + "general.useOSCQuery": "Use OSCQuery" +} \ No newline at end of file diff --git a/BabbleApp/Models/3MEFFB0E7MSE/onnx/model.onnx b/BabbleApp/Models/EFFB0E5BS224V6.3.4/onnx/model.onnx similarity index 70% rename from BabbleApp/Models/3MEFFB0E7MSE/onnx/model.onnx rename to BabbleApp/Models/EFFB0E5BS224V6.3.4/onnx/model.onnx index 4b8c5b5..236ec43 100644 Binary files a/BabbleApp/Models/3MEFFB0E7MSE/onnx/model.onnx and b/BabbleApp/Models/EFFB0E5BS224V6.3.4/onnx/model.onnx differ diff --git a/BabbleApp/babbleapp.py b/BabbleApp/babbleapp.py index 884fc33..e00f368 100644 --- a/BabbleApp/babbleapp.py +++ b/BabbleApp/babbleapp.py @@ -21,27 +21,30 @@ import queue import requests import threading +import asyncio from ctypes import c_int from babble_model_loader import * from camera_widget import CameraWidget from config import BabbleConfig -from tab import CamInfo, Tab +from tab import Tab from osc import VRChatOSCReceiver, VRChatOSC from general_settings_widget import SettingsWidget from algo_settings_widget import AlgoSettingsWidget from calib_settings_widget import CalibSettingsWidget +from notification_manager import NotificationManager from utils.misc_utils import EnsurePath, is_nt, bg_color_highlight, bg_color_clear from lang_manager import LocaleStringManager as lang winmm = None if is_nt: - from ctypes import windll - from winotify import Notification try: + from winotify import Notification + from ctypes import windll winmm = windll.winmm except OSError: print(f'\033[91m[{lang._instance.get_string("log.error")}] {lang._instance.get_string("error.winmm")}.\033[0m') + os.system("color") # init ANSI color # Random environment variable to speed up webcam opening on the MSMF backend. @@ -58,8 +61,8 @@ ALGO_SETTINGS_RADIO_NAME = "-ALGOSETTINGSRADIO-" CALIB_SETTINGS_RADIO_NAME = "-CALIBSETTINGSRADIO-" -page_url = "https://github.com/SummerSigh/ProjectBabble/releases/latest" -appversion = "Babble v2.1.0 Beta" +page_url = "https://github.com/Project-Babble/ProjectBabble/releases/latest" +appversion = "Babble v2.0.7" def timerResolution(toggle): if winmm != None: @@ -71,31 +74,15 @@ def timerResolution(toggle): else: winmm.timeEndPeriod(1) -def main(): - EnsurePath() - - # Get Configuration - config: BabbleConfig = BabbleConfig.load() - - # Init locale manager - lang("Locale", config.settings.gui_language) - - config.save() - - cancellation_event = threading.Event() - ROSC = False - # Check to see if we can connect to our video source first. If not, bring up camera finding - # dialog. - +async def check_for_updates(config, notification_manager): if config.settings.gui_update_check: try: response = requests.get( - "https://api.github.com/repos/SummerSigh/ProjectBabble/releases/latest" + "https://api.github.com/repos/Project-Babble/ProjectBabble/releases/latest" ) latestversion = response.json()["name"] - if ( - appversion == latestversion - ): # If what we scraped and hardcoded versions are same, assume we are up to date. + + if appversion == latestversion: print( f'\033[92m[{lang._instance.get_string("log.info")}] {lang._instance.get_string("babble.latestVersion")}! [{latestversion}]\033[0m' ) @@ -103,37 +90,37 @@ def main(): print( f'\033[93m[{lang._instance.get_string("log.info")}] {lang._instance.get_string("babble.needUpdateOne")} [{appversion}] {lang._instance.get_string("babble.needUpdateTwo")} [{latestversion}] {lang._instance.get_string("babble.needUpdateThree")}.\033[0m' ) - try: - if is_nt: - cwd = os.getcwd() - icon = cwd + "\Images\logo.ico" - toast = Notification( - app_id=lang._instance.get_string("babble.name"), - title=lang._instance.get_string("babble.updatePresent"), - msg=f'{lang._instance.get_string("babble.updateTo")} {latestversion}', - icon=r"{}".format(icon), - ) - toast.add_actions( - label=lang._instance.get_string("babble.downloadPage"), - launch="https://github.com/SummerSigh/ProjectBabble/releases/latest", - ) - toast.show() - except Exception as e: - print( - f'[{lang._instance.get_string("log.info")}] {lang._instance.get_string("babble.noToast")}' - ) - except: + await notification_manager.show_notification(appversion, latestversion, page_url) + except Exception as e: print( - f'[{lang._instance.get_string("log.info")}] {lang._instance.get_string("babble.noInternet")}.' + f'[{lang._instance.get_string("log.info")}] {lang._instance.get_string("babble.noInternet")}. Error: {e}' ) + +async def async_main(): + EnsurePath() + + # Get Configuration + config: BabbleConfig = BabbleConfig.load() + + # Init locale manager + lang("Locale", config.settings.gui_language) + + config.save() + + notification_manager = NotificationManager() + await notification_manager.initialize() + + # Run the update check + await check_for_updates(config, notification_manager) + + cancellation_event = threading.Event() + ROSC = False + timerResolution(True) - # Check to see if we have an ROI. If not, bring up ROI finder GUI. - # Spawn worker threads osc_queue: queue.Queue[tuple[bool, int, int]] = queue.Queue(maxsize=10) osc = VRChatOSC(cancellation_event, osc_queue, config) osc_thread = threading.Thread(target=osc.run) - # start worker threads osc_thread.start() cams = [ @@ -234,7 +221,6 @@ def main(): tint = 33 fs = False - # GUI Render loop while True: # First off, check for any events from the GUI event, values = window.read(timeout=tint) @@ -343,7 +329,12 @@ def main(): for setting in settings: if setting.started(): setting.render(window, event, values) - + + # Does adding this help? + # await asyncio.sleep(0) + +def main(): + asyncio.run(async_main()) if __name__ == "__main__": main() diff --git a/BabbleApp/calib_settings_widget.py b/BabbleApp/calib_settings_widget.py index fde95fe..d06f310 100644 --- a/BabbleApp/calib_settings_widget.py +++ b/BabbleApp/calib_settings_widget.py @@ -255,15 +255,24 @@ def render(self, window, event, values): for count2, element2 in enumerate(element1): if values[element2] != "": value = values[element2] - if is_valid_float_input(value): + if is_valid_float_input(value): # Returns true if a single decimal point. Therefore we need to make sure value can be converted to a float by assuming a dot implies a leading 0. + if value == ".": + valid_float = 0. + values[element2] = valid_float + window[element2].update(valid_float) value = float(values[element2]) if float(self.array[count1][count2]) != value: self.array[count1][count2] = value changed = True else: - value = float(value[:-1]) - window[element2].update(value) - values[element2] = value + trimmed_value = value[:-1] + if trimmed_value == '': # If we get an empty string, don't try to convert to float. + window[element2].update(trimmed_value) + values[element2] = trimmed_value + else: + value = float(trimmed_value) + window[element2].update(value) + values[element2] = value if event == self.gui_reset_min: for count1, element1 in enumerate(self.shape): diff --git a/BabbleApp/config.py b/BabbleApp/config.py index 302368e..5b0094f 100644 --- a/BabbleApp/config.py +++ b/BabbleApp/config.py @@ -35,7 +35,7 @@ class BabbleSettingsConfig(BaseModel): gui_ROSC: bool = False gui_osc_location: str = "" gui_multiply: float = 1 - gui_model_file: str = "Models/3MEFFB0E7MSE" + gui_model_file: str = "Models/EFFB0E5BS224V6.3.4" gui_runtime: str = "ONNX" gui_use_gpu: bool = False gui_gpu_index: int = 0 diff --git a/BabbleApp/notification_manager.py b/BabbleApp/notification_manager.py new file mode 100644 index 0000000..c12d1d9 --- /dev/null +++ b/BabbleApp/notification_manager.py @@ -0,0 +1,53 @@ +import os +import webbrowser +import signal +import asyncio +from pathlib import Path +from desktop_notifier import DesktopNotifier, Urgency, Button, Icon, DEFAULT_SOUND +from lang_manager import LocaleStringManager as lang +from utils.misc_utils import is_nt + +class NotificationManager: + def __init__(self): + self.notifier = DesktopNotifier(app_name="Babble App") + self.loop = None + self.stop_event = None + + async def show_notification(self, appversion, latestversion, page_url): + logo = Icon( + path=Path(os.path.join(os.getcwd(), "Images", "logo.ico")) + ) + + notification_message = ( + f'{lang._instance.get_string("babble.needUpdateOne")} ' + f'{appversion} ' + f'{lang._instance.get_string("babble.needUpdateTwo")} ' + f'{latestversion} ' + f'{lang._instance.get_string("babble.needUpdateThree")}!' + ) + + await self.notifier.send( + title=lang._instance.get_string("babble.updatePresent"), + message=notification_message, + urgency=Urgency.Normal, + buttons=[ + Button( + title=lang._instance.get_string("babble.downloadPage"), + on_pressed=lambda: webbrowser.open(page_url) + ) + ], + icon=logo, + sound=DEFAULT_SOUND, + on_dismissed=lambda: self.stop_event.set() + ) + + await self.stop_event.wait() + + async def initialize(self): + self.stop_event = asyncio.Event() + self.loop = asyncio.get_running_loop() + + # Add non nt signal handlers + if not is_nt: + self.loop.add_signal_handler(signal.SIGINT, self.stop_event.set) + self.loop.add_signal_handler(signal.SIGTERM, self.stop_event.set) \ No newline at end of file diff --git a/BabbleApp/requirements.txt b/BabbleApp/requirements.txt index b793a8b..3563c68 100644 --- a/BabbleApp/requirements.txt +++ b/BabbleApp/requirements.txt @@ -9,7 +9,7 @@ torchvision==0.19.1 pydantic==1.10.18 pyserial==3.5 colorama==0.4.6 -winotify==1.1.0 +desktop-notifier==6.0.0 comtypes==1.4.8 pygrabber==0.2 poetry diff --git a/LICENSE.md b/LICENSE.md index 8eb5f20..b8038b9 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,190 +1,264 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - Copyright 2024 Sameer Suri - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Babble Software Distribution License 1.0 + Version 1.0, January 2025 + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 10 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under this License, as indicated by a + copyright notice that is included in or attached to the work. + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including the + original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright + owner or by an individual or Legal Entity authorized to submit on + behalf of the copyright owner. For the purposes of this definition, + "submitted" means any form of electronic, verbal, or written + communication sent to the Licensor or its representatives, including + but not limited to communication on electronic mailing lists, source + code control systems, and issue tracking systems that are managed by, + or on behalf of, the Licensor for the purpose of discussing and + improving the Work, but excluding communication that is conspicuously + marked or otherwise designated in writing by the copyright owner + as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License + + Subject to the terms and conditions of this License, each Contributor + hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, + royalty-free, irrevocable copyright license to reproduce, prepare + Derivative Works of, publicly display, publicly perform, sublicense, + and distribute the Work and such Derivative Works in Source or + Object form. + +3. Grant of Patent License + + Subject to the terms and conditions of this License, each Contributor + hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, + royalty-free, irrevocable (except as stated in this section) patent + license to make, have made, use, offer to sell, sell, import, and + otherwise transfer the Work, where such license applies only to those + patent claims licensable by such Contributor that are necessarily + infringed by their Contribution(s) alone or by combination of their + Contribution(s) with the Work to which such Contribution(s) was + submitted. If You institute patent litigation against any entity + (including a cross-claim or counterclaim in a lawsuit) alleging that + the Work or a Contribution incorporated within the Work constitutes + direct or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate as of + the date such litigation is filed. + +4. Redistribution + + You may reproduce and distribute copies of the Work or Derivative + Works thereof in any medium, with or without modifications, and in + Source or Object form, provided that You meet the following conditions: + + (a) You must give any other recipients of the Work or Derivative + Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works that + You distribute, all copyright, patent, trademark, and attribution + notices from the Source form of the Work, excluding those notices + that do not pertain to any part of the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one of + the following places: within a NOTICE text file distributed as + part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and do not + modify the License. You may add Your own attribution notices within + Derivative Works that You distribute, alongside or as an addendum + to the NOTICE text from the Work, provided that such additional + attribution notices cannot be construed as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions for + use, reproduction, or distribution of Your modifications, or for any + such Derivative Works as a whole, provided Your use, reproduction, and + distribution of the Work otherwise complies with the conditions stated + in this License. + +5. Submission of Contributions + + Unless You explicitly state otherwise, any Contribution intentionally + submitted for inclusion in the Work by You to the Licensor shall be + under the terms and conditions of this License, without any additional + terms or conditions. Notwithstanding the above, nothing herein shall + supersede or modify the terms of any separate license agreement you may + have executed with Licensor regarding such Contributions. + +6. Trademarks + + This License does not grant permission to use the trade names, + trademarks, service marks, or product names of the Licensor, except as + required for reasonable and customary use in describing the origin of + the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty + + Unless required by applicable law or agreed to in writing, Licensor + provides the Work (and each Contributor provides its Contributions) + on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, + either express or implied, including, without limitation, any + warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, + or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for + determining the appropriateness of using or redistributing the Work + and assume any risks associated with Your exercise of permissions + under this License. + +8. Limitation of Liability + + In no event and under no legal theory, whether in tort (including + negligence), contract, or otherwise, unless required by applicable + law (such as deliberate and grossly negligent acts) or agreed to in + writing, shall any Contributor be liable to You for damages, including + any direct, indirect, special, incidental, or consequential damages of + any character arising as a result of this License or out of the use or + inability to use the Work (including but not limited to damages for + loss of goodwill, work stoppage, computer failure or malfunction, or + any and all other commercial damages or losses), even if such + Contributor has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability + + While redistributing the Work or Derivative Works thereof, You may + choose to offer, and charge a fee for, acceptance of support, warranty, + indemnity, or other liability obligations and/or rights consistent with + this License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf of + any other Contributor, and only if You agree to indemnify, defend, and + hold each Contributor harmless for any liability incurred by, or claims + asserted against, such Contributor by reason of your accepting any such + warranty or additional liability. + +10. Additional Terms: Non-Commercial Copyleft Provisions + + (a) Non-Commercial Restriction + + (1) “Non-Commercial” means not primarily intended for or directed + toward commercial advantage or monetary compensation. + + (2) “Prohibited Commercial Activity” means (i) selling, offering + to sell, or otherwise distributing the Work or Derivative Works + for profit; (ii) using the Work or Derivative Works (including + any part thereof) in connection with any commercial hardware + or services for which a fee is charged; or (iii) sublicensing + or otherwise transferring the Work or Derivative Works in a + way that allows commercial use. Any arrangement or transaction + that enables commercial exploitation of the Work or Derivative + Works, such as offering a fee-based service built around the + Work, is also a Prohibited Commercial Activity. + + (3) You may use, reproduce, modify, prepare Derivative Works of, + and distribute the Work or Derivative Works solely for + Non-Commercial purposes. + + (4) You may not engage in any Prohibited Commercial Activity with + respect to the Work or Derivative Works. You must take all + reasonable steps to prevent any third party from engaging in a + Prohibited Commercial Activity involving the Work or Derivative + Works obtained from You or created by You. Merely aggregating + the Work or Derivative Works with other software or hardware + under separate terms does not by itself circumvent these + restrictions; if such aggregation creates a single larger + product for sale or commercial use, it is a Prohibited + Commercial Activity. + + (5) You may not re-license or dual-license the Work or Derivative + Works to allow commercial use. Any attempt to do so is null + and void. + + (b) No Commercial Hardware Integration + + (1) The Work or Derivative Works may not be integrated into or + combined with any hardware product or device that is sold, + offered for sale, or otherwise monetized. + + (2) If the Work or Derivative Works are used within a hardware + product, that product must be distributed free of charge, and + its primary purpose must be for Non-Commercial research, + hobby, or educational use. + + (c) Copyleft Requirement + + (1) Same License Requirement. If You modify or create Derivative + Works based on the Work (including translations, adaptations, + or expansions), You must release those Derivative Works solely + under the terms of this License (Babble Software Distribution + License 1.0). + + (2) Source Availability. You must make the Source form of Your + Derivative Works publicly available, at no charge, under the + same terms as this License. + + (3) Notices and Attribution. You must provide a copy of this + License whenever You distribute or publicly display the Work + or Derivative Works. You must retain all copyright, patent, + trademark, and attribution notices from the original Work, + and add notices indicating that Your Derivative Works are + modified versions of the Work. + + (4) No Additional Restrictions. You may not impose any further + restrictions on the exercise of the rights granted under this + License. Any attempt to do so is void and will automatically + terminate Your rights under this License. + + (d) Enforcement and Termination + + (1) Any violation of these Additional Terms immediately terminates + Your rights under this License. + + (2) All disclaimers, limitations of liability, and indemnification + obligations survive termination. + +END OF TERMS AND CONDITIONS diff --git a/README.md b/README.md index 226baf7..b9f445c 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,9 @@ Project Babble is an open-source mouth tracking project designed to work with any VR headset. We strive to make our models robust to different lighting, cameras, image qualities and facial structures! +## Interested in selling babble hardware? +By defualt Project Babble is under a non-commerical license! Please contact us at projectbabblevr@gmail.com to obtain a commercial license! + ## Table of Contents - [Features](#features) - [Installation](#installation) diff --git a/scripts/installer.iss b/scripts/installer.iss index f94c334..b54d5e4 100644 --- a/scripts/installer.iss +++ b/scripts/installer.iss @@ -2,9 +2,9 @@ ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "Project Babble" -#define MyAppVersion "2.0.5" +#define MyAppVersion "2.0.7" #define MyAppPublisher "Project Babble Team" -#define MyAppURL "https://github.com/SummerSigh/ProjectBabble/tree/main" +#define MyAppURL "https://github.com/Project-Babble/ProjectBabble" #define MyAppExeName "Babble_App.exe" [Setup] @@ -20,7 +20,7 @@ AppSupportURL={#MyAppURL} AppUpdatesURL={#MyAppURL} DefaultDirName={autopf}\{#MyAppName} DisableProgramGroupPage=yes -OutputDir=C:\Users\epicm\Desktop\build +OutputDir=C:\Users\epicm\OneDrive\Desktop\build ; Uncomment the following line to run in non administrative install mode (install for current user only.) ;PrivilegesRequired=lowest OutputBaseFilename=Project_Babble-Setup @@ -30,6 +30,9 @@ Compression=lzma/ultra64 SolidCompression=yes WizardStyle=modern +[InstallDelete] +Type: files; Name: "{app}\babble_settings.json" + [Languages] Name: "english"; MessagesFile: "compiler:Default.isl"