From 4e7304b1eeb2340923a95b4a889b7087700c58f0 Mon Sep 17 00:00:00 2001 From: lx-s Date: Wed, 24 Sep 2025 10:45:54 +0200 Subject: [PATCH] Added log window --- Translations/lang-de.json | 4 +- Translations/lang-en.json | 4 +- Translations/lang-es.json | 269 ++++++++++++++++---------------- Translations/lang-it.json | 267 +++++++++++++++---------------- Translations/lang-nl.json | 265 +++++++++++++++---------------- Translations/lang-zh_Hans.json | 267 +++++++++++++++---------------- WinMute/LogDialog.cpp | 55 ++++++- WinMute/Settings_GeneralDlg.cpp | 13 +- WinMute/WMLog.cpp | 112 +++++++++---- WinMute/WMLog.h | 20 ++- WinMute/WMi18n.cpp | 16 +- WinMute/WMi18n.h | 4 +- WinMute/WinMute.cpp | 2 +- WinMute/WinMute.rc | 11 +- WinMute/common.h | 3 + WinMute/resource.h | 5 +- 16 files changed, 728 insertions(+), 589 deletions(-) diff --git a/Translations/lang-de.json b/Translations/lang-de.json index 8fafea8..ac9927d 100644 --- a/Translations/lang-de.json +++ b/Translations/lang-de.json @@ -65,6 +65,7 @@ "settings.general.run-on-startup": "WinMute mit Windows starten", "settings.general.enable-logging": "Protokollierung aktivieren", "settings.general.btn-open-log-file": "Protokolldatei öffnen...", + "settings.general.btn-open-log-window": "Protokoll anzeigen...", "settings.general.select-language-label": "Sprache", "settings.bluetooth.add-edit.enter-device-name-placeholder": "Bitte geben Sie einen Gerätenamen an", "settings.bluetooth.description": "\"Bluetooth Muting\" aktiviert das Stummschalten des PCs sobald ein Bluetooth-Audiogerät vom PC getrennt wird und hebt die Stummschaltung auf, sobald es wieder verbunden wird.\n\nDieses Verhalten kann für alle oder nur bestimmte Bluetooth-Geräte aktiviert werden.", @@ -132,5 +133,6 @@ "pupup.error.update-check-failed.text": "Fehler beim Prüfen auf eine neue Version.\nBitte prüfen Sie die Protokolldateien.", "settings.general.check-for-beta-updates-on-start": "Auf Vorabversionen überprüfen", "settings.general.updates-handled-externally": "Optionen deaktiviert: Updates werden extern durchgeführt", - "settings.general.help-translating": "Hilf beim Übersetzen" + "settings.general.help-translating": "Hilf beim Übersetzen", + "log.title": "WinMute Protokolldatei" } diff --git a/Translations/lang-en.json b/Translations/lang-en.json index 8594fa9..aa30355 100644 --- a/Translations/lang-en.json +++ b/Translations/lang-en.json @@ -74,6 +74,7 @@ "settings.general.updates-handled-externally": "Options disabled: Updates are handled externally", "settings.general.enable-logging": "Enable logging", "settings.general.btn-open-log-file": "Open log file...", + "settings.general.btn-open-log-window": "Show log...", "settings.general.select-language-label": "Language", "settings.general.help-translating": "Help translating", "settings.bluetooth.add-edit.enter-device-name-placeholder": "Please enter a Bluetooth device name", @@ -131,5 +132,6 @@ "about.general.description": "WinMute is developed by Alexander Steinhoefer his spare time. The code as well as new releases for this tool can be found on GitHub. Contributions in the form of code, tickets or feature requests are very welcome. Thanks for using this little tool!", "about.tab.winmute": "WinMute", "about.tab.license": "License", - "about.btn-close": "OK" + "about.btn-close": "OK", + "log.title": "WinMute Log-File" } diff --git a/Translations/lang-es.json b/Translations/lang-es.json index 3da3272..173047c 100644 --- a/Translations/lang-es.json +++ b/Translations/lang-es.json @@ -1,136 +1,137 @@ { - "meta.lang.name": "Español (Spanish)", - "meta.lang.mode": "ltr", - "init.error.settings.title": "No se pudo inicializar la configuración", - "init.error.settings.text": "Error crítico al inicializar WinMute", - "init.error.already-running.title": "WinMute ya se está ejecutando", - "init.error.already-running.text": "Por favor busque el ícono de la aplicación WinMute en el área de notificación de la barra de tareas de Windows.", - "init.error.winmute.title": "No se pudo iniciar WinMute.", - "init.error.winmute.text": "WinMute encontró un error crítico durante la inicialización y debe cerrarse.", - "init.error.winmute.platform-support.title": "Solo se soporta Windows Vista y versiones más recientes", - "init.error.winmute.platform-support.text": "Si requiere soporte para Windows XP, por favor descargue WinMute 1.4.2 o inferior.", - "general.error.winapi.text": "{} falló con error {}: {}", - "general.error.audio-service-shutdown.title": "El servicio de audio ha sido terminado.", - "general.error.audio-service-shutdown.text": "WinMute no puede recuperarse de esta condición.\nPor favor intente reiniciar el programa.", - "popup.remote-session-detected.title": "Sesión remota detectada", - "popup.remote-session-detected.text": "Se han silenciado todos los dispositivos de audio", - "popup.bluetooth-muting-disabled.title": "Silenciamiento de Bluetooth deshabilitado", - "popup.bluetooth-muting-disabled.text": "Bluetooth no está disponible o está deshabilitado.\nEl silenciamiento de Bluetooth será deshabilitado en esta computadora.", - "popup.wlan-muting-disabled.title": "Silenciamiento de WiFi desactivado", - "popup.wlan-muting-disabled.text": "WiFi no está disponible o está deactivado.\nEl silenciamiento de WiFi será deshabilitado en esta computadora.", - "popup.quiet-hours-started.title": "Horas de silencio activadas", - "popup.quiet-hours-started.text": "El audio de la computadora será silenciado ahora.", - "popup.quiet-hours-ended.title": "Horas de silencio terminadas", - "popup.quiet-hours-ended.text": "El audio de la computadora ha sido restaurado.", - "popup.workstation-muted.title": "Audio silenciado", - "popup.wlan-not-on-mute-list.text": "La red de WiFi \"{}\" no esta en la lista de redes permitidas.", - "popup.wlan-is-on-mute-list.text": "La red WiFi \"{}\" está configurada para AutoMute.", - "popup.muting-workstation-after-delay.title": "Silenciando la computadora después de demora", - "popup.muting-workstation-after-delay.text": "Todos los dispositivos han sido silenciados", - "popup.volume-restored.title": "Volumen restaurado", - "popup.volume-restored.text": "Todos los dispositivos han sido restaurados a su configuración anterior", - "popup.muting-workstation.title": "Silenciando computadora", - "popup.muting-workstation.text": "Todos los dispositivos han sido silenciados", - "popup.error.quiet-hours-start.title": "Empezar Horas de Silencio", - "popup.error.quiet-hours-start.text": "Fallo al registrar el inicio de las horas de silencio con el sistema de temporizador de Windows", - "popup.error.quiet-hours-stop.title": "Fin de las horas de silencio", - "popup.error.quiet-hours-stop.text": "Fallo al registrar el final de las horas de silencio con el sistema de temporizador de Windows", - "traymenu.info": "Acerca de", - "traymenu.mute-when": "Silenciar cuando...", - "traymenu.mute-on-lock": "... la computadora está bloqueada", - "traymenu.mute-on-screen-suspend": "... la pantalla se apaga", - "traymenu.restore-volume": "Restaurar el volumen después", - "traymenu.mute-no-restore": "Silencio activado (no se restablece el volumen)...", - "traymenu.mute-on-shutdown": "... apagado", - "traymenu.mute-on-sleep": "... suspender", - "traymenu.mute-on-logout": "... cerrar sesión", - "traymenu.mute-all-devices": "Silenciar todos los dispositivos ahora", - "traymenu.settings": "Configuración...", - "traymenu.exit": "Salir", - "settings.title": "Configuración", - "settings.btn-save": "Guardar", - "settings.btn-cancel": "Cancelar", - "settings.btn-add": "Añadir", - "settings.btn-edit": "Editar", - "settings.btn-remove": "Quitar", - "settings.btn-remove-all": "Quitar todo", - "settings.tab.general": "General", - "settings.tab.mute": "Silencio", - "settings.tab.quiet-hours": "Horas de silencio", - "settings.tab.bluetooth": "Bluetooth", - "settings.tab.wifi": "WLAN", - "settings.bluetooth.add-edit.add-title": "Añade un dispositivo Bluetooth", - "settings.bluetooth.add-edit.edit-title": "Editar dispositivo Bluetooth", - "settings.bluetooth.add-edit.device-name-label": "Nombre del dispositivo Bluetooth:", - "settings.general.run-on-startup": "Ejecutar WinMute cuando este usuario se conecte", - "settings.general.enable-logging": "Activar el registro", - "settings.general.btn-open-log-file": "Abrir el archivo de registro...", - "settings.general.select-language-label": "Idioma", - "settings.bluetooth.add-edit.enter-device-name-placeholder": "Por favor, introduzca un nombre para el dispositivo Bluetooth", - "settings.bluetooth.description": "\"Silenciar Bluetooth\" permite desactivar el audio si se desconecta un dispositivo bluetooth de clase audio, y volver a activarlo si se vuelve a conectar al ordenador.\n\nEste comportamiento se puede activar para todos los dispositivos de audio bluetooth o sólo para un conjunto específico.", - "settings.bluetooth.enable-muting": "Activar el silenciamiento basado en Bluetooth", - "settings.bluetooth.enable-muting-filter": "Activar sólo para estos dispositivos:", - "settings.bluetooth-disabled-info": "", - "settings.mute.general-title": "General", - "settings.mute.show-mute-event-notifications": "Mostrar notificaciones de eventos silenciados", - "settings.mute.manage-endpoints-individually": "Gestiona individualmente los dispositivos de audio", - "settings.mute.btn-manage-endpoints": "Gestiona los dispositivos...", - "settings.mute.mute-with-restore.title": "Silencio con restauración del volumen, cuando...", - "settings.mute.mute-with-restore.when-workstation-is-locked": "... el ordenador está bloqueado", - "settings.mute.mute-with-restore.when-screen-turns-off": "... la pantalla se apaga", - "settings.mute.mute-with-restore.restore-volume": "Restaurar el volumen después", - "settings.mute.mute-with-restore.restore-volume-delay-label": "segundos de retardo antes de silenciar.", - "settings.mute.mute-without-restore.title": "Silenciar sin restaurar el volumen, cuando...", - "settings.mute.mute-without-restore.when-computer-shuts-down": "... el ordenador se apaga", - "settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... el ordenador entra en reposo/hibernación", - "settings.mute.mute-without-restore.when-user-logs-out": "... el usuario se desconecta", - "settings.mute.mute-without-restore.when-rdp-session-starts": "... WinMute se inicia dentro de una sesión RDP", - "settings.quiet-hours.intro": "Durante las horas de silencio, WinMute silencia automáticamente los dispositivos de audio del ordenador y los vuelve a silenciar después.", - "settings.quiet-hours.enable": "Activar las horas de silencio", - "settings.quiet-hours.start-time-label": "Hora de inicio:", - "settings.quiet-hours.end-time-label": "Hora de finalización:", - "settings.quiet-hours.force-unmute": "Forzar el silencio", - "settings.quiet-hours.force-unmute-description": "Si la opción de forzar el silencio está activada, WinMute anulará el silencio de los dispositivos de audio del ordenador cuando finalicen las horas de silencio y no tendrá en cuenta si ya estaban silenciados antes de que comenzaran las horas de silencio.", - "settings.quiet-hours.show-notifications": "Mostrar notificaciones de horas de silencio", - "settings.quiet-hours.error.invalid-time-range.title": "Intervalo de tiempo no válido", - "settings.quiet-hours.error.invalid-time-range.text": "El inicio y el final deben ser tiempos diferentes.", - "settings.quiet-hours.error.error-while-saving.title": "No se ha podido guardar la configuración de las horas de silencio", - "settings.quiet-hours.error.error-while-saving.text": "Algo ha ido mal al guardar la configuración", - "settings.wifi.intro": "\"WLAN Mute\" silencia la computadora según el nombre de la red inalámbrica conectada.", - "settings.wifi.enable": "Habilitar el silenciamiento basado en WLAN", - "settings.wifi.mute-when-in-list": "Silenciar si la WLAN conectada está en la lista", - "settings.wifi.mute-when-not-in-list": "Silenciar si la WLAN conectada no está en la lista", - "settings.wifi.wifi-disabled-info": "Nota: WLAN no está disponible en este dispositivo.\nAlgunas opciones han sido deshabilitadas.", - "settings.wifi.add-edit.add-title": "Añadir red WiFi", - "settings.wifi.add-edit.edit-title": "Editar red WiFi", - "settings.wifi.add-edit.ssid-name-label": "Nombre SSID/WiFi:", - "settings.wifi.add-edit.enter-device-name-placeholder": "Por favor proporcione un nombre de SSID/WiFi", - "settings.mute.manage-endpoints.title": "Administrar dispositivos de audio", - "settings.mute.manage-endpoints.list-behaviour.title": "General", - "settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "Silenciar solo los dispositivos listados", - "settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "Silenciar todo excepto los dispositivos listados", - "settings.mute.manage-endpoints.endpoints.title": "Dispositivos", - "settings.mute.manage-endpoints.add-edit.add-title": "Añadir dispositivo", - "settings.mute.manage-endpoints.add-edit.edit-title": "Editar dispositivo", - "settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "Por favor proporcione un nombre de dispositivo", - "settings.mute.manage-endpoints.add-edit.endpoint-name-label": "Nombre de dispositivo:", - "about.title": "Acerca de WinMute", - "about.general.author-site-label": "Autor: www.lx-s.de", - "about.general.project-site-label": "Sitio del proyecto && Código", - "about.general.support-label": "Soporte", - "about.general.description": "WinMute es desarrollado por Alexander Steinhoefer en su tiempo libre. El código, así como los nuevos lanzamientos de esta herramienta, pueden encontrarse en Github. Las contribuciones en forma de código, tickets o solicitudes de características son muy bienvenidas. Gracias por usar esta pequeña herramienta!", - "about.tab.winmute": "WinMute", - "about.tab.license": "Licencia", - "about.btn-close": "OK", - "popup.update-available.text": "La versión instalada es {}.\nHaga clic en este mensaje para abrir la página de descarga.", - "popup.update-available-beta.title": "¡WinMute Beta {} ya está disponible!", - "settings.general.check-for-updates-on-start": "Buscar nuevas actualizaciones al iniciar", - "popup.update-available-beta.text": "Tu versión actual es {}.\nHaga clic en este mensaje para abrir la página de descarga de la versión beta.", - "settings.bluetooth.bluetooth-disabled-info": "Nota: el bluetooth no está disponible en este dispositivo.\nAlgunas opciones se han desactivado.", - "popup.error.update-check-failed.title": "Error en la comprobación de la actualización.", - "settings.general.updates-handled-externally": "Opciones desactivadas: Las actualizaciones se gestionan externamente", - "popup.update-available.title": "¡WinMute {} está disponible!", - "pupup.error.update-check-failed.text": "No se ha podido comprobar si hay una nueva versión.\nPor favor compruebe/habilite el registro para obtener más detalles.", - "settings.general.check-for-beta-updates-on-start": "Compruebe también si hay nuevas versiones beta", - "settings.general.help-translating": "Ayuda a la traducción" + "meta.lang.name": "Español (Spanish)", + "meta.lang.mode": "ltr", + "init.error.settings.title": "No se pudo inicializar la configuración", + "init.error.settings.text": "Error crítico al inicializar WinMute", + "init.error.already-running.title": "WinMute ya se está ejecutando", + "init.error.already-running.text": "Por favor busque el ícono de la aplicación WinMute en el área de notificación de la barra de tareas de Windows.", + "init.error.winmute.title": "No se pudo iniciar WinMute.", + "init.error.winmute.text": "WinMute encontró un error crítico durante la inicialización y debe cerrarse.", + "init.error.winmute.platform-support.title": "Solo se soporta Windows Vista y versiones más recientes", + "init.error.winmute.platform-support.text": "Si requiere soporte para Windows XP, por favor descargue WinMute 1.4.2 o inferior.", + "general.error.winapi.text": "{} falló con error {}: {}", + "general.error.audio-service-shutdown.title": "El servicio de audio ha sido terminado.", + "general.error.audio-service-shutdown.text": "WinMute no puede recuperarse de esta condición.\nPor favor intente reiniciar el programa.", + "popup.remote-session-detected.title": "Sesión remota detectada", + "popup.remote-session-detected.text": "Se han silenciado todos los dispositivos de audio", + "popup.bluetooth-muting-disabled.title": "Silenciamiento de Bluetooth deshabilitado", + "popup.bluetooth-muting-disabled.text": "Bluetooth no está disponible o está deshabilitado.\nEl silenciamiento de Bluetooth será deshabilitado en esta computadora.", + "popup.wlan-muting-disabled.title": "Silenciamiento de WiFi desactivado", + "popup.wlan-muting-disabled.text": "WiFi no está disponible o está deactivado.\nEl silenciamiento de WiFi será deshabilitado en esta computadora.", + "popup.quiet-hours-started.title": "Horas de silencio activadas", + "popup.quiet-hours-started.text": "El audio de la computadora será silenciado ahora.", + "popup.quiet-hours-ended.title": "Horas de silencio terminadas", + "popup.quiet-hours-ended.text": "El audio de la computadora ha sido restaurado.", + "popup.workstation-muted.title": "Audio silenciado", + "popup.wlan-not-on-mute-list.text": "La red de WiFi \"{}\" no esta en la lista de redes permitidas.", + "popup.wlan-is-on-mute-list.text": "La red WiFi \"{}\" está configurada para AutoMute.", + "popup.muting-workstation-after-delay.title": "Silenciando la computadora después de demora", + "popup.muting-workstation-after-delay.text": "Todos los dispositivos han sido silenciados", + "popup.volume-restored.title": "Volumen restaurado", + "popup.volume-restored.text": "Todos los dispositivos han sido restaurados a su configuración anterior", + "popup.muting-workstation.title": "Silenciando computadora", + "popup.muting-workstation.text": "Todos los dispositivos han sido silenciados", + "popup.error.quiet-hours-start.title": "Empezar Horas de Silencio", + "popup.error.quiet-hours-start.text": "Fallo al registrar el inicio de las horas de silencio con el sistema de temporizador de Windows", + "popup.error.quiet-hours-stop.title": "Fin de las horas de silencio", + "popup.error.quiet-hours-stop.text": "Fallo al registrar el final de las horas de silencio con el sistema de temporizador de Windows", + "traymenu.info": "Acerca de", + "traymenu.mute-when": "Silenciar cuando...", + "traymenu.mute-on-lock": "... la computadora está bloqueada", + "traymenu.mute-on-screen-suspend": "... la pantalla se apaga", + "traymenu.restore-volume": "Restaurar el volumen después", + "traymenu.mute-no-restore": "Silencio activado (no se restablece el volumen)...", + "traymenu.mute-on-shutdown": "... apagado", + "traymenu.mute-on-sleep": "... suspender", + "traymenu.mute-on-logout": "... cerrar sesión", + "traymenu.mute-all-devices": "Silenciar todos los dispositivos ahora", + "traymenu.settings": "Configuración...", + "traymenu.exit": "Salir", + "settings.title": "Configuración", + "settings.btn-save": "Guardar", + "settings.btn-cancel": "Cancelar", + "settings.btn-add": "Añadir", + "settings.btn-edit": "Editar", + "settings.btn-remove": "Quitar", + "settings.btn-remove-all": "Quitar todo", + "settings.tab.general": "General", + "settings.tab.mute": "Silencio", + "settings.tab.quiet-hours": "Horas de silencio", + "settings.tab.bluetooth": "Bluetooth", + "settings.tab.wifi": "WLAN", + "settings.bluetooth.add-edit.add-title": "Añade un dispositivo Bluetooth", + "settings.bluetooth.add-edit.edit-title": "Editar dispositivo Bluetooth", + "settings.bluetooth.add-edit.device-name-label": "Nombre del dispositivo Bluetooth:", + "settings.general.run-on-startup": "Ejecutar WinMute cuando este usuario se conecte", + "settings.general.enable-logging": "Activar el registro", + "settings.general.btn-open-log-file": "Abrir el archivo de registro...", + "settings.general.select-language-label": "Idioma", + "settings.bluetooth.add-edit.enter-device-name-placeholder": "Por favor, introduzca un nombre para el dispositivo Bluetooth", + "settings.bluetooth.description": "\"Silenciar Bluetooth\" permite desactivar el audio si se desconecta un dispositivo bluetooth de clase audio, y volver a activarlo si se vuelve a conectar al ordenador.\n\nEste comportamiento se puede activar para todos los dispositivos de audio bluetooth o sólo para un conjunto específico.", + "settings.bluetooth.enable-muting": "Activar el silenciamiento basado en Bluetooth", + "settings.bluetooth.enable-muting-filter": "Activar sólo para estos dispositivos:", + "settings.bluetooth-disabled-info": "", + "settings.mute.general-title": "General", + "settings.mute.show-mute-event-notifications": "Mostrar notificaciones de eventos silenciados", + "settings.mute.manage-endpoints-individually": "Gestiona individualmente los dispositivos de audio", + "settings.mute.btn-manage-endpoints": "Gestiona los dispositivos...", + "settings.mute.mute-with-restore.title": "Silencio con restauración del volumen, cuando...", + "settings.mute.mute-with-restore.when-workstation-is-locked": "... el ordenador está bloqueado", + "settings.mute.mute-with-restore.when-screen-turns-off": "... la pantalla se apaga", + "settings.mute.mute-with-restore.restore-volume": "Restaurar el volumen después", + "settings.mute.mute-with-restore.restore-volume-delay-label": "segundos de retardo antes de silenciar.", + "settings.mute.mute-without-restore.title": "Silenciar sin restaurar el volumen, cuando...", + "settings.mute.mute-without-restore.when-computer-shuts-down": "... el ordenador se apaga", + "settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... el ordenador entra en reposo/hibernación", + "settings.mute.mute-without-restore.when-user-logs-out": "... el usuario se desconecta", + "settings.mute.mute-without-restore.when-rdp-session-starts": "... WinMute se inicia dentro de una sesión RDP", + "settings.quiet-hours.intro": "Durante las horas de silencio, WinMute silencia automáticamente los dispositivos de audio del ordenador y los vuelve a silenciar después.", + "settings.quiet-hours.enable": "Activar las horas de silencio", + "settings.quiet-hours.start-time-label": "Hora de inicio:", + "settings.quiet-hours.end-time-label": "Hora de finalización:", + "settings.quiet-hours.force-unmute": "Forzar el silencio", + "settings.quiet-hours.force-unmute-description": "Si la opción de forzar el silencio está activada, WinMute anulará el silencio de los dispositivos de audio del ordenador cuando finalicen las horas de silencio y no tendrá en cuenta si ya estaban silenciados antes de que comenzaran las horas de silencio.", + "settings.quiet-hours.show-notifications": "Mostrar notificaciones de horas de silencio", + "settings.quiet-hours.error.invalid-time-range.title": "Intervalo de tiempo no válido", + "settings.quiet-hours.error.invalid-time-range.text": "El inicio y el final deben ser tiempos diferentes.", + "settings.quiet-hours.error.error-while-saving.title": "No se ha podido guardar la configuración de las horas de silencio", + "settings.quiet-hours.error.error-while-saving.text": "Algo ha ido mal al guardar la configuración", + "settings.wifi.intro": "\"WLAN Mute\" silencia la computadora según el nombre de la red inalámbrica conectada.", + "settings.wifi.enable": "Habilitar el silenciamiento basado en WLAN", + "settings.wifi.mute-when-in-list": "Silenciar si la WLAN conectada está en la lista", + "settings.wifi.mute-when-not-in-list": "Silenciar si la WLAN conectada no está en la lista", + "settings.wifi.wifi-disabled-info": "Nota: WLAN no está disponible en este dispositivo.\nAlgunas opciones han sido deshabilitadas.", + "settings.wifi.add-edit.add-title": "Añadir red WiFi", + "settings.wifi.add-edit.edit-title": "Editar red WiFi", + "settings.wifi.add-edit.ssid-name-label": "Nombre SSID/WiFi:", + "settings.wifi.add-edit.enter-device-name-placeholder": "Por favor proporcione un nombre de SSID/WiFi", + "settings.mute.manage-endpoints.title": "Administrar dispositivos de audio", + "settings.mute.manage-endpoints.list-behaviour.title": "General", + "settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "Silenciar solo los dispositivos listados", + "settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "Silenciar todo excepto los dispositivos listados", + "settings.mute.manage-endpoints.endpoints.title": "Dispositivos", + "settings.mute.manage-endpoints.add-edit.add-title": "Añadir dispositivo", + "settings.mute.manage-endpoints.add-edit.edit-title": "Editar dispositivo", + "settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "Por favor proporcione un nombre de dispositivo", + "settings.mute.manage-endpoints.add-edit.endpoint-name-label": "Nombre de dispositivo:", + "about.title": "Acerca de WinMute", + "about.general.author-site-label": "Autor: www.lx-s.de", + "about.general.project-site-label": "Sitio del proyecto && Código", + "about.general.support-label": "Soporte", + "about.general.description": "WinMute es desarrollado por Alexander Steinhoefer en su tiempo libre. El código, así como los nuevos lanzamientos de esta herramienta, pueden encontrarse en Github. Las contribuciones en forma de código, tickets o solicitudes de características son muy bienvenidas. Gracias por usar esta pequeña herramienta!", + "about.tab.winmute": "WinMute", + "about.tab.license": "Licencia", + "about.btn-close": "OK", + "popup.update-available.text": "La versión instalada es {}.\nHaga clic en este mensaje para abrir la página de descarga.", + "popup.update-available-beta.title": "¡WinMute Beta {} ya está disponible!", + "settings.general.check-for-updates-on-start": "Buscar nuevas actualizaciones al iniciar", + "popup.update-available-beta.text": "Tu versión actual es {}.\nHaga clic en este mensaje para abrir la página de descarga de la versión beta.", + "settings.bluetooth.bluetooth-disabled-info": "Nota: el bluetooth no está disponible en este dispositivo.\nAlgunas opciones se han desactivado.", + "popup.error.update-check-failed.title": "Error en la comprobación de la actualización.", + "settings.general.updates-handled-externally": "Opciones desactivadas: Las actualizaciones se gestionan externamente", + "popup.update-available.title": "¡WinMute {} está disponible!", + "pupup.error.update-check-failed.text": "No se ha podido comprobar si hay una nueva versión.\nPor favor compruebe/habilite el registro para obtener más detalles.", + "settings.general.check-for-beta-updates-on-start": "Compruebe también si hay nuevas versiones beta", + "settings.general.help-translating": "Ayuda a la traducción", + "log.title": "WinMute Archivo de registro" } diff --git a/Translations/lang-it.json b/Translations/lang-it.json index 864359d..78c85fe 100644 --- a/Translations/lang-it.json +++ b/Translations/lang-it.json @@ -1,135 +1,136 @@ { - "meta.lang.name": "Italiano (Italian)", - "meta.lang.mode": "ltr", - "init.error.settings.title": "Impossibile inizializzare le impostazioni", - "init.error.settings.text": "Errore critico durante l'inizializzazione di WinMute", - "init.error.already-running.title": "WinMute è già in esecuzione", - "init.error.already-running.text": "Cerca l'icona dell'applicazione WinMutes nell'area di notifica della barra delle applicazioni di Windows.", - "init.error.winmute.title": "Impossibile avviare WinMute.", - "init.error.winmute.text": "WinMute durante l'inizializzazione ha riscontrato un errore critico ed è necessario chiudere l'applicazione.", - "init.error.winmute.platform-support.title": "È supportato solo Windows Vista e versioni successive", - "init.error.winmute.platform-support.text": "Se hai bisogno del supporto per Windows XP, scarica WinMute versione 1.4.2 o precedente.", - "general.error.winapi.text": "{} non riuscito con errore {}: {}", - "general.error.audio-service-shutdown.title": "Il servizio audio è stato chiuso.", - "general.error.audio-service-shutdown.text": "WinMute non è in grado di recuperare da tale condizione.\nProva a riavviare il programma.", - "popup.remote-session-detected.title": "Rilevata sessione remota", - "popup.remote-session-detected.text": "Tutti i dispositivi audio sono stati disattivati", - "popup.bluetooth-muting-disabled.title": "Disabilitazione audio Bluetooth disattivata", - "popup.bluetooth-muting-disabled.text": "Il Bluetooth non è disponibile o è disabilitato.\nIn questo computer la disabilitazione dell'audio Bluetooth verrà disattivata.", - "popup.wlan-muting-disabled.title": "Disabilitazione audio WLAN disattivata", - "popup.wlan-muting-disabled.text": "La WLAN non è disponibile o è disabilitata. \nIn questo computer la disabilitazione dell'audio WLAN verrà disattivata.", - "popup.quiet-hours-started.title": "Cominciano le ore tranquille", - "popup.quiet-hours-started.text": "L'audio del computer verrà ora disattivato.", - "popup.quiet-hours-ended.title": "Ore tranquille terminate", - "popup.quiet-hours-ended.text": "L'audio del computer è stato riattivato.", - "popup.workstation-muted.title": "Audio computer OFF", - "popup.wlan-not-on-mute-list.text": "La rete WLAN \"{}\" non è nell'elenco consentito.", - "popup.wlan-is-on-mute-list.text": "La rete WLAN \"{}\" è configurata per la disabilitazione audio automatica.", - "popup.muting-workstation-after-delay.title": "Ritardo disattivazione audio computer", - "popup.muting-workstation-after-delay.text": "Tutti i dispositivi audio sono stati disattivati", - "popup.volume-restored.title": "Volume ripristinato", - "popup.volume-restored.text": "Tutti i dispositivi audio sono stati ripristinati alla loro configurazione precedente", - "popup.muting-workstation.title": "Audio OFF computer", - "popup.muting-workstation.text": "Tutti i dispositivi audio sono stati disattivati", - "popup.error.quiet-hours-start.title": "Avvio ore tranquille", - "popup.error.quiet-hours-start.text": "Impossibile registrare l'inizio delle ore di silenzio con il timer di sistema di Windows", - "popup.error.quiet-hours-stop.title": "Fine ore silenzio", - "popup.error.quiet-hours-stop.text": "Impossibile registrare la fine delle ore di silenzio con il timer di sistema di Windows", - "traymenu.info": "Info programma", - "traymenu.mute-when": "Audio OFF quando...", - "traymenu.mute-on-lock": "... il computer viene bloccato", - "traymenu.mute-on-screen-suspend": "... lo schermo verrà spento", - "traymenu.restore-volume": "Ripristina il volume in seguito", - "traymenu.mute-no-restore": "Disattiva audio (nessun ripristino volume) quando...", - "traymenu.mute-on-shutdown": "... il computer viene spento", - "traymenu.mute-on-sleep": "... il computer va in sospensione", - "traymenu.mute-on-logout": "... l'utente si scollega", - "traymenu.mute-all-devices": "Disattiva audio per tutti i dispositivi", - "traymenu.settings": "Impostazioni...", - "traymenu.exit": "Esci", - "settings.title": "Impostazioni", - "settings.btn-save": "Salva", - "settings.btn-cancel": "Annulla", - "settings.btn-add": "Aggiungi", - "settings.btn-edit": "Modifica", - "settings.btn-remove": "Rimuovi", - "settings.btn-remove-all": "Rimuovi tutto", - "settings.tab.general": "Generale", - "settings.tab.mute": "Disattiva audio", - "settings.tab.quiet-hours": "Ore silenzio", - "settings.tab.bluetooth": "Bluetooth", - "settings.tab.wifi": "WLAN", - "settings.bluetooth.add-edit.add-title": "Aggiungi dispositivo Bluetooth", - "settings.bluetooth.add-edit.edit-title": "Modifica dispositivo Bluetooth", - "settings.bluetooth.add-edit.device-name-label": "Nome dispositivo Bluetooth:", - "settings.general.run-on-startup": "Esegui WinMute all'accesso dell'utente", - "settings.general.enable-logging": "Abilita registrazione eventi", - "settings.general.btn-open-log-file": "Apri file registro eventi...", - "settings.general.select-language-label": "Lingua", - "settings.bluetooth.add-edit.enter-device-name-placeholder": "Inserisci il nome di un dispositivo Bluetooth", - "settings.bluetooth.description": "\"Audio OFF Bluetooth\" consente di disattivare l'audio se un dispositivo Bluetooth di classe audio viene disconnesso e di riattivare l'audio se un dispositivo Bluetooth viene ricollegato al computer.\n\nPuoi abilitare questo comportamento per tutti i dispositivi audio Bluetooth o solo per un set specifico di dispositivi.", - "settings.bluetooth.enable-muting": "Abilita disabilitazione audio basata su hardware Bluetooth", - "settings.bluetooth.enable-muting-filter": "Abilita solo per questi dispositivi:", - "settings.bluetooth.bluetooth-disabled-info": "Nota: il Bluetooth non è disponibile nel dispositivo, quindi alcune opzioni sono state disabilitate.", - "settings.mute.general-title": "Generale", - "settings.mute.show-mute-event-notifications": "Visualizza notifiche eventi disattivazione", - "settings.mute.manage-endpoints-individually": "Gestisci i dispositivi audio individualmente", - "settings.mute.btn-manage-endpoints": "Gestisci dispositivi audio...", - "settings.mute.mute-with-restore.title": "Disattiva audio con ripristino del volume, quando...", - "settings.mute.mute-with-restore.when-workstation-is-locked": "... il computer viene bloccato", - "settings.mute.mute-with-restore.when-screen-turns-off": "... lo schermo viene spento", - "settings.mute.mute-with-restore.restore-volume": "Ripristina il volume in seguito", - "settings.mute.mute-with-restore.restore-volume-delay-label": "secondi di ritardo prima della disattivazione dell'audio.", - "settings.mute.mute-without-restore.title": "Disattiva l'audio senza ripristinare il volume, quando...", - "settings.mute.mute-without-restore.when-computer-shuts-down": "... il computer viene spento", - "settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... il computer entra in modalità sospensione/ibernazione", - "settings.mute.mute-without-restore.when-user-logs-out": "... l'utente si scollega", - "settings.mute.mute-without-restore.when-rdp-session-starts": "... WinMute è avviato all'interno di una sessione RDP", - "settings.quiet-hours.intro": "Durante le ore di silenzio WinMute disattiva automaticamente i dispositivi audio del computer e li riattiverà successivamente.", - "settings.quiet-hours.enable": "Abilita ore di silenzio", - "settings.quiet-hours.start-time-label": "Orario inizio:", - "settings.quiet-hours.end-time-label": "Orario fine:", - "settings.quiet-hours.force-unmute": "Forza audio ON", - "settings.quiet-hours.force-unmute-description": "Se è attivato 'Forza audio ON', WinMute riattiverà i dispositivi audio durante le ore di silenzio e non prenderà in considerazione se erano già disattivati prima dell'inizio delle ore di silenzio.", - "settings.quiet-hours.show-notifications": "Visualizza notifiche ore di silenzio", - "settings.quiet-hours.error.invalid-time-range.title": "Intervallo temporale non valido", - "settings.quiet-hours.error.invalid-time-range.text": "Non è possibile avviare e arrestare allo stesso orario.\nCorreggi l'intervallo di tempo.", - "settings.quiet-hours.error.error-while-saving.title": "Impossibile salvare le impostazioni delle ore di silenzio", - "settings.quiet-hours.error.error-while-saving.text": "Si è verificato un errore durante il salvataggio delle impostazioni", - "settings.wifi.intro": "'Audio OFF in base a nome rete WLAN' consente di disattivare l'audio del computer in base al nome della rete wireless connessa.", - "settings.wifi.enable": "Abilita disabilitazione audio basata su nome rete WLAN", - "settings.wifi.mute-when-not-in-list": "Disattiva audio se la rete WLAN NON è in elenco", - "settings.wifi.wifi-disabled-info": "Nota: la WLAN non è disponibile nel dispositivo, quindi alcune opzioni sono state disabilitate.", - "settings.wifi.add-edit.add-title": "Aggiungi rete WiFi", - "settings.wifi.add-edit.edit-title": "Modifica rete WiFi", - "settings.wifi.add-edit.ssid-name-label": "Nome SSID/WiFi:", - "settings.wifi.add-edit.enter-device-name-placeholder": "Inserisci un nome SSID/WiFi", - "settings.mute.manage-endpoints.title": "Gestisci dispositivi audio", - "settings.mute.manage-endpoints.list-behaviour.title": "Generale", - "settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "Disattiva solo i dispositivi audio elencati", - "settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "Disattiva tutti i dispositivi audio tranne quelli elencati", - "settings.mute.manage-endpoints.endpoints.title": "Dispositivi audio", - "settings.mute.manage-endpoints.add-edit.add-title": "Aggiungi dispositivi audio", - "settings.mute.manage-endpoints.add-edit.edit-title": "Modifica dispositivi audio", - "settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "Inserisci un nome per il dispositivo audio", - "settings.mute.manage-endpoints.add-edit.endpoint-name-label": "Nome dispositivo audio:", - "about.title": "Info su WinMute", - "about.general.author-site-label": "Autore: www.lx-s.de", - "about.general.project-site-label": "Sito e codice del progetto", - "about.general.support-label": "Supporto", - "about.general.description": "WinMute è sviluppato da Alexander Steinhoefer nel suo tempo libero.\nIl codice e le nuove versioni di questo strumento sono disponibili su GitHub.\nI contributi sotto forma di codice, ticket o richieste di funzionalità sono molto graditi.\nGrazie per l'uso di questo piccolo strumento!", - "about.tab.winmute": "WinMute", - "about.tab.license": "Licenza", - "about.btn-close": "OK", - "settings.wifi.mute-when-in-list": "Disattiva audio se la rete WLAN è in elenco", - "popup.update-available.text": "La versione installata è {}.\nFai clic su questo messaggio per aprire la pagina di download.", - "popup.update-available-beta.title": "È disponibile WinMute Beta {}!", - "settings.general.check-for-updates-on-start": "All'avvio verifica la presenza di nuovi aggiornamenti", - "popup.update-available-beta.text": "La versione attuale è {}.\nFai clic su questo messaggio per aprire la pagina di download della versione beta.", - "popup.error.update-check-failed.title": "Controllo aggiornamenti non riuscito.", - "popup.update-available.title": "È disponibile WinMute {}!", - "pupup.error.update-check-failed.text": "Impossibile verificare la disponibilità di una nuova versione.\nPer ulteriori dettagli controlla/abilita la registrazione eventi.", - "settings.general.check-for-beta-updates-on-start": "Controlla anche disponibilità nuove versioni beta", - "settings.general.help-translating": "Aiuta nella traduzione", - "settings.general.updates-handled-externally": "Opzioni disabilitate: aggiornamenti gestiti esternamente" + "meta.lang.name": "Italiano (Italian)", + "meta.lang.mode": "ltr", + "init.error.settings.title": "Impossibile inizializzare le impostazioni", + "init.error.settings.text": "Errore critico durante l'inizializzazione di WinMute", + "init.error.already-running.title": "WinMute è già in esecuzione", + "init.error.already-running.text": "Cerca l'icona dell'applicazione WinMutes nell'area di notifica della barra delle applicazioni di Windows.", + "init.error.winmute.title": "Impossibile avviare WinMute.", + "init.error.winmute.text": "WinMute durante l'inizializzazione ha riscontrato un errore critico ed è necessario chiudere l'applicazione.", + "init.error.winmute.platform-support.title": "È supportato solo Windows Vista e versioni successive", + "init.error.winmute.platform-support.text": "Se hai bisogno del supporto per Windows XP, scarica WinMute versione 1.4.2 o precedente.", + "general.error.winapi.text": "{} non riuscito con errore {}: {}", + "general.error.audio-service-shutdown.title": "Il servizio audio è stato chiuso.", + "general.error.audio-service-shutdown.text": "WinMute non è in grado di recuperare da tale condizione.\nProva a riavviare il programma.", + "popup.remote-session-detected.title": "Rilevata sessione remota", + "popup.remote-session-detected.text": "Tutti i dispositivi audio sono stati disattivati", + "popup.bluetooth-muting-disabled.title": "Disabilitazione audio Bluetooth disattivata", + "popup.bluetooth-muting-disabled.text": "Il Bluetooth non è disponibile o è disabilitato.\nIn questo computer la disabilitazione dell'audio Bluetooth verrà disattivata.", + "popup.wlan-muting-disabled.title": "Disabilitazione audio WLAN disattivata", + "popup.wlan-muting-disabled.text": "La WLAN non è disponibile o è disabilitata. \nIn questo computer la disabilitazione dell'audio WLAN verrà disattivata.", + "popup.quiet-hours-started.title": "Cominciano le ore tranquille", + "popup.quiet-hours-started.text": "L'audio del computer verrà ora disattivato.", + "popup.quiet-hours-ended.title": "Ore tranquille terminate", + "popup.quiet-hours-ended.text": "L'audio del computer è stato riattivato.", + "popup.workstation-muted.title": "Audio computer OFF", + "popup.wlan-not-on-mute-list.text": "La rete WLAN \"{}\" non è nell'elenco consentito.", + "popup.wlan-is-on-mute-list.text": "La rete WLAN \"{}\" è configurata per la disabilitazione audio automatica.", + "popup.muting-workstation-after-delay.title": "Ritardo disattivazione audio computer", + "popup.muting-workstation-after-delay.text": "Tutti i dispositivi audio sono stati disattivati", + "popup.volume-restored.title": "Volume ripristinato", + "popup.volume-restored.text": "Tutti i dispositivi audio sono stati ripristinati alla loro configurazione precedente", + "popup.muting-workstation.title": "Audio OFF computer", + "popup.muting-workstation.text": "Tutti i dispositivi audio sono stati disattivati", + "popup.error.quiet-hours-start.title": "Avvio ore tranquille", + "popup.error.quiet-hours-start.text": "Impossibile registrare l'inizio delle ore di silenzio con il timer di sistema di Windows", + "popup.error.quiet-hours-stop.title": "Fine ore silenzio", + "popup.error.quiet-hours-stop.text": "Impossibile registrare la fine delle ore di silenzio con il timer di sistema di Windows", + "traymenu.info": "Info programma", + "traymenu.mute-when": "Audio OFF quando...", + "traymenu.mute-on-lock": "... il computer viene bloccato", + "traymenu.mute-on-screen-suspend": "... lo schermo verrà spento", + "traymenu.restore-volume": "Ripristina il volume in seguito", + "traymenu.mute-no-restore": "Disattiva audio (nessun ripristino volume) quando...", + "traymenu.mute-on-shutdown": "... il computer viene spento", + "traymenu.mute-on-sleep": "... il computer va in sospensione", + "traymenu.mute-on-logout": "... l'utente si scollega", + "traymenu.mute-all-devices": "Disattiva audio per tutti i dispositivi", + "traymenu.settings": "Impostazioni...", + "traymenu.exit": "Esci", + "settings.title": "Impostazioni", + "settings.btn-save": "Salva", + "settings.btn-cancel": "Annulla", + "settings.btn-add": "Aggiungi", + "settings.btn-edit": "Modifica", + "settings.btn-remove": "Rimuovi", + "settings.btn-remove-all": "Rimuovi tutto", + "settings.tab.general": "Generale", + "settings.tab.mute": "Disattiva audio", + "settings.tab.quiet-hours": "Ore silenzio", + "settings.tab.bluetooth": "Bluetooth", + "settings.tab.wifi": "WLAN", + "settings.bluetooth.add-edit.add-title": "Aggiungi dispositivo Bluetooth", + "settings.bluetooth.add-edit.edit-title": "Modifica dispositivo Bluetooth", + "settings.bluetooth.add-edit.device-name-label": "Nome dispositivo Bluetooth:", + "settings.general.run-on-startup": "Esegui WinMute all'accesso dell'utente", + "settings.general.enable-logging": "Abilita registrazione eventi", + "settings.general.btn-open-log-file": "Apri file registro eventi...", + "settings.general.select-language-label": "Lingua", + "settings.bluetooth.add-edit.enter-device-name-placeholder": "Inserisci il nome di un dispositivo Bluetooth", + "settings.bluetooth.description": "\"Audio OFF Bluetooth\" consente di disattivare l'audio se un dispositivo Bluetooth di classe audio viene disconnesso e di riattivare l'audio se un dispositivo Bluetooth viene ricollegato al computer.\n\nPuoi abilitare questo comportamento per tutti i dispositivi audio Bluetooth o solo per un set specifico di dispositivi.", + "settings.bluetooth.enable-muting": "Abilita disabilitazione audio basata su hardware Bluetooth", + "settings.bluetooth.enable-muting-filter": "Abilita solo per questi dispositivi:", + "settings.bluetooth.bluetooth-disabled-info": "Nota: il Bluetooth non è disponibile nel dispositivo, quindi alcune opzioni sono state disabilitate.", + "settings.mute.general-title": "Generale", + "settings.mute.show-mute-event-notifications": "Visualizza notifiche eventi disattivazione", + "settings.mute.manage-endpoints-individually": "Gestisci i dispositivi audio individualmente", + "settings.mute.btn-manage-endpoints": "Gestisci dispositivi audio...", + "settings.mute.mute-with-restore.title": "Disattiva audio con ripristino del volume, quando...", + "settings.mute.mute-with-restore.when-workstation-is-locked": "... il computer viene bloccato", + "settings.mute.mute-with-restore.when-screen-turns-off": "... lo schermo viene spento", + "settings.mute.mute-with-restore.restore-volume": "Ripristina il volume in seguito", + "settings.mute.mute-with-restore.restore-volume-delay-label": "secondi di ritardo prima della disattivazione dell'audio.", + "settings.mute.mute-without-restore.title": "Disattiva l'audio senza ripristinare il volume, quando...", + "settings.mute.mute-without-restore.when-computer-shuts-down": "... il computer viene spento", + "settings.mute.mute-without-restore.when-computer-goes-to-sleep": "... il computer entra in modalità sospensione/ibernazione", + "settings.mute.mute-without-restore.when-user-logs-out": "... l'utente si scollega", + "settings.mute.mute-without-restore.when-rdp-session-starts": "... WinMute è avviato all'interno di una sessione RDP", + "settings.quiet-hours.intro": "Durante le ore di silenzio WinMute disattiva automaticamente i dispositivi audio del computer e li riattiverà successivamente.", + "settings.quiet-hours.enable": "Abilita ore di silenzio", + "settings.quiet-hours.start-time-label": "Orario inizio:", + "settings.quiet-hours.end-time-label": "Orario fine:", + "settings.quiet-hours.force-unmute": "Forza audio ON", + "settings.quiet-hours.force-unmute-description": "Se è attivato 'Forza audio ON', WinMute riattiverà i dispositivi audio durante le ore di silenzio e non prenderà in considerazione se erano già disattivati prima dell'inizio delle ore di silenzio.", + "settings.quiet-hours.show-notifications": "Visualizza notifiche ore di silenzio", + "settings.quiet-hours.error.invalid-time-range.title": "Intervallo temporale non valido", + "settings.quiet-hours.error.invalid-time-range.text": "Non è possibile avviare e arrestare allo stesso orario.\nCorreggi l'intervallo di tempo.", + "settings.quiet-hours.error.error-while-saving.title": "Impossibile salvare le impostazioni delle ore di silenzio", + "settings.quiet-hours.error.error-while-saving.text": "Si è verificato un errore durante il salvataggio delle impostazioni", + "settings.wifi.intro": "'Audio OFF in base a nome rete WLAN' consente di disattivare l'audio del computer in base al nome della rete wireless connessa.", + "settings.wifi.enable": "Abilita disabilitazione audio basata su nome rete WLAN", + "settings.wifi.mute-when-not-in-list": "Disattiva audio se la rete WLAN NON è in elenco", + "settings.wifi.wifi-disabled-info": "Nota: la WLAN non è disponibile nel dispositivo, quindi alcune opzioni sono state disabilitate.", + "settings.wifi.add-edit.add-title": "Aggiungi rete WiFi", + "settings.wifi.add-edit.edit-title": "Modifica rete WiFi", + "settings.wifi.add-edit.ssid-name-label": "Nome SSID/WiFi:", + "settings.wifi.add-edit.enter-device-name-placeholder": "Inserisci un nome SSID/WiFi", + "settings.mute.manage-endpoints.title": "Gestisci dispositivi audio", + "settings.mute.manage-endpoints.list-behaviour.title": "Generale", + "settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "Disattiva solo i dispositivi audio elencati", + "settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "Disattiva tutti i dispositivi audio tranne quelli elencati", + "settings.mute.manage-endpoints.endpoints.title": "Dispositivi audio", + "settings.mute.manage-endpoints.add-edit.add-title": "Aggiungi dispositivi audio", + "settings.mute.manage-endpoints.add-edit.edit-title": "Modifica dispositivi audio", + "settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "Inserisci un nome per il dispositivo audio", + "settings.mute.manage-endpoints.add-edit.endpoint-name-label": "Nome dispositivo audio:", + "about.title": "Info su WinMute", + "about.general.author-site-label": "Autore: www.lx-s.de", + "about.general.project-site-label": "Sito e codice del progetto", + "about.general.support-label": "Supporto", + "about.general.description": "WinMute è sviluppato da Alexander Steinhoefer nel suo tempo libero.\nIl codice e le nuove versioni di questo strumento sono disponibili su GitHub.\nI contributi sotto forma di codice, ticket o richieste di funzionalità sono molto graditi.\nGrazie per l'uso di questo piccolo strumento!", + "about.tab.winmute": "WinMute", + "about.tab.license": "Licenza", + "about.btn-close": "OK", + "settings.wifi.mute-when-in-list": "Disattiva audio se la rete WLAN è in elenco", + "popup.update-available.text": "La versione installata è {}.\nFai clic su questo messaggio per aprire la pagina di download.", + "popup.update-available-beta.title": "È disponibile WinMute Beta {}!", + "settings.general.check-for-updates-on-start": "All'avvio verifica la presenza di nuovi aggiornamenti", + "popup.update-available-beta.text": "La versione attuale è {}.\nFai clic su questo messaggio per aprire la pagina di download della versione beta.", + "popup.error.update-check-failed.title": "Controllo aggiornamenti non riuscito.", + "popup.update-available.title": "È disponibile WinMute {}!", + "pupup.error.update-check-failed.text": "Impossibile verificare la disponibilità di una nuova versione.\nPer ulteriori dettagli controlla/abilita la registrazione eventi.", + "settings.general.check-for-beta-updates-on-start": "Controlla anche disponibilità nuove versioni beta", + "settings.general.help-translating": "Aiuta nella traduzione", + "settings.general.updates-handled-externally": "Opzioni disabilitate: aggiornamenti gestiti esternamente", + "log.title": "WinMute Registro Eventi" } diff --git a/Translations/lang-nl.json b/Translations/lang-nl.json index 9ac058f..dcbee7d 100644 --- a/Translations/lang-nl.json +++ b/Translations/lang-nl.json @@ -1,134 +1,135 @@ { - "meta.lang.name": "Nederlands (Dutch)", - "meta.lang.mode": "ltr", - "init.error.settings.title": "De instellingen kunnen niet worden geladen", - "init.error.settings.text": "Er is een kritieke fout opgetreden tijdens het starten", - "init.error.already-running.title": "WinMute is al actief", - "init.error.already-running.text": "Zoek naar het WinMute-pictogram in het systeemvak van de Windows-taakbalk.", - "init.error.winmute.title": "WinMute kan niet worden gestart.", - "init.error.winmute.text": "Er is een kritieke fout opgetreden waardoor WinMute dient te worden afgesloten.", - "init.error.winmute.platform-support.title": "Windows Vista of nieuwer vereist", - "init.error.winmute.platform-support.text": "Als u Windows XP-ondersteuning wilt, download dan WinMute 1.4.2 of ouder.", - "general.error.winapi.text": "{} mislukt met foutmelding {}: {}", - "general.error.audio-service-shutdown.title": "De audiodienst is afgesloten.", - "general.error.audio-service-shutdown.text": "WinMute kan niet worden hersteld.\nHerstart het programma.", - "popup.remote-session-detected.title": "Externe sessie aangetroffen", - "popup.remote-session-detected.text": "Alle audio-apparaten zijn gedempt", - "popup.bluetooth-muting-disabled.title": "Bluetoothdemping is uitgeschakeld", - "popup.bluetooth-muting-disabled.text": "Bluetooth is uitgeschakeld of niet beschikbaar.\nBluetoothdemping wordt daarom uitgeschakeld.", - "popup.wlan-muting-disabled.title": "WLAN-demping is uitgeschakeld", - "popup.wlan-muting-disabled.text": "WLAN is niet beschikbaar of uitgeschakeld.\nWLAN muting wordt uitgeschakeld op deze computer.", - "popup.quiet-hours-started.title": "Stille uren gestart", - "popup.quiet-hours-started.text": "Computergeluid wordt nu gedempt.", - "popup.quiet-hours-ended.title": "Stille uren beëindigd", - "popup.quiet-hours-ended.text": "Computer audio is hersteld.", - "popup.workstation-muted.title": "Audio gedempt", - "popup.wlan-not-on-mute-list.text": "WLAN network \"{}\" staat niet in de lijst van toegestane.", - "popup.wlan-is-on-mute-list.text": "WLAN network \"{}\" is geconfigureerd voor AutoMute.", - "popup.muting-workstation-after-delay.title": "Computer stil na wachttijd", - "popup.muting-workstation-after-delay.text": "Alle apparaten werden gedempt", - "popup.volume-restored.title": "Volume hersteld", - "popup.volume-restored.text": "Alle apparaten werden teruggezet naar hun vorige configuratie", - "popup.muting-workstation.title": "Computer dempen", - "popup.muting-workstation.text": "Alle apparaten werden gedempt", - "popup.error.quiet-hours-start.title": "Stille uren start", - "popup.error.quiet-hours-start.text": "Registratie van stille uren starttijd met windows timer systeem mislukt", - "popup.error.quiet-hours-stop.title": "Stille uren stop", - "popup.error.quiet-hours-stop.text": "Registratie van stille uren eindtijd met windows timer systeem mislukt", - "traymenu.info": "Over", - "traymenu.mute-when": "Dempen wanneer…", - "traymenu.mute-on-lock": "… computer vergrendeld is", - "traymenu.mute-on-screen-suspend": "… scherm uitschakelt", - "traymenu.restore-volume": "Nadien volume herstellen", - "traymenu.mute-no-restore": "Dempen bij (geen volume herstellen)…", - "traymenu.mute-on-shutdown": "… uitschakelen", - "traymenu.mute-on-sleep": "… slaapstand", - "traymenu.mute-on-logout": "… afmelden", - "traymenu.mute-all-devices": "Nu alle apparaten dempen", - "traymenu.settings": "Instellingen…", - "traymenu.exit": "Verlaat", - "settings.title": "Instellingen", - "settings.btn-save": "Opslaan", - "settings.btn-cancel": "Annuleren", - "settings.btn-add": "Toevoegen", - "settings.btn-edit": "Wijzigen", - "settings.btn-remove": "Verwijderen", - "settings.btn-remove-all": "Verwijder alles", - "settings.tab.general": "Algemeen", - "settings.tab.mute": "Dempen", - "settings.tab.quiet-hours": "Stille uren", - "settings.tab.bluetooth": "Bluetooth", - "settings.tab.wifi": "WLAN", - "settings.bluetooth.add-edit.add-title": "Bluetoothapparaat toevoegen", - "settings.bluetooth.add-edit.edit-title": "Bluetoothapparaat wijzigen", - "settings.bluetooth.add-edit.device-name-label": "Naam Bluetoothapparaat:", - "settings.general.run-on-startup": "WinMute starten wanneer deze gebruiker aanmeldt", - "settings.general.enable-logging": "Logging inschakelen", - "settings.general.btn-open-log-file": "Logbestand openen…", - "settings.general.select-language-label": "Taal", - "settings.bluetooth.add-edit.enter-device-name-placeholder": "Geef de naam van een Bluetoothapparaat op", - "settings.bluetooth.description": "", - "settings.bluetooth.enable-muting": "", - "settings.bluetooth.enable-muting-filter": "", - "settings.bluetooth.bluetooth-disabled-info": "", - "settings.mute.general-title": "", - "settings.mute.show-mute-event-notifications": "", - "settings.mute.manage-endpoints-individually": "", - "settings.mute.btn-manage-endpoints": "", - "settings.mute.mute-with-restore.title": "", - "settings.mute.mute-with-restore.when-workstation-is-locked": "", - "settings.mute.mute-with-restore.when-screen-turns-off": "", - "settings.mute.mute-with-restore.restore-volume": "", - "settings.mute.mute-with-restore.restore-volume-delay-label": "", - "settings.mute.mute-without-restore.title": "", - "settings.mute.mute-without-restore.when-computer-shuts-down": "", - "settings.mute.mute-without-restore.when-computer-goes-to-sleep": "", - "settings.mute.mute-without-restore.when-user-logs-out": "", - "settings.mute.mute-without-restore.when-rdp-session-starts": "", - "settings.quiet-hours.intro": "", - "settings.quiet-hours.enable": "", - "settings.quiet-hours.start-time-label": "", - "settings.quiet-hours.end-time-label": "", - "settings.quiet-hours.force-unmute": "", - "settings.quiet-hours.force-unmute-description": "", - "settings.quiet-hours.show-notifications": "", - "settings.quiet-hours.error.invalid-time-range.title": "", - "settings.quiet-hours.error.invalid-time-range.text": "", - "settings.quiet-hours.error.error-while-saving.title": "", - "settings.quiet-hours.error.error-while-saving.text": "", - "settings.wifi.intro": "", - "settings.wifi.enable": "", - "settings.wifi.mute-when-not-in-list": "", - "settings.wifi.wifi-disabled-info": "", - "settings.wifi.add-edit.add-title": "", - "settings.wifi.add-edit.edit-title": "", - "settings.wifi.add-edit.ssid-name-label": "", - "settings.wifi.add-edit.enter-device-name-placeholder": "", - "settings.mute.manage-endpoints.title": "", - "settings.mute.manage-endpoints.list-behaviour.title": "", - "settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "", - "settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "", - "settings.mute.manage-endpoints.endpoints.title": "", - "settings.mute.manage-endpoints.add-edit.add-title": "", - "settings.mute.manage-endpoints.add-edit.edit-title": "", - "settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "", - "settings.mute.manage-endpoints.add-edit.endpoint-name-label": "", - "about.title": "", - "about.general.author-site-label": "", - "about.general.project-site-label": "", - "about.general.support-label": "", - "about.general.description": "", - "about.tab.winmute": "", - "about.tab.license": "", - "about.btn-close": "", - "settings.general.help-translating": "Help met vertalen", - "settings.general.check-for-updates-on-start": "Nieuwe updates zoeken bij opstarten", - "popup.update-available.title": "WinMute {} is beschikbaar!", - "popup.update-available-beta.title": "WinMute Beta {} is beschikbaar!", - "popup.update-available-beta.text": "Uw huidige versie is {}\nKlik op dit bericht om de beta-downloadpagina te openen.", - "popup.error.update-check-failed.title": "Update check mislukt.", - "pupup.error.update-check-failed.text": "Kon niet controleren of er een nieuwe versie is.\nKijk de logs na of schakel logging in voor meer details.", - "settings.general.check-for-beta-updates-on-start": "Ook zoeken naar betaversies", - "settings.general.updates-handled-externally": "Opties uitgeschakeld: updates worden extern afgehandeld", - "popup.update-available.text": "De geïnstalleerde versie is {}.\nKlik op dit bericht om de downloadpagina te openen." + "meta.lang.name": "Nederlands (Dutch)", + "meta.lang.mode": "ltr", + "init.error.settings.title": "De instellingen kunnen niet worden geladen", + "init.error.settings.text": "Er is een kritieke fout opgetreden tijdens het starten", + "init.error.already-running.title": "WinMute is al actief", + "init.error.already-running.text": "Zoek naar het WinMute-pictogram in het systeemvak van de Windows-taakbalk.", + "init.error.winmute.title": "WinMute kan niet worden gestart.", + "init.error.winmute.text": "Er is een kritieke fout opgetreden waardoor WinMute dient te worden afgesloten.", + "init.error.winmute.platform-support.title": "Windows Vista of nieuwer vereist", + "init.error.winmute.platform-support.text": "Als u Windows XP-ondersteuning wilt, download dan WinMute 1.4.2 of ouder.", + "general.error.winapi.text": "{} mislukt met foutmelding {}: {}", + "general.error.audio-service-shutdown.title": "De audiodienst is afgesloten.", + "general.error.audio-service-shutdown.text": "WinMute kan niet worden hersteld.\nHerstart het programma.", + "popup.remote-session-detected.title": "Externe sessie aangetroffen", + "popup.remote-session-detected.text": "Alle audio-apparaten zijn gedempt", + "popup.bluetooth-muting-disabled.title": "Bluetoothdemping is uitgeschakeld", + "popup.bluetooth-muting-disabled.text": "Bluetooth is uitgeschakeld of niet beschikbaar.\nBluetoothdemping wordt daarom uitgeschakeld.", + "popup.wlan-muting-disabled.title": "WLAN-demping is uitgeschakeld", + "popup.wlan-muting-disabled.text": "WLAN is niet beschikbaar of uitgeschakeld.\nWLAN muting wordt uitgeschakeld op deze computer.", + "popup.quiet-hours-started.title": "Stille uren gestart", + "popup.quiet-hours-started.text": "Computergeluid wordt nu gedempt.", + "popup.quiet-hours-ended.title": "Stille uren beëindigd", + "popup.quiet-hours-ended.text": "Computer audio is hersteld.", + "popup.workstation-muted.title": "Audio gedempt", + "popup.wlan-not-on-mute-list.text": "WLAN network \"{}\" staat niet in de lijst van toegestane.", + "popup.wlan-is-on-mute-list.text": "WLAN network \"{}\" is geconfigureerd voor AutoMute.", + "popup.muting-workstation-after-delay.title": "Computer stil na wachttijd", + "popup.muting-workstation-after-delay.text": "Alle apparaten werden gedempt", + "popup.volume-restored.title": "Volume hersteld", + "popup.volume-restored.text": "Alle apparaten werden teruggezet naar hun vorige configuratie", + "popup.muting-workstation.title": "Computer dempen", + "popup.muting-workstation.text": "Alle apparaten werden gedempt", + "popup.error.quiet-hours-start.title": "Stille uren start", + "popup.error.quiet-hours-start.text": "Registratie van stille uren starttijd met windows timer systeem mislukt", + "popup.error.quiet-hours-stop.title": "Stille uren stop", + "popup.error.quiet-hours-stop.text": "Registratie van stille uren eindtijd met windows timer systeem mislukt", + "traymenu.info": "Over", + "traymenu.mute-when": "Dempen wanneer…", + "traymenu.mute-on-lock": "… computer vergrendeld is", + "traymenu.mute-on-screen-suspend": "… scherm uitschakelt", + "traymenu.restore-volume": "Nadien volume herstellen", + "traymenu.mute-no-restore": "Dempen bij (geen volume herstellen)…", + "traymenu.mute-on-shutdown": "… uitschakelen", + "traymenu.mute-on-sleep": "… slaapstand", + "traymenu.mute-on-logout": "… afmelden", + "traymenu.mute-all-devices": "Nu alle apparaten dempen", + "traymenu.settings": "Instellingen…", + "traymenu.exit": "Verlaat", + "settings.title": "Instellingen", + "settings.btn-save": "Opslaan", + "settings.btn-cancel": "Annuleren", + "settings.btn-add": "Toevoegen", + "settings.btn-edit": "Wijzigen", + "settings.btn-remove": "Verwijderen", + "settings.btn-remove-all": "Verwijder alles", + "settings.tab.general": "Algemeen", + "settings.tab.mute": "Dempen", + "settings.tab.quiet-hours": "Stille uren", + "settings.tab.bluetooth": "Bluetooth", + "settings.tab.wifi": "WLAN", + "settings.bluetooth.add-edit.add-title": "Bluetoothapparaat toevoegen", + "settings.bluetooth.add-edit.edit-title": "Bluetoothapparaat wijzigen", + "settings.bluetooth.add-edit.device-name-label": "Naam Bluetoothapparaat:", + "settings.general.run-on-startup": "WinMute starten wanneer deze gebruiker aanmeldt", + "settings.general.enable-logging": "Logging inschakelen", + "settings.general.btn-open-log-file": "Logbestand openen…", + "settings.general.select-language-label": "Taal", + "settings.bluetooth.add-edit.enter-device-name-placeholder": "Geef de naam van een Bluetoothapparaat op", + "settings.bluetooth.description": "", + "settings.bluetooth.enable-muting": "", + "settings.bluetooth.enable-muting-filter": "", + "settings.bluetooth.bluetooth-disabled-info": "", + "settings.mute.general-title": "", + "settings.mute.show-mute-event-notifications": "", + "settings.mute.manage-endpoints-individually": "", + "settings.mute.btn-manage-endpoints": "", + "settings.mute.mute-with-restore.title": "", + "settings.mute.mute-with-restore.when-workstation-is-locked": "", + "settings.mute.mute-with-restore.when-screen-turns-off": "", + "settings.mute.mute-with-restore.restore-volume": "", + "settings.mute.mute-with-restore.restore-volume-delay-label": "", + "settings.mute.mute-without-restore.title": "", + "settings.mute.mute-without-restore.when-computer-shuts-down": "", + "settings.mute.mute-without-restore.when-computer-goes-to-sleep": "", + "settings.mute.mute-without-restore.when-user-logs-out": "", + "settings.mute.mute-without-restore.when-rdp-session-starts": "", + "settings.quiet-hours.intro": "", + "settings.quiet-hours.enable": "", + "settings.quiet-hours.start-time-label": "", + "settings.quiet-hours.end-time-label": "", + "settings.quiet-hours.force-unmute": "", + "settings.quiet-hours.force-unmute-description": "", + "settings.quiet-hours.show-notifications": "", + "settings.quiet-hours.error.invalid-time-range.title": "", + "settings.quiet-hours.error.invalid-time-range.text": "", + "settings.quiet-hours.error.error-while-saving.title": "", + "settings.quiet-hours.error.error-while-saving.text": "", + "settings.wifi.intro": "", + "settings.wifi.enable": "", + "settings.wifi.mute-when-not-in-list": "", + "settings.wifi.wifi-disabled-info": "", + "settings.wifi.add-edit.add-title": "", + "settings.wifi.add-edit.edit-title": "", + "settings.wifi.add-edit.ssid-name-label": "", + "settings.wifi.add-edit.enter-device-name-placeholder": "", + "settings.mute.manage-endpoints.title": "", + "settings.mute.manage-endpoints.list-behaviour.title": "", + "settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "", + "settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "", + "settings.mute.manage-endpoints.endpoints.title": "", + "settings.mute.manage-endpoints.add-edit.add-title": "", + "settings.mute.manage-endpoints.add-edit.edit-title": "", + "settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "", + "settings.mute.manage-endpoints.add-edit.endpoint-name-label": "", + "about.title": "", + "about.general.author-site-label": "", + "about.general.project-site-label": "", + "about.general.support-label": "", + "about.general.description": "", + "about.tab.winmute": "", + "about.tab.license": "", + "about.btn-close": "", + "settings.general.help-translating": "Help met vertalen", + "settings.general.check-for-updates-on-start": "Nieuwe updates zoeken bij opstarten", + "popup.update-available.title": "WinMute {} is beschikbaar!", + "popup.update-available-beta.title": "WinMute Beta {} is beschikbaar!", + "popup.update-available-beta.text": "Uw huidige versie is {}\nKlik op dit bericht om de beta-downloadpagina te openen.", + "popup.error.update-check-failed.title": "Update check mislukt.", + "pupup.error.update-check-failed.text": "Kon niet controleren of er een nieuwe versie is.\nKijk de logs na of schakel logging in voor meer details.", + "settings.general.check-for-beta-updates-on-start": "Ook zoeken naar betaversies", + "settings.general.updates-handled-externally": "Opties uitgeschakeld: updates worden extern afgehandeld", + "popup.update-available.text": "De geïnstalleerde versie is {}.\nKlik op dit bericht om de downloadpagina te openen.", + "log.title": "WinMute Notulen" } diff --git a/Translations/lang-zh_Hans.json b/Translations/lang-zh_Hans.json index 9a274ef..406421f 100644 --- a/Translations/lang-zh_Hans.json +++ b/Translations/lang-zh_Hans.json @@ -1,135 +1,136 @@ { - "meta.lang.name": "简体中文[囍]", - "meta.lang.mode": "ltr", - "init.error.settings.title": "未能初始化设置", - "init.error.settings.text": "初始化WinMute时出现严重错误", - "init.error.already-running.title": "WinMute已在运行", - "init.error.already-running.text": "请在Windows任务栏通知区域中查找winmutes应用程序图标.", - "init.error.winmute.title": "无法启动WinMute.", - "init.error.winmute.text": "WinMute在初始化时遇到严重错误,自动关闭.", - "init.error.winmute.platform-support.title": "仅支持Windows Vista及更新版本", - "init.error.winmute.platform-support.text": "如果需要Windows XP支持,请下载WinMute 1.4.2或更低版本.", - "general.error.winapi.text": "{} 失败,出现错误 {}: {}", - "general.error.audio-service-shutdown.title": "音频服务已关闭.", - "general.error.audio-service-shutdown.text": "WinMute无法从这种情况下恢复.\n请尝试重新启动程序.", - "popup.update-available.title": "WinMute {} 可用!", - "popup.update-available.text": "安装的版本为{}.\n点击本消息打开下载页面.", - "popup.update-available-beta.title": "WinMute Beta {} 可用!", - "popup.update-available-beta.text": "您的当前版本是 {}.\n单击本消息打开测试版下载页面.", - "popup.error.update-check-failed.title": "更新检查失败.", - "pupup.error.update-check-failed.text": "无法检查新版本.\n请检查/启用日志记录以了解更多详细信息.", - "popup.remote-session-detected.title": "检测到远程会话", - "popup.remote-session-detected.text": "所有音频设备都已静音", - "popup.bluetooth-muting-disabled.title": "蓝牙静音已禁用", - "popup.bluetooth-muting-disabled.text": "蓝牙不可用或已禁用.\n将在此电脑上禁用蓝牙静音.", - "popup.wlan-muting-disabled.title": "WLAN静音已禁用", - "popup.wlan-muting-disabled.text": "WLAN不可用或已禁用.\n将在此电脑上禁用WLAN静音.", - "popup.quiet-hours-started.title": "静音计划任务开启", - "popup.quiet-hours-started.text": "电脑音频立即静音.", - "popup.quiet-hours-ended.title": "静音计划任务结束", - "popup.quiet-hours-ended.text": "电脑声音已恢复.", - "popup.workstation-muted.title": "静音", - "popup.wlan-not-on-mute-list.text": "WLAN网络 \"{}\" 不在允许的列表中.", - "popup.wlan-is-on-mute-list.text": "WLAN 网格 \"{}\" 配置为“自动静音”.", - "popup.muting-workstation-after-delay.title": "延迟后使电脑静音", - "popup.muting-workstation-after-delay.text": "所有设备都已静音", - "popup.volume-restored.title": "音量恢复", - "popup.volume-restored.text": "所有设备都已恢复到以前的配置", - "popup.muting-workstation.title": "电脑静音", - "popup.muting-workstation.text": "所有设备都已静音", - "popup.error.quiet-hours-start.title": "静音计划任务开启", - "popup.error.quiet-hours-start.text": "无法使用Windows计时器系统注册静音时间启动", - "popup.error.quiet-hours-stop.title": "静音计划任务停止", - "popup.error.quiet-hours-stop.text": "无法使用Windows计时器系统注册静音时间停止", - "traymenu.info": "=关于=", - "traymenu.mute-when": "触发静音条件...", - "traymenu.mute-on-lock": "系统锁定后 静音", - "traymenu.mute-on-screen-suspend": "显示器关闭后 静音", - "traymenu.restore-volume": "自动恢复音量", - "traymenu.mute-no-restore": "静音后(执行)...", - "traymenu.mute-on-shutdown": "=关机=", - "traymenu.mute-on-sleep": "=休眠=", - "traymenu.mute-on-logout": "=注销=", - "traymenu.mute-all-devices": "立即将所有设备静音", - "traymenu.settings": "=设置=", - "traymenu.exit": "=退出=", - "settings.title": "=设置=", - "settings.btn-save": "保存", - "settings.btn-cancel": "取消", - "settings.btn-add": "增加", - "settings.btn-edit": "编辑", - "settings.btn-remove": "清除", - "settings.btn-remove-all": "全清", - "settings.tab.general": "通用", - "settings.tab.mute": "静音前后", - "settings.tab.quiet-hours": "计划任务", - "settings.tab.bluetooth": "蓝牙控制", - "settings.tab.wifi": "WLAN控制", - "settings.bluetooth.add-edit.add-title": "添加蓝牙设备", - "settings.bluetooth.add-edit.edit-title": "编辑蓝牙设备", - "settings.bluetooth.add-edit.device-name-label": "蓝牙设备名称:", - "settings.general.run-on-startup": "开机启动WinMute", - "settings.general.check-for-updates-on-start": "启动时检查新更新", - "settings.general.check-for-beta-updates-on-start": "同时检查新的测试版", - "settings.general.updates-handled-externally": "禁用选项:外部处理更新", - "settings.general.enable-logging": "开启日志记录", - "settings.general.btn-open-log-file": "打开日志记录...", - "settings.general.select-language-label": "语言:", - "settings.general.help-translating": "帮助翻译", - "settings.bluetooth.add-edit.enter-device-name-placeholder": "请输入蓝牙设备名称", - "settings.bluetooth.description": "“蓝牙静音”允许在音频类蓝牙设备断开连接时禁用音频,并在设备重新连接到电脑时重新启用音频.\n\n此行为可以为所有蓝牙音频设备启用,也可以仅为特定的一组启用.", - "settings.bluetooth.enable-muting": "开启蓝牙静音功能", - "settings.bluetooth.enable-muting-filter": "仅对以下设备启用:", - "settings.bluetooth.bluetooth-disabled-info": "注意:此设备不支持蓝牙.\n某些选项已被禁用.", - "settings.mute.general-title": "通用", - "settings.mute.show-mute-event-notifications": "显示静音事件通知", - "settings.mute.manage-endpoints-individually": "单独管理音频设备", - "settings.mute.btn-manage-endpoints": "设备管理...", - "settings.mute.mute-with-restore.title": "启动静音条件...", - "settings.mute.mute-with-restore.when-workstation-is-locked": "系统锁定后启动 静音", - "settings.mute.mute-with-restore.when-screen-turns-off": "显示器关闭时启动 静音", - "settings.mute.mute-with-restore.restore-volume": "自动恢复音量", - "settings.mute.mute-with-restore.restore-volume-delay-label": "秒后静音.(\"0\"值为立即静音)", - "settings.mute.mute-without-restore.title": "静音后执行下列操作...", - "settings.mute.mute-without-restore.when-computer-shuts-down": "=关机=", - "settings.mute.mute-without-restore.when-computer-goes-to-sleep": "=休眠=", - "settings.mute.mute-without-restore.when-user-logs-out": "=注销=", - "settings.mute.mute-without-restore.when-rdp-session-starts": "WinMute在远程桌面会话 (RDP) 中启动", - "settings.quiet-hours.intro": "在指定时间内,WinMute自动进入静音,然后自动恢复.", - "settings.quiet-hours.enable": "启用静音计划任务", - "settings.quiet-hours.start-time-label": "开始时间:", - "settings.quiet-hours.end-time-label": "结束时间:", - "settings.quiet-hours.force-unmute": "强制取消静音", - "settings.quiet-hours.force-unmute-description": "如果启动强制取消静音,WinMute将在静单时间结束时取消电脑音频设备的静音,而不考虑它们在静单时间开始前是否已经静音.", - "settings.quiet-hours.show-notifications": "显示静音时间通知", - "settings.quiet-hours.error.invalid-time-range.title": "无效的时间范围", - "settings.quiet-hours.error.invalid-time-range.text": "启动和停止时间不能相同.", - "settings.quiet-hours.error.error-while-saving.title": "无法保存安静时间设置", - "settings.quiet-hours.error.error-while-saving.text": "保存设置时出错", - "settings.wifi.intro": "“WLAN静音”根据连接的无线网络的名称使电脑静音。", - "settings.wifi.enable": "启用基于WLAN的静音", - "settings.wifi.mute-when-in-list": "如果已连接的WLAN在列表中,则静音", - "settings.wifi.mute-when-not-in-list": "如果已连接的WLAN不在列表中,则静音", - "settings.wifi.wifi-disabled-info": "注意:WLAN在此设备上不可用.\n某些选项已被禁用.", - "settings.wifi.add-edit.add-title": "添加WiFi网络", - "settings.wifi.add-edit.edit-title": "编辑WiFi网络", - "settings.wifi.add-edit.ssid-name-label": "SSID/WiFi 名称:", - "settings.wifi.add-edit.enter-device-name-placeholder": "请输入SSID/WiFi名称", - "settings.mute.manage-endpoints.title": "管理音频设备", - "settings.mute.manage-endpoints.list-behaviour.title": "通用", - "settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "仅对列出的设备静音", - "settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "将列出的设备以外的所有设备静音", - "settings.mute.manage-endpoints.endpoints.title": "设备", - "settings.mute.manage-endpoints.add-edit.add-title": "添加设备", - "settings.mute.manage-endpoints.add-edit.edit-title": "编辑设备", - "settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "请输入设备名称", - "settings.mute.manage-endpoints.add-edit.endpoint-name-label": "设备名称:", - "about.title": "关于WinMute", - "about.general.author-site-label": "官网: www.lx-s.de", - "about.general.project-site-label": "项目GitHub && 代码", - "about.general.support-label": "建议与改进支持", - "about.general.description": "WinMute是由Alexander Steinhoefer在业余时间开发的。该工具的代码和新版本可以在GitHub上找到。非常欢迎以代码、门票或功能请求的形式进行贡献。感谢您使用这个小工具!\n 中文汉化by richzhl-1382232", - "about.tab.winmute": "关于WinMute", - "about.tab.license": "许可证明", - "about.btn-close": "确定" + "meta.lang.name": "简体中文[囍]", + "meta.lang.mode": "ltr", + "init.error.settings.title": "未能初始化设置", + "init.error.settings.text": "初始化WinMute时出现严重错误", + "init.error.already-running.title": "WinMute已在运行", + "init.error.already-running.text": "请在Windows任务栏通知区域中查找winmutes应用程序图标.", + "init.error.winmute.title": "无法启动WinMute.", + "init.error.winmute.text": "WinMute在初始化时遇到严重错误,自动关闭.", + "init.error.winmute.platform-support.title": "仅支持Windows Vista及更新版本", + "init.error.winmute.platform-support.text": "如果需要Windows XP支持,请下载WinMute 1.4.2或更低版本.", + "general.error.winapi.text": "{} 失败,出现错误 {}: {}", + "general.error.audio-service-shutdown.title": "音频服务已关闭.", + "general.error.audio-service-shutdown.text": "WinMute无法从这种情况下恢复.\n请尝试重新启动程序.", + "popup.update-available.title": "WinMute {} 可用!", + "popup.update-available.text": "安装的版本为{}.\n点击本消息打开下载页面.", + "popup.update-available-beta.title": "WinMute Beta {} 可用!", + "popup.update-available-beta.text": "您的当前版本是 {}.\n单击本消息打开测试版下载页面.", + "popup.error.update-check-failed.title": "更新检查失败.", + "pupup.error.update-check-failed.text": "无法检查新版本.\n请检查/启用日志记录以了解更多详细信息.", + "popup.remote-session-detected.title": "检测到远程会话", + "popup.remote-session-detected.text": "所有音频设备都已静音", + "popup.bluetooth-muting-disabled.title": "蓝牙静音已禁用", + "popup.bluetooth-muting-disabled.text": "蓝牙不可用或已禁用.\n将在此电脑上禁用蓝牙静音.", + "popup.wlan-muting-disabled.title": "WLAN静音已禁用", + "popup.wlan-muting-disabled.text": "WLAN不可用或已禁用.\n将在此电脑上禁用WLAN静音.", + "popup.quiet-hours-started.title": "静音计划任务开启", + "popup.quiet-hours-started.text": "电脑音频立即静音.", + "popup.quiet-hours-ended.title": "静音计划任务结束", + "popup.quiet-hours-ended.text": "电脑声音已恢复.", + "popup.workstation-muted.title": "静音", + "popup.wlan-not-on-mute-list.text": "WLAN网络 \"{}\" 不在允许的列表中.", + "popup.wlan-is-on-mute-list.text": "WLAN 网格 \"{}\" 配置为“自动静音”.", + "popup.muting-workstation-after-delay.title": "延迟后使电脑静音", + "popup.muting-workstation-after-delay.text": "所有设备都已静音", + "popup.volume-restored.title": "音量恢复", + "popup.volume-restored.text": "所有设备都已恢复到以前的配置", + "popup.muting-workstation.title": "电脑静音", + "popup.muting-workstation.text": "所有设备都已静音", + "popup.error.quiet-hours-start.title": "静音计划任务开启", + "popup.error.quiet-hours-start.text": "无法使用Windows计时器系统注册静音时间启动", + "popup.error.quiet-hours-stop.title": "静音计划任务停止", + "popup.error.quiet-hours-stop.text": "无法使用Windows计时器系统注册静音时间停止", + "traymenu.info": "=关于=", + "traymenu.mute-when": "触发静音条件...", + "traymenu.mute-on-lock": "系统锁定后 静音", + "traymenu.mute-on-screen-suspend": "显示器关闭后 静音", + "traymenu.restore-volume": "自动恢复音量", + "traymenu.mute-no-restore": "静音后(执行)...", + "traymenu.mute-on-shutdown": "=关机=", + "traymenu.mute-on-sleep": "=休眠=", + "traymenu.mute-on-logout": "=注销=", + "traymenu.mute-all-devices": "立即将所有设备静音", + "traymenu.settings": "=设置=", + "traymenu.exit": "=退出=", + "settings.title": "=设置=", + "settings.btn-save": "保存", + "settings.btn-cancel": "取消", + "settings.btn-add": "增加", + "settings.btn-edit": "编辑", + "settings.btn-remove": "清除", + "settings.btn-remove-all": "全清", + "settings.tab.general": "通用", + "settings.tab.mute": "静音前后", + "settings.tab.quiet-hours": "计划任务", + "settings.tab.bluetooth": "蓝牙控制", + "settings.tab.wifi": "WLAN控制", + "settings.bluetooth.add-edit.add-title": "添加蓝牙设备", + "settings.bluetooth.add-edit.edit-title": "编辑蓝牙设备", + "settings.bluetooth.add-edit.device-name-label": "蓝牙设备名称:", + "settings.general.run-on-startup": "开机启动WinMute", + "settings.general.check-for-updates-on-start": "启动时检查新更新", + "settings.general.check-for-beta-updates-on-start": "同时检查新的测试版", + "settings.general.updates-handled-externally": "禁用选项:外部处理更新", + "settings.general.enable-logging": "开启日志记录", + "settings.general.btn-open-log-file": "打开日志记录...", + "settings.general.select-language-label": "语言:", + "settings.general.help-translating": "帮助翻译", + "settings.bluetooth.add-edit.enter-device-name-placeholder": "请输入蓝牙设备名称", + "settings.bluetooth.description": "“蓝牙静音”允许在音频类蓝牙设备断开连接时禁用音频,并在设备重新连接到电脑时重新启用音频.\n\n此行为可以为所有蓝牙音频设备启用,也可以仅为特定的一组启用.", + "settings.bluetooth.enable-muting": "开启蓝牙静音功能", + "settings.bluetooth.enable-muting-filter": "仅对以下设备启用:", + "settings.bluetooth.bluetooth-disabled-info": "注意:此设备不支持蓝牙.\n某些选项已被禁用.", + "settings.mute.general-title": "通用", + "settings.mute.show-mute-event-notifications": "显示静音事件通知", + "settings.mute.manage-endpoints-individually": "单独管理音频设备", + "settings.mute.btn-manage-endpoints": "设备管理...", + "settings.mute.mute-with-restore.title": "启动静音条件...", + "settings.mute.mute-with-restore.when-workstation-is-locked": "系统锁定后启动 静音", + "settings.mute.mute-with-restore.when-screen-turns-off": "显示器关闭时启动 静音", + "settings.mute.mute-with-restore.restore-volume": "自动恢复音量", + "settings.mute.mute-with-restore.restore-volume-delay-label": "秒后静音.(\"0\"值为立即静音)", + "settings.mute.mute-without-restore.title": "静音后执行下列操作...", + "settings.mute.mute-without-restore.when-computer-shuts-down": "=关机=", + "settings.mute.mute-without-restore.when-computer-goes-to-sleep": "=休眠=", + "settings.mute.mute-without-restore.when-user-logs-out": "=注销=", + "settings.mute.mute-without-restore.when-rdp-session-starts": "WinMute在远程桌面会话 (RDP) 中启动", + "settings.quiet-hours.intro": "在指定时间内,WinMute自动进入静音,然后自动恢复.", + "settings.quiet-hours.enable": "启用静音计划任务", + "settings.quiet-hours.start-time-label": "开始时间:", + "settings.quiet-hours.end-time-label": "结束时间:", + "settings.quiet-hours.force-unmute": "强制取消静音", + "settings.quiet-hours.force-unmute-description": "如果启动强制取消静音,WinMute将在静单时间结束时取消电脑音频设备的静音,而不考虑它们在静单时间开始前是否已经静音.", + "settings.quiet-hours.show-notifications": "显示静音时间通知", + "settings.quiet-hours.error.invalid-time-range.title": "无效的时间范围", + "settings.quiet-hours.error.invalid-time-range.text": "启动和停止时间不能相同.", + "settings.quiet-hours.error.error-while-saving.title": "无法保存安静时间设置", + "settings.quiet-hours.error.error-while-saving.text": "保存设置时出错", + "settings.wifi.intro": "“WLAN静音”根据连接的无线网络的名称使电脑静音。", + "settings.wifi.enable": "启用基于WLAN的静音", + "settings.wifi.mute-when-in-list": "如果已连接的WLAN在列表中,则静音", + "settings.wifi.mute-when-not-in-list": "如果已连接的WLAN不在列表中,则静音", + "settings.wifi.wifi-disabled-info": "注意:WLAN在此设备上不可用.\n某些选项已被禁用.", + "settings.wifi.add-edit.add-title": "添加WiFi网络", + "settings.wifi.add-edit.edit-title": "编辑WiFi网络", + "settings.wifi.add-edit.ssid-name-label": "SSID/WiFi 名称:", + "settings.wifi.add-edit.enter-device-name-placeholder": "请输入SSID/WiFi名称", + "settings.mute.manage-endpoints.title": "管理音频设备", + "settings.mute.manage-endpoints.list-behaviour.title": "通用", + "settings.mute.manage-endpoints.list-behaviour.mute-only-listed": "仅对列出的设备静音", + "settings.mute.manage-endpoints.list-behaviour.mute-all-but-listed": "将列出的设备以外的所有设备静音", + "settings.mute.manage-endpoints.endpoints.title": "设备", + "settings.mute.manage-endpoints.add-edit.add-title": "添加设备", + "settings.mute.manage-endpoints.add-edit.edit-title": "编辑设备", + "settings.mute.manage-endpoints.add-edit.endpoint-name-placeholder": "请输入设备名称", + "settings.mute.manage-endpoints.add-edit.endpoint-name-label": "设备名称:", + "about.title": "关于WinMute", + "about.general.author-site-label": "官网: www.lx-s.de", + "about.general.project-site-label": "项目GitHub && 代码", + "about.general.support-label": "建议与改进支持", + "about.general.description": "WinMute是由Alexander Steinhoefer在业余时间开发的。该工具的代码和新版本可以在GitHub上找到。非常欢迎以代码、门票或功能请求的形式进行贡献。感谢您使用这个小工具!\n 中文汉化by richzhl-1382232", + "about.tab.winmute": "关于WinMute", + "about.tab.license": "许可证明", + "about.btn-close": "确定", + "log.title": "WinMute日志记录" } diff --git a/WinMute/LogDialog.cpp b/WinMute/LogDialog.cpp index 14c1ca5..da3f030 100644 --- a/WinMute/LogDialog.cpp +++ b/WinMute/LogDialog.cpp @@ -34,6 +34,7 @@ POSSIBILITY OF SUCH DAMAGE. #include "common.h" struct LogDlgData { + HWND hLogContent; }; INT_PTR CALLBACK LogDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) @@ -56,16 +57,68 @@ INT_PTR CALLBACK LogDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) MAKEINTRESOURCE(IDI_TRAY_DARK)); SendMessageW(hDlg, WM_SETICON, ICON_BIG, reinterpret_cast(hIcon)); + auto& wmLog = WMLog::GetInstance(); + const auto logMessages = wmLog.GetLogMessages(); + std::wstring logText; + logText.reserve(logMessages.size() * 30); + for (auto &lm : logMessages) { + logText.append(wmLog.FormatLogMessage(lm, true)); + } + + dlgData->hLogContent = GetDlgItem(hDlg, IDC_LOG_CONTENT); + Edit_SetText(dlgData->hLogContent, logText.c_str()); + wmLog.RegisterForLogUpdates(hDlg); + + // Initial sizing + RECT rcClient; + GetClientRect(hDlg, &rcClient); + SetWindowPos( + dlgData->hLogContent, + nullptr, + 0, + 0, + rcClient.right - rcClient.left, + rcClient.bottom - rcClient.top, + SWP_NOZORDER); + return TRUE; } case WM_COMMAND: return 0; + case WM_SIZE: + { + RECT rcClient; + GetClientRect(hDlg, &rcClient); + SetWindowPos( + dlgData->hLogContent, + nullptr, + 0, + 0, + rcClient.right - rcClient.left, + rcClient.bottom - rcClient.top, + SWP_NOZORDER); + return 0; + } + case WM_LOG_UPDATED: { + const WMLog &wmLog = WMLog::GetInstance(); + auto logMsg = reinterpret_cast(lParam); + if (logMsg == nullptr) { + return FALSE; + } + const auto formattedMsg = wmLog.FormatLogMessage(*logMsg, true); + const auto textLen = Edit_GetTextLength(dlgData->hLogContent); + Edit_SetSel(dlgData->hLogContent, textLen, textLen); + Edit_ReplaceSel(dlgData->hLogContent, formattedMsg.c_str()); + return TRUE; + } case WM_DESTROY: delete dlgData; SetWindowLongPtrW(hDlg, GWLP_USERDATA, 0); + WMLog::GetInstance().UnregisterForLogUpdates(hDlg); return 0; case WM_CLOSE: - EndDialog(hDlg, 0); + //EndDialog(hDlg, 0); + DestroyWindow(hDlg); return TRUE; default: break; diff --git a/WinMute/Settings_GeneralDlg.cpp b/WinMute/Settings_GeneralDlg.cpp index 4c3079c..33a50fd 100644 --- a/WinMute/Settings_GeneralDlg.cpp +++ b/WinMute/Settings_GeneralDlg.cpp @@ -35,13 +35,14 @@ POSSIBILITY OF SUCH DAMAGE. namespace fs = std::filesystem; +extern INT_PTR CALLBACK LogDlgProc(HWND, UINT, WPARAM, LPARAM); +extern HINSTANCE hglobInstance; + struct SettingsGeneralData { WMSettings *settings = nullptr; std::vector langModules; }; -extern HINSTANCE hglobInstance; - static void FillLanguageList(HWND hLanguageList, const SettingsGeneralData& dlgData) { SendMessage(hLanguageList, @@ -75,6 +76,7 @@ static void LoadSettingsGeneralDlgTranslation(HWND hDlg) i18n.SetItemText(hDlg, IDC_ENABLELOGGING, "settings.general.enable-logging"); i18n.SetItemText(hDlg, IDC_OPENLOG, "settings.general.btn-open-log-file"); i18n.SetItemText(hDlg, IDC_UPDATE_OPTIONS_DISABLED, "settings.general.updates-handled-externally"); + i18n.SetItemText(hDlg, IDC_OPENLOGDLG, "settings.general.btn-open-log-window"); } INT_PTR CALLBACK Settings_GeneralDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam) @@ -178,6 +180,13 @@ INT_PTR CALLBACK Settings_GeneralDlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPA SendMessageW(GetDlgItem(hDlg, IDC_LOGFILEPATH), WM_SETTEXT, 0, reinterpret_cast(L"")); } + } else if (LOWORD(wParam) == IDC_OPENLOGDLG) { + auto hLogDlg = CreateDialogW( + hglobInstance, + MAKEINTRESOURCEW(IDD_LOG), + hDlg, + LogDlgProc); + ShowWindow(hLogDlg, SW_SHOW); } else if (LOWORD(wParam) == IDC_CHECK_FOR_UPDATES_ON_STARTUP) { const int enabled = Button_GetCheck(GetDlgItem(hDlg, IDC_CHECK_FOR_UPDATES_ON_STARTUP)); EnableWindow(GetDlgItem(hDlg, IDC_CHECK_FOR_BETA_UPDATES), enabled); diff --git a/WinMute/WMLog.cpp b/WinMute/WMLog.cpp index 225ecd5..aff57d3 100644 --- a/WinMute/WMLog.cpp +++ b/WinMute/WMLog.cpp @@ -32,6 +32,21 @@ POSSIBILITY OF SUCH DAMAGE. */ #include "common.h" +#include "WMLog.h" + +static const wchar_t* LogLevelToString(LogLevel level) +{ + switch (level) { + case LogLevel::Debug: + return L"DEBUG"; + case LogLevel::Info: + return L"INFO"; + case LogLevel::Error: + return L"ERROR"; + default: + return L"UNKNOWN"; + } +} static bool OpenLogFile(const std::wstring& filePath, std::wofstream& logFile) { @@ -100,31 +115,57 @@ void WMLog::EnableLogFile(bool enable) } } -bool WMLog::IsEnabled() const +bool WMLog::IsLogFileEnabled() const { return enabled_; } -void WMLog::WriteMessage(const wchar_t* level, const wchar_t* msg) +std::wstring WMLog::FormatLogMessage(const LogMessage &logMsg, bool new_line) const { - time_t rawtime; - struct tm timeinfo; - wchar_t buffer[30]; + auto msg = std::format( + L"{:%F %T%Ez} {}: {}{}", + logMsg.time, + LogLevelToString(logMsg.level), + logMsg.message, + new_line ? L"\r\n" : L""); + return msg; +} - time(&rawtime); - localtime_s(&timeinfo, &rawtime); +void WMLog::StoreMessage(LogLevel level, const wchar_t* msg) +{ + namespace ch = std::chrono; + + LogMessage lm; + lm.level = level; + lm.message = msg; + lm.time = ch::zoned_time{ + ch::current_zone(), ch::floor(ch::system_clock::now()) + }; + + if (enabled_ && logFile_.is_open()) { + const auto logMsg = FormatLogMessage(lm, true); + logFile_.write(logMsg.c_str(), logMsg.length()); + logFile_.flush(); + } - wcsftime(buffer, ARRAY_SIZE(buffer), L"%Y-%m-%d %H:%M:%S", &timeinfo); - const std::wstring logMsg = std::vformat( - L"[{} {}]: {}\n", - std::make_wformat_args( - buffer, - level, - msg) - ); - const std::scoped_lock lock(logMutex_); - logFile_.write(logMsg.c_str(), logMsg.length()); - logFile_.flush(); + { + const std::scoped_lock lock(wndMutex_); + for (const auto hWnd : registeredWindows_) { + if (IsWindow(hWnd)) { + SendMessageW(hWnd, WM_LOG_UPDATED, 0, reinterpret_cast(&lm)); + } + } + } + + { + const std::scoped_lock lock(logMutex_); + logMessages_.push_back(std::move(lm)); + if (logMessages_.size() >= kMaxLogEntries_) { + logMessages_.erase( + logMessages_.begin(), + logMessages_.begin() + (logMessages_.size() - kMaxLogEntries_ / 2)); + } + } } std::vector WMLog::GetLogMessages() const @@ -133,50 +174,55 @@ std::vector WMLog::GetLogMessages() const return logMessages_; } -void WMLog::LogDebug(_In_z_ _Printf_format_string_ const wchar_t *fmt, ...) +void WMLog::RegisterForLogUpdates(HWND hWnd) { - if (!enabled_) { - return; + const std::scoped_lock lock(wndMutex_); + if (std::find(registeredWindows_.begin(), registeredWindows_.end(), hWnd) == registeredWindows_.end()) { + registeredWindows_.push_back(hWnd); } +} +void WMLog::UnregisterForLogUpdates(HWND hWnd) +{ + const std::scoped_lock lock(wndMutex_); + if (const auto it = std::find(registeredWindows_.begin(), registeredWindows_.end(), hWnd); + it != registeredWindows_.end()) { + registeredWindows_.erase(it); + } +} + +void WMLog::LogDebug(_In_z_ _Printf_format_string_ const wchar_t *fmt, ...) +{ wchar_t buf[1024]; va_list ap; va_start(ap, fmt); vswprintf_s(buf, fmt, ap); - WriteMessage(L"Debug", buf); + StoreMessage(LogLevel::Debug, buf); va_end(ap); } void WMLog::LogInfo(_In_z_ _Printf_format_string_ const wchar_t *fmt, ...) { - if (!enabled_) { - return; - } - wchar_t buf[1024]; va_list ap; va_start(ap, fmt); vswprintf_s(buf, fmt, ap); - WriteMessage(L"Info", buf); + StoreMessage(LogLevel::Info, buf); va_end(ap); } void WMLog::LogError(_In_z_ _Printf_format_string_ const wchar_t *fmt, ...) { - if (!enabled_) { - return; - } - wchar_t buf[1024]; va_list ap; va_start(ap, fmt); vswprintf_s(buf, fmt, ap); - WriteMessage(L"Error", buf); + StoreMessage(LogLevel::Error, buf); va_end(ap); } @@ -205,6 +251,6 @@ void WMLog::LogWinError(const wchar_t *functionName, DWORD lastError) functionName, lastError, errorMsgText)); - WriteMessage(L"Error", static_cast(lpMsgBuf)); + StoreMessage(LogLevel::Error, static_cast(lpMsgBuf)); LocalFree(lpMsgBuf); } diff --git a/WinMute/WMLog.h b/WinMute/WMLog.h index fc9be34..6bc545b 100644 --- a/WinMute/WMLog.h +++ b/WinMute/WMLog.h @@ -42,9 +42,9 @@ enum class LogLevel { }; struct LogMessage { - LogLevel level; - std::string time; - std::string message; + LogLevel level = LogLevel::Info; + std::chrono::zoned_time time; + std::wstring message; }; class WMLog { @@ -57,22 +57,32 @@ public: void LogWinError(const wchar_t *functionName, DWORD errorCode = -1); void EnableLogFile(bool enable); - bool IsEnabled() const; + bool IsLogFileEnabled() const; std::wstring GetLogFilePath(); std::vector GetLogMessages() const; + void RegisterForLogUpdates(HWND hWnd); + void UnregisterForLogUpdates(HWND hWnd); + + std::wstring FormatLogMessage(const LogMessage &logMsg, bool new_line=false) const; + private: WMLog(); ~WMLog(); WMLog(const WMLog&) = delete; WMLog& operator=(const WMLog&) = delete; - void WriteMessage(const wchar_t *level, const wchar_t *msg); + const int kMaxLogEntries_ = 500; + + void StoreMessage(LogLevel level, const wchar_t *msg); void DeleteLogFile(); mutable std::mutex logMutex_; + mutable std::mutex wndMutex_; + bool enabled_; std::wofstream logFile_; std::vector logMessages_; + std::vector registeredWindows_; }; diff --git a/WinMute/WMi18n.cpp b/WinMute/WMi18n.cpp index d885249..8d6cc31 100644 --- a/WinMute/WMi18n.cpp +++ b/WinMute/WMi18n.cpp @@ -109,7 +109,9 @@ bool WMi18n::LoadDefaultLanguage() { const std::lock_guard lock(langMutex_); if (!LoadLanguage(defaultLangName_, defaultLang_)) { - const std::wstring error = std::format(L"Failed to load default language. Please make sure the langs-Folder exists and contains {}.", defaultLangName_);; + const std::wstring error = std::format( + L"Failed to load default language. Please make sure the langs-Folder exists and contains {}.", + defaultLangName_); TaskDialog( nullptr, nullptr, @@ -178,7 +180,9 @@ bool WMi18n::LoadLanguage(const std::wstring &fileName) TranslationMap new_lang; if (!LoadLanguage(fileName, new_lang)) { - WMLog::GetInstance().LogError(L"Failed to load language \"%ls\"", fileName.c_str()); + WMLog::GetInstance().LogError( + L"Failed to load language \"%ls\"", + fileName.c_str()); return false; } else { UnloadLanguage(); @@ -210,7 +214,9 @@ const std::wstring WMi18n::GetTranslationW(const std::string& textId) const } } if (text.empty()) { - std::wstring err = std::format(L"Translation for {} not found", ConvertStringToWideString(textId)); + std::wstring err = std::format( + L"Translation for {} not found", + ConvertStringToWideString(textId)); return text; } return text; @@ -222,7 +228,7 @@ const std::string WMi18n::GetTranslationA(const std::string &textId) const return ConvertWideStringToString(wtext); } -bool WMi18n::SetItemText(HWND hWnd, int dlgItem, const std::string& textId) +bool WMi18n::SetItemText(HWND hWnd, int dlgItem, const std::string& textId) const { const auto text = GetTranslationW(textId); if (!SetDlgItemTextW(hWnd, dlgItem, text.c_str())) { @@ -232,7 +238,7 @@ bool WMi18n::SetItemText(HWND hWnd, int dlgItem, const std::string& textId) return true; } -bool WMi18n::SetItemText(HWND hItem, const std::string &textId) +bool WMi18n::SetItemText(HWND hItem, const std::string &textId) const { const auto text = GetTranslationW(textId); if (!SetWindowTextW(hItem, text.c_str())) { diff --git a/WinMute/WMi18n.h b/WinMute/WMi18n.h index 50d559a..32045a3 100644 --- a/WinMute/WMi18n.h +++ b/WinMute/WMi18n.h @@ -57,8 +57,8 @@ public: const std::wstring GetTranslationW(const std::string& textId) const; const std::string GetTranslationA(const std::string& textId) const; - bool SetItemText(HWND hWnd, int dlgItem, const std::string &textId); - bool SetItemText(HWND hItem, const std::string &textId); + bool SetItemText(HWND hWnd, int dlgItem, const std::string &textId) const; + bool SetItemText(HWND hItem, const std::string &textId) const; private: WMi18n() noexcept; diff --git a/WinMute/WinMute.cpp b/WinMute/WinMute.cpp index 972414c..7cc1858 100644 --- a/WinMute/WinMute.cpp +++ b/WinMute/WinMute.cpp @@ -275,7 +275,7 @@ bool WinMute::LoadSettings() { WMLog& log = WMLog::GetInstance(); - if (log.IsEnabled()) { + if (log.IsLogFileEnabled()) { std::wstring versionNumber; GetWinMuteVersion(versionNumber); log.LogInfo(L"Starting WinMute %s", versionNumber.c_str()); diff --git a/WinMute/WinMute.rc b/WinMute/WinMute.rc index 1bf43ec..1a1a7f3 100644 --- a/WinMute/WinMute.rc +++ b/WinMute/WinMute.rc @@ -87,11 +87,12 @@ BEGIN CONTROL "Also check for beta-updates",IDC_CHECK_FOR_BETA_UPDATES, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,27,65,199,17 LTEXT "Options disabled. Updates are handled externally.\nLine2",IDC_UPDATE_OPTIONS_DISABLED,29,83,204,19 - CONTROL "Enable logging",IDC_ENABLELOGGING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,102,219,15 + CONTROL "Enable logging to file",IDC_ENABLELOGGING,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,102,219,15 PUSHBUTTON "Open log file...",IDC_OPENLOG,22,118,104,16 LTEXT "[log file path]",IDC_LOGFILEPATH,23,138,203,27 CONTROL "Help translating",IDC_LINK_HELP_TRANSLATING, "SysLink",WS_TABSTOP,143,15,83,14 + PUSHBUTTON "Show log...",IDC_OPENLOGDLG,129,118,94,16 END IDD_SETTINGS_QUIETHOURS DIALOGEX 0, 0, 246, 198 @@ -245,12 +246,12 @@ BEGIN PUSHBUTTON "Cancel",IDCANCEL,144,41,50,14 END -IDD_LOG DIALOGEX 0, 0, 307, 176 +IDD_LOG DIALOGEX 0, 0, 403, 253 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME CAPTION "WinMute Log" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN - EDITTEXT IDC_LOG_CONTENT,0,0,306,174,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL + EDITTEXT IDC_LOG_CONTENT,7,7,389,238,ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | NOT WS_BORDER | WS_VSCROLL | WS_HSCROLL END @@ -369,9 +370,9 @@ BEGIN IDD_LOG, DIALOG BEGIN LEFTMARGIN, 7 - RIGHTMARGIN, 300 + RIGHTMARGIN, 396 TOPMARGIN, 7 - BOTTOMMARGIN, 168 + BOTTOMMARGIN, 245 END END #endif // APSTUDIO_INVOKED diff --git a/WinMute/common.h b/WinMute/common.h index 86a8235..84575a6 100644 --- a/WinMute/common.h +++ b/WinMute/common.h @@ -60,7 +60,9 @@ POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include #include +#include #include #include #include @@ -131,3 +133,4 @@ static const wchar_t *LOG_FILE_NAME = L"WinMute.log"; constexpr int WM_SAVESETTINGS = WM_USER + 300; constexpr int WM_WINMUTE_UPDATE_POPUP = WM_USER + 301; +constexpr int WM_LOG_UPDATED = WM_USER + 302; diff --git a/WinMute/resource.h b/WinMute/resource.h index bbffead..c085542 100644 --- a/WinMute/resource.h +++ b/WinMute/resource.h @@ -50,6 +50,8 @@ #define IDC_LICENSETEXT 1015 #define IDC_CHECK_FOR_BETA_UPDATES 1015 #define IDC_ABOUT_TAB 1016 +#define IDC_OPENLOG2 1016 +#define IDC_OPENLOGDLG 1016 #define IDC_ABOUTTEXT 1019 #define IDC_TITLE 1020 #define IDC_ABOUT_TITLE 1020 @@ -156,13 +158,14 @@ #define ID_TRAYMENU_LABEL_MUTEON 40038 #define ID_TRAYMENU_MUTEONSCREE 40039 #define ID_TRAYMENU_LABEL_MUTEON_NO_RESTORE 40040 +#define ID_TRAYMENU_LOG 40041 // Next default values for new objects // #ifdef APSTUDIO_INVOKED #ifndef APSTUDIO_READONLY_SYMBOLS #define _APS_NEXT_RESOURCE_VALUE 144 -#define _APS_NEXT_COMMAND_VALUE 40041 +#define _APS_NEXT_COMMAND_VALUE 40042 #define _APS_NEXT_CONTROL_VALUE 1076 #define _APS_NEXT_SYMED_VALUE 101 #endif -- 2.43.0