diff options
Diffstat (limited to 'src/gui')
143 files changed, 3873 insertions, 2571 deletions
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index f29fd91..570e842 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -6,15 +6,124 @@ set (CMAKE_AUTORCC ON) set (CMAKE_AUTOUIC ON) set (CMAKE_INCLUDE_CURRENT_DIR ON) -file (GLOB GUI_SOURCE_FILES src/*.cpp src/*.h) -file (GLOB GUI_UI_FILES src/*.ui) +# files that are used both in tests and the app +set(GUI_COMMON_SOURCE_FILES + src/Action.cpp + src/Hotkey.cpp + src/KeySequence.cpp +) + +set(GUI_COMMON_HEADER_FILES + src/Action.h + src/Hotkey.h + src/KeySequence.h +) + +set(GUI_SOURCE_FILES + src/AboutDialog.cpp + src/ActionDialog.cpp + src/AddClientDialog.cpp + src/AppConfig.cpp + src/BarrierLocale.cpp + src/BaseConfig.cpp + src/CommandProcess.cpp + src/DataDownloader.cpp + src/DisplayIsValid.cpp + src/FingerprintAcceptDialog.cpp + src/HotkeyDialog.cpp + src/IpcClient.cpp + src/Ipc.cpp + src/IpcReader.cpp + src/KeySequenceWidget.cpp + src/LogWindow.cpp + src/main.cpp + src/MainWindow.cpp + src/NewScreenWidget.cpp + src/QBarrierApplication.cpp + src/QUtility.cpp + src/Screen.cpp + src/ScreenSettingsDialog.cpp + src/ScreenSetupModel.cpp + src/ScreenSetupView.cpp + src/ServerConfig.cpp + src/ServerConfigDialog.cpp + src/SettingsDialog.cpp + src/SetupWizard.cpp + src/SslCertificate.cpp + src/TrashScreenWidget.cpp + src/VersionChecker.cpp + src/ZeroconfBrowser.cpp + src/ZeroconfRegister.cpp + src/ZeroconfServer.cpp + src/ZeroconfService.cpp + src/ZeroconfThread.cpp +) + +set(GUI_HEADER_FILES + src/AboutDialog.h + src/ActionDialog.h + src/AddClientDialog.h + src/AppConfig.h + src/BarrierLocale.h + src/BaseConfig.h + src/CommandProcess.h + src/DataDownloader.h + src/DisplayIsValid.h + src/ElevateMode.h + src/HotkeyDialog.h + src/IpcClient.h + src/Ipc.h + src/IpcReader.h + src/KeySequenceWidget.h + src/LogWindow.h + src/MainWindow.h + src/NewScreenWidget.h + src/ProcessorArch.h + src/QBarrierApplication.h + src/QUtility.h + src/Screen.h + src/ScreenSettingsDialog.h + src/ScreenSetupModel.h + src/ScreenSetupView.h + src/ServerConfigDialog.h + src/ServerConfig.h + src/SettingsDialog.h + src/SetupWizard.h + src/ShutdownCh.h + src/SslCertificate.h + src/TrashScreenWidget.h + src/VersionChecker.h + src/ZeroconfBrowser.h + src/ZeroconfRecord.h + src/ZeroconfRegister.h + src/ZeroconfServer.h + src/ZeroconfService.h + src/ZeroconfThread.h +) + +set(GUI_UI_FILES + src/AboutDialogBase.ui + src/ActionDialogBase.ui + src/AddClientDialogBase.ui + src/FingerprintAcceptDialog.ui + src/HotkeyDialogBase.ui + src/LogWindowBase.ui + src/MainWindowBase.ui + src/ScreenSettingsDialogBase.ui + src/ServerConfigDialogBase.ui + src/SettingsDialogBase.ui + src/SetupWizardBase.ui +) if (WIN32) set (GUI_RC_FILES res/win/Barrier.rc) endif() add_executable (barrier WIN32 + ${GUI_COMMON_SOURCE_FILES} + ${GUI_COMMON_HEADER_FILES} ${GUI_SOURCE_FILES} + ${GUI_HEADER_FILES} ${GUI_UI_FILES} ${GUI_RC_FILES} res/Barrier.qrc @@ -22,13 +131,13 @@ add_executable (barrier WIN32 include_directories (./src) -target_link_libraries (barrier Qt5::Core Qt5::Widgets Qt5::Network) +target_link_libraries(barrier net base io Qt5::Core Qt5::Widgets Qt5::Network ${OPENSSL_LIBS}) target_compile_definitions (barrier PRIVATE -DBARRIER_VERSION_STAGE="${BARRIER_VERSION_STAGE}") target_compile_definitions (barrier PRIVATE -DBARRIER_REVISION="${BARRIER_REVISION}") if (WIN32) include_directories ($ENV{BONJOUR_SDK_HOME}/Include) - find_library (DNSSD_LIB dnssd.lib + find_library (DNSSD_LIB dnssd.lib HINTS ENV BONJOUR_SDK_HOME PATH_SUFFIXES "Lib/x64") set_target_properties (barrier PROPERTIES LINK_FLAGS "/NODEFAULTLIB:LIBCMT") @@ -51,3 +160,22 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux" OR ${CMAKE_SYSTEM_NAME} MATCHES "BSD") install (TARGETS barrier DESTINATION bin) endif() + +if (BARRIER_BUILD_TESTS) + set(GUI_TEST_SOURCE_FILES + test/KeySequenceTests.cpp + test/HotkeyTests.cpp + test/main.cpp + ) + + add_executable(guiunittests + ${GUI_TEST_SOURCE_FILES} + ${GUI_COMMON_SOURCE_FILES} + ${GUI_COMMON_HEADER_FILES} + ) + + add_test(guiunittests guiunittests) + + target_include_directories(guiunittests PUBLIC ../../ext) + target_link_libraries(guiunittests gtest gmock Qt5::Core Qt5::Widgets Qt5::Network ${libs}) +endif() diff --git a/src/gui/gui.pro b/src/gui/gui.pro deleted file mode 100644 index 14a2407..0000000 --- a/src/gui/gui.pro +++ /dev/null @@ -1,162 +0,0 @@ -QT += widgets \ - network -TEMPLATE = app -TARGET = barrier -DEFINES += VERSION_STAGE=\\\"$$QMAKE_VERSION_STAGE\\\" -DEFINES += VERSION_REVISION=\\\"$$QMAKE_VERSION_REVISION\\\" -DEFINES -= UNICODE -DEFINES += _MBCS -DEPENDPATH += . \ - res -INCLUDEPATH += . \ - src \ - ../lib/shared/ -FORMS += src/MainWindowBase.ui \ - src/AboutDialogBase.ui \ - src/ServerConfigDialogBase.ui \ - src/ScreenSettingsDialogBase.ui \ - src/ActionDialogBase.ui \ - src/HotkeyDialogBase.ui \ - src/SettingsDialogBase.ui \ - src/SetupWizardBase.ui \ - src/AddClientDialogBase.ui \ - src/ActivationDialog.ui \ - src/CancelActivationDialog.ui \ - src/FailedLoginDialog.ui -SOURCES += src/main.cpp \ - src/MainWindow.cpp \ - src/AboutDialog.cpp \ - src/ServerConfig.cpp \ - src/ServerConfigDialog.cpp \ - src/ScreenSetupView.cpp \ - src/Screen.cpp \ - src/ScreenSetupModel.cpp \ - src/NewScreenWidget.cpp \ - src/TrashScreenWidget.cpp \ - src/ScreenSettingsDialog.cpp \ - src/BaseConfig.cpp \ - src/HotkeyDialog.cpp \ - src/ActionDialog.cpp \ - src/Hotkey.cpp \ - src/Action.cpp \ - src/KeySequence.cpp \ - src/KeySequenceWidget.cpp \ - src/SettingsDialog.cpp \ - src/AppConfig.cpp \ - src/QBarrierApplication.cpp \ - src/VersionChecker.cpp \ - src/SetupWizard.cpp \ - src/IpcClient.cpp \ - src/IpcReader.cpp \ - src/Ipc.cpp \ - src/BarrierLocale.cpp \ - src/QUtility.cpp \ - src/ZeroconfServer.cpp \ - src/ZeroconfThread.cpp \ - src/ZeroconfRegister.cpp \ - src/ZeroconfBrowser.cpp \ - src/ZeroconfService.cpp \ - src/DataDownloader.cpp \ - src/AddClientDialog.cpp \ - src/CommandProcess.cpp \ - src/CoreInterface.cpp \ - src/Fingerprint.cpp \ - src/SslCertificate.cpp \ - src/WebClient.cpp \ - src/ActivationNotifier.cpp \ - src/ActivationDialog.cpp \ - src/CancelActivationDialog.cpp \ - src/FailedLoginDialog.cpp \ - ../lib/shared/SerialKey.cpp \ - src/LicenseManager.cpp -HEADERS += src/MainWindow.h \ - src/AboutDialog.h \ - src/ServerConfig.h \ - src/ServerConfigDialog.h \ - src/ScreenSetupView.h \ - src/Screen.h \ - src/ScreenSetupModel.h \ - src/NewScreenWidget.h \ - src/TrashScreenWidget.h \ - src/ScreenSettingsDialog.h \ - src/BaseConfig.h \ - src/HotkeyDialog.h \ - src/ActionDialog.h \ - src/Hotkey.h \ - src/Action.h \ - src/KeySequence.h \ - src/KeySequenceWidget.h \ - src/SettingsDialog.h \ - src/AppConfig.h \ - src/QBarrierApplication.h \ - src/VersionChecker.h \ - src/SetupWizard.h \ - src/IpcClient.h \ - src/IpcReader.h \ - src/Ipc.h \ - src/BarrierLocale.h \ - src/QUtility.h \ - src/ZeroconfServer.h \ - src/ZeroconfThread.h \ - src/ZeroconfRegister.h \ - src/ZeroconfRecord.h \ - src/ZeroconfBrowser.h \ - src/ZeroconfService.h \ - src/DataDownloader.h \ - src/AddClientDialog.h \ - src/CommandProcess.h \ - src/ProcessorArch.h \ - src/CoreInterface.h \ - src/Fingerprint.h \ - src/SslCertificate.h \ - src/WebClient.h \ - src/ActivationNotifier.h \ - src/ElevateMode.h \ - src/ActivationDialog.h \ - src/CancelActivationDialog.h \ - src/FailedLoginDialog.h \ - ../lib/shared/EditionType.h \ - ../lib/shared/SerialKey.h \ - src/LicenseManager.h -RESOURCES += res/Barrier.qrc -RC_FILE = res/win/Barrier.rc -macx { - QMAKE_INFO_PLIST = res/mac/Info.plist - TARGET = Barrier - QBARRIER_ICON.files = res/mac/Barrier.icns - QBARRIER_ICON.path = Contents/Resources - QMAKE_BUNDLE_DATA += QBARRIER_ICON - LIBS += $$MACX_LIBS -} -unix:!macx:LIBS += -ldns_sd -debug { - OBJECTS_DIR = tmp/debug - MOC_DIR = tmp/debug - RCC_DIR = tmp/debug -} -release { - OBJECTS_DIR = tmp/release - MOC_DIR = tmp/release - RCC_DIR = tmp/release -} -win32-msvc2015 { - LIBS += -lAdvapi32 - QMAKE_LFLAGS += /NODEFAULTLIB:LIBCMT -} -win32-msvc* { - contains(QMAKE_HOST.arch, x86):{ - QMAKE_LFLAGS *= /MACHINE:X86 - LIBS += -L"$$(BONJOUR_SDK_HOME)/Lib/Win32" -ldnssd - } - - contains(QMAKE_HOST.arch, x86_64):{ - QMAKE_LFLAGS *= /MACHINE:X64 - LIBS += -L"$$(BONJOUR_SDK_HOME)/Lib/x64" -ldnssd - } -} -win32 { - Debug:DESTDIR = ../../bin/Debug - Release:DESTDIR = ../../bin/Release - INCLUDEPATH += "$$(BONJOUR_SDK_HOME)/Include" -} -else:DESTDIR = ../../bin diff --git a/src/gui/gui.ts b/src/gui/gui.ts index 99bc7aa..308d41e 100644 --- a/src/gui/gui.ts +++ b/src/gui/gui.ts @@ -650,12 +650,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/lang.cmd b/src/gui/lang.cmd index 4418593..fbab95c 100644 --- a/src/gui/lang.cmd +++ b/src/gui/lang.cmd @@ -1 +1 @@ -lupdate -noobsolete gui.pro -ts gui.ts
\ No newline at end of file +lupdate -noobsolete src/* -ts gui.ts diff --git a/src/gui/langbuild.cmd b/src/gui/langbuild.cmd index b86d202..aaeefbb 100644..100755 --- a/src/gui/langbuild.cmd +++ b/src/gui/langbuild.cmd @@ -1,2 +1,2 @@ -cd res/lang
-lrelease *.ts
\ No newline at end of file +cd res/lang +lrelease *.ts diff --git a/src/gui/res/lang/Languages.xml b/src/gui/res/lang/Languages.xml index 5948f9c..723d667 100644 --- a/src/gui/res/lang/Languages.xml +++ b/src/gui/res/lang/Languages.xml @@ -1,46 +1,46 @@ -<?xml version="1.0" encoding="UTF-8" ?>
-<languages>
- <language ietfCode="en" name="English" />
- <language ietfCode="ca-AD" name="Català (Andorra)" />
- <language ietfCode="cs-CZ" name="Čeština" />
- <language ietfCode="cy" name="Cymraeg" />
- <language ietfCode="da" name="Dansk" />
- <language ietfCode="de" name="Deutsch" />
- <language ietfCode="es" name="Español" />
- <language ietfCode="fr" name="Français" />
- <language ietfCode="hr-HR" name="Hrvatski" />
- <language ietfCode="id" name="Indonesia" />
- <language ietfCode="it" name="Italiano" />
- <language ietfCode="lv" name="Latvijas" />
- <language ietfCode="lt" name="Lietuvos" />
- <language ietfCode="hu-HU" name="Magyar" />
- <language ietfCode="nl-NL" name="Nederlands" />
- <language ietfCode="no" name="Norsk" />
- <language ietfCode="pl-PL" name="Polski" />
- <language ietfCode="pt-PT" name="Português" />
- <language ietfCode="pt-BR" name="Português (Brasil)" />
- <language ietfCode="ro" name="Română" />
- <language ietfCode="sq-AL" name="Shqiptar" />
- <language ietfCode="sl-SI" name="Slovenščina" />
- <language ietfCode="sk-SK" name="Slovenčina" />
- <language ietfCode="fi" name="Suomi" />
- <language ietfCode="sv" name="Svenska" />
- <language ietfCode="vi" name="Tiếng Việt" />
- <language ietfCode="tr-TR" name="Türkçe" />
- <language ietfCode="bg-BG" name="български" />
- <language ietfCode="ru" name="Русский" />
- <language ietfCode="sr" name="српски" />
- <language ietfCode="uk" name="Український" />
- <language ietfCode="grk" name="Ελληνικά" />
- <language ietfCode="he" name="עברית" />
- <language ietfCode="ar" name="العربية" />
- <language ietfCode="pes-IR" name="فارسی" />
- <language ietfCode="ur" name="اردو" />
- <language ietfCode="mr" name="मराठी" />
- <language ietfCode="si" name="Sඉන්හල" />
- <language ietfCode="th-TH" name="ภาษาไทย" />
- <language ietfCode="zh-CN" name="中文 (简体)" />
- <language ietfCode="zh-TW" name="中文 (繁體)" />
- <language ietfCode="ja-JP" name="日本語" />
- <language ietfCode="ko" name="한국어" />
-</languages>
+<?xml version="1.0" encoding="UTF-8" ?> +<languages> + <language ietfCode="en" name="English" /> + <language ietfCode="ca-AD" name="Català (Andorra)" /> + <language ietfCode="cs-CZ" name="Čeština" /> + <language ietfCode="cy" name="Cymraeg" /> + <language ietfCode="da" name="Dansk" /> + <language ietfCode="de" name="Deutsch" /> + <language ietfCode="es" name="Español" /> + <language ietfCode="fr" name="Français" /> + <language ietfCode="hr-HR" name="Hrvatski" /> + <language ietfCode="id" name="Indonesia" /> + <language ietfCode="it" name="Italiano" /> + <language ietfCode="lv" name="Latvijas" /> + <language ietfCode="lt" name="Lietuvos" /> + <language ietfCode="hu-HU" name="Magyar" /> + <language ietfCode="nl-NL" name="Nederlands" /> + <language ietfCode="no" name="Norsk" /> + <language ietfCode="pl-PL" name="Polski" /> + <language ietfCode="pt-PT" name="Português" /> + <language ietfCode="pt-BR" name="Português (Brasil)" /> + <language ietfCode="ro" name="Română" /> + <language ietfCode="sq-AL" name="Shqiptar" /> + <language ietfCode="sl-SI" name="Slovenščina" /> + <language ietfCode="sk-SK" name="Slovenčina" /> + <language ietfCode="fi" name="Suomi" /> + <language ietfCode="sv" name="Svenska" /> + <language ietfCode="vi" name="Tiếng Việt" /> + <language ietfCode="tr-TR" name="Türkçe" /> + <language ietfCode="bg-BG" name="български" /> + <language ietfCode="ru" name="Русский" /> + <language ietfCode="sr" name="српски" /> + <language ietfCode="uk" name="Український" /> + <language ietfCode="grk" name="Ελληνικά" /> + <language ietfCode="he" name="עברית" /> + <language ietfCode="ar" name="العربية" /> + <language ietfCode="pes-IR" name="فارسی" /> + <language ietfCode="ur" name="اردو" /> + <language ietfCode="mr" name="मराठी" /> + <language ietfCode="si" name="Sඉන්හල" /> + <language ietfCode="th-TH" name="ภาษาไทย" /> + <language ietfCode="zh-CN" name="中文 (简体)" /> + <language ietfCode="zh-TW" name="中文 (繁體)" /> + <language ietfCode="ja-JP" name="日本語" /> + <language ietfCode="ko" name="한국어" /> +</languages> diff --git a/src/gui/res/lang/gui_af-ZA.ts b/src/gui/res/lang/gui_af-ZA.ts index 7ff6304..5e0121a 100644 --- a/src/gui/res/lang/gui_af-ZA.ts +++ b/src/gui/res/lang/gui_af-ZA.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_ar.ts b/src/gui/res/lang/gui_ar.ts index 84ae1e6..3882b6d 100644 --- a/src/gui/res/lang/gui_ar.ts +++ b/src/gui/res/lang/gui_ar.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_bg-BG.qm b/src/gui/res/lang/gui_bg-BG.qm Binary files differindex 013137d..7d02c13 100644 --- a/src/gui/res/lang/gui_bg-BG.qm +++ b/src/gui/res/lang/gui_bg-BG.qm diff --git a/src/gui/res/lang/gui_bg-BG.ts b/src/gui/res/lang/gui_bg-BG.ts index 6a373d8..ea45271 100644 --- a/src/gui/res/lang/gui_bg-BG.ts +++ b/src/gui/res/lang/gui_bg-BG.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Конфигурации на Синерджи (*.sgc);; Всички файлове (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Всички файлове (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Конфигурации на Синерджи (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Конфигурации на Синерджи (*.conf);; Всички файлове (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Конфигурации на Синерджи (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_ca-AD.qm b/src/gui/res/lang/gui_ca-AD.qm Binary files differindex 351c40d..755791b 100644 --- a/src/gui/res/lang/gui_ca-AD.qm +++ b/src/gui/res/lang/gui_ca-AD.qm diff --git a/src/gui/res/lang/gui_ca-AD.ts b/src/gui/res/lang/gui_ca-AD.ts index 34093d9..3cd7895 100644 --- a/src/gui/res/lang/gui_ca-AD.ts +++ b/src/gui/res/lang/gui_ca-AD.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Configuracions Barrier (*.sgc);;Tots els arxius (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Tots els arxius (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Configuracions Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Configuracions Barrier (*.conf);;Tots els arxius (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Configuracions Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> @@ -900,8 +905,8 @@ To automatically trust this fingerprint for future connections, click Yes. To re <source>Drag new screens to the grid or move existing ones around. Drag a screen to the trashcan to delete it. Double click on a screen to edit its settings.</source> - <translation type="finished">Arrossega noves pantalles a la graella o mou les actuals al voltant. -Arrossega una pantalla a la paperera per eliminar-la. + <translation type="finished">Arrossega noves pantalles a la graella o mou les actuals al voltant. +Arrossega una pantalla a la paperera per eliminar-la. Fes doble clic a una pantalla per editar la seva configuració.</translation> </message> <message> @@ -1330,7 +1335,7 @@ p, li { white-space: pre-wrap; } Server response: %1</source> - <translation type="finished">Error inici de sessió, hi ha hagut un error. + <translation type="finished">Error inici de sessió, hi ha hagut un error. Resposta del servidor: %1</translation> </message> diff --git a/src/gui/res/lang/gui_cs-CZ.qm b/src/gui/res/lang/gui_cs-CZ.qm Binary files differindex 1ac02c8..23ed7bd 100644 --- a/src/gui/res/lang/gui_cs-CZ.qm +++ b/src/gui/res/lang/gui_cs-CZ.qm diff --git a/src/gui/res/lang/gui_cs-CZ.ts b/src/gui/res/lang/gui_cs-CZ.ts index fd7b9c7..16142bf 100644 --- a/src/gui/res/lang/gui_cs-CZ.ts +++ b/src/gui/res/lang/gui_cs-CZ.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Nastavení Barrier (*.sgc);;Všechny soubory (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Všechny soubory (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Nastavení Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Nastavení Barrier (*.conf);;Všechny soubory (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Nastavení Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_cy.qm b/src/gui/res/lang/gui_cy.qm Binary files differindex 87bc58c..0cdb24d 100644 --- a/src/gui/res/lang/gui_cy.qm +++ b/src/gui/res/lang/gui_cy.qm diff --git a/src/gui/res/lang/gui_cy.ts b/src/gui/res/lang/gui_cy.ts index be9cd1d..2478fee 100644 --- a/src/gui/res/lang/gui_cy.ts +++ b/src/gui/res/lang/gui_cy.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Cyfluniadau Barrier (*.sgc);;Pob ffeil (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Pob ffeil (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Cyfluniadau Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Cyfluniadau Barrier (*.conf);;Pob ffeil (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Cyfluniadau Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_da.qm b/src/gui/res/lang/gui_da.qm Binary files differindex f78dbb7..dc7812b 100644 --- a/src/gui/res/lang/gui_da.qm +++ b/src/gui/res/lang/gui_da.qm diff --git a/src/gui/res/lang/gui_da.ts b/src/gui/res/lang/gui_da.ts index 2b17c0b..7bec518 100644 --- a/src/gui/res/lang/gui_da.ts +++ b/src/gui/res/lang/gui_da.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrier-konfigurationer (*.sgc);;Alle filer (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Alle filer (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Barrier-konfigurationer (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier-konfigurationer (*.conf);;Alle filer (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Barrier-konfigurationer (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> @@ -1329,7 +1334,7 @@ p, li { white-space: pre-wrap; } Server response: %1</source> - <translation type="finished">Fejl i login, en fejl opstod. + <translation type="finished">Fejl i login, en fejl opstod. Server svar: %1</translation> </message> diff --git a/src/gui/res/lang/gui_de.qm b/src/gui/res/lang/gui_de.qm Binary files differindex eb0bb40..2e4f300 100644 --- a/src/gui/res/lang/gui_de.qm +++ b/src/gui/res/lang/gui_de.qm diff --git a/src/gui/res/lang/gui_de.ts b/src/gui/res/lang/gui_de.ts index 67eb994..f43ee39 100644 --- a/src/gui/res/lang/gui_de.ts +++ b/src/gui/res/lang/gui_de.ts @@ -1,12 +1,14 @@ -<?xml version="1.0" encoding="utf-8"?><!DOCTYPE TS><TS language="de" sourcelanguage="en" version="2.0"> +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="de" sourcelanguage="en"> <context> <name>AboutDialogBase</name> <message> <location filename="res/AboutDialogBase.ui" line="38"/> <source>About Barrier</source> - <translation type="finished">Über Barrier</translation> + <translation>Über Barrier</translation> </message> - <message utf8="true"> + <message> <location filename="res/AboutDialogBase.ui" line="53"/> <source><p> Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> @@ -26,22 +28,30 @@ Barrier is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> The Barrier GUI is based on QSynergy by Volker Lanz.<br /><br /> Visit our website for help and info (symless.com). </p></oldsource> - <translation type="unfinished"></translation> + <translation><p> +Anwendung zum Teilen von Tastatur und Maus. Betriebssystemübergreifend und Open Source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Barrier wird herausgegeben unter der GNU General Public License (GPLv2).<br /><br /> +Barrier basiert auf CosmoSynergy von Richard Lee und Adam Feder.<br /> +Die Barrier-GUI basiert auf QSynergy von Volker Lanz.<br /><br /> +Besuchen Sie unsere Website für Hilfe und Info (symless.com). +</p></translation> </message> <message> <location filename="res/AboutDialogBase.ui" line="140"/> <source>Unknown</source> - <translation type="finished">Unbekannt</translation> + <translation>Unbekannt</translation> </message> <message> <location filename="res/AboutDialogBase.ui" line="124"/> <source>Version:</source> - <translation type="finished">Version:</translation> + <translation>Version:</translation> </message> <message> <location filename="res/AboutDialogBase.ui" line="163"/> <source>&Ok</source> - <translation type="finished">&Ok</translation> + <translation>&Ok</translation> </message> </context> <context> @@ -49,97 +59,97 @@ Visit our website for help and info (symless.com). <message> <location filename="res/ActionDialogBase.ui" line="14"/> <source>Configure Action</source> - <translation type="finished">Aktion konfigurieren</translation> + <translation>Aktion konfigurieren</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="20"/> <source>Choose the action to perform</source> - <translation type="finished">Wähle eine Aktion, die ausgeführt werden soll</translation> + <translation>Wähle eine Aktion, die ausgeführt werden soll</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="26"/> <source>Press a hotkey</source> - <translation type="finished">Hotkey drücken</translation> + <translation>Hotkey drücken</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="36"/> <source>Release a hotkey</source> - <translation type="finished">Hotkey loslassen</translation> + <translation>Hotkey loslassen</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="43"/> <source>Press and release a hotkey</source> - <translation type="finished">Hotkey drücken und loslassen</translation> + <translation>Hotkey drücken und loslassen</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="69"/> <source>only on these screens</source> - <translation type="finished">Nur auf diesen Bildschirmen</translation> + <translation>nur auf diesen Bildschirmen</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="119"/> <source>Switch to screen</source> - <translation type="finished">Zu Anzeige Wechseln</translation> + <translation>Zum Bildschirm wechseln</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="150"/> <source>Switch in direction</source> - <translation type="finished">In Richtung wechseln</translation> + <translation>In Richtung wechseln</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="174"/> <source>left</source> - <translation type="finished">links</translation> + <translation>links</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="179"/> <source>right</source> - <translation type="finished">rechts</translation> + <translation>rechts</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="184"/> <source>up</source> - <translation type="finished">hoch</translation> + <translation>hoch</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="189"/> <source>down</source> - <translation type="finished">runter</translation> + <translation>runter</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="201"/> <source>Lock cursor to screen</source> - <translation type="finished">Cursor auf Anzeige beschränken</translation> + <translation>Cursor auf Bildschirm beschränken</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="225"/> <source>toggle</source> - <translation type="finished">umschalten</translation> + <translation>umschalten</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="230"/> <source>on</source> - <translation type="finished">ein</translation> + <translation>ein</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="235"/> <source>off</source> - <translation type="finished">aus</translation> + <translation>aus</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="248"/> <source>This action is performed when</source> - <translation type="finished">Diese Aktion wird ausgeführt, wenn</translation> + <translation>Diese Aktion wird ausgeführt, wenn</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="254"/> <source>the hotkey is pressed</source> - <translation type="finished">wenn der Hotkey gedrückt wird</translation> + <translation>wenn der Hotkey gedrückt wird</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="264"/> <source>the hotkey is released</source> - <translation type="finished">wenn der Hotkey losgelassen wird</translation> + <translation>wenn der Hotkey losgelassen wird</translation> </message> </context> <context> @@ -147,17 +157,17 @@ Visit our website for help and info (symless.com). <message> <location filename="res/AddClientDialogBase.ui" line="20"/> <source>Dialog</source> - <translation type="unfinished"></translation> + <translation>Dialog</translation> </message> <message> <location filename="res/AddClientDialogBase.ui" line="35"/> <source>TextLabel</source> - <translation type="unfinished"></translation> + <translation>TextLabel</translation> </message> <message> <location filename="res/AddClientDialogBase.ui" line="83"/> <source>Ignore auto connect clients</source> - <translation type="unfinished"></translation> + <translation>Autoconnect-Clients ignorieren</translation> </message> </context> <context> @@ -165,12 +175,12 @@ Visit our website for help and info (symless.com). <message> <location filename="res/HotkeyDialogBase.ui" line="14"/> <source>Hotkey</source> - <translation type="finished">Hotkey</translation> + <translation>Hotkey</translation> </message> <message> <location filename="res/HotkeyDialogBase.ui" line="20"/> <source>Enter the specification for the hotkey:</source> - <translation type="finished">Gib die Definition für den Hotkey ein:</translation> + <translation>Definition für den Hotkey eingeben:</translation> </message> </context> <context> @@ -178,189 +188,193 @@ Visit our website for help and info (symless.com). <message> <location filename="src/MainWindow.cpp" line="790"/> <source>&Start</source> - <translation type="finished">&Start</translation> + <translation>&Start</translation> </message> <message> <location filename="src/MainWindow.cpp" line="237"/> <source>&File</source> - <translation type="finished">&Datei</translation> + <translation>&Datei</translation> </message> <message> <location filename="src/MainWindow.cpp" line="238"/> <source>&Edit</source> - <translation type="finished">&Bearbeiten</translation> + <translation>&Bearbeiten</translation> </message> <message> <location filename="src/MainWindow.cpp" line="239"/> <source>&Window</source> - <translation type="finished">&Fenster</translation> + <translation>&Fenster</translation> </message> <message> <location filename="src/MainWindow.cpp" line="240"/> <source>&Help</source> - <translation type="finished">&Hilfe</translation> + <translation>&Hilfe</translation> </message> <message> <location filename="src/MainWindow.cpp" line="364"/> <source><p>Your version of Barrier is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p></source> <oldsource><p>Version %1 is now available, <a href="%2">visit website</a>.</p></oldsource> - <translation type="finished"><p>Ihre Barrier Version ist veraltet. Version <b>%1</b> ist jetzt zum <a href="%2">Download</a> verfügbar.</p></translation> + <translation><p>Ihre Barrier-Version ist veraltet. Version <b>%1</b> ist jetzt zum <a href="%2">Download</a> verfügbar.</p></translation> </message> <message> <location filename="src/MainWindow.cpp" line="577"/> <source>Program can not be started</source> - <translation type="finished">Das Programm konnte nicht gestartet werden</translation> + <translation>Programm konnte nicht gestartet werden</translation> </message> <message> <location filename="src/MainWindow.cpp" line="577"/> <source>The executable<br><br>%1<br><br>could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source> - <translation type="finished">Die Anwendung<br><br>%1<br><br> konnte nicht gestartet werden, obwohl sie vorhanden ist. Bitte überprüfen sie, ob sie die benötigten Berechtigungen zur Ausführung der Anwendung haben,</translation> + <translation>Die Anwendung<br><br>%1<br><br> konnte nicht gestartet werden, obwohl sie vorhanden ist. Bitte überprüfen Sie, ob Sie ausreichende Rechte zur Ausführung der Anwendung haben.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="596"/> <source>Barrier client not found</source> - <translation type="finished">Der Barrier Client wurde nicht gefunden</translation> + <translation>Barrier-Client wurde nicht gefunden</translation> </message> <message> <location filename="src/MainWindow.cpp" line="597"/> <source>The executable for the barrier client does not exist.</source> - <translation type="finished">Die ausführbare Datei für den Barrier Client existiert nicht.</translation> + <translation>Die Anwendung für den Barrier-Client existiert nicht.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="625"/> <source>Hostname is empty</source> - <translation type="finished">Der Hostname is leer</translation> + <translation>Hostname ist leer</translation> </message> <message> <location filename="src/MainWindow.cpp" line="626"/> <source>Please fill in a hostname for the barrier client to connect to.</source> - <translation type="finished">Bitte tragen Sie einen Hostnamen ein, zu dem sich der Barrier-Client verbinden soll.</translation> + <translation>Bitte tragen Sie einen Hostnamen ein, zu dem sich der Barrier-Client verbinden soll.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="646"/> <source>Cannot write configuration file</source> - <translation type="finished">Konfigurationsdatei konnte nicht geschrieben werden</translation> + <translation>Konfigurationsdatei konnte nicht geschrieben werden</translation> </message> <message> <location filename="src/MainWindow.cpp" line="646"/> <source>The temporary configuration file required to start barrier can not be written.</source> - <translation type="finished">Die temporäre Konfigurationsdatei konnte nicht geschrieben werden. Sie wird jedoch für den Start von Barrier benötigt.</translation> + <translation>Die für den Start von Barrier nötige temporäre Konfigurationsdatei kann nicht geschrieben werden.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="659"/> <source>Configuration filename invalid</source> - <translation type="finished">Der Dateiname der Konfigurationsdatei ist ungültig.</translation> + <translation>Dateiname der Konfigurationsdatei ungültig</translation> </message> <message> <location filename="src/MainWindow.cpp" line="660"/> <source>You have not filled in a valid configuration file for the barrier server. Do you want to browse for the configuration file now?</source> - <translation type="finished">Sie haben keine gültige Konfigurationsdatei angegeben. Wollen sie jetzt nach dieser Datei suchen?</translation> + <translation>Sie haben keine gültige Konfigurationsdatei für den Barrier-Server angegeben. Wollen sie jetzt nach dieser Datei suchen?</translation> </message> <message> <location filename="src/MainWindow.cpp" line="688"/> <source>Barrier server not found</source> - <translation type="finished">Der Barrier Server wurde nicht gefunden.</translation> + <translation>Barrier-Server nicht gefunden</translation> </message> <message> <location filename="src/MainWindow.cpp" line="689"/> <source>The executable for the barrier server does not exist.</source> - <translation type="finished">Die ausführbare Datei für den Barrier Server existiert nicht.</translation> + <translation>Die Anwendung für den Barrier-Server existiert nicht.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="764"/> <source>Barrier terminated with an error</source> - <translation type="finished">Barrier wurde mit einem Fehler beendet.</translation> + <translation>Barrier mit Fehler beendet</translation> </message> <message> <location filename="src/MainWindow.cpp" line="764"/> <source>Barrier terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details.</source> - <translation type="finished">Barrier wurde unerwartet mit Abbruchcode %1 beendet. <br><br> Weitere Informationen können dem Log entnommen werden.</translation> + <translation>Barrier unerwartet mit Exit-Code %1 beendet. <br><br>Siehe Logausgabe für weitere Details.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="783"/> <source>&Stop</source> - <translation type="finished">&Stopp</translation> + <translation>&Stop</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1038"/> <source>Please add the server (%1) to the grid.</source> - <translation type="unfinished"></translation> + <translation>Bitte Server (%1) zum Gitter hinzufügen.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1044"/> <source>Please drag the new client screen (%1) to the desired position on the grid.</source> - <translation type="unfinished"></translation> + <translation>Bitte den Bildschirm des neuen Clients zur gewünschten Position auf dem Gitter ziehen.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1147"/> <source>Failed to detect system architecture.</source> - <translation type="unfinished"></translation> + <translation>System-Architektur konnte nicht ermittelt werden.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1165"/> <source>Cancel</source> - <translation type="unfinished"></translation> + <translation>Abbrechen</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1189"/> <source>Failed to download Bonjour installer to location: %1</source> - <translation type="unfinished"></translation> + <translation>Bonjour-Installer konnte nicht heruntergeladen werden nach: %1</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1226"/> <source>Do you want to enable auto config and install Bonjour? This feature helps you establish the connection.</source> - <translation type="unfinished"></translation> + <translation>Möchten Sie Bonjour installieren, um Autoconfig zu aktivieren? + +Diese Funktion hilft Ihnen beim Verbindungsaufbau.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1270"/> <source>Auto config feature requires Bonjour. Do you want to install Bonjour?</source> - <translation type="unfinished"></translation> + <translation>Für die Autoconfig-Funktion ist Bonjour nötig. + +Möchten Sie Bonjour installieren?</translation> </message> <message> <location filename="src/MainWindow.cpp" line="815"/> <source>Barrier is starting.</source> - <translation type="finished">Barrier wird gestartet.</translation> + <translation>Barrier startet.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="809"/> <source>Barrier is running.</source> - <translation type="finished">Barrier läuft.</translation> + <translation>Barrier läuft.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="819"/> <source>Barrier is not running.</source> - <translation type="finished">Barrier wird nicht ausgeführt.</translation> + <translation>Barrier läuft nicht.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="870"/> <source>Unknown</source> - <translation type="finished">Unbekannt</translation> + <translation>Unbekannt</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1146"/> <location filename="src/MainWindow.cpp" line="1225"/> <location filename="src/MainWindow.cpp" line="1269"/> <source>Barrier</source> - <translation type="finished">Barrier</translation> + <translation>Barrier</translation> </message> <message> <location filename="src/MainWindow.cpp" line="987"/> <source>Browse for a barriers config file</source> - <translation type="finished">Nach einer Konfigurationsdatei für Barrier suchen.</translation> + <translation>Nach einer Konfigurationsdatei für Barrier suchen</translation> </message> <message> <location filename="src/MainWindow.cpp" line="408"/> <source>Barrier is now connected, You can close the config window. Barrier will remain connected in the background.</source> - <translation type="unfinished"></translation> + <translation>Barrier ist jetzt verbunden. Sie können das Konfigurationsfenster schließen. Barrier wird im Hintergrund verbunden bleiben.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="434"/> <source>Security question</source> - <translation type="unfinished"></translation> + <translation>Sicherheitsfrage</translation> </message> <message> <location filename="src/MainWindow.cpp" line="435"/> @@ -368,25 +382,31 @@ Do you want to install Bonjour?</source> %1 -This is a server fingerprint. You should compare this fingerprint to the one on your server's screen. If the two don't match exactly, then it's probably not the server you're expecting (it could be a malicious user). +This is a server fingerprint. You should compare this fingerprint to the one on your server's screen. If the two don't match exactly, then it's probably not the server you're expecting (it could be a malicious user). To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No.</source> - <translation type="unfinished"></translation> + <translation>Vertrauen Sie diesem Fingerabdruck? + +%1 + +Dies ist ein Server-Fingerabdruck. Sie sollten ihn mit dem Fingerabdruck auf dem Server-Bildschirm vergleichen. Wenn die zwei nicht identisch sind, handelt es sich wahrscheinlich nicht um den erwarteten Server (es könnte ein böswilliger User sein). + +Um diesem Fingerabdruck bei zukünftigen Verbindeungen automatisch zu vertrauen, klicken Sie auf Ja. Um diesen Fingerabdruck abzulehnen und die Verbindung vom Server zu trennen, klicken Sie auf Nein.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1000"/> <source>Save configuration as...</source> - <translation type="finished">Konfiguration speichern unter ...</translation> + <translation>Konfiguration speichern unter ...</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1004"/> <source>Save failed</source> - <translation type="finished">Speichern fehlgeschlagen</translation> + <translation>Speichern fehlgeschlagen</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1004"/> <source>Could not save configuration to file.</source> - <translation type="finished">Konfiguration konnte nicht in Datei gespeichert werden</translation> + <translation>Konfiguration konnte nicht in Datei gespeichert werden</translation> </message> </context> <context> @@ -394,168 +414,168 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/MainWindowBase.ui" line="26"/> <source>Barrier</source> - <translation type="finished">Barrier</translation> + <translation>Barrier</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="90"/> - <source>Ser&ver (share this computer's mouse and keyboard):</source> - <translation type="unfinished"></translation> + <source>Ser&ver (share this computer's mouse and keyboard):</source> + <translation>Ser&ver (Maus und Tastatur dieses Rechners teilen):</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="243"/> <source>Screen name:</source> - <translation type="finished">Anzeigename:</translation> + <translation>Bildschirmname:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="257"/> <source>&Server IP:</source> - <translation type="finished">Server IP:</translation> + <translation>&Server IP:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="380"/> <location filename="res/MainWindowBase.ui" line="409"/> <source>&Start</source> - <translation type="finished">&Start</translation> + <translation>&Start</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="181"/> <source>Use existing configuration:</source> - <translation type="finished">Verwende bestehende Konfiguration:</translation> + <translation>Verwende bestehende Konfiguration:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="190"/> <source>&Configuration file:</source> - <translation type="finished">&Konfigurationsdatei:</translation> + <translation>&Konfigurationsdatei:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="210"/> <source>&Browse...</source> - <translation type="finished">&Durchsuchen...</translation> + <translation>&Durchsuchen ...</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="147"/> <source>Configure interactively:</source> - <translation type="finished">Interaktiv konfigurieren:</translation> + <translation>Interaktiv konfigurieren:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="159"/> <source>&Configure Server...</source> - <translation type="finished">Server &konfigurieren...</translation> + <translation>Server &konfigurieren ...</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="350"/> <source>Ready</source> - <translation type="finished">Fertig</translation> + <translation>Bereit</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="296"/> <source>Log</source> - <translation type="finished">Log</translation> + <translation>Log</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="373"/> <source>&Reload</source> - <translation type="finished">&Anwenden</translation> + <translation>&Neu laden</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="107"/> <source>IP addresses:</source> - <translation type="finished">IP Adressen:</translation> + <translation>IP-Adressen:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="131"/> <source>Fingerprint:</source> - <translation type="unfinished"></translation> + <translation>Fingerabdruck:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="228"/> - <source>&Client (use another computer's mouse and keyboard):</source> - <translation type="unfinished"></translation> + <source>&Client (use another computer's mouse and keyboard):</source> + <translation>&Client (Maus und Tastatur eines anderen Rechners benutzen):</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="270"/> <source>Auto config</source> - <translation type="unfinished"></translation> + <translation>Autoconfig</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="390"/> <source>&About Barrier...</source> - <translation type="finished">&Über Barrier...</translation> + <translation>&Über Barrier ...</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="398"/> <source>&Quit</source> - <translation type="finished">&Beenden</translation> + <translation>&Beenden</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="401"/> <source>Quit</source> - <translation type="finished">Beenden</translation> + <translation>Beenden</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="412"/> <source>Run</source> - <translation type="finished">Start</translation> + <translation>Start</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="423"/> <source>S&top</source> - <translation type="finished">S&topp</translation> + <translation>S&top</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="426"/> <source>Stop</source> - <translation type="finished">Stop</translation> + <translation>Stop</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="434"/> <source>S&how Status</source> - <translation type="finished">S&tatus anzeigen</translation> + <translation>S&tatus anzeigen</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="442"/> <source>&Hide</source> - <translation type="finished">&Verstecken</translation> + <translation>&Verstecken</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="445"/> <source>Hide</source> - <translation type="finished">Verstecken</translation> + <translation>Verstecken</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="453"/> <source>&Show</source> - <translation type="finished">&Zeigen</translation> + <translation>An&zeigen</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="456"/> <source>Show</source> - <translation type="finished">Anzeigen</translation> + <translation>Anzeigen</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="464"/> <source>Save configuration &as...</source> - <translation type="finished">Configuration speichern &unter ...</translation> + <translation>Konfiguration speichern &unter ...</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="467"/> <source>Save the interactively generated server configuration to a file.</source> - <translation type="finished">Speichere die interaktiv erstellte Konfiguration in eine Datei.</translation> + <translation>Speichere die interaktiv erstellte Konfiguration in eine Datei.</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="475"/> <source>Settings</source> - <translation type="finished">Einstellungen</translation> + <translation>Einstellungen</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="478"/> <source>Edit settings</source> - <translation type="finished">Einstellungen bearbeiten</translation> + <translation>Einstellungen bearbeiten</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="486"/> <source>Run Wizard</source> - <translation type="finished">Assistent ausführen</translation> + <translation>Assistent ausführen</translation> </message> </context> <context> @@ -563,7 +583,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/NewScreenWidget.cpp" line="32"/> <source>Unnamed</source> - <translation type="finished">Unbenannt</translation> + <translation>Unbenannt</translation> </message> </context> <context> @@ -571,28 +591,29 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/PluginManager.cpp" line="58"/> <source>Failed to get plugin directory.</source> - <translation type="unfinished"></translation> + <translation>Plugin-Verzeichnis konnte nicht ermittelt werden.</translation> </message> <message> <location filename="src/PluginManager.cpp" line="63"/> <source>Failed to get profile directory.</source> - <translation type="unfinished"></translation> + <translation>Profil-Verzeichnis konnte nicht ermittelt werden.</translation> </message> <message> <location filename="src/PluginManager.cpp" line="136"/> - <source>Failed to download plugin '%1' to: %2 + <source>Failed to download plugin '%1' to: %2 %3</source> - <translation type="unfinished"></translation> + <translation>Plugin '%1' konnte nicht runtergeladen werden nach: %2 +%3</translation> </message> <message> <location filename="src/PluginManager.cpp" line="167"/> <source>Could not get Windows architecture type.</source> - <translation type="unfinished"></translation> + <translation>Art der Windows-Architektur konnte nicht ermittelt werden.</translation> </message> <message> <location filename="src/PluginManager.cpp" line="191"/> <source>Could not get Linux architecture type.</source> - <translation type="unfinished"></translation> + <translation>Art der Linux-Architektur konnte nicht ermittelt werden.</translation> </message> </context> <context> @@ -600,66 +621,71 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/PluginWizardPageBase.ui" line="14"/> <source>Setup Barrier</source> - <translation type="finished">Barrier einrichten</translation> + <translation>Barrier einrichten</translation> </message> <message> <location filename="res/PluginWizardPageBase.ui" line="101"/> <source>Please wait...</source> - <translation type="unfinished"></translation> + <translation>Bitte warten ...</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="72"/> <source>Error: %1</source> - <translation type="unfinished"></translation> + <translation>Fehler: %1</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="80"/> <location filename="src/PluginWizardPage.cpp" line="201"/> <source>Setup complete.</source> - <translation type="unfinished"></translation> + <translation>Einrichtung abgeschlossen.</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="93"/> - <source>Downloading '%1' plugin (%2/%3)...</source> - <translation type="unfinished"></translation> + <source>Downloading '%1' plugin (%2/%3)...</source> + <translation>Lade Plugin '%1' herunter (%2/%3) ...</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="104"/> <source>Plugins installed successfully.</source> - <translation type="unfinished"></translation> + <translation>Plugins erfolgreich installiert.</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="120"/> <source>Generating SSL certificate...</source> - <translation type="unfinished"></translation> + <translation>Erzeuge SSL-Zertifikat ...</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="170"/> <source>Downloading plugin: %1 (1/%2)</source> - <translation type="unfinished"></translation> + <translation>Lade Plugin herunter: %1 (1/%2)</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="239"/> <source>Getting plugin list...</source> - <translation type="unfinished"></translation> + <translation>Ermittle Plugin-Liste ...</translation> </message> </context> <context> <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrier Konfigurationen (*.sgc);;Alle Dateien (*.*)</translation> + <source>All files (*.*)</source> + <translation>Alle Dateien (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation>Barrier-Konfigurationen (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier Konfigurationen (*.conf);;Alle Dateien (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation>Barrier-Konfigurationen (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> <source>System tray is unavailable, quitting.</source> - <translation type="finished">Infobereich ist nicht verfügbar. Beende Programm.</translation> + <translation>Systemabschnitt ist nicht verfügbar, beende.</translation> </message> </context> <context> @@ -667,22 +693,22 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/ScreenSettingsDialog.cpp" line="67"/> <source>Screen name is empty</source> - <translation type="finished">Der Anzeigename ist leer</translation> + <translation>Bildschirmname ist leer</translation> </message> <message> <location filename="src/ScreenSettingsDialog.cpp" line="68"/> <source>The screen name cannot be empty. Please either fill in a name or cancel the dialog.</source> - <translation type="finished">Der Bildschirmname darf nicht leer sein. Bitte trage einen Namen ein oder schließe das Fenster.</translation> + <translation>Der Bildschirmname darf nicht leer sein. Bitte einen Namen eintragen oder das Dialogfenster abbrechen.</translation> </message> <message> <location filename="src/ScreenSettingsDialog.cpp" line="83"/> <source>Screen name matches alias</source> - <translation type="finished">Der Anzeigename passt zum Alias</translation> + <translation>Bildschirmname passt zum Alias</translation> </message> <message> <location filename="src/ScreenSettingsDialog.cpp" line="84"/> <source>The screen name cannot be the same as an alias. Please either remove the alias or change the screen name.</source> - <translation type="finished">Der Anzeigename kann nicht derselbe sein wie der Alias. Bitte entfernen sie den Alias oder ändern sie den Anzeigenamen.</translation> + <translation>Der Bildschirmname kann nicht derselbe sein wie ein Alias. Bitte entfernen sie den Alias oder ändern sie den Bildschirmnamen.</translation> </message> </context> <context> @@ -690,37 +716,37 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/ScreenSettingsDialogBase.ui" line="14"/> <source>Screen Settings</source> - <translation type="finished">Anzeigeeinstellungen</translation> + <translation>Bildschirmeinstellungen</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="22"/> <source>Screen &name:</source> - <translation type="finished">Anzeige&name:</translation> + <translation>Bildschirm&name:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="42"/> <source>A&liases</source> - <translation type="finished">A&liase</translation> + <translation>A&liase</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="57"/> <source>&Add</source> - <translation type="finished">&Hinzufügen</translation> + <translation>&Hinzufügen</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="74"/> <source>&Remove</source> - <translation type="finished">&Entfernen</translation> + <translation>&Entfernen</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="97"/> <source>&Modifier keys</source> - <translation type="finished">&Zusatztasten</translation> + <translation>&Zusatztasten</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="106"/> <source>&Shift:</source> - <translation type="finished">Um&schalt:</translation> + <translation>Um&schalt:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="117"/> @@ -729,7 +755,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="258"/> <location filename="res/ScreenSettingsDialogBase.ui" line="305"/> <source>Shift</source> - <translation type="finished">Umschalt</translation> + <translation>Umschalt</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="122"/> @@ -738,7 +764,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="263"/> <location filename="res/ScreenSettingsDialogBase.ui" line="310"/> <source>Ctrl</source> - <translation type="finished">Strg</translation> + <translation>Strg</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="127"/> @@ -747,7 +773,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="268"/> <location filename="res/ScreenSettingsDialogBase.ui" line="315"/> <source>Alt</source> - <translation type="finished">Alt</translation> + <translation>Alt</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="132"/> @@ -756,7 +782,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="273"/> <location filename="res/ScreenSettingsDialogBase.ui" line="320"/> <source>Meta</source> - <translation type="finished">Meta</translation> + <translation>Meta</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="137"/> @@ -765,7 +791,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="278"/> <location filename="res/ScreenSettingsDialogBase.ui" line="325"/> <source>Super</source> - <translation type="finished">Windows</translation> + <translation>Windows</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="142"/> @@ -774,82 +800,82 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="283"/> <location filename="res/ScreenSettingsDialogBase.ui" line="330"/> <source>None</source> - <translation type="finished">Keine</translation> + <translation>Keine</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="150"/> <source>&Ctrl:</source> - <translation type="finished">&Strg:</translation> + <translation>&Strg:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="197"/> <source>Al&t:</source> - <translation type="finished">Al&t:</translation> + <translation>Al&t:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="244"/> <source>M&eta:</source> - <translation type="finished">M&eta:</translation> + <translation>M&eta:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="291"/> <source>S&uper:</source> - <translation type="finished">S&uper:</translation> + <translation>S&uper:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="358"/> <source>&Dead corners</source> - <translation type="finished">"&Tote" Ecken</translation> + <translation>"&Tote" Ecken</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="367"/> <source>Top-left</source> - <translation type="finished">Oben-links</translation> + <translation>Oben links</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="374"/> <source>Top-right</source> - <translation type="finished">Oben-rechts</translation> + <translation>Oben rechts</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="381"/> <source>Bottom-left</source> - <translation type="finished">Unten-links</translation> + <translation>Unten links</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="388"/> <source>Bottom-right</source> - <translation type="finished">Unten-rechts</translation> + <translation>Unten rechts</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="397"/> <source>Corner Si&ze:</source> - <translation type="finished">&Größe:</translation> + <translation>Ecken&größe:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="428"/> <source>&Fixes</source> - <translation type="finished">&Korrekturen</translation> + <translation>&Korrekturen</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="437"/> <source>Fix CAPS LOCK key</source> - <translation type="finished">Korrektur für Feststelltaste</translation> + <translation>Korrektur für Feststelltaste</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="444"/> <source>Fix NUM LOCK key</source> - <translation type="finished">Korrektur für Num Lock</translation> + <translation>Korrektur für Num-Lock-Taste</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="451"/> <source>Fix SCROLL LOCK key</source> - <translation type="finished">Korrektur für Scroll Lock</translation> + <translation>Korrektur für Rollen-Taste</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="458"/> <source>Fix XTest for Xinerama</source> - <translation type="finished">Korrektur für XTest mit Xinerama</translation> + <translation>Korrektur für XTest für Xinerama</translation> </message> </context> <context> @@ -857,7 +883,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/ScreenSetupModel.cpp" line="51"/> <source><center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it</source> - <translation type="finished"><center>Anzeige: <b>%1</b></center><br>Klicken Sie doppelt um die Einstellungen zu ändern<br>Ziehen Sie die Anzeige in den Papierkorb um sie zu entfernen</translation> + <translation><center>Bildschirm: <b>%1</b></center><br>Doppelklick, um die Einstellungen zu ändern<br>Bildschirm in den Papierkorb ziehen, um ihn zu entfernen</translation> </message> </context> <context> @@ -865,7 +891,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/ServerConfigDialog.cpp" line="75"/> <source>Configure server</source> - <translation type="unfinished"></translation> + <translation>Server konfigurieren</translation> </message> </context> <context> @@ -873,168 +899,168 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/ServerConfigDialogBase.ui" line="14"/> <source>Server Configuration</source> - <translation type="finished">Server Konfiguration</translation> + <translation>Server-Konfiguration</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="24"/> <source>Screens and links</source> - <translation type="finished">Anzeigen und Verbindungen</translation> + <translation>Bildschirme und Verbindungen</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="35"/> <source>Drag a screen from the grid to the trashcan to remove it.</source> - <translation type="finished">Ziehen Sie eine Anzeige vom Raster in den Papierkorb um sie zu entfernen.</translation> + <translation>Ziehen Sie einen Bildschirm auf dem Gitter in den Papierkorb, um ihn zu entfernen.</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="60"/> <source>Configure the layout of your barrier server configuration.</source> - <translation type="finished">Konfigurieren Sie die Anordnung Ihrer Barrier Server Konfiguration.</translation> + <translation>Konfigurieren Sie die Anordnung Ihrer Barrier-Server-Konfiguration.</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="73"/> <source>Drag this button to the grid to add a new screen.</source> - <translation type="finished">Ziehen diese Symbol auf das Raster um eine neue Anzeige hinzuzufügen.</translation> + <translation>Ziehen Sie dieses Symbol auf das Gitter, um einen neuen Bildschirm hinzuzufügen.</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="128"/> <source>Drag new screens to the grid or move existing ones around. Drag a screen to the trashcan to delete it. Double click on a screen to edit its settings.</source> - <translation type="finished">Ziehen Sie neue Anzeigen auf das Raster oder verschieben sie existierende. -Ziehen Sie eine Anzeige in den Papierkorb um sie zu entfernen. -Klicken sie doppelt auf eine Anzeige um die Einstellungen zu bearbeiten.</translation> + <translation>Ziehen Sie neue Bildschirme auf das Gitter oder verschieben sie existierende. +Ziehen Sie einen Bildschirm in den Papierkorb, um ihn zu entfernen. +Klicken Sie doppelt auf einen Bildschirm, um dessen Einstellungen zu bearbeiten.</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="157"/> <source>Hotkeys</source> - <translation type="finished">Hotkeys</translation> + <translation>Hotkeys</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="163"/> <source>&Hotkeys</source> - <translation type="finished">&Hotkeys</translation> + <translation>&Hotkeys</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="175"/> <source>&New</source> - <translation type="finished">&Neu</translation> + <translation>&Neu</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="185"/> <source>&Edit</source> - <translation type="finished">&Bearbeiten</translation> + <translation>&Bearbeiten</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="195"/> <source>&Remove</source> - <translation type="finished">&Entfernen</translation> + <translation>&Entfernen</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="218"/> <source>A&ctions</source> - <translation type="finished">&Befehle</translation> + <translation>&Befehle</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="230"/> <source>Ne&w</source> - <translation type="finished">Ne&u</translation> + <translation>Ne&u</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="240"/> <source>E&dit</source> - <translation type="finished">Än&dern</translation> + <translation>Än&dern</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="250"/> <source>Re&move</source> - <translation type="finished">&Entfernen</translation> + <translation>&Entfernen</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="274"/> <source>Advanced server settings</source> - <translation type="finished">Erwiterte Servereinstellungen</translation> + <translation>Erweiterte Server-Einstellungen</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="280"/> <source>&Switch</source> - <translation type="finished">Wech&sel</translation> + <translation>Wech&seln</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="291"/> <source>Switch &after waiting</source> - <translation type="finished">Wechsel n&ach Wartezeit</translation> + <translation>Wechseln n&ach Wartezeit</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="330"/> <location filename="res/ServerConfigDialogBase.ui" line="383"/> <location filename="res/ServerConfigDialogBase.ui" line="458"/> <source>ms</source> - <translation type="finished">ms</translation> + <translation>ms</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="344"/> <source>Switch on double &tap within</source> - <translation type="finished">Wechsel nach doppel&ter Randberührung innerhalb von</translation> + <translation>Wechsel nach doppel&ter Randberührung innerhalb von</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="408"/> <source>&Options</source> - <translation type="finished">&Optionen</translation> + <translation>&Optionen</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="419"/> <source>&Check clients every</source> - <translation type="finished">Prüfe auf Meldungen vom &Client aller</translation> + <translation>Prüfe &Clients alle</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="470"/> <source>Use &relative mouse moves</source> - <translation type="finished">Ve&rwende relative Mausbewegungen</translation> + <translation>Ve&rwende relative Mausbewegungen</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="480"/> <source>S&ynchronize screen savers</source> - <translation type="finished">Bildschirmschoner s&ynchronisieren</translation> + <translation>Bildschirmschoner s&ynchronisieren</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="490"/> - <source>Don't take &foreground window on Windows servers</source> - <translation type="finished">Auf Windows Servern &Fenster im Vordergrund nicht aktivieren</translation> + <source>Don't take &foreground window on Windows servers</source> + <translation>Auf Windows-Servern &Fenster im Vordergrund nicht aktivieren</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="510"/> <source>Ignore auto config clients</source> - <translation type="unfinished"></translation> + <translation>Ignoriere Autoconfig-Clients</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="520"/> <source>&Dead corners</source> - <translation type="finished">"&Tote" Ecken</translation> + <translation>"&Tote" Ecken</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="529"/> <source>To&p-left</source> - <translation type="finished">O&ben-links</translation> + <translation>O&ben links</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="536"/> <source>Top-rig&ht</source> - <translation type="finished">Oben-rec&hts</translation> + <translation>Oben rec&hts</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="543"/> <source>&Bottom-left</source> - <translation type="finished">&Unten-links</translation> + <translation>&Unten links</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="550"/> <source>Bottom-ri&ght</source> - <translation type="finished">Unten-rec&hts</translation> + <translation>Unten rec&hts</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="572"/> <source>Cor&ner Size:</source> - <translation type="finished">&Größe:</translation> + <translation>Ecken&größe:</translation> </message> </context> <context> @@ -1042,20 +1068,20 @@ Klicken sie doppelt auf eine Anzeige um die Einstellungen zu bearbeiten.</transl <message> <location filename="src/SettingsDialog.cpp" line="131"/> <source>Save log file to...</source> - <translation type="finished">Speicherort des Logfiles</translation> + <translation>Logfile speichern nach ...</translation> </message> <message> <location filename="src/SettingsDialog.cpp" line="151"/> <source>Elevate Barrier</source> - <translation type="finished">Barrier Befördern</translation> + <translation>Barrier als Admin ausführen</translation> </message> <message> <location filename="src/SettingsDialog.cpp" line="152"/> <source>Are you sure you want to elevate Barrier? This allows Barrier to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Barrier only if you really need to.</source> - <translation type="finished">Sind Sie sicher das Sie Barrier Erweiterte Benutzerrechte einräumen wollen? -Das erlaubt Barrier mit Prozessen die höhere Rechte haben und dem UAC-Dialog zu interagieren, kann aber bei normalen Prozessen Probleme verursachen. Erweiterte Rechte an Barrier bitte nur vergeben wenn es unbedingt nötig ist.</translation> + <translation>Sind Sie sicher, dass Sie Barrier erweiterte Benutzerrechte einräumen wollen? +Das erlaubt Barrier, mit Prozessen, die höhere Rechte haben, und dem UAC-Dialog zu interagieren, kann aber bei normalen Prozessen Probleme verursachen. Erweiterte Rechte an Barrier bitte nur vergeben, wenn es unbedingt nötig ist.</translation> </message> </context> <context> @@ -1063,107 +1089,107 @@ Das erlaubt Barrier mit Prozessen die höhere Rechte haben und dem UAC-Dialog zu <message> <location filename="res/SettingsDialogBase.ui" line="14"/> <source>Settings</source> - <translation type="finished">Einstellungen</translation> + <translation>Einstellungen</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="32"/> <source>Sc&reen name:</source> - <translation type="finished">&Anzeigename:</translation> + <translation>&Bildschirmname:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="49"/> <source>P&ort:</source> - <translation type="finished">P&ort:</translation> + <translation>P&ort:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="78"/> <source>&Interface:</source> - <translation type="finished">Schn&ittstelle</translation> + <translation>Schn&ittstelle</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="120"/> <source>Elevate mode</source> - <translation type="unfinished"></translation> + <translation>Admin-Modus</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="127"/> <source>&Hide on startup</source> - <translation type="unfinished"></translation> + <translation>Beim Starten &verstecken</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="146"/> <source>&Network Security</source> - <translation type="unfinished"></translation> + <translation>&Netzwerksicherheit</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="155"/> <source>Use &SSL encryption (unique certificate)</source> - <translation type="unfinished"></translation> + <translation>Verwende &SSL-Verschlüsselung (eindeutiges Zertifikat)</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="184"/> <source>Logging</source> - <translation type="finished">Protokollierung</translation> + <translation>Protokollierung</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="202"/> <source>&Logging level:</source> - <translation type="finished">&Umfang:</translation> + <translation>&Umfang:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="251"/> <source>Log to file:</source> - <translation type="finished">In Datei:</translation> + <translation>Protokolliere in Datei:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="268"/> <source>Browse...</source> - <translation type="finished">Durchsuchen...</translation> + <translation>Durchsuchen ...</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="213"/> <source>Error</source> - <translation type="finished">Fehler</translation> + <translation>Fehler</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="107"/> <source>&Language:</source> - <translation type="finished">Sprache:</translation> + <translation>Sprache:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="20"/> <source>&Miscellaneous</source> - <translation type="finished">&Sonstiges</translation> + <translation>&Sonstiges</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="218"/> <source>Warning</source> - <translation type="finished">Warnung</translation> + <translation>Warnung</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="223"/> <source>Note</source> - <translation type="finished">Hinweis</translation> + <translation>Hinweis</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="228"/> <source>Info</source> - <translation type="finished">Info</translation> + <translation>Info</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="233"/> <source>Debug</source> - <translation type="finished">Debug</translation> + <translation>Debug</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="238"/> <source>Debug1</source> - <translation type="finished">Debug1</translation> + <translation>Debug1</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="243"/> <source>Debug2</source> - <translation type="finished">Debug2</translation> + <translation>Debug2</translation> </message> </context> <context> @@ -1171,17 +1197,17 @@ Das erlaubt Barrier mit Prozessen die höhere Rechte haben und dem UAC-Dialog zu <message> <location filename="src/SetupWizard.cpp" line="72"/> <source>Setup Barrier</source> - <translation type="finished">Barrier einrichten</translation> + <translation>Barrier einrichten</translation> </message> <message> <location filename="src/SetupWizard.cpp" line="113"/> <source>Please select an option.</source> - <translation type="finished">Bitte wählen Sie eine option aus.</translation> + <translation>Bitte wählen Sie eine Option aus.</translation> </message> <message> <location filename="src/SetupWizard.cpp" line="80"/> <source>Please enter your email address and password.</source> - <translation type="finished">Bitte geben Sie Ihre E-Mail Adresse und Ihr Passwort ein.</translation> + <translation>Bitte geben Sie Ihre E-Mail-Adresse und Ihr Passwort ein.</translation> </message> </context> <context> @@ -1189,85 +1215,93 @@ Das erlaubt Barrier mit Prozessen die höhere Rechte haben und dem UAC-Dialog zu <message> <location filename="res/SetupWizardBase.ui" line="26"/> <source>Setup Barrier</source> - <translation type="finished">Barrier einrichten</translation> + <translation>Barrier einrichten</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="30"/> <source>Welcome</source> - <translation type="finished">Willkommen</translation> + <translation>Willkommen</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="39"/> <source>Thanks for installing Barrier!</source> - <translation type="finished">Danke, dass du Barrier installiert hast!</translation> + <translation>Danke, dass Sie Barrier installiert haben!</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="114"/> - <source>Barrier lets you easily share your mouse and keyboard between multiple computers on your desk, and it's Free and Open Source. Just move your mouse off the edge of one computer's screen on to another. You can even share all of your clipboards. All you need is a network connection. Barrier is cross-platform (works on Windows, Mac OS X and Linux).</source> - <translation type="finished">Mit Barrier können Sie einfach Ihre Tastatur und Maus an mehreren Computern auf Ihrem Schreibtisch nutzen, und es ist Frei und Open Source. Bewegen Sie einfach ihre Maus über den Rand des Bildschirms eines Computers auf den Bildschirm eines anderen. Sie können sogar den Inhalt ihrer Zwischenablage an alle Computer verteilen. Alles was Sie brauchen ist ein Netzwerk-Anschluss. Barrier funktioniert auf Windows, Mac OS X und Linux.</translation> + <source>Barrier lets you easily share your mouse and keyboard between multiple computers on your desk, and it's Free and Open Source. Just move your mouse off the edge of one computer's screen on to another. You can even share all of your clipboards. All you need is a network connection. Barrier is cross-platform (works on Windows, Mac OS X and Linux).</source> + <translation>Mit Barrier können Sie einfach Ihre Tastatur und Maus mit mehreren Computern auf Ihrem Schreibtisch teilen, und es ist frei und Open Source. Bewegen Sie einfach ihre Maus über den Rand des Bildschirms eines Computers auf den Bildschirm eines anderen. Sie können sogar den Inhalt ihrer Zwischenablage teilen. Alles, was Sie brauchen, ist ein Netzwerk-Verbindung. Barrier ist betriebssystemübergreifend (funktioniert auf Windows, Mac OS X und Linux).</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="125"/> <source>Activate</source> - <translation type="unfinished"></translation> + <translation>Aktivieren</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="131"/> <source>&Activate now...</source> - <translation type="unfinished"></translation> + <translation>Jetzt &aktivieren ...</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="152"/> <source>Email:</source> - <translation type="unfinished"></translation> + <translation>E-Mail:</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="178"/> <source>Password:</source> - <translation type="unfinished"></translation> + <translation>Passwort:</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="204"/> <source><a href="https://symless.com/account/reset/">Forgot password</a></source> - <translation type="unfinished"></translation> + <translation><a href="https://symless.com/account/reset/">Passwort vergessen</a></translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="232"/> <source>&Skip activation</source> - <translation type="unfinished"></translation> + <translation>Aktivierung über&springen</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="277"/> - <source>&Server (share this computer's mouse and keyboard)</source> - <translation type="unfinished"></translation> + <source>&Server (share this computer's mouse and keyboard)</source> + <translation>&Server (Maus und Tastatur dieses Rechners teilen)</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="290"/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">My main mouse and keyboard are connected to this computer. This will allow you to move your mouse over to another computer's screen. There can only be one server in your setup.</span></p></body></html></source> - <translation type="unfinished"></translation> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">My main mouse and keyboard are connected to this computer. This will allow you to move your mouse over to another computer's screen. There can only be one server in your setup.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Meine Haupt-Maus und -Tastatur sind mit diesem Rechner verbunden. Das ermöglicht Ihnen, den Mauszeiger zum Bildschirm eines anderen Rechners zu bewegen. Es kann nur ein Server in Ihren Einstellungen vorhanden sein.</span></p></body></html></translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="326"/> - <source>&Client (use another computer's mouse and keyboard)</source> - <translation type="unfinished"></translation> + <source>&Client (use another computer's mouse and keyboard)</source> + <translation>&Client (Maus und Tastatur eines anderen Rechners benutzen)</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="339"/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You have already set up a server. This computer will be controlled using the server's mouse and keyboard. There can be many clients in your setup.</span></p></body></html></source> - <translation type="unfinished"></translation> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You have already set up a server. This computer will be controlled using the server's mouse and keyboard. There can be many clients in your setup.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Sie haben bereits einen Server eingerichtet. Dieser Rechner wird von der Maus und Tastatur des Servers kontrolliert. Es kann viele Clients in Ihren Einstellungen geben.</span></p></body></html></translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="262"/> <source>Server or Client?</source> - <translation type="finished">Server oder Client?</translation> + <translation>Server oder Client?</translation> </message> </context> <context> @@ -1275,22 +1309,22 @@ p, li { white-space: pre-wrap; } <message> <location filename="src/SslCertificate.cpp" line="42"/> <source>Failed to get profile directory.</source> - <translation type="unfinished"></translation> + <translation>Profil-Verzeichnis kann nicht ermittelt werden.</translation> </message> <message> <location filename="src/SslCertificate.cpp" line="141"/> <source>SSL certificate generated.</source> - <translation type="unfinished"></translation> + <translation>SSZ-Zertifikat erzeugt.</translation> </message> <message> <location filename="src/SslCertificate.cpp" line="170"/> <source>SSL fingerprint generated.</source> - <translation type="unfinished"></translation> + <translation>SSL-Fingerabdruck erzeugt.</translation> </message> <message> <location filename="src/SslCertificate.cpp" line="173"/> <source>Failed to find SSL fingerprint.</source> - <translation type="unfinished"></translation> + <translation>SSL-Fingerabdruck kann nicht gefunden werden.</translation> </message> </context> <context> @@ -1298,7 +1332,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="src/VersionChecker.cpp" line="102"/> <source>Unknown</source> - <translation type="finished">Unbekannt</translation> + <translation>Unbekannt</translation> </message> </context> <context> @@ -1308,19 +1342,22 @@ p, li { white-space: pre-wrap; } <source>An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. %1</source> - <translation type="unfinished"></translation> + <translation>Ein Fehler ist beim Einloggen aufgetreten. Bitte kontaktieren Sie das Helpdesk und halten Sie die folgenden Informationen bereit. + +%1</translation> </message> <message> <location filename="src/WebClient.cpp" line="65"/> <source>Login failed, invalid email or password.</source> - <translation type="finished">Login fehlgeschlagen, falsche E-Mail Adresse oder Passwort.</translation> + <translation>Login fehlgeschlagen, E-Mail-Adresse oder Passwort ungültig.</translation> </message> <message> <location filename="src/WebClient.cpp" line="78"/> <source>Login failed, an error occurred. %1</source> - <translation type="finished">Login fehlgeschlagen, ein Fehler ist aufgetreten. + <translation>Login fehlgeschlagen, ein Fehler ist aufgetreten. + %1</translation> </message> <message> @@ -1330,8 +1367,10 @@ p, li { white-space: pre-wrap; } Server response: %1</source> - <translation type="finished">Login fehlgeschlagen, ein Fehler ist aufgetreten. -Serverantwort: + <translation>Login fehlgeschlagen, ein Fehler ist aufgetreten. + +Server-Antwort: + %1</translation> </message> <message> @@ -1339,19 +1378,23 @@ Serverantwort: <source>An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. %1</source> - <translation type="unfinished"></translation> + <translation>Ein error ist bei der Abfrage der Plugin-Liste aufgetreten. Bitte kontaktieren Sie das Helpdesk und halten Sie die folgenden Informationen bereit. + +%1</translation> </message> <message> <location filename="src/WebClient.cpp" line="120"/> <source>Get plugin list failed, invalid user email or password.</source> - <translation type="unfinished"></translation> + <translation>Konnte Plugin-Liste nicht ermitteln, E-Mail-Adresse oder Passwort ungültig.</translation> </message> <message> <location filename="src/WebClient.cpp" line="131"/> <source>Get plugin list failed, an error occurred. %1</source> - <translation type="unfinished"></translation> + <translation>Konnte Plugin-Liste nicht ermitteln, ein Fehler ist aufgetreten. + +%1</translation> </message> <message> <location filename="src/WebClient.cpp" line="137"/> @@ -1360,7 +1403,11 @@ Serverantwort: Server response: %1</source> - <translation type="unfinished"></translation> + <translation>Konnte Plugin-Liste nicht ermitteln, ein Fehler ist aufgetreten. + +Server-Antwort: + +%1</translation> </message> </context> <context> @@ -1368,44 +1415,44 @@ Server response: <message> <location filename="src/ZeroconfService.cpp" line="82"/> <source>zeroconf server detected: %1</source> - <translation type="unfinished"></translation> + <translation>Zeroconf-Server erkannt: %1</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="91"/> <source>zeroconf client detected: %1</source> - <translation type="unfinished"></translation> + <translation>Zeroconf-Client erkannt: %1</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="99"/> <location filename="src/ZeroconfService.cpp" line="130"/> <source>Zero configuration service</source> - <translation type="unfinished"></translation> + <translation>Zero-Configuration-Dienst</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="100"/> <source>Error code: %1.</source> - <translation type="unfinished"></translation> + <translation>Fehlercode: %1.</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="131"/> <source>Unable to start the zeroconf: %1.</source> - <translation type="unfinished"></translation> + <translation>Zeroconf konnte nicht gestartet werden: %1.</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="140"/> <source>Barrier</source> - <translation type="finished">Barrier</translation> + <translation>Barrier</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="141"/> <source>Failed to get local IP address. Please manually type in server address on your clients</source> - <translation type="unfinished"></translation> + <translation>Lokale IP-Adresse nicht ermittelbar. Bitte die Server-Adresse an den Clients manuell eingeben</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="147"/> <location filename="src/ZeroconfService.cpp" line="154"/> <source>%1</source> - <translation type="unfinished"></translation> + <translation>%1</translation> </message> </context> -</TS>
\ No newline at end of file +</TS> diff --git a/src/gui/res/lang/gui_es.qm b/src/gui/res/lang/gui_es.qm Binary files differindex d09974e..1a8735d 100644 --- a/src/gui/res/lang/gui_es.qm +++ b/src/gui/res/lang/gui_es.qm diff --git a/src/gui/res/lang/gui_es.ts b/src/gui/res/lang/gui_es.ts index 4b3523a..39fb569 100644 --- a/src/gui/res/lang/gui_es.ts +++ b/src/gui/res/lang/gui_es.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Configuraciones Barrier (*.sgc);;Todos los archivos (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Todos los archivos (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Configuraciones Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Configuraciones Barrier (*.conf);;Todos los archivos (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Configuraciones Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_et-EE.qm b/src/gui/res/lang/gui_et-EE.qm Binary files differindex 7c2fc9b..2c8fe11 100644 --- a/src/gui/res/lang/gui_et-EE.qm +++ b/src/gui/res/lang/gui_et-EE.qm diff --git a/src/gui/res/lang/gui_et-EE.ts b/src/gui/res/lang/gui_et-EE.ts index 033b9d7..ddbf6f7 100644 --- a/src/gui/res/lang/gui_et-EE.ts +++ b/src/gui/res/lang/gui_et-EE.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrier seaded (*.sgc);;kõik failid (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Kõik failid (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Barrier seaded (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier seaded (*.conf);;Kõik failid (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Barrier seaded (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_fi.qm b/src/gui/res/lang/gui_fi.qm Binary files differindex 1e7178c..7a8ae49 100644 --- a/src/gui/res/lang/gui_fi.qm +++ b/src/gui/res/lang/gui_fi.qm diff --git a/src/gui/res/lang/gui_fi.ts b/src/gui/res/lang/gui_fi.ts index e5aea17..6609da9 100644 --- a/src/gui/res/lang/gui_fi.ts +++ b/src/gui/res/lang/gui_fi.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrier Configuration (*.sgc);;Kaikki tiedostot (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Kaikki tiedostot (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Barrier Configuration (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier Configuration (*.conf);;Kaikki tiedostot (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Barrier Configuration (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_fr.qm b/src/gui/res/lang/gui_fr.qm Binary files differindex 38116ce..a68df9d 100644 --- a/src/gui/res/lang/gui_fr.qm +++ b/src/gui/res/lang/gui_fr.qm diff --git a/src/gui/res/lang/gui_fr.ts b/src/gui/res/lang/gui_fr.ts index ed37997..66258ed 100644 --- a/src/gui/res/lang/gui_fr.ts +++ b/src/gui/res/lang/gui_fr.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Configuration Barrier (*.sgc);; Tous les fichiers (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Tous les fichiers (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Configuration Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier Configurations (*.conf);;All files (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Configuration Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_gl.ts b/src/gui/res/lang/gui_gl.ts index 2f89802..e0a95b7 100644 --- a/src/gui/res/lang/gui_gl.ts +++ b/src/gui/res/lang/gui_gl.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_grk.ts b/src/gui/res/lang/gui_grk.ts index ffbede5..751db12 100644 --- a/src/gui/res/lang/gui_grk.ts +++ b/src/gui/res/lang/gui_grk.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_he.qm b/src/gui/res/lang/gui_he.qm Binary files differindex 43fa7af..9bbf530 100644 --- a/src/gui/res/lang/gui_he.qm +++ b/src/gui/res/lang/gui_he.qm diff --git a/src/gui/res/lang/gui_he.ts b/src/gui/res/lang/gui_he.ts index 5a1ddcf..2850e83 100644 --- a/src/gui/res/lang/gui_he.ts +++ b/src/gui/res/lang/gui_he.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">קבצי הגדרות של Barrier (*.sgc);;All Files (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">All Files (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">קבצי הגדרות של Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">קבצי הגדרות של Barrier (*.conf);;All Files (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">קבצי הגדרות של Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_hi.ts b/src/gui/res/lang/gui_hi.ts index 57b409e..460a1bc 100644 --- a/src/gui/res/lang/gui_hi.ts +++ b/src/gui/res/lang/gui_hi.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_hr-HR.qm b/src/gui/res/lang/gui_hr-HR.qm Binary files differindex a7e5563..9dd5d45 100644 --- a/src/gui/res/lang/gui_hr-HR.qm +++ b/src/gui/res/lang/gui_hr-HR.qm diff --git a/src/gui/res/lang/gui_hr-HR.ts b/src/gui/res/lang/gui_hr-HR.ts index 4695e4e..c9883ed 100644 --- a/src/gui/res/lang/gui_hr-HR.ts +++ b/src/gui/res/lang/gui_hr-HR.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrier postavke (*.sgc);;Sve datoteke (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Sve datoteke (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Barrier postavke (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier postavke (*.conf);;Sve datoteke (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Barrier postavke (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_hu-HU.qm b/src/gui/res/lang/gui_hu-HU.qm Binary files differindex 10361b7..678cc5c 100644 --- a/src/gui/res/lang/gui_hu-HU.qm +++ b/src/gui/res/lang/gui_hu-HU.qm diff --git a/src/gui/res/lang/gui_hu-HU.ts b/src/gui/res/lang/gui_hu-HU.ts index 7c26d46..536c904 100644 --- a/src/gui/res/lang/gui_hu-HU.ts +++ b/src/gui/res/lang/gui_hu-HU.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrier konfiguráció (*.sgc);;Minden fájl (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Minden fájl (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Barrier konfiguráció (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier konfiguráció (*.conf);;Minden fájl (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Barrier konfiguráció (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_id.ts b/src/gui/res/lang/gui_id.ts index ed52252..1552cb8 100644 --- a/src/gui/res/lang/gui_id.ts +++ b/src/gui/res/lang/gui_id.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_is-IS.ts b/src/gui/res/lang/gui_is-IS.ts index 2764171..4a76edd 100644 --- a/src/gui/res/lang/gui_is-IS.ts +++ b/src/gui/res/lang/gui_is-IS.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_it.qm b/src/gui/res/lang/gui_it.qm Binary files differindex bc8dc7e..9ba0ea0 100644 --- a/src/gui/res/lang/gui_it.qm +++ b/src/gui/res/lang/gui_it.qm diff --git a/src/gui/res/lang/gui_it.ts b/src/gui/res/lang/gui_it.ts index c1096dd..c0a6c58 100644 --- a/src/gui/res/lang/gui_it.ts +++ b/src/gui/res/lang/gui_it.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Configurazioni di Barrier (*.sgc);;Tutti i files (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Tutti i files (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Configurazioni di Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Configurazioni di Barrier (*.conf);;Tutti i files (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Configurazioni di Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_ja-JP.qm b/src/gui/res/lang/gui_ja-JP.qm Binary files differindex 90ff995..7209979 100644 --- a/src/gui/res/lang/gui_ja-JP.qm +++ b/src/gui/res/lang/gui_ja-JP.qm diff --git a/src/gui/res/lang/gui_ja-JP.ts b/src/gui/res/lang/gui_ja-JP.ts index e7ff5bd..1d80d2d 100644 --- a/src/gui/res/lang/gui_ja-JP.ts +++ b/src/gui/res/lang/gui_ja-JP.ts @@ -1,12 +1,14 @@ -<?xml version="1.0" encoding="utf-8"?><!DOCTYPE TS><TS language="ja-JP" sourcelanguage="en" version="2.0"> +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="ja_JP" sourcelanguage="en"> <context> <name>AboutDialogBase</name> <message> <location filename="res/AboutDialogBase.ui" line="38"/> <source>About Barrier</source> - <translation type="finished">Barrierについて</translation> + <translation>Barrier について</translation> </message> - <message utf8="true"> + <message> <location filename="res/AboutDialogBase.ui" line="53"/> <source><p> Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> @@ -26,22 +28,30 @@ Barrier is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> The Barrier GUI is based on QSynergy by Volker Lanz.<br /><br /> Visit our website for help and info (symless.com). </p></oldsource> - <translation type="unfinished"></translation> + <translation type="unfinished"><p> +キーボードとマウスの共有ソフトウェアです。クロスプラットフォームでオープンソースです。<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Barrier は GNU General Public (GPLv2). のライセンスで公開されています。<br /><br /> +Barrier のベースは CosmoSynergy (Richard Lee, Adam Feder 開発) です。<br /> +Barrier の GUI は QSynergy (Volker Lanz 開発) がベースです。<br /><br /> +Visit our website for help and info (symless.com). +</p></translation> </message> <message> <location filename="res/AboutDialogBase.ui" line="140"/> <source>Unknown</source> - <translation type="finished">不明</translation> + <translation>不明</translation> </message> <message> <location filename="res/AboutDialogBase.ui" line="124"/> <source>Version:</source> - <translation type="finished">バージョン:</translation> + <translation>バージョン:</translation> </message> <message> <location filename="res/AboutDialogBase.ui" line="163"/> <source>&Ok</source> - <translation type="finished">OK</translation> + <translation>OK(&O)</translation> </message> </context> <context> @@ -49,97 +59,97 @@ Visit our website for help and info (symless.com). <message> <location filename="res/ActionDialogBase.ui" line="14"/> <source>Configure Action</source> - <translation type="finished">動作を構成</translation> + <translation>アクションの設定</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="20"/> <source>Choose the action to perform</source> - <translation type="finished">実行する動作を選択</translation> + <translation>実行するアクションを選択</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="26"/> <source>Press a hotkey</source> - <translation type="finished">ホットキーを押す</translation> + <translation>ホットキーを押す</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="36"/> <source>Release a hotkey</source> - <translation type="finished">ホットキーを離す</translation> + <translation>ホットキーを離す</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="43"/> <source>Press and release a hotkey</source> - <translation type="finished">ホットキーを押して離す</translation> + <translation>ホットキーを押して離す</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="69"/> <source>only on these screens</source> - <translation type="finished">これらの画面だけ</translation> + <translation>これらのモニターのみにする</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="119"/> <source>Switch to screen</source> - <translation type="finished">画面に切り替え</translation> + <translation>モニターを切り替え</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="150"/> <source>Switch in direction</source> - <translation type="finished">切り替える方向</translation> + <translation>切り替える方向</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="174"/> <source>left</source> - <translation type="finished">左</translation> + <translation>左</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="179"/> <source>right</source> - <translation type="finished">右</translation> + <translation>右</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="184"/> <source>up</source> - <translation type="finished">上</translation> + <translation>上</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="189"/> <source>down</source> - <translation type="finished">下</translation> + <translation>下</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="201"/> <source>Lock cursor to screen</source> - <translation type="finished">カーソルを画面に限定</translation> + <translation type="unfinished">カーソルを画面に限定</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="225"/> <source>toggle</source> - <translation type="finished">切り替え</translation> + <translation>切り替え</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="230"/> <source>on</source> - <translation type="finished">オン</translation> + <translation>オン</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="235"/> <source>off</source> - <translation type="finished">オフ</translation> + <translation>オフ</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="248"/> <source>This action is performed when</source> - <translation type="finished">この動作を実行する時: </translation> + <translation>このアクション実行のタイミング</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="254"/> <source>the hotkey is pressed</source> - <translation type="finished">ホットキーを押したとき</translation> + <translation>ホットキーを押したとき</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="264"/> <source>the hotkey is released</source> - <translation type="finished">ホットキーを離したとき</translation> + <translation>ホットキーを離したとき</translation> </message> </context> <context> @@ -147,7 +157,7 @@ Visit our website for help and info (symless.com). <message> <location filename="res/AddClientDialogBase.ui" line="20"/> <source>Dialog</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ダイアログ</translation> </message> <message> <location filename="res/AddClientDialogBase.ui" line="35"/> @@ -157,7 +167,7 @@ Visit our website for help and info (symless.com). <message> <location filename="res/AddClientDialogBase.ui" line="83"/> <source>Ignore auto connect clients</source> - <translation type="unfinished"></translation> + <translation type="unfinished">クライアントの自動接続を無視</translation> </message> </context> <context> @@ -165,12 +175,30 @@ Visit our website for help and info (symless.com). <message> <location filename="res/HotkeyDialogBase.ui" line="14"/> <source>Hotkey</source> - <translation type="finished">ホットキー</translation> + <translation>ホットキー</translation> </message> <message> <location filename="res/HotkeyDialogBase.ui" line="20"/> <source>Enter the specification for the hotkey:</source> - <translation type="finished">ホットキーの指定方法を入力してください:</translation> + <translation>ホットキーを入力してください:</translation> + </message> +</context> +<context> + <name>LogWindowBase</name> + <message> + <location filename="res/LogWindowBase.ui" line="26"/> + <source>Log - Barrier</source> + <translation>ログ - Barrier</translation> + </message> + <message> + <location filename="res/LogWindowBase.ui" line="71"/> + <source>&Clear Log</source> + <translation>ログ消去(&C)</translation> + </message> + <message> + <location filename="res/LogWindowBase.ui" line="78"/> + <source>&Hide</source> + <translation>閉じる</translation> </message> </context> <context> @@ -178,189 +206,193 @@ Visit our website for help and info (symless.com). <message> <location filename="src/MainWindow.cpp" line="790"/> <source>&Start</source> - <translation type="finished">開始</translation> + <translation type="unfinished">開始(&S)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="237"/> <source>&File</source> - <translation type="finished">ファイル</translation> + <translation type="unfinished">ファイル(&F)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="238"/> <source>&Edit</source> - <translation type="finished">編集</translation> + <translation type="unfinished">編集(&E)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="239"/> <source>&Window</source> - <translation type="finished">ウィンドウ</translation> + <translation type="unfinished">ウィンドウ(&W)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="240"/> <source>&Help</source> - <translation type="finished">ヘルプ</translation> + <translation type="unfinished">ヘルプ(&H)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="364"/> <source><p>Your version of Barrier is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p></source> <oldsource><p>Version %1 is now available, <a href="%2">visit website</a>.</p></oldsource> - <translation type="unfinished"></translation> + <translation type="unfinished"><p>お使いの Barrier のバージョンが古くなっています。 新しいバージョン <b>%1</b> が<a href="%2">ダウンロード</a>できます。</p></translation> </message> <message> <location filename="src/MainWindow.cpp" line="577"/> <source>Program can not be started</source> - <translation type="finished">プログラムを開始できません</translation> + <translation>プログラムを開始できません</translation> </message> <message> <location filename="src/MainWindow.cpp" line="577"/> <source>The executable<br><br>%1<br><br>could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source> - <translation type="finished">実行ファイル<br><br>%1<br><br>は存在しますが、開始できませんでした。このプログラムを動作させる十分な権限があるかどうか確認してください。</translation> + <translation>実行ファイル<br><br>%1<br><br>は存在しますが、開始できませんでした。このプログラムを動作させる十分な権限があるかどうか確認してください。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="596"/> <source>Barrier client not found</source> - <translation type="finished">Barrierクライアントが見つかりません</translation> + <translation>Barrier のクライアントが見つかりません</translation> </message> <message> <location filename="src/MainWindow.cpp" line="597"/> <source>The executable for the barrier client does not exist.</source> - <translation type="finished">Barrierクライアントの実行ファイルが存在しません。</translation> + <translation>Barrier のクライアントの実行ファイルが存在しません。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="625"/> <source>Hostname is empty</source> - <translation type="finished">ホスト名が入力されていません</translation> + <translation>ホスト名がありません</translation> </message> <message> <location filename="src/MainWindow.cpp" line="626"/> <source>Please fill in a hostname for the barrier client to connect to.</source> - <translation type="finished">Barrierクライアントで接続するホスト名を入力してください。</translation> + <translation>Barrier のクライアントが接続するホスト名を入力してください。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="646"/> <source>Cannot write configuration file</source> - <translation type="finished">構成ファイルに書き込めません</translation> + <translation>構成ファイルに書き込めません</translation> </message> <message> <location filename="src/MainWindow.cpp" line="646"/> <source>The temporary configuration file required to start barrier can not be written.</source> - <translation type="finished">Barrierの開始に必要な一時的な構成ファイルを書き込めません。</translation> + <translation>Barrier の開始に必要な一時的な構成ファイルに書き込めません。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="659"/> <source>Configuration filename invalid</source> - <translation type="finished">構成ファイル名が正しくありません。</translation> + <translation>構成ファイルのファイル名が正しくありません</translation> </message> <message> <location filename="src/MainWindow.cpp" line="660"/> <source>You have not filled in a valid configuration file for the barrier server. Do you want to browse for the configuration file now?</source> - <translation type="finished">Barrierサーバーの正しい構成ファイルを書き込んでいません。今、構成ファイルを閲覧しますか?</translation> + <translation>Barrier のサーバー用の正しい構成ファイルではありません。構成ファイルを開きますか?</translation> </message> <message> <location filename="src/MainWindow.cpp" line="688"/> <source>Barrier server not found</source> - <translation type="finished">Barrierサーバーが見つかりません</translation> + <translation>Barrier のサーバーが見つかりません</translation> </message> <message> <location filename="src/MainWindow.cpp" line="689"/> <source>The executable for the barrier server does not exist.</source> - <translation type="finished">Barrierサーバーの実行ファイルが存在しません。</translation> + <translation>Barrier のサーバーの実行ファイルが存在しません。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="764"/> <source>Barrier terminated with an error</source> - <translation type="finished">Barrierはエラーで終了しました</translation> + <translation>Barrier はエラーで終了しました</translation> </message> <message> <location filename="src/MainWindow.cpp" line="764"/> <source>Barrier terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details.</source> - <translation type="finished">Barrierは予期しない終了コード%1で終了しました。<br><br>詳細はログの出力を参照してください。</translation> + <translation>Barrier は予期しない終了コード %1 で終了しました。<br><br>詳細はログの出力を参照してください。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="783"/> <source>&Stop</source> - <translation type="finished">停止</translation> + <translation>停止(&S)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1038"/> <source>Please add the server (%1) to the grid.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">グリッドにサーバー (%1) を追加してください。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1044"/> <source>Please drag the new client screen (%1) to the desired position on the grid.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">グリッド上の希望する位置に新しいクライアントのモニタ (%1) をドラッグしてください。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1147"/> <source>Failed to detect system architecture.</source> - <translation type="unfinished"></translation> + <translation>システムアーキテクチャの検出に失敗しました。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1165"/> <source>Cancel</source> - <translation type="unfinished"></translation> + <translation>キャンセル</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1189"/> <source>Failed to download Bonjour installer to location: %1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">Bonjour のインストーラーのダウンロードに失敗。場所: %1</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1226"/> <source>Do you want to enable auto config and install Bonjour? This feature helps you establish the connection.</source> - <translation type="unfinished"></translation> + <translation>自動構成を有効にし、Bonjour をインストールしますか? + +この機能は接続を確立するためのお手伝いをします。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1270"/> <source>Auto config feature requires Bonjour. Do you want to install Bonjour?</source> - <translation type="unfinished"></translation> + <translation>自動構成の機能には Bonjour が必要です。 + +Bonjour をインストールしますか?</translation> </message> <message> <location filename="src/MainWindow.cpp" line="815"/> <source>Barrier is starting.</source> - <translation type="finished">Barrierを開始中です。</translation> + <translation>Barrier を開始中です。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="809"/> <source>Barrier is running.</source> - <translation type="finished">Barrierは動作中です。</translation> + <translation>Barrier は動作中です。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="819"/> <source>Barrier is not running.</source> - <translation type="finished">Barrierは動作していません。</translation> + <translation>Barrier は動作していません。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="870"/> <source>Unknown</source> - <translation type="finished">不明</translation> + <translation>不明</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1146"/> <location filename="src/MainWindow.cpp" line="1225"/> <location filename="src/MainWindow.cpp" line="1269"/> <source>Barrier</source> - <translation type="finished">Barrier</translation> + <translation>Barrier</translation> </message> <message> <location filename="src/MainWindow.cpp" line="987"/> <source>Browse for a barriers config file</source> - <translation type="finished">Barrierの設定ファイルを参照</translation> + <translation type="unfinished">Barrier の構成ファイルを参照</translation> </message> <message> <location filename="src/MainWindow.cpp" line="408"/> <source>Barrier is now connected, You can close the config window. Barrier will remain connected in the background.</source> - <translation type="unfinished"></translation> + <translation>ただいま Barrier は接続されました。設定ウインドウを閉じることができます。それでもバックグラウンドで接続を維持します。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="434"/> <source>Security question</source> - <translation type="unfinished"></translation> + <translation type="unfinished">セキュリティの質問</translation> </message> <message> <location filename="src/MainWindow.cpp" line="435"/> @@ -368,25 +400,31 @@ Do you want to install Bonjour?</source> %1 -This is a server fingerprint. You should compare this fingerprint to the one on your server's screen. If the two don't match exactly, then it's probably not the server you're expecting (it could be a malicious user). +This is a server fingerprint. You should compare this fingerprint to the one on your server's screen. If the two don't match exactly, then it's probably not the server you're expecting (it could be a malicious user). To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No.</source> - <translation type="unfinished"></translation> + <translation type="unfinished">このフィンガープリントを信頼しますか? + +%1 + +これはサーバーのフィンガープリントです。 このフィンガープリントを、サーバー側のモニタに表示されているフィンガープリントとで確認してください。その2つが一致しない場合、接続したいサーバーではありません (悪意のあるサーバの可能性があります)。 + +「はい」で、今後の接続でも、このフィンガープリントを自動的に信頼します。「いいえ」で、このフィンガープリントを拒否しサーバーから接続を切断します。</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1000"/> <source>Save configuration as...</source> - <translation type="finished">設定に名前をつけて保存</translation> + <translation>構成設定に名前をつけて保存</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1004"/> <source>Save failed</source> - <translation type="finished">保存できませんでした</translation> + <translation>保存できませんでした</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1004"/> <source>Could not save configuration to file.</source> - <translation type="finished">設定をファイルに保存できませんでした</translation> + <translation>構成設定をファイルに保存できませんでした。</translation> </message> </context> <context> @@ -394,168 +432,193 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/MainWindowBase.ui" line="26"/> <source>Barrier</source> - <translation type="finished">Barrier</translation> + <translation>Barrier</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="90"/> - <source>Ser&ver (share this computer's mouse and keyboard):</source> - <translation type="unfinished"></translation> + <source>Ser&ver (share this computer's mouse and keyboard):</source> + <translation>サーバー (このコンピューターのキーボードとマウスを共有する)(&V):</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="243"/> <source>Screen name:</source> - <translation type="finished">画面の名前:</translation> + <translation>モニター名:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="257"/> <source>&Server IP:</source> - <translation type="finished">サーバー IP:</translation> + <translation type="unfinished">サーバー IP (&S):</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="380"/> <location filename="res/MainWindowBase.ui" line="409"/> <source>&Start</source> - <translation type="finished">開始</translation> + <translation>開始(&S)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="181"/> <source>Use existing configuration:</source> - <translation type="finished">既存の設定を使用</translation> + <translation>既存の構成設定を使用:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="190"/> <source>&Configuration file:</source> - <translation type="finished">設定ファイル:</translation> + <translation type="unfinished">構成ファイル:(&C):</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="210"/> <source>&Browse...</source> - <translation type="finished">参照</translation> + <translation>参照(&B)...</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="147"/> <source>Configure interactively:</source> - <translation type="finished">インタラクティブモードで設定:</translation> + <translation>手動で構成を設定:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="159"/> <source>&Configure Server...</source> - <translation type="finished">サーバーを設定</translation> + <translation>サーバーの構成設定(&S)...</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="350"/> <source>Ready</source> - <translation type="finished">準備完了</translation> + <translation>準備完了</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="296"/> <source>Log</source> - <translation type="finished">ログ</translation> + <translation>ログ</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="373"/> <source>&Reload</source> - <translation type="finished">適用</translation> + <translation type="unfinished">適用(&R)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="107"/> <source>IP addresses:</source> - <translation type="finished">IPアドレス:</translation> + <translation>IPアドレス:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="131"/> <source>Fingerprint:</source> - <translation type="unfinished"></translation> + <translation>フィンガープリント:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="228"/> - <source>&Client (use another computer's mouse and keyboard):</source> - <translation type="unfinished"></translation> + <source>&Client (use another computer's mouse and keyboard):</source> + <translation>クライアント (ほかのコンピューターのマウスとキーボードを使う)(&C):</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="270"/> <source>Auto config</source> - <translation type="unfinished"></translation> + <translation>自動構成</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="390"/> <source>&About Barrier...</source> - <translation type="finished">Barrierについて...</translation> + <translation>Barrier について(&A)...</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="398"/> <source>&Quit</source> - <translation type="finished">終了</translation> + <translation>終了(&Q)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="401"/> <source>Quit</source> - <translation type="finished">終了</translation> + <translation>終了(&Q)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="412"/> <source>Run</source> - <translation type="finished">実行</translation> + <translation>開始(&R)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="423"/> <source>S&top</source> - <translation type="finished">停止</translation> + <translation>停止(&S)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="426"/> <source>Stop</source> - <translation type="finished">停止</translation> + <translation>停止(&S)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="434"/> <source>S&how Status</source> - <translation type="finished">状態を表示</translation> + <translation>状態を表示(&S)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="442"/> <source>&Hide</source> - <translation type="finished">隠す</translation> + <translation>隠す(&H)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="445"/> <source>Hide</source> - <translation type="finished">隠す</translation> + <translation>隠す(&H)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="453"/> <source>&Show</source> - <translation type="finished">表示する</translation> + <translation>表示(&S)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="456"/> <source>Show</source> - <translation type="finished">表示する</translation> + <translation>表示(&S)</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="464"/> <source>Save configuration &as...</source> - <translation type="finished">設定に名前をつけて保存</translation> + <translation>構成設定に名前をつけて保存</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="467"/> <source>Save the interactively generated server configuration to a file.</source> - <translation type="finished">インタラクティブモードで生成したサーバ設定をファイルに保存</translation> + <translation>手動で設定したサーバーの構成をファイルに保存する。</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="475"/> <source>Settings</source> - <translation type="finished">設定</translation> + <translation>設定</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="478"/> <source>Edit settings</source> - <translation type="finished">設定を編集</translation> + <translation>設定を編集</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="486"/> <source>Run Wizard</source> - <translation type="finished">ウィザードを実行する</translation> + <translation>ウィザードを実行</translation> + </message> + <message> + <location filename="res/MainWindowBase.ui" line="367"/> + <source>S&ave configuration</source> + <translation>構成設定の保存(&A)</translation> + </message> + <message> + <location filename="res/MainWindowBase.ui" line="380"/> + <source>Change &Settings</source> + <translation>設定の変更(&S)</translation> + </message> + <message> + <location filename="res/MainWindowBase.ui" line="391"/> + <source>Show &Log</source> + <translation>ログを表示(&L)</translation> + </message> + <message> + <location filename="res/MainWindowBase.ui" line="394"/> + <source>Show Log</source> + <translation>ログを表示(&L)</translation> + </message> + <message> + <location filename="res/MainWindowBase.ui" line="132"/> + <source>SSL Fingerprint:</source> + <translation>SSLフィンガープリント:</translation> </message> </context> <context> @@ -563,7 +626,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/NewScreenWidget.cpp" line="32"/> <source>Unnamed</source> - <translation type="finished">名前なし</translation> + <translation>名前なし</translation> </message> </context> <context> @@ -571,28 +634,29 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/PluginManager.cpp" line="58"/> <source>Failed to get plugin directory.</source> - <translation type="unfinished"></translation> + <translation>プラグインのフォルダ取得に失敗しました。</translation> </message> <message> <location filename="src/PluginManager.cpp" line="63"/> <source>Failed to get profile directory.</source> - <translation type="unfinished"></translation> + <translation>プロファイルのフォルダ取得に失敗しました。</translation> </message> <message> <location filename="src/PluginManager.cpp" line="136"/> - <source>Failed to download plugin '%1' to: %2 + <source>Failed to download plugin '%1' to: %2 %3</source> - <translation type="unfinished"></translation> + <translation type="unfinished">プラグイン「%1」の %2 へのダウンロードに失敗 +%3</translation> </message> <message> <location filename="src/PluginManager.cpp" line="167"/> <source>Could not get Windows architecture type.</source> - <translation type="unfinished"></translation> + <translation>Windows のアーキテクチャの種類を取得できません。</translation> </message> <message> <location filename="src/PluginManager.cpp" line="191"/> <source>Could not get Linux architecture type.</source> - <translation type="unfinished"></translation> + <translation>Linux のアーキテクチャの種類を取得できません。</translation> </message> </context> <context> @@ -600,66 +664,66 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/PluginWizardPageBase.ui" line="14"/> <source>Setup Barrier</source> - <translation type="finished">Barrierのセットアップ</translation> + <translation>Barrier のセットアップ</translation> </message> <message> <location filename="res/PluginWizardPageBase.ui" line="101"/> <source>Please wait...</source> - <translation type="unfinished"></translation> + <translation>お待ちください...</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="72"/> <source>Error: %1</source> - <translation type="unfinished"></translation> + <translation>エラー: %1</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="80"/> <location filename="src/PluginWizardPage.cpp" line="201"/> <source>Setup complete.</source> - <translation type="unfinished"></translation> + <translation>セットアップは完了しました。</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="93"/> - <source>Downloading '%1' plugin (%2/%3)...</source> - <translation type="unfinished"></translation> + <source>Downloading '%1' plugin (%2/%3)...</source> + <translation>プラグイン「%1」をダウンロード中 (%2/%3)...</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="104"/> <source>Plugins installed successfully.</source> - <translation type="unfinished"></translation> + <translation>プラグインは正常にインストールされました。</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="120"/> <source>Generating SSL certificate...</source> - <translation type="unfinished"></translation> + <translation>SSL 証明書を生成中...</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="170"/> <source>Downloading plugin: %1 (1/%2)</source> - <translation type="unfinished"></translation> + <translation>プラグインをダウンロード中: %1 (1/%2)</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="239"/> <source>Getting plugin list...</source> - <translation type="unfinished"></translation> + <translation>プラグイン一覧を取得中...</translation> </message> </context> <context> <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrierの構成(*.sgc);;すべてのファイル(*.*)</translation> + <source>Barrier Configurations (*.sgc)</source> + <translation>Barrier 構成設定 (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrierの構成(*.conf);;すべてのファイル(*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation>Barrier 構成設定 (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> <source>System tray is unavailable, quitting.</source> - <translation type="finished">タスクトレイを利用できません。終了します。</translation> + <translation>システムトレイを利用できません。終了します。</translation> </message> </context> <context> @@ -667,22 +731,22 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/ScreenSettingsDialog.cpp" line="67"/> <source>Screen name is empty</source> - <translation type="finished">画面の名前が空です。</translation> + <translation>モニター名がありません</translation> </message> <message> <location filename="src/ScreenSettingsDialog.cpp" line="68"/> <source>The screen name cannot be empty. Please either fill in a name or cancel the dialog.</source> - <translation type="finished">画面の名前を空にすることはできません。名前を入力するかダイアログをキャンセルしてください。</translation> + <translation>モニター名を空にはできません。名前を入力するか、ダイアログをキャンセルしてください。</translation> </message> <message> <location filename="src/ScreenSettingsDialog.cpp" line="83"/> <source>Screen name matches alias</source> - <translation type="finished">画面の名前は別名と一致</translation> + <translation>モニター名は別名に一致</translation> </message> <message> <location filename="src/ScreenSettingsDialog.cpp" line="84"/> <source>The screen name cannot be the same as an alias. Please either remove the alias or change the screen name.</source> - <translation type="finished">画面の名前を別名と同じにすることは出来ません。別名を削除するか画面の名前を変更してください。</translation> + <translation>モニター名を別名と同じにできません。別名を削除するか、モニター名を変更してください。</translation> </message> </context> <context> @@ -690,37 +754,37 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/ScreenSettingsDialogBase.ui" line="14"/> <source>Screen Settings</source> - <translation type="finished">画面の設定</translation> + <translation>モニターの設定</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="22"/> <source>Screen &name:</source> - <translation type="finished">画面の名前</translation> + <translation>モニター名(&N):</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="42"/> <source>A&liases</source> - <translation type="finished">別名</translation> + <translation>別名(&A)</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="57"/> <source>&Add</source> - <translation type="finished">追加</translation> + <translation>追加(&A)</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="74"/> <source>&Remove</source> - <translation type="finished">削除</translation> + <translation>除去(&R)</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="97"/> <source>&Modifier keys</source> - <translation type="finished">修飾キー</translation> + <translation>修飾キー(&M)</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="106"/> <source>&Shift:</source> - <translation type="finished">シフト</translation> + <translation>Shift(&S):</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="117"/> @@ -729,7 +793,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="258"/> <location filename="res/ScreenSettingsDialogBase.ui" line="305"/> <source>Shift</source> - <translation type="finished">シフト</translation> + <translation></translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="122"/> @@ -738,7 +802,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="263"/> <location filename="res/ScreenSettingsDialogBase.ui" line="310"/> <source>Ctrl</source> - <translation type="finished">コントロール</translation> + <translation></translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="127"/> @@ -747,7 +811,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="268"/> <location filename="res/ScreenSettingsDialogBase.ui" line="315"/> <source>Alt</source> - <translation type="finished">Alt</translation> + <translation></translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="132"/> @@ -756,7 +820,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="273"/> <location filename="res/ScreenSettingsDialogBase.ui" line="320"/> <source>Meta</source> - <translation type="finished">メタ</translation> + <translation>メタ</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="137"/> @@ -765,7 +829,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="278"/> <location filename="res/ScreenSettingsDialogBase.ui" line="325"/> <source>Super</source> - <translation type="finished">スーパー</translation> + <translation>スーパー</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="142"/> @@ -774,82 +838,87 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="283"/> <location filename="res/ScreenSettingsDialogBase.ui" line="330"/> <source>None</source> - <translation type="finished">なし</translation> + <translation>なし</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="150"/> <source>&Ctrl:</source> - <translation type="finished">&undefinedCtrl:</translation> + <translation>Ctrl (&C):</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="197"/> <source>Al&t:</source> - <translation type="finished">&undefinedl&t:</translation> + <translation>Alt (&T):</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="244"/> <source>M&eta:</source> - <translation type="finished">&undefined&eta:</translation> + <translation>メタ (&E):</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="291"/> <source>S&uper:</source> - <translation type="finished">&undefined&uper:</translation> + <translation>スーパー (&S):</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="358"/> <source>&Dead corners</source> - <translation type="finished">無効とする角</translation> + <translation>無効とする隅(&D)</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="367"/> <source>Top-left</source> - <translation type="finished">左上</translation> + <translation>左上</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="374"/> <source>Top-right</source> - <translation type="finished">右上</translation> + <translation>右上</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="381"/> <source>Bottom-left</source> - <translation type="finished">左下</translation> + <translation>左下</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="388"/> <source>Bottom-right</source> - <translation type="finished">右下</translation> + <translation>右下</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="397"/> <source>Corner Si&ze:</source> - <translation type="finished">角の大きさ</translation> + <translation>隅の大きさ(&Z):</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="428"/> <source>&Fixes</source> - <translation type="finished">修正</translation> + <translation>修正(&F)</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="437"/> <source>Fix CAPS LOCK key</source> - <translation type="finished">CAPSロックキーを固定</translation> + <translation>CAPS ロックキーを固定</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="444"/> <source>Fix NUM LOCK key</source> - <translation type="finished">NUMロックキーを固定</translation> + <translation>NUM ロックキーを固定</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="451"/> <source>Fix SCROLL LOCK key</source> - <translation type="finished">SCROLLロックキーを固定</translation> + <translation>SCROLL ロックキーを固定</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="458"/> <source>Fix XTest for Xinerama</source> - <translation type="finished">Xinerama向けにXTestを修正</translation> + <translation>Xinerama 向けに XTest を修正</translation> + </message> + <message> + <location filename="res/ScreenSettingsDialogBase.ui" line="468"/> + <source>Fix Preserve Focus</source> + <translation>フォーカスの維持を修正</translation> </message> </context> <context> @@ -857,7 +926,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/ScreenSetupModel.cpp" line="51"/> <source><center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it</source> - <translation type="finished"><center>画面: <b>%1</b></center><br>ダブルクリックで設定を編集<br>削除するときは画面をゴミ箱にドラッグします</translation> + <translation><center>モニター: <b>%1</b></center><br>ダブルクリックで設定を編集<br>削除するときは画面をゴミ箱にドラッグします</translation> </message> </context> <context> @@ -865,7 +934,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/ServerConfigDialog.cpp" line="75"/> <source>Configure server</source> - <translation type="unfinished"></translation> + <translation>サーバーの構成設定</translation> </message> </context> <context> @@ -873,168 +942,178 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/ServerConfigDialogBase.ui" line="14"/> <source>Server Configuration</source> - <translation type="finished">サーバーの構成</translation> + <translation>サーバーの構成設定</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="24"/> <source>Screens and links</source> - <translation type="finished">画面とリンク</translation> + <translation>モニタの結びつき</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="35"/> <source>Drag a screen from the grid to the trashcan to remove it.</source> - <translation type="finished">削除する時はグリッド内の画面をゴミ箱にドラッグしてください。</translation> + <translation>削除するには、グリッド内のモニターをゴミ箱にドラッグしてください。</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="60"/> <source>Configure the layout of your barrier server configuration.</source> - <translation type="finished">サーバ構成の配置を設定する</translation> + <translation type="unfinished">Barrier のサーバー構成の配置を設定します。</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="73"/> <source>Drag this button to the grid to add a new screen.</source> - <translation type="finished">新規画面の追加はこのボタンをグリッド内にドラッグします。</translation> + <translation>新規モニターの追加するには、このボタンをグリッド内にドラッグします。</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="128"/> <source>Drag new screens to the grid or move existing ones around. Drag a screen to the trashcan to delete it. Double click on a screen to edit its settings.</source> - <translation type="finished">新規画面をグリッド内にドラッグするか既存画面を移動してください。 -画面をゴミ箱にドラッグすると削除します。 -設定を編集する場合は画面上でダブルクリックしてください。</translation> + <translation>新規モニターをグリッド内にドラッグするか、既存のモニターを移動してください。 +削除するには、モニターをゴミ箱にドラッグします。 +モニターの設定を編集するには、モニターをダブルクリックします。</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="157"/> <source>Hotkeys</source> - <translation type="finished">ホットキー</translation> + <translation>ホットキー</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="163"/> <source>&Hotkeys</source> - <translation type="finished">ホットキー</translation> + <translation>ホットキー(&H)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="175"/> <source>&New</source> - <translation type="finished">新規</translation> + <translation>新規(&N)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="185"/> <source>&Edit</source> - <translation type="finished">編集</translation> + <translation>編集(&E)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="195"/> <source>&Remove</source> - <translation type="finished">削除</translation> + <translation>除去(&R)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="218"/> <source>A&ctions</source> - <translation type="finished">アクション</translation> + <translation>アクション(&A)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="230"/> <source>Ne&w</source> - <translation type="finished">新規</translation> + <translation>新規(&W)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="240"/> <source>E&dit</source> - <translation type="finished">編集</translation> + <translation>編集(&D)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="250"/> <source>Re&move</source> - <translation type="finished">削除</translation> + <translation>除去(&M)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="274"/> <source>Advanced server settings</source> - <translation type="finished">サーバーの詳細な設定</translation> + <translation>サーバーの詳細設定</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="280"/> <source>&Switch</source> - <translation type="finished">切り替え</translation> + <translation>切り替え(&S)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="291"/> <source>Switch &after waiting</source> - <translation type="finished">次の時間の後切り替え</translation> + <translation>次の時間の後切り替え(&A)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="330"/> <location filename="res/ServerConfigDialogBase.ui" line="383"/> <location filename="res/ServerConfigDialogBase.ui" line="458"/> <source>ms</source> - <translation type="finished">ミリ秒</translation> + <translation>ミリ秒</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="344"/> <source>Switch on double &tap within</source> - <translation type="finished">次の時間内のダブルタップで切り替え</translation> + <translation>次の時間内のダブルタップで切り替え(&T)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="408"/> <source>&Options</source> - <translation type="finished">オプション</translation> + <translation>オプション(&O)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="419"/> <source>&Check clients every</source> - <translation type="finished">クライアント確認頻度</translation> + <translation>クライアント確認頻度(&C)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="470"/> <source>Use &relative mouse moves</source> - <translation type="finished">マウスの相対的な動きを使用</translation> + <translation>相対的なマウスの移動を使用(&R)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="480"/> <source>S&ynchronize screen savers</source> - <translation type="finished">スクリーンセーバーの同期</translation> + <translation>スクリーンセーバーの同期(&Y)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="490"/> - <source>Don't take &foreground window on Windows servers</source> - <translation type="finished">Windowsサーバでウィンドウを前面に表示しない</translation> + <source>Don't take &foreground window on Windows servers</source> + <translation>Windows サーバ上ではウィンドウを前面に表示しない(&F)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="510"/> <source>Ignore auto config clients</source> - <translation type="unfinished"></translation> + <translation>自動構成のクライアントを無視</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="520"/> <source>&Dead corners</source> - <translation type="finished">無効とする角</translation> + <translation>無効とする隅(&D)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="529"/> <source>To&p-left</source> - <translation type="finished">左上</translation> + <translation>左上(&P)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="536"/> <source>Top-rig&ht</source> - <translation type="finished">右上</translation> + <translation>右上(&H)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="543"/> <source>&Bottom-left</source> - <translation type="finished">左下</translation> + <translation>左下(&B)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="550"/> <source>Bottom-ri&ght</source> - <translation type="finished">右下</translation> + <translation>右下(&G)</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="572"/> <source>Cor&ner Size:</source> - <translation type="finished">隅の大きさ:</translation> + <translation>隅の大きさ(&N):</translation> + </message> + <message> + <location filename="res/ServerConfigDialogBase.ui" line="510"/> + <source>Enable drag and drop file transfers</source> + <translation>ドラッグアンドドロップでファイル転送する</translation> + </message> + <message> + <location filename="res/ServerConfigDialogBase.ui" line="524"/> + <source>Enable clipboard sharing</source> + <translation>クリップボードを共有</translation> </message> </context> <context> @@ -1042,20 +1121,20 @@ Double click on a screen to edit its settings.</source> <message> <location filename="src/SettingsDialog.cpp" line="131"/> <source>Save log file to...</source> - <translation type="finished">ログファイルの保存先</translation> + <translation>ログファイルの保存先</translation> </message> <message> <location filename="src/SettingsDialog.cpp" line="151"/> <source>Elevate Barrier</source> - <translation type="finished">Barrierの権限昇格</translation> + <translation>Barrier の権限昇格</translation> </message> <message> <location filename="src/SettingsDialog.cpp" line="152"/> <source>Are you sure you want to elevate Barrier? This allows Barrier to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Barrier only if you really need to.</source> - <translation type="finished">本当に Barrier を昇格させてよろしいですか? -これにより昇格されたプロセスや UAC dialog と、Barrier とが互いに作用しあうことができるようになる反面、昇格されていないプロセスとの間で問題を生じることもあり得ます。確かに必要であると判断できる場合にのみ Barrier の昇格を行ってください。</translation> + <translation type="unfinished">Barrier を昇格させてもよろしいですか? +この許可により Barrier は権限を持つプロセスや UAC ダイアログやりとりできます。一方で、昇格されていないプロセスとのやり取りに問題が起こることもあります。確かに必要である場合にのみ Barrier を昇格させてください。</translation> </message> </context> <context> @@ -1063,107 +1142,162 @@ This allows Barrier to interact with elevated processes and the UAC dialog, but <message> <location filename="res/SettingsDialogBase.ui" line="14"/> <source>Settings</source> - <translation type="finished">設定</translation> + <translation>設定</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="32"/> <source>Sc&reen name:</source> - <translation type="finished">スクリーン名:</translation> + <translation>モニター名(&R):</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="49"/> <source>P&ort:</source> - <translation type="finished">ポート:</translation> + <translation>ポート(&O):</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="78"/> <source>&Interface:</source> - <translation type="finished">インターフェース:</translation> + <translation>インターフェース(&I):</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="120"/> <source>Elevate mode</source> - <translation type="unfinished"></translation> + <translation type="unfinished">特権の状態</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="127"/> <source>&Hide on startup</source> - <translation type="unfinished"></translation> + <translation>起動時に隠す(&H)</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="146"/> <source>&Network Security</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ネットワークのセキュリティ(&N)</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="155"/> <source>Use &SSL encryption (unique certificate)</source> - <translation type="unfinished"></translation> + <translation type="unfinished">SSL 暗号化を使用 (固有の証明書)(&S)</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="184"/> <source>Logging</source> - <translation type="finished">ログ</translation> + <translation>ログ記録</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="202"/> <source>&Logging level:</source> - <translation type="finished">ログレベル:</translation> + <translation type="unfinished">ログ対象(&L):</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="251"/> <source>Log to file:</source> - <translation type="finished">ログ記録先ファイル:</translation> + <translation>ログ記録ファイル:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="268"/> <source>Browse...</source> - <translation type="finished">参照...</translation> + <translation>参照...</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="213"/> <source>Error</source> - <translation type="finished">エラー</translation> + <translation>エラー</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="107"/> <source>&Language:</source> - <translation type="finished">言語</translation> + <translation>言語(&L):</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="20"/> <source>&Miscellaneous</source> - <translation type="finished">その他</translation> + <translation>その他(&M)</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="218"/> <source>Warning</source> - <translation type="finished">警告</translation> + <translation>警告</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="223"/> <source>Note</source> - <translation type="finished">通知</translation> + <translation type="unfinished">通知</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="228"/> <source>Info</source> - <translation type="finished">情報</translation> + <translation>情報</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="233"/> <source>Debug</source> - <translation type="finished">デバッグ情報</translation> + <translation>デバッグ情報</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="238"/> <source>Debug1</source> - <translation type="finished">デバッグ情報1</translation> + <translation>デバッグ情報1</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="243"/> <source>Debug2</source> - <translation type="finished">デバッグ情報2</translation> + <translation>デバッグ情報2</translation> + </message> + <message> + <location filename="res/SettingsDialogBase.ui" line="29"/> + <source>General</source> + <translation>一般</translation> + </message> + <message> + <location filename="res/SettingsDialogBase.ui" line="86"/> + <source>Elevate</source> + <translation>権限昇格</translation> + </message> + <message> + <location filename="res/SettingsDialogBase.ui" line="93"/> + <source>Specify when the Barrier service should run at an elevated privilege level</source> + <translation>Barrier のサービスを昇格した権限で実行するタイミングの指定</translation> + </message> + <message> + <location filename="res/SettingsDialogBase.ui" line="100"/> + <source>As Needed</source> + <translation>必要に応じて</translation> + </message> + <message> + <location filename="res/SettingsDialogBase.ui" line="105"/> + <source>Always</source> + <translation>常に</translation> + </message> + <message> + <location filename="res/SettingsDialogBase.ui" line="110"/> + <source>Never</source> + <translation>なし</translation> + </message> + <message> + <location filename="res/SettingsDialogBase.ui" line="118"/> + <source>Minimize to System &Tray</source> + <translation>システムトレイに最小化(&T)</translation> + </message> + <message> + <location filename="res/SettingsDialogBase.ui" line="135"/> + <source>Networking</source> + <translation>ネットワーク</translation> + </message> + <message> + <location filename="res/SettingsDialogBase.ui" line="170"/> + <source>&Address:</source> + <translation>アドレス(&A):</translation> + </message> + <message> + <location filename="res/SettingsDialogBase.ui" line="187"/> + <source>Enable &SSL</source> + <translation>SSLを使用(&S)</translation> + </message> + <message> + <location filename="res/SettingsDialogBase.ui" line="132"/> + <source>Start &Barrier on startup</source> + <translation type="unfinished">起動時に Barrier を開始する (&B)</translation> </message> </context> <context> @@ -1171,17 +1305,17 @@ This allows Barrier to interact with elevated processes and the UAC dialog, but <message> <location filename="src/SetupWizard.cpp" line="72"/> <source>Setup Barrier</source> - <translation type="finished">Barrierのセットアップ</translation> + <translation>Barrier のセットアップ</translation> </message> <message> <location filename="src/SetupWizard.cpp" line="113"/> <source>Please select an option.</source> - <translation type="finished">オプションを選択してください。</translation> + <translation>オプションを選択してください。</translation> </message> <message> <location filename="src/SetupWizard.cpp" line="80"/> <source>Please enter your email address and password.</source> - <translation type="finished">メールアドレスとパスワードを入力してください。</translation> + <translation>メールアドレスとパスワードを入力してください。</translation> </message> </context> <context> @@ -1189,85 +1323,93 @@ This allows Barrier to interact with elevated processes and the UAC dialog, but <message> <location filename="res/SetupWizardBase.ui" line="26"/> <source>Setup Barrier</source> - <translation type="finished">Barrierのセットアップ</translation> + <translation>Barrier のセットアップ</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="30"/> <source>Welcome</source> - <translation type="finished">ようこそ</translation> + <translation>ようこそ</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="39"/> <source>Thanks for installing Barrier!</source> - <translation type="finished">Barrierをインストールしていただき、ありがとうございます!</translation> + <translation>Barrier をインストールしていただき、ありがとうございます!</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="114"/> - <source>Barrier lets you easily share your mouse and keyboard between multiple computers on your desk, and it's Free and Open Source. Just move your mouse off the edge of one computer's screen on to another. You can even share all of your clipboards. All you need is a network connection. Barrier is cross-platform (works on Windows, Mac OS X and Linux).</source> - <translation type="finished">Barrierは複数のコンピュータ間のマウスとキーボードを簡単に共有することができるフリーのオープンソースソフトウェアです。あるコンピュータの画面の端にマウスを移動すると別のコンピュータの画面に移ります。クリップボードを共有することもできます。必要なのは ネットワーク接続だけです。 BarrierはクロスプラットフォームでWindows, Mac OS X, Linux上で動作します。</translation> + <source>Barrier lets you easily share your mouse and keyboard between multiple computers on your desk, and it's Free and Open Source. Just move your mouse off the edge of one computer's screen on to another. You can even share all of your clipboards. All you need is a network connection. Barrier is cross-platform (works on Windows, Mac OS X and Linux).</source> + <translation>Barrier によって、複数のデスクトップパソコン間でマウスとキーボードを簡単に共有することができます。そしてこれは無料でオープンソースのソフトウェアです。あるコンピュータの画面の端にマウスを移動するだけで、別のコンピュータの画面に移ることができます。クリップボードを共有することもできます。必要なのはネットワーク接続だけです。 Barrier はクロスプラットフォームで Windows, Mac OS X, Linux で動作します。</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="125"/> <source>Activate</source> - <translation type="unfinished"></translation> + <translation type="unfinished">アクティベート</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="131"/> <source>&Activate now...</source> - <translation type="unfinished"></translation> + <translation type="unfinished">今すぐアクティベート(&A)...</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="152"/> <source>Email:</source> - <translation type="unfinished"></translation> + <translation>電子メール:</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="178"/> <source>Password:</source> - <translation type="unfinished"></translation> + <translation>パスワード:</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="204"/> <source><a href="https://symless.com/account/reset/">Forgot password</a></source> - <translation type="unfinished"></translation> + <translation type="unfinished"><a href="https://symless.com/account/reset/">パスワードを忘れた場合</a></translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="232"/> <source>&Skip activation</source> - <translation type="unfinished"></translation> + <translation type="unfinished">アクティベートを省略(&S)</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="277"/> - <source>&Server (share this computer's mouse and keyboard)</source> - <translation type="unfinished"></translation> + <source>&Server (share this computer's mouse and keyboard)</source> + <translation>サーバー (このコンピューターのキーボードとマウスを共有する)(&V)</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="290"/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">My main mouse and keyboard are connected to this computer. This will allow you to move your mouse over to another computer's screen. There can only be one server in your setup.</span></p></body></html></source> - <translation type="unfinished"></translation> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">My main mouse and keyboard are connected to this computer. This will allow you to move your mouse over to another computer's screen. There can only be one server in your setup.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">使いたいマウスとキーボードがこのパソコンに接続されている場合、こちらを選択することで、別のパソコンのモニタへとマウスを移動することができます。サーバーは1つしか設置できません。</span></p></body></html></translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="326"/> - <source>&Client (use another computer's mouse and keyboard)</source> - <translation type="unfinished"></translation> + <source>&Client (use another computer's mouse and keyboard)</source> + <translation>クライアント (ほかのコンピューターのマウスとキーボードを使う)(&C)</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="339"/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You have already set up a server. This computer will be controlled using the server's mouse and keyboard. There can be many clients in your setup.</span></p></body></html></source> - <translation type="unfinished"></translation> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You have already set up a server. This computer will be controlled using the server's mouse and keyboard. There can be many clients in your setup.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">既にサーバーを設置してある場合、このパソコンをサーバーに接続されたマウスとキーボードで制御できます。複数の数のクライアントを配置できます。</span></p></body></html></translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="262"/> <source>Server or Client?</source> - <translation type="finished">サーバーまたはクライアント</translation> + <translation>サーバーにしますか?またはクライアントですか?</translation> </message> </context> <context> @@ -1275,22 +1417,22 @@ p, li { white-space: pre-wrap; } <message> <location filename="src/SslCertificate.cpp" line="42"/> <source>Failed to get profile directory.</source> - <translation type="unfinished"></translation> + <translation>プロファイルのフォルダ取得に失敗しました。</translation> </message> <message> <location filename="src/SslCertificate.cpp" line="141"/> <source>SSL certificate generated.</source> - <translation type="unfinished"></translation> + <translation>SSL 証明書を生成しました。</translation> </message> <message> <location filename="src/SslCertificate.cpp" line="170"/> <source>SSL fingerprint generated.</source> - <translation type="unfinished"></translation> + <translation>SSL フィンガープリントを生成しました。</translation> </message> <message> <location filename="src/SslCertificate.cpp" line="173"/> <source>Failed to find SSL fingerprint.</source> - <translation type="unfinished"></translation> + <translation>SSL フィンガープリントが見つかりませんでした。</translation> </message> </context> <context> @@ -1298,7 +1440,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="src/VersionChecker.cpp" line="102"/> <source>Unknown</source> - <translation type="finished">不明</translation> + <translation>不明</translation> </message> </context> <context> @@ -1308,19 +1450,21 @@ p, li { white-space: pre-wrap; } <source>An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. %1</source> - <translation type="unfinished"></translation> + <translation>サインイン時にエラーが発生しました。ヘルプデスクにお問い合わせの上、以下の詳細を報告してください。 + +%1</translation> </message> <message> <location filename="src/WebClient.cpp" line="65"/> <source>Login failed, invalid email or password.</source> - <translation type="finished">ログインは失敗しました。メールアドレスまたはパスワードが無効です。</translation> + <translation>ログインに失敗しました。メールアドレスまたはパスワードが無効です。</translation> </message> <message> <location filename="src/WebClient.cpp" line="78"/> <source>Login failed, an error occurred. %1</source> - <translation type="finished">エラーが発生し、ログインが失敗しました。 + <translation>エラーが発生し、ログインに失敗しました。 %1</translation> </message> <message> @@ -1330,8 +1474,8 @@ p, li { white-space: pre-wrap; } Server response: %1</source> - <translation type="finished">エラーが発生し、ログインが失敗しました。 -サーバの応答: + <translation>エラーが発生し、ログインに失敗しました。 +サーバの応答: %1</translation> </message> <message> @@ -1339,19 +1483,23 @@ Server response: <source>An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. %1</source> - <translation type="unfinished"></translation> + <translation>プラグイン一覧の要求時にエラーが発生しました。ヘルプデスクにお問い合わせの上、以下の詳細を報告してください。 + +%1</translation> </message> <message> <location filename="src/WebClient.cpp" line="120"/> <source>Get plugin list failed, invalid user email or password.</source> - <translation type="unfinished"></translation> + <translation>プラグイン一覧の取得に失敗しました。メールアドレスまたはパスワードが無効です。</translation> </message> <message> <location filename="src/WebClient.cpp" line="131"/> <source>Get plugin list failed, an error occurred. %1</source> - <translation type="unfinished"></translation> + <translation>エラーが発生し、プラグイン一覧の取得に失敗しました。 + +%1</translation> </message> <message> <location filename="src/WebClient.cpp" line="137"/> @@ -1360,7 +1508,11 @@ Server response: Server response: %1</source> - <translation type="unfinished"></translation> + <translation>エラーが発生し、プラグイン一覧の取得に失敗しました。 + +サーバの応答: + +%1</translation> </message> </context> <context> @@ -1368,44 +1520,44 @@ Server response: <message> <location filename="src/ZeroconfService.cpp" line="82"/> <source>zeroconf server detected: %1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ゼロ構成のサーバーを検出: %1</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="91"/> <source>zeroconf client detected: %1</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ゼロ構成のクライアントを検出: %1</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="99"/> <location filename="src/ZeroconfService.cpp" line="130"/> <source>Zero configuration service</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ゼロ構成のサービス</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="100"/> <source>Error code: %1.</source> - <translation type="unfinished"></translation> + <translation>エラーコード: %1</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="131"/> <source>Unable to start the zeroconf: %1.</source> - <translation type="unfinished"></translation> + <translation>ゼロ構成は開始できません: %1</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="140"/> <source>Barrier</source> - <translation type="finished">Barrier</translation> + <translation>Barrier</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="141"/> <source>Failed to get local IP address. Please manually type in server address on your clients</source> - <translation type="unfinished"></translation> + <translation type="unfinished">ローカル IP アドレスの取得に失敗しました。クライアント上でサーバーのアドレスを手動で入力してください</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="147"/> <location filename="src/ZeroconfService.cpp" line="154"/> <source>%1</source> - <translation type="unfinished"></translation> + <translation></translation> </message> </context> -</TS>
\ No newline at end of file +</TS> diff --git a/src/gui/res/lang/gui_ko.qm b/src/gui/res/lang/gui_ko.qm Binary files differindex 06612cb..54b9461 100644 --- a/src/gui/res/lang/gui_ko.qm +++ b/src/gui/res/lang/gui_ko.qm diff --git a/src/gui/res/lang/gui_ko.ts b/src/gui/res/lang/gui_ko.ts index 8c477fc..46f7223 100644 --- a/src/gui/res/lang/gui_ko.ts +++ b/src/gui/res/lang/gui_ko.ts @@ -204,7 +204,7 @@ Visit our website for help and info (symless.com). <location filename="src/MainWindow.cpp" line="364"/> <source><p>Your version of Barrier is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p></source> <oldsource><p>Version %1 is now available, <a href="%2">visit website</a>.</p></oldsource> - <translation type="finished"><p>사용 중인 시너지는 최신 버전이 아닙니다. 새 버전(<b>%1</b>)을 <a href="%2">다운로드</a> 받을 수 있습니다.</p></translation> + <translation type="finished"><p>사용 중인 배리어는 최신 버전이 아닙니다. 새 버전(<b>%1</b>)을 <a href="%2">다운로드</a> 받을 수 있습니다.</p></translation> </message> <message> <location filename="src/MainWindow.cpp" line="577"/> @@ -600,7 +600,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/PluginWizardPageBase.ui" line="14"/> <source>Setup Barrier</source> - <translation type="finished">시너지 설정</translation> + <translation type="finished">배리어 설정</translation> </message> <message> <location filename="res/PluginWizardPageBase.ui" line="101"/> @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrier 설정파일 (*.sgc);;모든 파일 (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">모든 파일 (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Barrier 설정파일 (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier 설정파일 (*.conf);;모든 파일 (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Barrier 설정파일 (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> @@ -1171,7 +1176,7 @@ This allows Barrier to interact with elevated processes and the UAC dialog, but <message> <location filename="src/SetupWizard.cpp" line="72"/> <source>Setup Barrier</source> - <translation type="finished">시너지 설정</translation> + <translation type="finished">배리어 설정</translation> </message> <message> <location filename="src/SetupWizard.cpp" line="113"/> @@ -1189,7 +1194,7 @@ This allows Barrier to interact with elevated processes and the UAC dialog, but <message> <location filename="res/SetupWizardBase.ui" line="26"/> <source>Setup Barrier</source> - <translation type="finished">시너지 설정</translation> + <translation type="finished">배리어 설정</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="30"/> @@ -1199,7 +1204,7 @@ This allows Barrier to interact with elevated processes and the UAC dialog, but <message> <location filename="res/SetupWizardBase.ui" line="39"/> <source>Thanks for installing Barrier!</source> - <translation type="finished">시너지를 설치하여 주셔서 감사합니다.</translation> + <translation type="finished">배리어를 설치하여 주셔서 감사합니다.</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="114"/> diff --git a/src/gui/res/lang/gui_lt.ts b/src/gui/res/lang/gui_lt.ts index 66976b1..58e9101 100644 --- a/src/gui/res/lang/gui_lt.ts +++ b/src/gui/res/lang/gui_lt.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_lv.ts b/src/gui/res/lang/gui_lv.ts index 27b74f0..4618c05 100644 --- a/src/gui/res/lang/gui_lv.ts +++ b/src/gui/res/lang/gui_lv.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_mr.ts b/src/gui/res/lang/gui_mr.ts index b91bd19..a646004 100644 --- a/src/gui/res/lang/gui_mr.ts +++ b/src/gui/res/lang/gui_mr.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_nl-NL.qm b/src/gui/res/lang/gui_nl-NL.qm Binary files differindex 102cec8..ac9a67c 100644 --- a/src/gui/res/lang/gui_nl-NL.qm +++ b/src/gui/res/lang/gui_nl-NL.qm diff --git a/src/gui/res/lang/gui_nl-NL.ts b/src/gui/res/lang/gui_nl-NL.ts index 5c5b490..4ea0ee8 100644 --- a/src/gui/res/lang/gui_nl-NL.ts +++ b/src/gui/res/lang/gui_nl-NL.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrier Configuratie (*.sgc);;Alle bestanden (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Alle bestanden (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Barrier Configuratie (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier configuratie (*.conf);;Alle bestanden (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Barrier configuratie (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> @@ -1329,7 +1334,7 @@ p, li { white-space: pre-wrap; } Server response: %1</source> - <translation type="finished">Inloggen mislukt, er is een fout opgetreden. + <translation type="finished">Inloggen mislukt, er is een fout opgetreden. Foutmelding: %1</translation> </message> diff --git a/src/gui/res/lang/gui_no.qm b/src/gui/res/lang/gui_no.qm Binary files differindex 903ae48..c4d1d81 100644 --- a/src/gui/res/lang/gui_no.qm +++ b/src/gui/res/lang/gui_no.qm diff --git a/src/gui/res/lang/gui_no.ts b/src/gui/res/lang/gui_no.ts index d27a620..0ccd61e 100644 --- a/src/gui/res/lang/gui_no.ts +++ b/src/gui/res/lang/gui_no.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrier-oppsett (*.sgc);;Alle filer (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Alle filer (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Barrier-oppsett (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier-oppsett (*.conf);;Alle filer (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Barrier-oppsett (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_pes-IR.ts b/src/gui/res/lang/gui_pes-IR.ts index 31d7a67..3aaffed 100644 --- a/src/gui/res/lang/gui_pes-IR.ts +++ b/src/gui/res/lang/gui_pes-IR.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_pl-PL.qm b/src/gui/res/lang/gui_pl-PL.qm Binary files differindex 83e7352..65a2116 100644 --- a/src/gui/res/lang/gui_pl-PL.qm +++ b/src/gui/res/lang/gui_pl-PL.qm diff --git a/src/gui/res/lang/gui_pl-PL.ts b/src/gui/res/lang/gui_pl-PL.ts index 6fb96a0..7262a2a 100644 --- a/src/gui/res/lang/gui_pl-PL.ts +++ b/src/gui/res/lang/gui_pl-PL.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Konfiguracje Barrier (*.sgc);;Wszystkie pliki (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Wszystkie pliki (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Konfiguracje Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Konfiguracje Barrier (*.conf);;Wszystkie pliki (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Konfiguracje Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> @@ -1320,7 +1325,7 @@ p, li { white-space: pre-wrap; } <source>Login failed, an error occurred. %1</source> - <translation type="finished">Logowanie nie powiodło się, wystąpił błąd. + <translation type="finished">Logowanie nie powiodło się, wystąpił błąd. %1</translation> </message> <message> @@ -1330,7 +1335,7 @@ p, li { white-space: pre-wrap; } Server response: %1</source> - <translation type="finished">Logowanie nie powiodło się, wystąpił błąd. + <translation type="finished">Logowanie nie powiodło się, wystąpił błąd. Odpowiedź serwera: %1</translation> </message> diff --git a/src/gui/res/lang/gui_pt-BR.qm b/src/gui/res/lang/gui_pt-BR.qm Binary files differindex 1deecfd..0825fcf 100644 --- a/src/gui/res/lang/gui_pt-BR.qm +++ b/src/gui/res/lang/gui_pt-BR.qm diff --git a/src/gui/res/lang/gui_pt-BR.ts b/src/gui/res/lang/gui_pt-BR.ts index 6245bca..6e85dd8 100644 --- a/src/gui/res/lang/gui_pt-BR.ts +++ b/src/gui/res/lang/gui_pt-BR.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Configurações do Barrier (*.sgc);;Todos os arquivos (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Todos os arquivos (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Configurações do Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Configurações do Barrier (*.conf);;Todos os arquivos (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Configurações do Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_pt-PT.qm b/src/gui/res/lang/gui_pt-PT.qm Binary files differindex 987d8ab..e824cce 100644 --- a/src/gui/res/lang/gui_pt-PT.qm +++ b/src/gui/res/lang/gui_pt-PT.qm diff --git a/src/gui/res/lang/gui_pt-PT.ts b/src/gui/res/lang/gui_pt-PT.ts index 03fc40d..9ae8899 100644 --- a/src/gui/res/lang/gui_pt-PT.ts +++ b/src/gui/res/lang/gui_pt-PT.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Configuração de barrier (*.sgc);;Todos os ficheiros (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Todos os ficheiros (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Configuração de barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Configuração de barrier (*.conf);;Todos os ficheiros (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Configuração de barrier (*.conf))</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_ro.qm b/src/gui/res/lang/gui_ro.qm Binary files differindex 6d1fdd2..1a69dad 100644 --- a/src/gui/res/lang/gui_ro.qm +++ b/src/gui/res/lang/gui_ro.qm diff --git a/src/gui/res/lang/gui_ro.ts b/src/gui/res/lang/gui_ro.ts index f82d128..c3c9c43 100644 --- a/src/gui/res/lang/gui_ro.ts +++ b/src/gui/res/lang/gui_ro.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Configurații Barrier (*.sgc);;Toate Fișierele (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Toate Fișierele (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Configurații Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Configurații Barrier (*.conf);;Toate Fișierele (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Configurații Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_ru.qm b/src/gui/res/lang/gui_ru.qm Binary files differindex 30ed0a7..ef3852c 100644 --- a/src/gui/res/lang/gui_ru.qm +++ b/src/gui/res/lang/gui_ru.qm diff --git a/src/gui/res/lang/gui_ru.ts b/src/gui/res/lang/gui_ru.ts index 411272f..f984240 100644 --- a/src/gui/res/lang/gui_ru.ts +++ b/src/gui/res/lang/gui_ru.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Конфигурация Barrier (*.sgc);;Все файлы (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Все файлы (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Конфигурация Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Конфигурация Barrier (*.conf);;Все файлы (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Конфигурация Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> @@ -1320,7 +1325,7 @@ p, li { white-space: pre-wrap; } <source>Login failed, an error occurred. %1</source> - <translation type="finished">Войти не удалось, произошла ошибка. + <translation type="finished">Войти не удалось, произошла ошибка. %1</translation> </message> @@ -1331,7 +1336,7 @@ p, li { white-space: pre-wrap; } Server response: %1</source> - <translation type="finished">Войти не удалось, произошла ошибка. + <translation type="finished">Войти не удалось, произошла ошибка. Ответ сервера: diff --git a/src/gui/res/lang/gui_si.ts b/src/gui/res/lang/gui_si.ts index 33597e9..9abc5df 100644 --- a/src/gui/res/lang/gui_si.ts +++ b/src/gui/res/lang/gui_si.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_sk-SK.qm b/src/gui/res/lang/gui_sk-SK.qm Binary files differindex acdf4f6..0e5efca 100644 --- a/src/gui/res/lang/gui_sk-SK.qm +++ b/src/gui/res/lang/gui_sk-SK.qm diff --git a/src/gui/res/lang/gui_sk-SK.ts b/src/gui/res/lang/gui_sk-SK.ts index 3e63795..0bbeacf 100644 --- a/src/gui/res/lang/gui_sk-SK.ts +++ b/src/gui/res/lang/gui_sk-SK.ts @@ -1,12 +1,14 @@ -<?xml version="1.0" encoding="utf-8"?><!DOCTYPE TS><TS language="sk-SK" sourcelanguage="en" version="2.0"> +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="sk_SK" sourcelanguage="en"> <context> <name>AboutDialogBase</name> <message> <location filename="res/AboutDialogBase.ui" line="38"/> <source>About Barrier</source> - <translation type="unfinished"></translation> + <translation>O Barrier</translation> </message> - <message utf8="true"> + <message> <location filename="res/AboutDialogBase.ui" line="53"/> <source><p> Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> @@ -26,22 +28,30 @@ Barrier is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> The Barrier GUI is based on QSynergy by Volker Lanz.<br /><br /> Visit our website for help and info (symless.com). </p></oldsource> - <translation type="unfinished"></translation> + <translation><p> +Aplikácia na zdieľanie klávesnice a myši. Podporuje viacero platforiem a má otvorený zdrojový kód.<br /><br /> +Autorské práva © 2012-2016 Symless Ltd.<br /> +Autorské práva © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Barrier je vydaný pod licenciou GNU General Public License (GPLv2).<br /><br /> +Základom pre Barrier je CosmoSynergy od Richarda Lee-a a Adama Federa.<br /> +Barrier GUI je postavené na QSynergy od Volkera Lanza.<br /><br /> +Pre pomoc a ďalšie informácie navštívte našu webovú stránku (symless.com). +</p></translation> </message> <message> <location filename="res/AboutDialogBase.ui" line="140"/> <source>Unknown</source> - <translation type="unfinished"></translation> + <translation>Neznáma</translation> </message> <message> <location filename="res/AboutDialogBase.ui" line="124"/> <source>Version:</source> - <translation type="unfinished"></translation> + <translation>Verzia:</translation> </message> <message> <location filename="res/AboutDialogBase.ui" line="163"/> <source>&Ok</source> - <translation type="unfinished"></translation> + <translation>&Ok</translation> </message> </context> <context> @@ -49,97 +59,97 @@ Visit our website for help and info (symless.com). <message> <location filename="res/ActionDialogBase.ui" line="14"/> <source>Configure Action</source> - <translation type="unfinished"></translation> + <translation>Nastaviť akciu</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="20"/> <source>Choose the action to perform</source> - <translation type="unfinished"></translation> + <translation>Vyberte akciu, ktorá sa má vykonať</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="26"/> <source>Press a hotkey</source> - <translation type="unfinished"></translation> + <translation>Stlačte klávesovú skratku</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="36"/> <source>Release a hotkey</source> - <translation type="unfinished"></translation> + <translation>Uvoľnite klávesovú skratku</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="43"/> <source>Press and release a hotkey</source> - <translation type="unfinished"></translation> + <translation>Stlačte a uvoľnite klávesovú skratku</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="69"/> <source>only on these screens</source> - <translation type="unfinished"></translation> + <translation>iba na týchto obrazovkách</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="119"/> <source>Switch to screen</source> - <translation type="unfinished"></translation> + <translation>Prepnúť na obrazovku</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="150"/> <source>Switch in direction</source> - <translation type="unfinished"></translation> + <translation>Prepnúť v smere</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="174"/> <source>left</source> - <translation type="unfinished"></translation> + <translation>doľava</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="179"/> <source>right</source> - <translation type="unfinished"></translation> + <translation>doprava</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="184"/> <source>up</source> - <translation type="unfinished"></translation> + <translation>hore</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="189"/> <source>down</source> - <translation type="unfinished"></translation> + <translation>dole</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="201"/> <source>Lock cursor to screen</source> - <translation type="unfinished"></translation> + <translation>Zamknúť kurzor na obrazovke</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="225"/> <source>toggle</source> - <translation type="unfinished"></translation> + <translation>prepnúť</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="230"/> <source>on</source> - <translation type="unfinished"></translation> + <translation>zap</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="235"/> <source>off</source> - <translation type="unfinished"></translation> + <translation>vyp</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="248"/> <source>This action is performed when</source> - <translation type="unfinished"></translation> + <translation>Táto akcia sa vykoná pri</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="254"/> <source>the hotkey is pressed</source> - <translation type="unfinished"></translation> + <translation>stlačení klávesovej skratky</translation> </message> <message> <location filename="res/ActionDialogBase.ui" line="264"/> <source>the hotkey is released</source> - <translation type="unfinished"></translation> + <translation>uvoľnení klávesovej skratky</translation> </message> </context> <context> @@ -147,17 +157,17 @@ Visit our website for help and info (symless.com). <message> <location filename="res/AddClientDialogBase.ui" line="20"/> <source>Dialog</source> - <translation type="unfinished"></translation> + <translation>Dialógové okno</translation> </message> <message> <location filename="res/AddClientDialogBase.ui" line="35"/> <source>TextLabel</source> - <translation type="unfinished"></translation> + <translation>TextovýPopis</translation> </message> <message> <location filename="res/AddClientDialogBase.ui" line="83"/> <source>Ignore auto connect clients</source> - <translation type="unfinished"></translation> + <translation>Ignorovať automatické pripojenia klientov</translation> </message> </context> <context> @@ -165,12 +175,12 @@ Visit our website for help and info (symless.com). <message> <location filename="res/HotkeyDialogBase.ui" line="14"/> <source>Hotkey</source> - <translation type="unfinished"></translation> + <translation>Klávesová skratka</translation> </message> <message> <location filename="res/HotkeyDialogBase.ui" line="20"/> <source>Enter the specification for the hotkey:</source> - <translation type="unfinished"></translation> + <translation>Vložte popis klávesovej skratky:</translation> </message> </context> <context> @@ -178,189 +188,193 @@ Visit our website for help and info (symless.com). <message> <location filename="src/MainWindow.cpp" line="790"/> <source>&Start</source> - <translation type="unfinished"></translation> + <translation>S&pustiť</translation> </message> <message> <location filename="src/MainWindow.cpp" line="237"/> <source>&File</source> - <translation type="unfinished"></translation> + <translation>&Súbor</translation> </message> <message> <location filename="src/MainWindow.cpp" line="238"/> <source>&Edit</source> - <translation type="unfinished"></translation> + <translation>&Upraviť</translation> </message> <message> <location filename="src/MainWindow.cpp" line="239"/> <source>&Window</source> - <translation type="unfinished"></translation> + <translation>&Okno</translation> </message> <message> <location filename="src/MainWindow.cpp" line="240"/> <source>&Help</source> - <translation type="unfinished"></translation> + <translation>&Pomocník</translation> </message> <message> <location filename="src/MainWindow.cpp" line="364"/> <source><p>Your version of Barrier is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p></source> <oldsource><p>Version %1 is now available, <a href="%2">visit website</a>.</p></oldsource> - <translation type="unfinished"></translation> + <translation><p>Vaša verzia Barrier nie je aktuálna. Na <a href="%2">stiahnutie</a> je k dispozícii verzia <b>%1</b>.</p></translation> </message> <message> <location filename="src/MainWindow.cpp" line="577"/> <source>Program can not be started</source> - <translation type="unfinished"></translation> + <translation>Program sa nepodarilo spustiť</translation> </message> <message> <location filename="src/MainWindow.cpp" line="577"/> <source>The executable<br><br>%1<br><br>could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source> - <translation type="unfinished"></translation> + <translation>Súbor <br><br>%1<br><br>sa nepodarilo spustiť aj napriek tomu, že existuje. Prosím, skontrolujte, či máte dostatočné práva na spustenie tohto programu.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="596"/> <source>Barrier client not found</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa nájsť klienta Barrier</translation> </message> <message> <location filename="src/MainWindow.cpp" line="597"/> <source>The executable for the barrier client does not exist.</source> - <translation type="unfinished"></translation> + <translation>Spustiteľný súbor klienta barrier neexistuje.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="625"/> <source>Hostname is empty</source> - <translation type="unfinished"></translation> + <translation>Názov hostiteľa je prázdny</translation> </message> <message> <location filename="src/MainWindow.cpp" line="626"/> <source>Please fill in a hostname for the barrier client to connect to.</source> - <translation type="unfinished"></translation> + <translation>Prosím, vyplňte názov hostiteľa, ku ktorému sa klient barrier má pripojiť.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="646"/> <source>Cannot write configuration file</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa zapísať súbor s konfiguráciou</translation> </message> <message> <location filename="src/MainWindow.cpp" line="646"/> <source>The temporary configuration file required to start barrier can not be written.</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa zapísať do dočasného súboru, ktorý je potrebný pre spustenie barrier.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="659"/> <source>Configuration filename invalid</source> - <translation type="unfinished"></translation> + <translation>Neplatný názov konfiguračného súboru</translation> </message> <message> <location filename="src/MainWindow.cpp" line="660"/> <source>You have not filled in a valid configuration file for the barrier server. Do you want to browse for the configuration file now?</source> - <translation type="unfinished"></translation> + <translation>Nezadali ste platný konfiguračný súbor pre server barrier. Želáte si teraz vybrať súbor s konfiguráciou?</translation> </message> <message> <location filename="src/MainWindow.cpp" line="688"/> <source>Barrier server not found</source> - <translation type="unfinished"></translation> + <translation>Server barrier nebol nájdený</translation> </message> <message> <location filename="src/MainWindow.cpp" line="689"/> <source>The executable for the barrier server does not exist.</source> - <translation type="unfinished"></translation> + <translation>Spustiteľný súbor servera barrier neexistuje.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="764"/> <source>Barrier terminated with an error</source> - <translation type="unfinished"></translation> + <translation>Barrier skončil s chybou</translation> </message> <message> <location filename="src/MainWindow.cpp" line="764"/> <source>Barrier terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details.</source> - <translation type="unfinished"></translation> + <translation>Barrier bolo neočakávane ukončený s chybovým kódom %1.<br><br>Podrobnosti nájdete v súbore s protokolom.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="783"/> <source>&Stop</source> - <translation type="unfinished"></translation> + <translation>&Zastaviť</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1038"/> <source>Please add the server (%1) to the grid.</source> - <translation type="unfinished"></translation> + <translation>Pridajte, prosím, server (%1) do mriežky.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1044"/> <source>Please drag the new client screen (%1) to the desired position on the grid.</source> - <translation type="unfinished"></translation> + <translation>Ťahaním presuňte obrazovku nového klienta (%1) na požadovanú pozíciu v mriežke.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1147"/> <source>Failed to detect system architecture.</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa zistiť systémovú architektúru.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1165"/> <source>Cancel</source> - <translation type="unfinished"></translation> + <translation>Zrušiť</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1189"/> <source>Failed to download Bonjour installer to location: %1</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa stiahnuť inštalátor Bonjour do umiestnenia: %1</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1226"/> <source>Do you want to enable auto config and install Bonjour? This feature helps you establish the connection.</source> - <translation type="unfinished"></translation> + <translation>Želáte si povoliť autokonfiguráciu a nainštalovať Bonjour? + +Táto funkcia vám pomôže s nadväzovaním spojenia.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1270"/> <source>Auto config feature requires Bonjour. Do you want to install Bonjour?</source> - <translation type="unfinished"></translation> + <translation>Funkcia autokonfigurácie vyžaduje Bonjour. + +Želáte si nainštalovať Bonjour?</translation> </message> <message> <location filename="src/MainWindow.cpp" line="815"/> <source>Barrier is starting.</source> - <translation type="unfinished"></translation> + <translation>Barrier sa spúšťa.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="809"/> <source>Barrier is running.</source> - <translation type="unfinished"></translation> + <translation>Barrier je spustený.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="819"/> <source>Barrier is not running.</source> - <translation type="unfinished"></translation> + <translation>Barrier nie je spustený.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="870"/> <source>Unknown</source> - <translation type="unfinished"></translation> + <translation>Neznáma</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1146"/> <location filename="src/MainWindow.cpp" line="1225"/> <location filename="src/MainWindow.cpp" line="1269"/> <source>Barrier</source> - <translation type="unfinished"></translation> + <translation>Barrier</translation> </message> <message> <location filename="src/MainWindow.cpp" line="987"/> <source>Browse for a barriers config file</source> - <translation type="unfinished"></translation> + <translation>Vybrať súbor s konfiguráciou barrier</translation> </message> <message> <location filename="src/MainWindow.cpp" line="408"/> <source>Barrier is now connected, You can close the config window. Barrier will remain connected in the background.</source> - <translation type="unfinished"></translation> + <translation>Barrier je pripojený, môžete zavrieť okno s nastaveniami. Barrier zostane bežať na pozadí.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="434"/> <source>Security question</source> - <translation type="unfinished"></translation> + <translation>Bezpečnostná otázka</translation> </message> <message> <location filename="src/MainWindow.cpp" line="435"/> @@ -368,25 +382,31 @@ Do you want to install Bonjour?</source> %1 -This is a server fingerprint. You should compare this fingerprint to the one on your server's screen. If the two don't match exactly, then it's probably not the server you're expecting (it could be a malicious user). +This is a server fingerprint. You should compare this fingerprint to the one on your server's screen. If the two don't match exactly, then it's probably not the server you're expecting (it could be a malicious user). To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No.</source> - <translation type="unfinished"></translation> + <translation>Dôverujete tomuto otlačku? + +%1 + +Toto je digitálny otlačok servera. Mali by ste ho porovnať s otlačkom na jednej z obrazoviek vášho servera. Ak nie sú rovnaké, potom sa pravdepodobne nepripájate na server, na ktorý chcete (môže sa jednať o zlomyselného používateľa). + +Ak chcete automaticky dôverovať tomuto otlačku pri ďalších spojeniach, kliknite na Áno. Pre odmietnutie tohto otlačku a odpojenie od servera kliknite na Nie.</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1000"/> <source>Save configuration as...</source> - <translation type="unfinished"></translation> + <translation>Uložiť konfiguráciu ako...</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1004"/> <source>Save failed</source> - <translation type="unfinished"></translation> + <translation>Chyba pri ukladaní</translation> </message> <message> <location filename="src/MainWindow.cpp" line="1004"/> <source>Could not save configuration to file.</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa uložiť súbor s konfiguráciou do súboru.</translation> </message> </context> <context> @@ -394,168 +414,168 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/MainWindowBase.ui" line="26"/> <source>Barrier</source> - <translation type="unfinished"></translation> + <translation>Barrier</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="90"/> - <source>Ser&ver (share this computer's mouse and keyboard):</source> - <translation type="unfinished"></translation> + <source>Ser&ver (share this computer's mouse and keyboard):</source> + <translation>Ser&ver (zdieľať klávesnicu a myš tohto počítača):</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="243"/> <source>Screen name:</source> - <translation type="unfinished"></translation> + <translation>Názov obrazovky:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="257"/> <source>&Server IP:</source> - <translation type="unfinished"></translation> + <translation>&IP servera:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="380"/> <location filename="res/MainWindowBase.ui" line="409"/> <source>&Start</source> - <translation type="unfinished"></translation> + <translation>S&pustiť</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="181"/> <source>Use existing configuration:</source> - <translation type="unfinished"></translation> + <translation>Použiť existujúcu konfiguráciu:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="190"/> <source>&Configuration file:</source> - <translation type="unfinished"></translation> + <translation>Sú&bor s konfiguráciou:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="210"/> <source>&Browse...</source> - <translation type="unfinished"></translation> + <translation>&Prechádzať...</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="147"/> <source>Configure interactively:</source> - <translation type="unfinished"></translation> + <translation>Interaktívna konfigurácia:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="159"/> <source>&Configure Server...</source> - <translation type="unfinished"></translation> + <translation>&Konfigurovať server...</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="350"/> <source>Ready</source> - <translation type="unfinished"></translation> + <translation>Pripravené</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="296"/> <source>Log</source> - <translation type="unfinished"></translation> + <translation>Protokol</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="373"/> <source>&Reload</source> - <translation type="unfinished"></translation> + <translation>&Znovu načítať</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="107"/> <source>IP addresses:</source> - <translation type="unfinished"></translation> + <translation>IP adresy:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="131"/> <source>Fingerprint:</source> - <translation type="unfinished"></translation> + <translation>Otlačok:</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="228"/> - <source>&Client (use another computer's mouse and keyboard):</source> - <translation type="unfinished"></translation> + <source>&Client (use another computer's mouse and keyboard):</source> + <translation>&Klient (používa klávesnicu a myš iného počítača):</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="270"/> <source>Auto config</source> - <translation type="unfinished"></translation> + <translation>Automatická konfigurácia</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="390"/> <source>&About Barrier...</source> - <translation type="unfinished"></translation> + <translation>&O Barrier...</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="398"/> <source>&Quit</source> - <translation type="unfinished"></translation> + <translation>&Ukončiť</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="401"/> <source>Quit</source> - <translation type="unfinished"></translation> + <translation>Ukončiť</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="412"/> <source>Run</source> - <translation type="unfinished"></translation> + <translation>Spustiť</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="423"/> <source>S&top</source> - <translation type="unfinished"></translation> + <translation>Za&staviť</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="426"/> <source>Stop</source> - <translation type="unfinished"></translation> + <translation>Zastaviť</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="434"/> <source>S&how Status</source> - <translation type="unfinished"></translation> + <translation>Zo&braziť stav</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="442"/> <source>&Hide</source> - <translation type="unfinished"></translation> + <translation>&Skryť</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="445"/> <source>Hide</source> - <translation type="unfinished"></translation> + <translation>Skryť</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="453"/> <source>&Show</source> - <translation type="unfinished"></translation> + <translation>Z&obraziť</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="456"/> <source>Show</source> - <translation type="unfinished"></translation> + <translation>Zobraziť</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="464"/> <source>Save configuration &as...</source> - <translation type="unfinished"></translation> + <translation>Uložiť konfiguráciu &ako...</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="467"/> <source>Save the interactively generated server configuration to a file.</source> - <translation type="unfinished"></translation> + <translation>Uložiť interaktívne vygenerovanú konfiguráciu serveru do súboru.</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="475"/> <source>Settings</source> - <translation type="unfinished"></translation> + <translation>Nastavenia</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="478"/> <source>Edit settings</source> - <translation type="unfinished"></translation> + <translation>Upraviť nastavenia</translation> </message> <message> <location filename="res/MainWindowBase.ui" line="486"/> <source>Run Wizard</source> - <translation type="unfinished"></translation> + <translation>Spustiť sprievodcu</translation> </message> </context> <context> @@ -563,7 +583,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/NewScreenWidget.cpp" line="32"/> <source>Unnamed</source> - <translation type="unfinished"></translation> + <translation>Bezmena</translation> </message> </context> <context> @@ -571,28 +591,29 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/PluginManager.cpp" line="58"/> <source>Failed to get plugin directory.</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa získať adresár s pluginmi.</translation> </message> <message> <location filename="src/PluginManager.cpp" line="63"/> <source>Failed to get profile directory.</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa získať adresár s profilom.</translation> </message> <message> <location filename="src/PluginManager.cpp" line="136"/> - <source>Failed to download plugin '%1' to: %2 + <source>Failed to download plugin '%1' to: %2 %3</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa stiahnuť plugin '%1' do: %2 +%3</translation> </message> <message> <location filename="src/PluginManager.cpp" line="167"/> <source>Could not get Windows architecture type.</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa zistiť typ architektúry Windows.</translation> </message> <message> <location filename="src/PluginManager.cpp" line="191"/> <source>Could not get Linux architecture type.</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa zistiť typ architektúry Linuxu.</translation> </message> </context> <context> @@ -600,66 +621,71 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/PluginWizardPageBase.ui" line="14"/> <source>Setup Barrier</source> - <translation type="unfinished"></translation> + <translation>Nastaviť Barrier</translation> </message> <message> <location filename="res/PluginWizardPageBase.ui" line="101"/> <source>Please wait...</source> - <translation type="unfinished"></translation> + <translation>Čakajte prosím...</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="72"/> <source>Error: %1</source> - <translation type="unfinished"></translation> + <translation>Chyba: %1</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="80"/> <location filename="src/PluginWizardPage.cpp" line="201"/> <source>Setup complete.</source> - <translation type="unfinished"></translation> + <translation>Nastavovanie dokončené.</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="93"/> - <source>Downloading '%1' plugin (%2/%3)...</source> - <translation type="unfinished"></translation> + <source>Downloading '%1' plugin (%2/%3)...</source> + <translation>Sťahujem plugin '%1' (%2/%3)...</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="104"/> <source>Plugins installed successfully.</source> - <translation type="unfinished"></translation> + <translation>Pluginy úspešne nainštalované.</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="120"/> <source>Generating SSL certificate...</source> - <translation type="unfinished"></translation> + <translation>Generujem SSL certifikát...</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="170"/> <source>Downloading plugin: %1 (1/%2)</source> - <translation type="unfinished"></translation> + <translation>Sťahujem plugin: %1 (1/%2)</translation> </message> <message> <location filename="src/PluginWizardPage.cpp" line="239"/> <source>Getting plugin list...</source> - <translation type="unfinished"></translation> + <translation>Získavam zoznam pluginov...</translation> </message> </context> <context> <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="unfinished"></translation> + <source>All files (*.*)</source> + <translation>Všetky súbory (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation>Konfiguračné súbory Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="unfinished"></translation> + <source>Barrier Configurations (*.conf)</source> + <translation>Konfiguračné súbory Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> <source>System tray is unavailable, quitting.</source> - <translation type="unfinished"></translation> + <translation>Systémová oblasť nie je dostupná, končím.</translation> </message> </context> <context> @@ -667,22 +693,22 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/ScreenSettingsDialog.cpp" line="67"/> <source>Screen name is empty</source> - <translation type="unfinished"></translation> + <translation>Názov obrazovky je prázdny</translation> </message> <message> <location filename="src/ScreenSettingsDialog.cpp" line="68"/> <source>The screen name cannot be empty. Please either fill in a name or cancel the dialog.</source> - <translation type="unfinished"></translation> + <translation>Názov obrazovky nemôže byť prázdny. Zadajte, prosím, názov alebo zrušte toto dialógové okno.</translation> </message> <message> <location filename="src/ScreenSettingsDialog.cpp" line="83"/> <source>Screen name matches alias</source> - <translation type="unfinished"></translation> + <translation>Názov obrazovky koliduje s jej alternatívnym názvom</translation> </message> <message> <location filename="src/ScreenSettingsDialog.cpp" line="84"/> <source>The screen name cannot be the same as an alias. Please either remove the alias or change the screen name.</source> - <translation type="unfinished"></translation> + <translation>Názov obrazovky nemôže byť rovnaký ako jej alternatívny názov. Prosím, odstráňte alternatívny názov alebo zmeňte názov obrazovky.</translation> </message> </context> <context> @@ -690,37 +716,37 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/ScreenSettingsDialogBase.ui" line="14"/> <source>Screen Settings</source> - <translation type="unfinished"></translation> + <translation>Nastavenia obrazovky</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="22"/> <source>Screen &name:</source> - <translation type="unfinished"></translation> + <translation>&Názov obrazovky:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="42"/> <source>A&liases</source> - <translation type="unfinished"></translation> + <translation>&Alternatívne názvy</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="57"/> <source>&Add</source> - <translation type="unfinished"></translation> + <translation>&Pridať</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="74"/> <source>&Remove</source> - <translation type="unfinished"></translation> + <translation>O&dstrániť</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="97"/> <source>&Modifier keys</source> - <translation type="unfinished"></translation> + <translation>&Modifikátory klávesov</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="106"/> <source>&Shift:</source> - <translation type="unfinished"></translation> + <translation>&Shift:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="117"/> @@ -729,7 +755,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="258"/> <location filename="res/ScreenSettingsDialogBase.ui" line="305"/> <source>Shift</source> - <translation type="unfinished"></translation> + <translation>Shift</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="122"/> @@ -738,7 +764,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="263"/> <location filename="res/ScreenSettingsDialogBase.ui" line="310"/> <source>Ctrl</source> - <translation type="unfinished"></translation> + <translation>Ctrl</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="127"/> @@ -747,7 +773,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="268"/> <location filename="res/ScreenSettingsDialogBase.ui" line="315"/> <source>Alt</source> - <translation type="unfinished"></translation> + <translation>Alt</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="132"/> @@ -756,7 +782,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="273"/> <location filename="res/ScreenSettingsDialogBase.ui" line="320"/> <source>Meta</source> - <translation type="unfinished"></translation> + <translation>Meta</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="137"/> @@ -765,7 +791,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="278"/> <location filename="res/ScreenSettingsDialogBase.ui" line="325"/> <source>Super</source> - <translation type="unfinished"></translation> + <translation>Super</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="142"/> @@ -774,82 +800,82 @@ To automatically trust this fingerprint for future connections, click Yes. To re <location filename="res/ScreenSettingsDialogBase.ui" line="283"/> <location filename="res/ScreenSettingsDialogBase.ui" line="330"/> <source>None</source> - <translation type="unfinished"></translation> + <translation>Žiadny</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="150"/> <source>&Ctrl:</source> - <translation type="unfinished"></translation> + <translation>&Ctrl:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="197"/> <source>Al&t:</source> - <translation type="unfinished"></translation> + <translation>Al&t:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="244"/> <source>M&eta:</source> - <translation type="unfinished"></translation> + <translation>M&eta:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="291"/> <source>S&uper:</source> - <translation type="unfinished"></translation> + <translation>S&uper:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="358"/> <source>&Dead corners</source> - <translation type="unfinished"></translation> + <translation>&Mŕtve rohy</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="367"/> <source>Top-left</source> - <translation type="unfinished"></translation> + <translation>Vľavo hore</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="374"/> <source>Top-right</source> - <translation type="unfinished"></translation> + <translation>Vpravo hore</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="381"/> <source>Bottom-left</source> - <translation type="unfinished"></translation> + <translation>Vľavo dole</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="388"/> <source>Bottom-right</source> - <translation type="unfinished"></translation> + <translation>Vpravo dole</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="397"/> <source>Corner Si&ze:</source> - <translation type="unfinished"></translation> + <translation>Veľ&kosť rohov:</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="428"/> <source>&Fixes</source> - <translation type="unfinished"></translation> + <translation>&Opravy</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="437"/> <source>Fix CAPS LOCK key</source> - <translation type="unfinished"></translation> + <translation>Opraviť správanie klávesu CAPS LOCK</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="444"/> <source>Fix NUM LOCK key</source> - <translation type="unfinished"></translation> + <translation>Opraviť správanie klávesu NUM LOCK</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="451"/> <source>Fix SCROLL LOCK key</source> - <translation type="unfinished"></translation> + <translation>Opraviť správanie klávesu SCROLL LOCK</translation> </message> <message> <location filename="res/ScreenSettingsDialogBase.ui" line="458"/> <source>Fix XTest for Xinerama</source> - <translation type="unfinished"></translation> + <translation>Opravit XTest pre Xinerama</translation> </message> </context> <context> @@ -857,7 +883,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/ScreenSetupModel.cpp" line="51"/> <source><center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it</source> - <translation type="unfinished"></translation> + <translation><center>Obrazovka: <b>%1</b></center><br>Dvojitým kliknutím upravíte nastavenia<br>Pre odstránenie obrazovky ju myšou presuňte do koša</translation> </message> </context> <context> @@ -865,7 +891,7 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="src/ServerConfigDialog.cpp" line="75"/> <source>Configure server</source> - <translation type="unfinished"></translation> + <translation>Konfigurovať server</translation> </message> </context> <context> @@ -873,166 +899,168 @@ To automatically trust this fingerprint for future connections, click Yes. To re <message> <location filename="res/ServerConfigDialogBase.ui" line="14"/> <source>Server Configuration</source> - <translation type="unfinished"></translation> + <translation>Konfigurácia servera</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="24"/> <source>Screens and links</source> - <translation type="unfinished"></translation> + <translation>Obrazovky a prepojenia</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="35"/> <source>Drag a screen from the grid to the trashcan to remove it.</source> - <translation type="unfinished"></translation> + <translation>Pre odstránenie obrazovky ju chyťte a presuňte z mriežky do koša.</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="60"/> <source>Configure the layout of your barrier server configuration.</source> - <translation type="unfinished"></translation> + <translation>Nastaviť rozloženie konfigurácie vášho servera barrier.</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="73"/> <source>Drag this button to the grid to add a new screen.</source> - <translation type="unfinished"></translation> + <translation>Pre vytvorenie novej obrazovky presuňte toto tlačidlo do mriežky.</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="128"/> <source>Drag new screens to the grid or move existing ones around. Drag a screen to the trashcan to delete it. Double click on a screen to edit its settings.</source> - <translation type="unfinished"></translation> + <translation>Ťahaním pridajte nové obrazovky do mriežky alebo presuňte existujúce. +Presuňte obrazovku do koša, ak ju chcete odstrániť. +Dvojitým kliknutím na obrazovku upravíte jej nastavenia.</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="157"/> <source>Hotkeys</source> - <translation type="unfinished"></translation> + <translation>Klávesové skratky</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="163"/> <source>&Hotkeys</source> - <translation type="unfinished"></translation> + <translation>&Klávesové skratky</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="175"/> <source>&New</source> - <translation type="unfinished"></translation> + <translation>&Nový</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="185"/> <source>&Edit</source> - <translation type="unfinished"></translation> + <translation>&Upraviť</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="195"/> <source>&Remove</source> - <translation type="unfinished"></translation> + <translation>O&dstrániť</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="218"/> <source>A&ctions</source> - <translation type="unfinished"></translation> + <translation>&Akcie</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="230"/> <source>Ne&w</source> - <translation type="unfinished"></translation> + <translation>No&vý</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="240"/> <source>E&dit</source> - <translation type="unfinished"></translation> + <translation>U&praviť</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="250"/> <source>Re&move</source> - <translation type="unfinished"></translation> + <translation>Ods&trániť</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="274"/> <source>Advanced server settings</source> - <translation type="unfinished"></translation> + <translation>Pokročilé nastavenia serveru</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="280"/> <source>&Switch</source> - <translation type="unfinished"></translation> + <translation>&Prepnúť</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="291"/> <source>Switch &after waiting</source> - <translation type="unfinished"></translation> + <translation>Prepnúť &po prestávke</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="330"/> <location filename="res/ServerConfigDialogBase.ui" line="383"/> <location filename="res/ServerConfigDialogBase.ui" line="458"/> <source>ms</source> - <translation type="unfinished"></translation> + <translation>ms</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="344"/> <source>Switch on double &tap within</source> - <translation type="unfinished"></translation> + <translation>Prepnúť po &dvojitom ťuknutí počas</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="408"/> <source>&Options</source> - <translation type="unfinished"></translation> + <translation>&Možnosti</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="419"/> <source>&Check clients every</source> - <translation type="unfinished"></translation> + <translation>K&ontrolovať klientov každých</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="470"/> <source>Use &relative mouse moves</source> - <translation type="unfinished"></translation> + <translation>Používať &relatívne pohyby myši</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="480"/> <source>S&ynchronize screen savers</source> - <translation type="unfinished"></translation> + <translation>&Synchronizovať šetriče obrazovky</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="490"/> - <source>Don't take &foreground window on Windows servers</source> - <translation type="unfinished"></translation> + <source>Don't take &foreground window on Windows servers</source> + <translation>Na serveroch s &Windows sa neprepínať do popredia</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="510"/> <source>Ignore auto config clients</source> - <translation type="unfinished"></translation> + <translation>Ignorovať klientov s autokonfiguráciou</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="520"/> <source>&Dead corners</source> - <translation type="unfinished"></translation> + <translation>&Mŕtve rohy</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="529"/> <source>To&p-left</source> - <translation type="unfinished"></translation> + <translation>&Vľavo hore</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="536"/> <source>Top-rig&ht</source> - <translation type="unfinished"></translation> + <translation>Vpravo &dole</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="543"/> <source>&Bottom-left</source> - <translation type="unfinished"></translation> + <translation>&Vľavo dole</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="550"/> <source>Bottom-ri&ght</source> - <translation type="unfinished"></translation> + <translation>V&pravo dole</translation> </message> <message> <location filename="res/ServerConfigDialogBase.ui" line="572"/> <source>Cor&ner Size:</source> - <translation type="unfinished"></translation> + <translation>&Veľkost rohov:</translation> </message> </context> <context> @@ -1040,19 +1068,21 @@ Double click on a screen to edit its settings.</source> <message> <location filename="src/SettingsDialog.cpp" line="131"/> <source>Save log file to...</source> - <translation type="unfinished"></translation> + <translation>Uložiť súbor s protokolom do...</translation> </message> <message> <location filename="src/SettingsDialog.cpp" line="151"/> <source>Elevate Barrier</source> - <translation type="unfinished"></translation> + <translation>Zvýšiť stupeň oprávnení pre Barrier</translation> </message> <message> <location filename="src/SettingsDialog.cpp" line="152"/> <source>Are you sure you want to elevate Barrier? This allows Barrier to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Barrier only if you really need to.</source> - <translation type="unfinished"></translation> + <translation>Naozaj chcete zvýšiť stupeň oprávnení pre Barrier? + +Toto umožní Barrier pracovať s procesmi, ktoré majú takisto vyšší stupeň oprávnení a s oknom riadenia používateľských účtov (UAC), ale môže to tiež spôsobiť problémy aplikáciam s bežnými oprávneniami. Túto možnosť by ste mali použiť iba, ak ju skutočne potrebujete.</translation> </message> </context> <context> @@ -1060,107 +1090,107 @@ This allows Barrier to interact with elevated processes and the UAC dialog, but <message> <location filename="res/SettingsDialogBase.ui" line="14"/> <source>Settings</source> - <translation type="unfinished"></translation> + <translation>Nastavenia</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="32"/> <source>Sc&reen name:</source> - <translation type="unfinished"></translation> + <translation>&Názov obrazovky:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="49"/> <source>P&ort:</source> - <translation type="unfinished"></translation> + <translation>P&ort:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="78"/> <source>&Interface:</source> - <translation type="unfinished"></translation> + <translation>&Používateľské rozhranie:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="120"/> <source>Elevate mode</source> - <translation type="unfinished"></translation> + <translation>Režim oprávnení</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="127"/> <source>&Hide on startup</source> - <translation type="unfinished"></translation> + <translation>&Skryť pri spustení</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="146"/> <source>&Network Security</source> - <translation type="unfinished"></translation> + <translation>Sieťová &bezpečnosť</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="155"/> <source>Use &SSL encryption (unique certificate)</source> - <translation type="unfinished"></translation> + <translation>Používať šifrovanie &SSL (jedinečný certifikát)</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="184"/> <source>Logging</source> - <translation type="unfinished"></translation> + <translation>Protokolovanie</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="202"/> <source>&Logging level:</source> - <translation type="unfinished"></translation> + <translation>Ú&roveň protokolu:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="251"/> <source>Log to file:</source> - <translation type="unfinished"></translation> + <translation>Protokol ukladať do súboru:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="268"/> <source>Browse...</source> - <translation type="unfinished"></translation> + <translation>Prechádzať...</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="213"/> <source>Error</source> - <translation type="unfinished"></translation> + <translation>Chyba</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="107"/> <source>&Language:</source> - <translation type="unfinished"></translation> + <translation>&Jazyk:</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="20"/> <source>&Miscellaneous</source> - <translation type="unfinished"></translation> + <translation>&Rôzne</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="218"/> <source>Warning</source> - <translation type="unfinished"></translation> + <translation>Varovanie</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="223"/> <source>Note</source> - <translation type="unfinished"></translation> + <translation>Poznámka</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="228"/> <source>Info</source> - <translation type="finished">Informácie</translation> + <translation>Informácie</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="233"/> <source>Debug</source> - <translation type="unfinished"></translation> + <translation>Ladenie</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="238"/> <source>Debug1</source> - <translation type="unfinished"></translation> + <translation>Ladenie1</translation> </message> <message> <location filename="res/SettingsDialogBase.ui" line="243"/> <source>Debug2</source> - <translation type="unfinished"></translation> + <translation>Ladenie2</translation> </message> </context> <context> @@ -1168,17 +1198,17 @@ This allows Barrier to interact with elevated processes and the UAC dialog, but <message> <location filename="src/SetupWizard.cpp" line="72"/> <source>Setup Barrier</source> - <translation type="unfinished"></translation> + <translation>Nastaviť Barrier</translation> </message> <message> <location filename="src/SetupWizard.cpp" line="113"/> <source>Please select an option.</source> - <translation type="unfinished"></translation> + <translation>Prosím, vyberte si jednu z možností.</translation> </message> <message> <location filename="src/SetupWizard.cpp" line="80"/> <source>Please enter your email address and password.</source> - <translation type="unfinished"></translation> + <translation>Zadajte, prosím, vašu emailovú adresu a heslo.</translation> </message> </context> <context> @@ -1186,85 +1216,93 @@ This allows Barrier to interact with elevated processes and the UAC dialog, but <message> <location filename="res/SetupWizardBase.ui" line="26"/> <source>Setup Barrier</source> - <translation type="unfinished"></translation> + <translation>Nastaviť Barrier</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="30"/> <source>Welcome</source> - <translation type="unfinished"></translation> + <translation>Vitajte</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="39"/> <source>Thanks for installing Barrier!</source> - <translation type="unfinished"></translation> + <translation>Ďakujeme, že ste sa rozhodli nainštalovať Barrier!</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="114"/> - <source>Barrier lets you easily share your mouse and keyboard between multiple computers on your desk, and it's Free and Open Source. Just move your mouse off the edge of one computer's screen on to another. You can even share all of your clipboards. All you need is a network connection. Barrier is cross-platform (works on Windows, Mac OS X and Linux).</source> - <translation type="finished">Barrier vám umožní ľahko zdieľať myš a klávesnicu medzi viacerými počítačmi na stole, je to zadarmo a Open Source. Len presunúť kurzor myši mimo okraj jedného počítača na obrazovke na ďalšie. Môžete dokonca zdieľať všetky vaše schránok. Všetko, čo potrebujete, je pripojenie k sieti. Barrier je cross-platformové (práca na Windows, Mac OS X a Linux).</translation> + <source>Barrier lets you easily share your mouse and keyboard between multiple computers on your desk, and it's Free and Open Source. Just move your mouse off the edge of one computer's screen on to another. You can even share all of your clipboards. All you need is a network connection. Barrier is cross-platform (works on Windows, Mac OS X and Linux).</source> + <translation>Barrier vám umožní ľahko zdieľať myš a klávesnicu medzi viacerými počítačmi, je zadarmo a má otvorený zdrojový kód. Stačí len presunúť kurzor myši mimo okraj obrazovky jedného počítača a presuniete sa na druhý počítač. Môžete dokonca zdieľať všetky vaše schránky. Všetko, čo potrebujete, je pripojenie k sieti. Barrier podporuje viacero platforiem (funguje vo Windowse, Mac OS X a Linuxe).</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="125"/> <source>Activate</source> - <translation type="unfinished"></translation> + <translation>Aktivovať</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="131"/> <source>&Activate now...</source> - <translation type="unfinished"></translation> + <translation>&Aktivovať teraz...</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="152"/> <source>Email:</source> - <translation type="unfinished"></translation> + <translation>Email:</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="178"/> <source>Password:</source> - <translation type="unfinished"></translation> + <translation>Heslo:</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="204"/> <source><a href="https://symless.com/account/reset/">Forgot password</a></source> - <translation type="unfinished"></translation> + <translation><a href="https://symless.com/account/reset/">Zabudnuté heslo</a></translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="232"/> <source>&Skip activation</source> - <translation type="unfinished"></translation> + <translation>&Preskočiť aktiváciu</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="277"/> - <source>&Server (share this computer's mouse and keyboard)</source> - <translation type="unfinished"></translation> + <source>&Server (share this computer's mouse and keyboard)</source> + <translation>&Server (zdieľať klávesnicu a myš tohto počítača)</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="290"/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">My main mouse and keyboard are connected to this computer. This will allow you to move your mouse over to another computer's screen. There can only be one server in your setup.</span></p></body></html></source> - <translation type="unfinished"></translation> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">My main mouse and keyboard are connected to this computer. This will allow you to move your mouse over to another computer's screen. There can only be one server in your setup.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">K tomuto počítaču je pripojená moja hlavná klávesnica a myš. Toto vám umožní presunúť kurzor myši na obrazovku iného počítača. V úlohe servera môže byť len jeden počítač.</span></p></body></html></translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="326"/> - <source>&Client (use another computer's mouse and keyboard)</source> - <translation type="unfinished"></translation> + <source>&Client (use another computer's mouse and keyboard)</source> + <translation>&Klient (použiť klávesnicu a myš iného počítača)</translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="339"/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You have already set up a server. This computer will be controlled using the server's mouse and keyboard. There can be many clients in your setup.</span></p></body></html></source> - <translation type="unfinished"></translation> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You have already set up a server. This computer will be controlled using the server's mouse and keyboard. There can be many clients in your setup.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">Server už ste nastavili. Tento počítač bude ovládaný klávesnicou a myšou pripojenou k serveru. V roli klienta môže byť viacero počítačov.</span></p></body></html></translation> </message> <message> <location filename="res/SetupWizardBase.ui" line="262"/> <source>Server or Client?</source> - <translation type="unfinished"></translation> + <translation>Server alebo klient?</translation> </message> </context> <context> @@ -1272,22 +1310,22 @@ p, li { white-space: pre-wrap; } <message> <location filename="src/SslCertificate.cpp" line="42"/> <source>Failed to get profile directory.</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa získať adresár s profilom.</translation> </message> <message> <location filename="src/SslCertificate.cpp" line="141"/> <source>SSL certificate generated.</source> - <translation type="unfinished"></translation> + <translation>SSL certifikát bol vygenerovaný.</translation> </message> <message> <location filename="src/SslCertificate.cpp" line="170"/> <source>SSL fingerprint generated.</source> - <translation type="unfinished"></translation> + <translation>SSL otlačok bol vygenerovaný.</translation> </message> <message> <location filename="src/SslCertificate.cpp" line="173"/> <source>Failed to find SSL fingerprint.</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa nájsť otlačok SSL.</translation> </message> </context> <context> @@ -1295,7 +1333,7 @@ p, li { white-space: pre-wrap; } <message> <location filename="src/VersionChecker.cpp" line="102"/> <source>Unknown</source> - <translation type="unfinished"></translation> + <translation>Neznáma</translation> </message> </context> <context> @@ -1305,19 +1343,23 @@ p, li { white-space: pre-wrap; } <source>An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. %1</source> - <translation type="unfinished"></translation> + <translation>Počas pokusu o prihlásenie došlo k chybe. Prosím, kontaktujte zákaznickú podporu a poskytnite im nasledujúce údaje. + +%1</translation> </message> <message> <location filename="src/WebClient.cpp" line="65"/> <source>Login failed, invalid email or password.</source> - <translation type="unfinished"></translation> + <translation>Prihlásenie nebolo úspešné, neplatná emailová adresa alebo heslo.</translation> </message> <message> <location filename="src/WebClient.cpp" line="78"/> <source>Login failed, an error occurred. %1</source> - <translation type="unfinished"></translation> + <translation>Prihlásenie nebolo úspešné, nastala chyba. + +%1</translation> </message> <message> <location filename="src/WebClient.cpp" line="86"/> @@ -1326,26 +1368,33 @@ p, li { white-space: pre-wrap; } Server response: %1</source> - <translation type="unfinished"></translation> + <translation>Prihlásenie nebolo úspešné, nastala chyba. + +Odpoveď servera: +%1</translation> </message> <message> <location filename="src/WebClient.cpp" line="101"/> <source>An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. %1</source> - <translation type="unfinished"></translation> + <translation>Počas získavania zoznamu pluginov došlo k chybe. Prosím, kontaktujte zákaznickú podporu a poskytnite im nasledujúce údaje. + +%1</translation> </message> <message> <location filename="src/WebClient.cpp" line="120"/> <source>Get plugin list failed, invalid user email or password.</source> - <translation type="unfinished"></translation> + <translation>Zlyhalo získavanie zoznamu pluginov, neplatná emailová adresa alebo heslo.</translation> </message> <message> <location filename="src/WebClient.cpp" line="131"/> <source>Get plugin list failed, an error occurred. %1</source> - <translation type="unfinished"></translation> + <translation>Zlyhalo získavanie zoznamu pluginov, nastala chyba. + +%1</translation> </message> <message> <location filename="src/WebClient.cpp" line="137"/> @@ -1354,7 +1403,10 @@ Server response: Server response: %1</source> - <translation type="unfinished"></translation> + <translation>Zlyhalo získavanie zoznamu pluginov, nastala chyba. + +Odpoveď servera: +%1</translation> </message> </context> <context> @@ -1362,44 +1414,44 @@ Server response: <message> <location filename="src/ZeroconfService.cpp" line="82"/> <source>zeroconf server detected: %1</source> - <translation type="unfinished"></translation> + <translation>detegovaný zeroconf server: %1</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="91"/> <source>zeroconf client detected: %1</source> - <translation type="unfinished"></translation> + <translation>detegovaný zeroconf klient: %1</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="99"/> <location filename="src/ZeroconfService.cpp" line="130"/> <source>Zero configuration service</source> - <translation type="unfinished"></translation> + <translation>Služba Zero configuration</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="100"/> <source>Error code: %1.</source> - <translation type="unfinished"></translation> + <translation>Kód chyby: %1.</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="131"/> <source>Unable to start the zeroconf: %1.</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa spustiť zeroconf: %1.</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="140"/> <source>Barrier</source> - <translation type="unfinished"></translation> + <translation>Barrier</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="141"/> <source>Failed to get local IP address. Please manually type in server address on your clients</source> - <translation type="unfinished"></translation> + <translation>Nepodarilo sa získať miestnu IP adresu. Zadajte, prosím, adresu servera ručne v nastaveniach vašich klientov</translation> </message> <message> <location filename="src/ZeroconfService.cpp" line="147"/> <location filename="src/ZeroconfService.cpp" line="154"/> <source>%1</source> - <translation type="unfinished"></translation> + <translation>%1</translation> </message> </context> -</TS>
\ No newline at end of file +</TS> diff --git a/src/gui/res/lang/gui_sl-SI.ts b/src/gui/res/lang/gui_sl-SI.ts index 5aa6cde..181d5e2 100644 --- a/src/gui/res/lang/gui_sl-SI.ts +++ b/src/gui/res/lang/gui_sl-SI.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_sq-AL.qm b/src/gui/res/lang/gui_sq-AL.qm Binary files differindex c80f8ab..b54bb6e 100644 --- a/src/gui/res/lang/gui_sq-AL.qm +++ b/src/gui/res/lang/gui_sq-AL.qm diff --git a/src/gui/res/lang/gui_sq-AL.ts b/src/gui/res/lang/gui_sq-AL.ts index 1fcd217..fa65c6c 100644 --- a/src/gui/res/lang/gui_sq-AL.ts +++ b/src/gui/res/lang/gui_sq-AL.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Konfiguracioni i Barrier (*.sgc);;Te gjithe (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Te gjithe (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Konfiguracioni i Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Konfiguracioni i Barrier (*.conf);;Te gjithe (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Konfiguracioni i Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_sr.ts b/src/gui/res/lang/gui_sr.ts index 4ae87d8..d46168f 100644 --- a/src/gui/res/lang/gui_sr.ts +++ b/src/gui/res/lang/gui_sr.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_sv.qm b/src/gui/res/lang/gui_sv.qm Binary files differindex f014cfd..897abe3 100644 --- a/src/gui/res/lang/gui_sv.qm +++ b/src/gui/res/lang/gui_sv.qm diff --git a/src/gui/res/lang/gui_sv.ts b/src/gui/res/lang/gui_sv.ts index f0c239e..d28810c 100644 --- a/src/gui/res/lang/gui_sv.ts +++ b/src/gui/res/lang/gui_sv.ts @@ -669,13 +669,18 @@ Klicka "Ja" för att automatiskt lita på fingeravtrycket i framtida a <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation>Barrier-konfigurationer (*.sgc);;Alla filer (*.*)</translation> + <source>All files (*.*)</source> + <translation>Alla filer (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation>Barrier-konfigurationer (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation>Barrier-konfigurationer (*.conf);;Alla filer (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation>Barrier-konfigurationer (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_th-TH.ts b/src/gui/res/lang/gui_th-TH.ts index 07c74b8..88d7894 100644 --- a/src/gui/res/lang/gui_th-TH.ts +++ b/src/gui/res/lang/gui_th-TH.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_tr-TR.ts b/src/gui/res/lang/gui_tr-TR.ts index 01a681b..924662f 100644 --- a/src/gui/res/lang/gui_tr-TR.ts +++ b/src/gui/res/lang/gui_tr-TR.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> @@ -900,8 +905,8 @@ To automatically trust this fingerprint for future connections, click Yes. To re <source>Drag new screens to the grid or move existing ones around. Drag a screen to the trashcan to delete it. Double click on a screen to edit its settings.</source> - <translation type="finished">Izgaraya yeni ekranları sürükleyin veya çevresinde mevcut olanları taşıyın. -Silmek için çöp tenekesine ekranı sürükleyin. + <translation type="finished">Izgaraya yeni ekranları sürükleyin veya çevresinde mevcut olanları taşıyın. +Silmek için çöp tenekesine ekranı sürükleyin. Kendi ayarlarınızı düzenlemek için bir ekran üzerine çift tıklayın.</translation> </message> <message> diff --git a/src/gui/res/lang/gui_uk.qm b/src/gui/res/lang/gui_uk.qm Binary files differindex 3e9c9c5..86cb8ef 100644 --- a/src/gui/res/lang/gui_uk.qm +++ b/src/gui/res/lang/gui_uk.qm diff --git a/src/gui/res/lang/gui_uk.ts b/src/gui/res/lang/gui_uk.ts index 1f2dffe..b7297c1 100644 --- a/src/gui/res/lang/gui_uk.ts +++ b/src/gui/res/lang/gui_uk.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Конфігурація Barrier (*.sgc);;Всі файли (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">Всі файли (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Конфігурація Barrier (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Конфігурація Barrier (*.conf);;Всі файли (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Конфігурація Barrier (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/lang/gui_ur.ts b/src/gui/res/lang/gui_ur.ts index 9b36dcf..c378089 100644 --- a/src/gui/res/lang/gui_ur.ts +++ b/src/gui/res/lang/gui_ur.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_vi.ts b/src/gui/res/lang/gui_vi.ts index a3c6025..16d013a 100644 --- a/src/gui/res/lang/gui_vi.ts +++ b/src/gui/res/lang/gui_vi.ts @@ -648,12 +648,17 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> + <source>All files (*.*)</source> + <translation type="unfinished"></translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> <translation type="unfinished"></translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> + <source>Barrier Configurations (*.conf)</source> <translation type="unfinished"></translation> </message> <message> diff --git a/src/gui/res/lang/gui_zh-CN.qm b/src/gui/res/lang/gui_zh-CN.qm Binary files differindex f11d0b5..21c874e 100644 --- a/src/gui/res/lang/gui_zh-CN.qm +++ b/src/gui/res/lang/gui_zh-CN.qm diff --git a/src/gui/res/lang/gui_zh-CN.ts b/src/gui/res/lang/gui_zh-CN.ts index 0c8522a..d7a331c 100644 --- a/src/gui/res/lang/gui_zh-CN.ts +++ b/src/gui/res/lang/gui_zh-CN.ts @@ -1,1411 +1,1323 @@ -<?xml version="1.0" encoding="utf-8"?><!DOCTYPE TS><TS language="zh-CN" sourcelanguage="en" version="2.0"> +<?xml version="1.0" encoding="utf-8"?> +<!DOCTYPE TS> +<TS version="2.1" language="zh_CN" sourcelanguage="en"> <context> <name>AboutDialogBase</name> <message> - <location filename="res/AboutDialogBase.ui" line="38"/> + <location filename="../../src/AboutDialogBase.ui" line="38"/> <source>About Barrier</source> - <translation type="finished">关于Barrier</translation> + <translation>关于 Barrier</translation> </message> - <message utf8="true"> - <location filename="res/AboutDialogBase.ui" line="53"/> + <message> + <location filename="../../src/AboutDialogBase.ui" line="140"/> + <location filename="../../src/AboutDialogBase.ui" line="174"/> + <source>Unknown</source> + <translation>未知</translation> + </message> + <message> + <location filename="../../src/AboutDialogBase.ui" line="124"/> + <source>Version:</source> + <translation>版本:</translation> + </message> + <message> + <location filename="../../src/AboutDialogBase.ui" line="194"/> + <source>&Ok</source> + <translation>确定(&O)</translation> + </message> + <message> + <location filename="../../src/AboutDialogBase.ui" line="53"/> <source><p> Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2018 Debauchee Open Source Group<br /> Copyright © 2012-2016 Symless Ltd.<br /> Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> Barrier is released under the GNU General Public License (GPLv2).<br /><br /> Barrier is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> -The Barrier GUI is based on QSynergy by Volker Lanz.<br /><br /> -Visit our website for help and info (symless.com). +The Barrier GUI is based on QSynergy by Volker Lanz. </p></source> - <oldsource><p> -Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> + <translation><p> +共享键盘和鼠标,跨平台并开源。<br /><br /> +Copyright © 2018 Debauchee Open Source Group<br /> Copyright © 2012-2016 Symless Ltd.<br /> Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> -Barrier is released under the GNU General Public License (GPLv2).<br /><br /> -Barrier is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> -The Barrier GUI is based on QSynergy by Volker Lanz.<br /><br /> -Visit our website for help and info (symless.com). -</p></oldsource> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="res/AboutDialogBase.ui" line="140"/> - <source>Unknown</source> - <translation type="finished">未知</translation> - </message> - <message> - <location filename="res/AboutDialogBase.ui" line="124"/> - <source>Version:</source> - <translation type="finished">版本:</translation> +Barrier 适用 GNU 通用公共许可证(GPLv2)。<br /><br /> +Barrier 基于 Richard Lee 和 Adam Feder 制作的 CosmoSynergy .<br /> +Barrier GUI 基于 Volker Lanz 制作的 QSynergy. +</p></translation> </message> <message> - <location filename="res/AboutDialogBase.ui" line="163"/> - <source>&Ok</source> - <translation type="finished">确定</translation> + <location filename="../../src/AboutDialogBase.ui" line="167"/> + <source>Build Date: </source> + <translation>日期:</translation> </message> </context> <context> <name>ActionDialogBase</name> <message> - <location filename="res/ActionDialogBase.ui" line="14"/> + <location filename="../../src/ActionDialogBase.ui" line="14"/> <source>Configure Action</source> - <translation type="finished">行为配置</translation> + <translation>配置动作</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="20"/> + <location filename="../../src/ActionDialogBase.ui" line="20"/> <source>Choose the action to perform</source> - <translation type="finished">选择要执行的行为</translation> + <translation>选择要执行的动作</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="26"/> + <location filename="../../src/ActionDialogBase.ui" line="26"/> <source>Press a hotkey</source> - <translation type="finished">按下热键</translation> + <translation>按下热键</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="36"/> + <location filename="../../src/ActionDialogBase.ui" line="36"/> <source>Release a hotkey</source> - <translation type="finished">松开热键</translation> + <translation>松开热键</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="43"/> + <location filename="../../src/ActionDialogBase.ui" line="43"/> <source>Press and release a hotkey</source> - <translation type="finished">按下一个键然后松开</translation> + <translation>单击热键</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="69"/> + <location filename="../../src/ActionDialogBase.ui" line="69"/> <source>only on these screens</source> - <translation type="finished">仅仅在这些屏幕上</translation> + <translation>仅在这些屏幕上</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="119"/> + <location filename="../../src/ActionDialogBase.ui" line="119"/> <source>Switch to screen</source> - <translation type="finished">切换到屏幕</translation> + <translation>切换到屏幕</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="150"/> + <location filename="../../src/ActionDialogBase.ui" line="161"/> <source>Switch in direction</source> - <translation type="finished">方向切换</translation> + <translation>切换方向</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="174"/> + <location filename="../../src/ActionDialogBase.ui" line="185"/> <source>left</source> - <translation type="finished">左</translation> + <translation>左</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="179"/> + <location filename="../../src/ActionDialogBase.ui" line="190"/> <source>right</source> - <translation type="finished">右侧</translation> + <translation>右侧</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="184"/> + <location filename="../../src/ActionDialogBase.ui" line="195"/> <source>up</source> - <translation type="finished">上方</translation> + <translation>上方</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="189"/> + <location filename="../../src/ActionDialogBase.ui" line="200"/> <source>down</source> - <translation type="finished">下方</translation> + <translation>下方</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="201"/> + <location filename="../../src/ActionDialogBase.ui" line="212"/> <source>Lock cursor to screen</source> - <translation type="finished">锁定指针于屏幕</translation> + <translation>锁定指针于屏幕</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="225"/> + <location filename="../../src/ActionDialogBase.ui" line="236"/> <source>toggle</source> - <translation type="finished">切换</translation> + <translation>切换</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="230"/> + <location filename="../../src/ActionDialogBase.ui" line="241"/> <source>on</source> - <translation type="finished">启用</translation> + <translation>启用</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="235"/> + <location filename="../../src/ActionDialogBase.ui" line="246"/> <source>off</source> - <translation type="finished">禁用</translation> + <translation>禁用</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="248"/> + <location filename="../../src/ActionDialogBase.ui" line="259"/> <source>This action is performed when</source> - <translation type="finished">当……时启用此行为</translation> + <translation>当……时启用此动作</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="254"/> + <location filename="../../src/ActionDialogBase.ui" line="265"/> <source>the hotkey is pressed</source> - <translation type="finished">热键被按下</translation> + <translation>热键被按下</translation> </message> <message> - <location filename="res/ActionDialogBase.ui" line="264"/> + <location filename="../../src/ActionDialogBase.ui" line="275"/> <source>the hotkey is released</source> - <translation type="finished">热键被松开</translation> + <translation>热键被松开</translation> + </message> + <message> + <location filename="../../src/ActionDialogBase.ui" line="150"/> + <source>Toggle screen</source> + <translation>切换屏幕</translation> </message> </context> <context> <name>AddClientDialog</name> <message> - <location filename="res/AddClientDialogBase.ui" line="20"/> + <location filename="../../src/AddClientDialogBase.ui" line="20"/> <source>Dialog</source> <translation type="unfinished"></translation> </message> <message> - <location filename="res/AddClientDialogBase.ui" line="35"/> + <location filename="../../src/AddClientDialogBase.ui" line="35"/> <source>TextLabel</source> <translation type="unfinished"></translation> </message> <message> - <location filename="res/AddClientDialogBase.ui" line="83"/> + <location filename="../../src/AddClientDialogBase.ui" line="83"/> <source>Ignore auto connect clients</source> - <translation type="unfinished"></translation> + <translation>忽略自动连接的客户端</translation> </message> </context> <context> <name>HotkeyDialogBase</name> <message> - <location filename="res/HotkeyDialogBase.ui" line="14"/> + <location filename="../../src/HotkeyDialogBase.ui" line="14"/> <source>Hotkey</source> - <translation type="finished">热键</translation> + <translation>热键</translation> </message> <message> - <location filename="res/HotkeyDialogBase.ui" line="20"/> + <location filename="../../src/HotkeyDialogBase.ui" line="20"/> <source>Enter the specification for the hotkey:</source> - <translation type="finished">输入热键的说明:</translation> + <translation>指定热键:</translation> </message> </context> <context> - <name>MainWindow</name> + <name>LogWindowBase</name> <message> - <location filename="src/MainWindow.cpp" line="790"/> - <source>&Start</source> - <translation type="finished">开始</translation> + <location filename="../../src/LogWindowBase.ui" line="26"/> + <source>Log - Barrier</source> + <translation>日志 - Barrier</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="237"/> - <source>&File</source> - <translation type="finished">文件</translation> + <location filename="../../src/LogWindowBase.ui" line="71"/> + <source>&Clear Log</source> + <translation>清空(&C)</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="238"/> - <source>&Edit</source> - <translation type="finished">编辑</translation> + <location filename="../../src/LogWindowBase.ui" line="78"/> + <source>&Hide</source> + <translation>隐藏(&H)</translation> </message> +</context> +<context> + <name>MainWindow</name> <message> - <location filename="src/MainWindow.cpp" line="239"/> - <source>&Window</source> - <translation type="finished">窗口</translation> + <location filename="../../src/MainWindow.cpp" line="790"/> + <source>&Start</source> + <translation>开始(&S)</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="240"/> + <location filename="../../src/MainWindow.cpp" line="245"/> <source>&Help</source> - <translation type="finished">帮助</translation> - </message> - <message> - <location filename="src/MainWindow.cpp" line="364"/> - <source><p>Your version of Barrier is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p></source> - <oldsource><p>Version %1 is now available, <a href="%2">visit website</a>.</p></oldsource> - <translation type="finished"><p>您正在使用的Barrier版本有些过时了,有新版 <b>%1</b> 可以 <a href="%2">下载</a>。</p></translation> + <translation>帮助(&S)</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="577"/> + <location filename="../../src/MainWindow.cpp" line="564"/> <source>Program can not be started</source> - <translation type="finished">程序无法启动</translation> + <translation>程序无法启动</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="577"/> + <location filename="../../src/MainWindow.cpp" line="564"/> <source>The executable<br><br>%1<br><br>could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.</source> - <translation type="finished">可执行程序<br><br>%1<br><br>没有成功运行,虽然程序本身存在。请检查你是否有运行此程序的权限。</translation> + <translation>可执行程序<br><br>%1<br><br>没有成功运行,虽然程序本身存在。请检查你是否有运行此程序的权限。</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="596"/> + <location filename="../../src/MainWindow.cpp" line="583"/> <source>Barrier client not found</source> - <translation type="finished">未找到Barrier客户端</translation> + <translation>未找到Barrier客户端</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="597"/> + <location filename="../../src/MainWindow.cpp" line="584"/> <source>The executable for the barrier client does not exist.</source> - <translation type="finished">Barrier客户端的可执行程序不存在。</translation> + <translation>Barrier客户端的可执行程序不存在。</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="625"/> + <location filename="../../src/MainWindow.cpp" line="610"/> <source>Hostname is empty</source> - <translation type="finished">主机名为空</translation> + <translation>主机名为空</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="626"/> + <location filename="../../src/MainWindow.cpp" line="611"/> <source>Please fill in a hostname for the barrier client to connect to.</source> - <translation type="finished">请为Barrier客户端设置一个用于连接的主机名</translation> + <translation>请为Barrier客户端设置一个用于连接的主机名。</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="646"/> + <location filename="../../src/MainWindow.cpp" line="631"/> <source>Cannot write configuration file</source> - <translation type="finished">不能写入配置文件</translation> + <translation>不能写入配置文件</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="646"/> + <location filename="../../src/MainWindow.cpp" line="631"/> <source>The temporary configuration file required to start barrier can not be written.</source> - <translation type="finished">启动Barrier所需的临时配置文件不可写。</translation> + <translation>启动Barrier所需的临时配置文件不可写。</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="659"/> + <location filename="../../src/MainWindow.cpp" line="644"/> <source>Configuration filename invalid</source> - <translation type="finished">配置文件名非法</translation> + <translation>无效配置文件名</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="660"/> + <location filename="../../src/MainWindow.cpp" line="645"/> <source>You have not filled in a valid configuration file for the barrier server. Do you want to browse for the configuration file now?</source> - <translation type="finished">你没有为Barrier服务端设置一个可用的配置文件。需要现在浏览配置文件吗?</translation> + <translation>Barrier服务端缺少有效的配置文件。需要现在浏览配置文件吗?</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="688"/> + <location filename="../../src/MainWindow.cpp" line="675"/> <source>Barrier server not found</source> - <translation type="finished">未找到Barrier服务端</translation> + <translation>未找到Barrier服务端</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="689"/> + <location filename="../../src/MainWindow.cpp" line="676"/> <source>The executable for the barrier server does not exist.</source> - <translation type="finished">Barrier服务端可执行程序不存在。</translation> - </message> - <message> - <location filename="src/MainWindow.cpp" line="764"/> - <source>Barrier terminated with an error</source> - <translation type="finished">Barrier因错终止运行</translation> - </message> - <message> - <location filename="src/MainWindow.cpp" line="764"/> - <source>Barrier terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details.</source> - <translation type="finished">Barrier意外终止运行,退出代码 %1。<br><br>请查看输出日志了解详情。</translation> + <translation>Barrier服务端可执行程序不存在。</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="783"/> + <location filename="../../src/MainWindow.cpp" line="783"/> <source>&Stop</source> - <translation type="finished">停止</translation> + <translation>停止(&S)</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="1038"/> + <location filename="../../src/MainWindow.cpp" line="1036"/> <source>Please add the server (%1) to the grid.</source> - <translation type="unfinished"></translation> + <translation>请添加服务端(%1)到网格。</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="1044"/> + <location filename="../../src/MainWindow.cpp" line="1042"/> <source>Please drag the new client screen (%1) to the desired position on the grid.</source> - <translation type="unfinished"></translation> + <translation>请将新屏幕(%1)拖动到网格中的合适位置。</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="1147"/> + <location filename="../../src/MainWindow.cpp" line="1135"/> <source>Failed to detect system architecture.</source> - <translation type="unfinished"></translation> + <translation>检测系统架构失败</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="1165"/> + <location filename="../../src/MainWindow.cpp" line="1153"/> <source>Cancel</source> - <translation type="unfinished"></translation> + <translation>取消</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="1189"/> + <location filename="../../src/MainWindow.cpp" line="1181"/> <source>Failed to download Bonjour installer to location: %1</source> - <translation type="unfinished"></translation> + <translation>无法下载Bonjou安装包至 %1</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="1226"/> + <location filename="../../src/MainWindow.cpp" line="1218"/> <source>Do you want to enable auto config and install Bonjour? This feature helps you establish the connection.</source> - <translation type="unfinished"></translation> + <translation>是否开启自动配置并下载Bonjour? + +此功能帮助你建立连接。</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="1270"/> + <location filename="../../src/MainWindow.cpp" line="1248"/> <source>Auto config feature requires Bonjour. Do you want to install Bonjour?</source> - <translation type="unfinished"></translation> + <translation>自动配置需要Bonjour + +是否安装Bonjour?</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="815"/> + <location filename="../../src/MainWindow.cpp" line="818"/> <source>Barrier is starting.</source> - <translation type="finished">Barrier正在启动</translation> + <translation>Barrier正在启动</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="809"/> + <location filename="../../src/MainWindow.cpp" line="812"/> <source>Barrier is running.</source> - <translation type="finished">Barrier正在运行</translation> + <translation>Barrier正在运行</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="819"/> + <location filename="../../src/MainWindow.cpp" line="822"/> <source>Barrier is not running.</source> - <translation type="finished">Barrier没有运行</translation> + <translation>Barrier没有运行</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="870"/> + <location filename="../../src/MainWindow.cpp" line="878"/> <source>Unknown</source> - <translation type="finished">未知</translation> + <translation>未知</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="1146"/> - <location filename="src/MainWindow.cpp" line="1225"/> - <location filename="src/MainWindow.cpp" line="1269"/> + <location filename="../../src/MainWindow.cpp" line="1134"/> + <location filename="../../src/MainWindow.cpp" line="1217"/> + <location filename="../../src/MainWindow.cpp" line="1247"/> <source>Barrier</source> - <translation type="finished">Barrier</translation> + <translation>Barrier</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="987"/> + <location filename="../../src/MainWindow.cpp" line="993"/> <source>Browse for a barriers config file</source> - <translation type="finished">浏览Barrier配置文件</translation> + <translation>浏览Barrier配置文件</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="408"/> - <source>Barrier is now connected, You can close the config window. Barrier will remain connected in the background.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/MainWindow.cpp" line="434"/> + <location filename="../../src/MainWindow.cpp" line="432"/> <source>Security question</source> - <translation type="unfinished"></translation> + <translation>安全确认</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="435"/> + <location filename="../../src/MainWindow.cpp" line="433"/> <source>Do you trust this fingerprint? %1 -This is a server fingerprint. You should compare this fingerprint to the one on your server's screen. If the two don't match exactly, then it's probably not the server you're expecting (it could be a malicious user). +This is a server fingerprint. You should compare this fingerprint to the one on your server's screen. If the two don't match exactly, then it's probably not the server you're expecting (it could be a malicious user). To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No.</source> - <translation type="unfinished"></translation> + <translation>是否信任此指纹? + +%1 + +这是服务端的指纹,请将其与你服务端屏幕的指纹进行对比。如果两者不一致,你可能没有连接到预期的服务端,或是遇到了恶意攻击。 + +点击确认以自动信任此指纹在未来的连接,点击停止来中断连接。</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="1000"/> + <location filename="../../src/MainWindow.cpp" line="1006"/> <source>Save configuration as...</source> - <translation type="finished">保存配置到文件</translation> + <translation>保存配置到文件</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="1004"/> + <location filename="../../src/MainWindow.cpp" line="1010"/> <source>Save failed</source> - <translation type="finished">保存失败</translation> + <translation>保存失败</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="1004"/> + <location filename="../../src/MainWindow.cpp" line="1010"/> <source>Could not save configuration to file.</source> - <translation type="finished">不能保存配置到文件</translation> + <translation>无法保存配置到文件</translation> + </message> + <message> + <location filename="../../src/MainWindow.cpp" line="244"/> + <source>&Barrier</source> + <translation>&Barrier</translation> + </message> + <message> + <location filename="../../src/MainWindow.cpp" line="402"/> + <source>Barrier is now connected. You can close the config window and Barrier will remain connected in the background.</source> + <translation>Barrier已连接。现在可以关闭窗口,Barrier会在后台保持连接。</translation> </message> </context> <context> <name>MainWindowBase</name> <message> - <location filename="res/MainWindowBase.ui" line="26"/> + <location filename="../../src/MainWindowBase.ui" line="26"/> <source>Barrier</source> - <translation type="finished">Barrier</translation> + <translation>Barrier</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="90"/> - <source>Ser&ver (share this computer's mouse and keyboard):</source> - <translation type="unfinished"></translation> + <location filename="../../src/MainWindowBase.ui" line="39"/> + <source>Ser&ver (share this computer's mouse and keyboard):</source> + <translation>服务端 - 共享此电脑的鼠标和键盘</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="243"/> + <location filename="../../src/MainWindowBase.ui" line="192"/> <source>Screen name:</source> - <translation type="finished">屏幕名:</translation> + <translation>屏幕名:</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="257"/> + <location filename="../../src/MainWindowBase.ui" line="206"/> <source>&Server IP:</source> - <translation type="finished">服务端IP</translation> + <translation>服务端IP:</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="380"/> - <location filename="res/MainWindowBase.ui" line="409"/> + <location filename="../../src/MainWindowBase.ui" line="293"/> + <location filename="../../src/MainWindowBase.ui" line="322"/> <source>&Start</source> - <translation type="finished">开始</translation> + <translation>开始(&S)</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="181"/> + <location filename="../../src/MainWindowBase.ui" line="130"/> <source>Use existing configuration:</source> - <translation type="finished">使用已有的配置:</translation> + <translation>使用已有的配置:</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="190"/> + <location filename="../../src/MainWindowBase.ui" line="139"/> <source>&Configuration file:</source> - <translation type="finished">配置文件:</translation> + <translation>配置文件:</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="210"/> + <location filename="../../src/MainWindowBase.ui" line="159"/> <source>&Browse...</source> - <translation type="finished">浏览…</translation> + <translation>浏览(&B)…</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="147"/> + <location filename="../../src/MainWindowBase.ui" line="96"/> <source>Configure interactively:</source> - <translation type="finished">交互配置:</translation> + <translation>交互配置:</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="159"/> + <location filename="../../src/MainWindowBase.ui" line="108"/> <source>&Configure Server...</source> - <translation type="finished">设置服务端…</translation> + <translation>设置服务端(&C)…</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="350"/> + <location filename="../../src/MainWindowBase.ui" line="263"/> <source>Ready</source> - <translation type="finished">准备完毕</translation> - </message> - <message> - <location filename="res/MainWindowBase.ui" line="296"/> - <source>Log</source> - <translation type="finished">日志</translation> + <translation>准备完毕</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="373"/> + <location filename="../../src/MainWindowBase.ui" line="286"/> <source>&Reload</source> - <translation type="finished">应用</translation> + <translation>应用(&R)</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="107"/> + <location filename="../../src/MainWindowBase.ui" line="56"/> <source>IP addresses:</source> - <translation type="finished">IP地址</translation> + <translation>IP地址:</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="131"/> - <source>Fingerprint:</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="res/MainWindowBase.ui" line="228"/> - <source>&Client (use another computer's mouse and keyboard):</source> - <translation type="unfinished"></translation> + <location filename="../../src/MainWindowBase.ui" line="177"/> + <source>&Client (use another computer's mouse and keyboard):</source> + <translation>客户端 - 使用另一电脑的鼠标和键盘</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="270"/> + <location filename="../../src/MainWindowBase.ui" line="219"/> <source>Auto config</source> - <translation type="unfinished"></translation> + <translation>自动配置</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="390"/> + <location filename="../../src/MainWindowBase.ui" line="303"/> <source>&About Barrier...</source> - <translation type="finished">关于Barrier…</translation> + <translation>关于Barrier(&A)…</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="398"/> + <location filename="../../src/MainWindowBase.ui" line="311"/> <source>&Quit</source> - <translation type="finished">退出</translation> + <translation>退出(&Q)</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="401"/> + <location filename="../../src/MainWindowBase.ui" line="314"/> <source>Quit</source> - <translation type="finished">退出</translation> + <translation>退出</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="412"/> + <location filename="../../src/MainWindowBase.ui" line="325"/> <source>Run</source> - <translation type="finished">运行</translation> + <translation>运行</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="423"/> + <location filename="../../src/MainWindowBase.ui" line="336"/> <source>S&top</source> - <translation type="finished">停止</translation> + <translation>停止(&t)</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="426"/> + <location filename="../../src/MainWindowBase.ui" line="339"/> <source>Stop</source> - <translation type="finished">停止</translation> - </message> - <message> - <location filename="res/MainWindowBase.ui" line="434"/> - <source>S&how Status</source> - <translation type="finished">显示状态</translation> + <translation>停止</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="442"/> + <location filename="../../src/MainWindowBase.ui" line="347"/> <source>&Hide</source> - <translation type="finished">隐藏</translation> + <translation>隐藏(&H)</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="445"/> + <location filename="../../src/MainWindowBase.ui" line="350"/> <source>Hide</source> - <translation type="finished">隐藏</translation> + <translation>隐藏</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="453"/> + <location filename="../../src/MainWindowBase.ui" line="358"/> <source>&Show</source> - <translation type="finished">显示</translation> + <translation>显示(&S)</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="456"/> + <location filename="../../src/MainWindowBase.ui" line="361"/> <source>Show</source> - <translation type="finished">显示</translation> + <translation>显示</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="464"/> - <source>Save configuration &as...</source> - <translation type="finished">保存配置到…</translation> - </message> - <message> - <location filename="res/MainWindowBase.ui" line="467"/> + <location filename="../../src/MainWindowBase.ui" line="372"/> <source>Save the interactively generated server configuration to a file.</source> - <translation type="finished">保存通过交互配置生成的配置到文件。</translation> - </message> - <message> - <location filename="res/MainWindowBase.ui" line="475"/> - <source>Settings</source> - <translation type="finished">设置</translation> + <translation>保存交互生成的配置到文件。</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="478"/> + <location filename="../../src/MainWindowBase.ui" line="383"/> <source>Edit settings</source> - <translation type="finished">编辑设置</translation> + <translation>编辑设置</translation> </message> <message> - <location filename="res/MainWindowBase.ui" line="486"/> - <source>Run Wizard</source> - <translation type="finished">运行向导</translation> + <location filename="../../src/MainWindowBase.ui" line="80"/> + <source>SSL Fingerprint:</source> + <translation>SSL指纹:</translation> </message> -</context> -<context> - <name>NewScreenWidget</name> <message> - <location filename="src/NewScreenWidget.cpp" line="32"/> - <source>Unnamed</source> - <translation type="finished">未命名</translation> + <location filename="../../src/MainWindowBase.ui" line="369"/> + <source>S&ave configuration</source> + <translation>保存配置(&a)</translation> </message> -</context> -<context> - <name>PluginManager</name> <message> - <location filename="src/PluginManager.cpp" line="58"/> - <source>Failed to get plugin directory.</source> - <translation type="unfinished"></translation> + <location filename="../../src/MainWindowBase.ui" line="380"/> + <source>Change &Settings</source> + <translation>更改设置(&S)</translation> </message> <message> - <location filename="src/PluginManager.cpp" line="63"/> - <source>Failed to get profile directory.</source> - <translation type="unfinished"></translation> + <location filename="../../src/MainWindowBase.ui" line="391"/> + <source>Show &Log</source> + <translation>显示日志(&L)</translation> </message> <message> - <location filename="src/PluginManager.cpp" line="136"/> - <source>Failed to download plugin '%1' to: %2 -%3</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/PluginManager.cpp" line="167"/> - <source>Could not get Windows architecture type.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/PluginManager.cpp" line="191"/> - <source>Could not get Linux architecture type.</source> - <translation type="unfinished"></translation> + <location filename="../../src/MainWindowBase.ui" line="394"/> + <source>Show Log</source> + <translation>显示日志</translation> </message> </context> <context> - <name>PluginWizardPage</name> - <message> - <location filename="res/PluginWizardPageBase.ui" line="14"/> - <source>Setup Barrier</source> - <translation type="finished">设置Barrier</translation> - </message> - <message> - <location filename="res/PluginWizardPageBase.ui" line="101"/> - <source>Please wait...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/PluginWizardPage.cpp" line="72"/> - <source>Error: %1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/PluginWizardPage.cpp" line="80"/> - <location filename="src/PluginWizardPage.cpp" line="201"/> - <source>Setup complete.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/PluginWizardPage.cpp" line="93"/> - <source>Downloading '%1' plugin (%2/%3)...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/PluginWizardPage.cpp" line="104"/> - <source>Plugins installed successfully.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/PluginWizardPage.cpp" line="120"/> - <source>Generating SSL certificate...</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/PluginWizardPage.cpp" line="170"/> - <source>Downloading plugin: %1 (1/%2)</source> - <translation type="unfinished"></translation> - </message> + <name>NewScreenWidget</name> <message> - <location filename="src/PluginWizardPage.cpp" line="239"/> - <source>Getting plugin list...</source> - <translation type="unfinished"></translation> + <location filename="../../src/NewScreenWidget.cpp" line="32"/> + <source>Unnamed</source> + <translation>未命名</translation> </message> </context> <context> <name>QObject</name> <message> - <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrier配置文件(*.sgc);;所有文件 (*.*)</translation> + <location filename="../../src/MainWindow.cpp" line="55"/> + <source>All files (*.*)</source> + <translation>所有文件 (*.*)</translation> </message> <message> - <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier配置文件(*.conf);;所有文件 (*.*)</translation> + <location filename="../../src/MainWindow.cpp" line="58"/> + <source>Barrier Configurations (*.sgc)</source> + <translation>Barrier配置文件 (*.sgc)</translation> </message> <message> - <location filename="src/main.cpp" line="119"/> - <source>System tray is unavailable, quitting.</source> - <translation type="finished">系统托盘不可用,程序退出。</translation> + <location filename="../../src/MainWindow.cpp" line="65"/> + <source>Barrier Configurations (*.conf)</source> + <translation>Barrier配置文件 (*.conf)</translation> </message> </context> <context> <name>ScreenSettingsDialog</name> <message> - <location filename="src/ScreenSettingsDialog.cpp" line="67"/> + <location filename="../../src/ScreenSettingsDialog.cpp" line="79"/> <source>Screen name is empty</source> - <translation type="finished">屏幕名为空</translation> + <translation>屏幕名为空</translation> </message> <message> - <location filename="src/ScreenSettingsDialog.cpp" line="68"/> + <location filename="../../src/ScreenSettingsDialog.cpp" line="80"/> <source>The screen name cannot be empty. Please either fill in a name or cancel the dialog.</source> - <translation type="finished">屏幕名不能为空。请填入一个名字或者关闭对话框。</translation> + <translation>屏幕名不能为空。请填入一个名字或者关闭对话框。</translation> </message> <message> - <location filename="src/ScreenSettingsDialog.cpp" line="83"/> + <location filename="../../src/ScreenSettingsDialog.cpp" line="95"/> <source>Screen name matches alias</source> - <translation type="finished">屏幕名对应别名</translation> + <translation>屏幕名对应别名</translation> </message> <message> - <location filename="src/ScreenSettingsDialog.cpp" line="84"/> + <location filename="../../src/ScreenSettingsDialog.cpp" line="96"/> <source>The screen name cannot be the same as an alias. Please either remove the alias or change the screen name.</source> - <translation type="finished">屏幕名不能与别名相同,请取消或者更改别名。</translation> + <translation>屏幕名不能与别名相同,请取消或者更改别名。</translation> </message> </context> <context> <name>ScreenSettingsDialogBase</name> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="14"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="14"/> <source>Screen Settings</source> - <translation type="finished">屏幕设置</translation> + <translation>屏幕设置</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="22"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="22"/> <source>Screen &name:</source> - <translation type="finished">屏幕名:</translation> + <translation>屏幕名:</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="42"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="42"/> <source>A&liases</source> - <translation type="finished">别名</translation> + <translation>别名</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="57"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="57"/> <source>&Add</source> - <translation type="finished">添加</translation> + <translation>添加(&A)</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="74"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="74"/> <source>&Remove</source> - <translation type="finished">删除</translation> + <translation>删除(&R)</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="97"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="97"/> <source>&Modifier keys</source> - <translation type="finished">修改按键</translation> + <translation>修改按键</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="106"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="106"/> <source>&Shift:</source> - <translation type="finished">Shift:</translation> + <translation>Shift:</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="117"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="164"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="211"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="258"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="305"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="117"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="164"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="211"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="258"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="305"/> <source>Shift</source> - <translation type="finished">Shift</translation> + <translation>Shift</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="122"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="169"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="216"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="263"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="310"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="122"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="169"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="216"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="263"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="310"/> <source>Ctrl</source> - <translation type="finished">Ctrl</translation> + <translation>Ctrl</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="127"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="174"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="221"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="268"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="315"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="127"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="174"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="221"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="268"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="315"/> <source>Alt</source> - <translation type="finished">Alt</translation> + <translation>Alt</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="132"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="179"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="226"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="273"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="320"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="132"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="179"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="226"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="273"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="320"/> <source>Meta</source> - <translation type="finished">Meta</translation> + <translation>Meta</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="137"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="184"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="231"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="278"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="325"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="137"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="184"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="231"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="278"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="325"/> <source>Super</source> - <translation type="finished">超级</translation> + <translation>超级</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="142"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="189"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="236"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="283"/> - <location filename="res/ScreenSettingsDialogBase.ui" line="330"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="142"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="189"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="236"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="283"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="330"/> <source>None</source> - <translation type="finished">无</translation> + <translation>无</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="150"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="150"/> <source>&Ctrl:</source> - <translation type="finished">Ctrl:</translation> + <translation>&Ctrl:</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="197"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="197"/> <source>Al&t:</source> - <translation type="finished">Alt:</translation> + <translation>Al&t:</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="244"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="244"/> <source>M&eta:</source> - <translation type="finished">Meta:</translation> + <translation>M&eta:</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="291"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="291"/> <source>S&uper:</source> - <translation type="finished">Super:</translation> + <translation>S&uper:</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="358"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="358"/> <source>&Dead corners</source> - <translation type="finished">死角</translation> + <translation>死角</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="367"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="367"/> <source>Top-left</source> - <translation type="finished">左上角</translation> + <translation>左上角</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="374"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="374"/> <source>Top-right</source> - <translation type="finished">右上角</translation> + <translation>右上角</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="381"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="381"/> <source>Bottom-left</source> - <translation type="finished">左下角</translation> + <translation>左下角</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="388"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="388"/> <source>Bottom-right</source> - <translation type="finished">右下角</translation> + <translation>右下角</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="397"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="397"/> <source>Corner Si&ze:</source> - <translation type="finished">死角大小</translation> + <translation>死角大小</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="428"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="428"/> <source>&Fixes</source> - <translation type="finished">修改</translation> + <translation>修改</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="437"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="437"/> <source>Fix CAPS LOCK key</source> - <translation type="finished">修复caps lock键</translation> + <translation>修复caps lock键</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="444"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="444"/> <source>Fix NUM LOCK key</source> - <translation type="finished">修复num lock键</translation> + <translation>修复num lock键</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="451"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="451"/> <source>Fix SCROLL LOCK key</source> - <translation type="finished">修复scroll lock键</translation> + <translation>修复scroll lock键</translation> </message> <message> - <location filename="res/ScreenSettingsDialogBase.ui" line="458"/> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="458"/> <source>Fix XTest for Xinerama</source> - <translation type="finished">修复Xinerama的XTest</translation> + <translation>修复Xinerama的XTest</translation> + </message> + <message> + <location filename="../../src/ScreenSettingsDialogBase.ui" line="468"/> + <source>Fix Preserve Focus</source> + <translation>修复焦点</translation> </message> </context> <context> <name>ScreenSetupModel</name> <message> - <location filename="src/ScreenSetupModel.cpp" line="51"/> + <location filename="../../src/ScreenSetupModel.cpp" line="51"/> <source><center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it</source> - <translation type="finished"><center>屏幕设置: <b>%1</b></center><br>双击以修改设置<br>将屏幕拖到废纸篓来移除</translation> + <translation><center>屏幕设置: <b>%1</b></center><br>双击以修改设置<br>将屏幕拖到废纸篓来移除</translation> + </message> +</context> +<context> + <name>ScreenSetupView</name> + <message> + <location filename="../../src/ScreenSetupView.cpp" line="75"/> + <source>Unnamed</source> + <translation>未命名</translation> </message> </context> <context> <name>ServerConfigDialog</name> <message> - <location filename="src/ServerConfigDialog.cpp" line="75"/> + <location filename="../../src/ServerConfigDialog.cpp" line="80"/> <source>Configure server</source> - <translation type="unfinished"></translation> + <translation>设置服务端</translation> </message> </context> <context> <name>ServerConfigDialogBase</name> <message> - <location filename="res/ServerConfigDialogBase.ui" line="14"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="14"/> <source>Server Configuration</source> - <translation type="finished">服务端配置</translation> + <translation>服务端配置</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="24"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="24"/> <source>Screens and links</source> - <translation type="finished">屏幕和联接</translation> + <translation>屏幕和联接</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="35"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="35"/> <source>Drag a screen from the grid to the trashcan to remove it.</source> - <translation type="finished">从格子中拖动屏幕到垃圾桶进行删除。</translation> + <translation>从网格中拖动屏幕到垃圾桶进行删除。</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="60"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="60"/> <source>Configure the layout of your barrier server configuration.</source> - <translation type="finished">设置Barrier服务端配置的屏幕布局。</translation> + <translation>配置Barrier服务端的屏幕布局。</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="73"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="73"/> <source>Drag this button to the grid to add a new screen.</source> - <translation type="finished">拖动此按钮到格子中进行添加屏幕。</translation> + <translation>拖动此按钮到网格以添加屏幕。</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="128"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="128"/> <source>Drag new screens to the grid or move existing ones around. Drag a screen to the trashcan to delete it. Double click on a screen to edit its settings.</source> - <translation type="finished">拖动屏幕(图标)到网格中或者移动已经在网格中的屏幕的位置。 + <translation>拖动屏幕图标到网格,或者移动已经在网格中的屏幕。 拖动屏幕到垃圾桶进行删除。 双击屏幕编辑其设置。</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="157"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="157"/> <source>Hotkeys</source> - <translation type="finished">热键</translation> + <translation>热键</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="163"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="163"/> <source>&Hotkeys</source> - <translation type="finished">热键</translation> + <translation>热键(&H)</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="175"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="175"/> <source>&New</source> - <translation type="finished">新建</translation> + <translation>新建(&N)</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="185"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="185"/> <source>&Edit</source> - <translation type="finished">编辑</translation> + <translation>编辑(&E)</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="195"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="195"/> <source>&Remove</source> - <translation type="finished">删除</translation> + <translation>删除(&R)</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="218"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="218"/> <source>A&ctions</source> - <translation type="finished">行为</translation> + <translation>动作</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="230"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="230"/> <source>Ne&w</source> - <translation type="finished">新建</translation> + <translation>新建(&w)</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="240"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="240"/> <source>E&dit</source> - <translation type="finished">编辑</translation> + <translation>编辑(&d)</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="250"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="250"/> <source>Re&move</source> - <translation type="finished">删除</translation> + <translation>删除(&m)</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="274"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="274"/> <source>Advanced server settings</source> - <translation type="finished">服务端高级设置</translation> + <translation>服务端高级设置</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="280"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="280"/> <source>&Switch</source> - <translation type="finished">切换</translation> + <translation>触边切换</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="291"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="291"/> <source>Switch &after waiting</source> - <translation type="finished">等待后切换</translation> + <translation>延时</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="330"/> - <location filename="res/ServerConfigDialogBase.ui" line="383"/> - <location filename="res/ServerConfigDialogBase.ui" line="458"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="330"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="385"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="502"/> <source>ms</source> - <translation type="finished">毫秒</translation> + <translation>毫秒</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="344"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="346"/> <source>Switch on double &tap within</source> - <translation type="finished">双击tap切换</translation> + <translation>二次触边</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="408"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="422"/> <source>&Options</source> - <translation type="finished">选项</translation> + <translation>选项</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="419"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="463"/> <source>&Check clients every</source> - <translation type="finished">客户端检查周期</translation> + <translation>客户端检查周期</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="470"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="441"/> <source>Use &relative mouse moves</source> - <translation type="finished">使用相关的鼠标动作</translation> + <translation>使用相对的鼠标动作</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="480"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="451"/> <source>S&ynchronize screen savers</source> - <translation type="finished">同步屏幕保护</translation> + <translation>同步屏幕保护</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="490"/> - <source>Don't take &foreground window on Windows servers</source> - <translation type="finished">不要移动前台窗口在Windows服务器上</translation> + <location filename="../../src/ServerConfigDialogBase.ui" line="431"/> + <source>Don't take &foreground window on Windows servers</source> + <translation>不要在Windows服务端获取前台窗口</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="510"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="531"/> <source>Ignore auto config clients</source> - <translation type="unfinished"></translation> + <translation>忽略自动配置的客户端</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="520"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="551"/> <source>&Dead corners</source> - <translation type="finished">死角</translation> + <translation>死角</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="529"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="560"/> <source>To&p-left</source> - <translation type="finished">左上角</translation> + <translation>左上角</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="536"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="567"/> <source>Top-rig&ht</source> - <translation type="finished">右上角</translation> + <translation>右上角</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="543"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="574"/> <source>&Bottom-left</source> - <translation type="finished">左下角</translation> + <translation>左下角</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="550"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="581"/> <source>Bottom-ri&ght</source> - <translation type="finished">右下角</translation> + <translation>右下角</translation> </message> <message> - <location filename="res/ServerConfigDialogBase.ui" line="572"/> + <location filename="../../src/ServerConfigDialogBase.ui" line="603"/> <source>Cor&ner Size:</source> - <translation type="finished">死角大小</translation> + <translation>死角大小</translation> </message> -</context> -<context> - <name>SettingsDialog</name> <message> - <location filename="src/SettingsDialog.cpp" line="131"/> - <source>Save log file to...</source> - <translation type="finished">保存日志文件…</translation> + <location filename="../../src/ServerConfigDialogBase.ui" line="394"/> + <source>Bump against the screen edge with the mouse pointer twice in quick succession.</source> + <translation>要触发二次触边,快速并连续地滑动指针到屏幕边缘。</translation> </message> <message> - <location filename="src/SettingsDialog.cpp" line="151"/> - <source>Elevate Barrier</source> - <translation type="finished">评价Barrier</translation> + <location filename="../../src/ServerConfigDialogBase.ui" line="524"/> + <source>Enable drag and drop file transfers</source> + <translation>启用拖放文件传输</translation> </message> <message> - <location filename="src/SettingsDialog.cpp" line="152"/> - <source>Are you sure you want to elevate Barrier? - -This allows Barrier to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Barrier only if you really need to.</source> - <translation type="finished">您确定要elevate Barrier吗? -这会允许Barrier和elevated进程交互和UAC对话框,但是可能引起一切和非elevated进程交互的问题。只有在你需要的时候才Elevate Barrier。</translation> + <location filename="../../src/ServerConfigDialogBase.ui" line="538"/> + <source>Enable clipboard sharing</source> + <translation>启用剪切板共享</translation> + </message> +</context> +<context> + <name>SettingsDialog</name> + <message> + <location filename="../../src/SettingsDialog.cpp" line="125"/> + <source>Save log file to...</source> + <translation>保存日志文件…</translation> </message> </context> <context> <name>SettingsDialogBase</name> <message> - <location filename="res/SettingsDialogBase.ui" line="14"/> + <location filename="../../src/SettingsDialogBase.ui" line="14"/> <source>Settings</source> - <translation type="finished">设置</translation> + <translation>设置</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="32"/> + <location filename="../../src/SettingsDialogBase.ui" line="69"/> <source>Sc&reen name:</source> - <translation type="finished">屏幕名称:</translation> + <translation>屏幕名称:</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="49"/> + <location filename="../../src/SettingsDialogBase.ui" line="148"/> <source>P&ort:</source> - <translation type="finished">端口:</translation> - </message> - <message> - <location filename="res/SettingsDialogBase.ui" line="78"/> - <source>&Interface:</source> - <translation type="finished">界面</translation> + <translation>端口:</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="120"/> - <source>Elevate mode</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="res/SettingsDialogBase.ui" line="127"/> + <location filename="../../src/SettingsDialogBase.ui" line="125"/> <source>&Hide on startup</source> - <translation type="unfinished"></translation> + <translation>最小化启动</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="146"/> - <source>&Network Security</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="res/SettingsDialogBase.ui" line="155"/> - <source>Use &SSL encryption (unique certificate)</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="res/SettingsDialogBase.ui" line="184"/> + <location filename="../../src/SettingsDialogBase.ui" line="210"/> <source>Logging</source> - <translation type="finished">日志记录</translation> + <translation>日志</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="202"/> + <location filename="../../src/SettingsDialogBase.ui" line="228"/> <source>&Logging level:</source> - <translation type="finished">日志等级</translation> + <translation>日志等级</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="251"/> + <location filename="../../src/SettingsDialogBase.ui" line="277"/> <source>Log to file:</source> - <translation type="finished">记录到文件</translation> + <translation>记录到文件</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="268"/> + <location filename="../../src/SettingsDialogBase.ui" line="294"/> <source>Browse...</source> - <translation type="finished">浏览…</translation> + <translation>浏览…</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="213"/> + <location filename="../../src/SettingsDialogBase.ui" line="239"/> <source>Error</source> - <translation type="finished">错误</translation> + <translation>错误</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="107"/> + <location filename="../../src/SettingsDialogBase.ui" line="50"/> <source>&Language:</source> - <translation type="finished">语言:</translation> - </message> - <message> - <location filename="res/SettingsDialogBase.ui" line="20"/> - <source>&Miscellaneous</source> - <translation type="finished">其他</translation> + <translation>语言:</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="218"/> + <location filename="../../src/SettingsDialogBase.ui" line="244"/> <source>Warning</source> - <translation type="finished">警告</translation> + <translation>警告</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="223"/> + <location filename="../../src/SettingsDialogBase.ui" line="249"/> <source>Note</source> - <translation type="finished">注意</translation> + <translation>注意</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="228"/> + <location filename="../../src/SettingsDialogBase.ui" line="254"/> <source>Info</source> - <translation type="finished">信息</translation> + <translation>信息</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="233"/> + <location filename="../../src/SettingsDialogBase.ui" line="259"/> <source>Debug</source> - <translation type="finished">调试</translation> + <translation>调试</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="238"/> + <location filename="../../src/SettingsDialogBase.ui" line="264"/> <source>Debug1</source> - <translation type="finished">调试1</translation> + <translation>调试1</translation> </message> <message> - <location filename="res/SettingsDialogBase.ui" line="243"/> + <location filename="../../src/SettingsDialogBase.ui" line="269"/> <source>Debug2</source> - <translation type="finished">调试2</translation> + <translation>调试2</translation> </message> -</context> -<context> - <name>SetupWizard</name> <message> - <location filename="src/SetupWizard.cpp" line="72"/> - <source>Setup Barrier</source> - <translation type="finished">设置Barrier</translation> + <location filename="../../src/SettingsDialogBase.ui" line="29"/> + <source>General</source> + <translation>通用</translation> </message> <message> - <location filename="src/SetupWizard.cpp" line="113"/> - <source>Please select an option.</source> - <translation type="finished">请选择一个选项</translation> + <location filename="../../src/SettingsDialogBase.ui" line="86"/> + <source>Elevate</source> + <translation>提权</translation> </message> <message> - <location filename="src/SetupWizard.cpp" line="80"/> - <source>Please enter your email address and password.</source> - <translation type="finished">请输入您的邮箱地址和密码。</translation> + <location filename="../../src/SettingsDialogBase.ui" line="93"/> + <source>Specify when the Barrier service should run at an elevated privilege level</source> + <translation>设置Barrier服务何时应该提权运行</translation> </message> -</context> -<context> - <name>SetupWizardBase</name> <message> - <location filename="res/SetupWizardBase.ui" line="26"/> - <source>Setup Barrier</source> - <translation type="finished">设置Barrier</translation> + <location filename="../../src/SettingsDialogBase.ui" line="100"/> + <source>As Needed</source> + <translation>按需</translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="30"/> - <source>Welcome</source> - <translation type="finished">欢迎</translation> + <location filename="../../src/SettingsDialogBase.ui" line="105"/> + <source>Always</source> + <translation>总是</translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="39"/> - <source>Thanks for installing Barrier!</source> - <translation type="finished">感谢您安装Barrier!</translation> + <location filename="../../src/SettingsDialogBase.ui" line="110"/> + <source>Never</source> + <translation>从不</translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="114"/> - <source>Barrier lets you easily share your mouse and keyboard between multiple computers on your desk, and it's Free and Open Source. Just move your mouse off the edge of one computer's screen on to another. You can even share all of your clipboards. All you need is a network connection. Barrier is cross-platform (works on Windows, Mac OS X and Linux).</source> - <translation type="finished">Barrier允许你轻松地在你办公桌上多台计算机之间共享你的鼠标和键盘,它免费并且开放源代码。你只要将鼠标(指针)从一台计算机的屏幕边缘移出到另一个屏幕就行了。甚至可以共享你的剪贴板。你所需要的仅仅是一个网络连接。Barrier是跨平台的(可以运行于Windows,Mac OS X和Linux)。</translation> + <location filename="../../src/SettingsDialogBase.ui" line="118"/> + <source>Minimize to System &Tray</source> + <translation>最小化到系统托盘</translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="125"/> - <source>Activate</source> - <translation type="unfinished"></translation> + <location filename="../../src/SettingsDialogBase.ui" line="132"/> + <source>Start &Barrier on startup</source> + <translation>自动启动</translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="131"/> - <source>&Activate now...</source> - <translation type="unfinished"></translation> + <location filename="../../src/SettingsDialogBase.ui" line="142"/> + <source>Networking</source> + <translation>网络</translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="152"/> - <source>Email:</source> - <translation type="unfinished"></translation> + <location filename="../../src/SettingsDialogBase.ui" line="177"/> + <source>&Address:</source> + <translation>地址:</translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="178"/> - <source>Password:</source> - <translation type="unfinished"></translation> + <location filename="../../src/SettingsDialogBase.ui" line="194"/> + <source>Enable &SSL</source> + <translation>开启SSL</translation> </message> +</context> +<context> + <name>SetupWizard</name> <message> - <location filename="res/SetupWizardBase.ui" line="204"/> - <source><a href="https://symless.com/account/reset/">Forgot password</a></source> - <translation type="unfinished"></translation> + <location filename="../../src/SetupWizard.cpp" line="63"/> + <source>Setup Barrier</source> + <translation>设置Barrier</translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="232"/> - <source>&Skip activation</source> - <translation type="unfinished"></translation> + <location filename="../../src/SetupWizard.cpp" line="73"/> + <source>Please select an option.</source> + <translation>请选择一个选项</translation> + </message> +</context> +<context> + <name>SetupWizardBase</name> + <message> + <location filename="../../src/SetupWizardBase.ui" line="26"/> + <source>Setup Barrier</source> + <translation>设置Barrier</translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="277"/> - <source>&Server (share this computer's mouse and keyboard)</source> - <translation type="unfinished"></translation> + <location filename="../../src/SetupWizardBase.ui" line="30"/> + <source>Welcome</source> + <translation>欢迎</translation> + </message> + <message> + <location filename="../../src/SetupWizardBase.ui" line="39"/> + <source>Thanks for installing Barrier!</source> + <translation>感谢您安装Barrier!</translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="290"/> + <location filename="../../src/SetupWizardBase.ui" line="114"/> + <source>Barrier lets you easily share your mouse and keyboard between multiple computers on your desk, and it's Free and Open Source. Just move your mouse off the edge of one computer's screen on to another. You can even share all of your clipboards. All you need is a network connection. Barrier is cross-platform (works on Windows, Mac OS X and Linux).</source> + <translation>Barrier可以在多台计算机间轻松共享你的鼠标和键盘,它还是自由开源软件。将鼠标指针从计算机的屏幕边缘移出到另一个屏幕,并同时共享剪贴板,只要你有一个网络连接。Barrier是跨平台的(可以运行于Windows,Mac OS X和Linux)。</translation> + </message> + <message> + <location filename="../../src/SetupWizardBase.ui" line="146"/> + <source>&Server (share this computer's mouse and keyboard)</source> + <translation>服务端 - 共享此电脑的鼠标和键盘</translation> + </message> + <message> + <location filename="../../src/SetupWizardBase.ui" line="159"/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">My main mouse and keyboard are connected to this computer. This will allow you to move your mouse over to another computer's screen. There can only be one server in your setup.</span></p></body></html></source> - <translation type="unfinished"></translation> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">My main mouse and keyboard are connected to this computer. This will allow you to move your mouse over to another computer's screen. There can only be one server in your setup.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">这台电脑连接了鼠标和键盘,需要共享给其他电脑。一套配置只能有一个服务端。</span></p></body></html></translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="326"/> - <source>&Client (use another computer's mouse and keyboard)</source> - <translation type="unfinished"></translation> + <location filename="../../src/SetupWizardBase.ui" line="195"/> + <source>&Client (use another computer's mouse and keyboard)</source> + <translation>客户端 - 使用另一电脑的鼠标和键盘</translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="339"/> + <location filename="../../src/SetupWizardBase.ui" line="208"/> <source><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You have already set up a server. This computer will be controlled using the server's mouse and keyboard. There can be many clients in your setup.</span></p></body></html></source> - <translation type="unfinished"></translation> +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">You have already set up a server. This computer will be controlled using the server's mouse and keyboard. There can be many clients in your setup.</span></p></body></html></source> + <translation><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:8pt;">已经配置了服务端,此电脑将由服务端的鼠标和键盘进行控制。可以配置多个客户端。</span></p></body></html></translation> </message> <message> - <location filename="res/SetupWizardBase.ui" line="262"/> + <location filename="../../src/SetupWizardBase.ui" line="131"/> <source>Server or Client?</source> - <translation type="finished">(此计算机作为)服务端还是客户端?</translation> + <translation>服务端还是客户端?</translation> </message> </context> <context> <name>SslCertificate</name> <message> - <location filename="src/SslCertificate.cpp" line="42"/> + <location filename="../../src/SslCertificate.cpp" line="48"/> <source>Failed to get profile directory.</source> - <translation type="unfinished"></translation> + <translation>获取配置目录失败。</translation> </message> <message> - <location filename="src/SslCertificate.cpp" line="141"/> + <location filename="../../src/SslCertificate.cpp" line="140"/> <source>SSL certificate generated.</source> - <translation type="unfinished"></translation> + <translation>SSL证书已生成。</translation> </message> <message> - <location filename="src/SslCertificate.cpp" line="170"/> + <location filename="../../src/SslCertificate.cpp" line="171"/> <source>SSL fingerprint generated.</source> - <translation type="unfinished"></translation> + <translation>SSL指纹已生成。</translation> </message> <message> - <location filename="src/SslCertificate.cpp" line="173"/> + <location filename="../../src/SslCertificate.cpp" line="174"/> <source>Failed to find SSL fingerprint.</source> - <translation type="unfinished"></translation> + <translation>无法找到SSL指纹。</translation> </message> -</context> -<context> - <name>VersionChecker</name> <message> - <location filename="src/VersionChecker.cpp" line="102"/> - <source>Unknown</source> - <translation type="finished">未知</translation> + <location filename="../../src/SslCertificate.cpp" line="198"/> + <source>Could not read from default certificate file.</source> + <translation>无法读取默认证书文件。</translation> </message> -</context> -<context> - <name>WebClient</name> <message> - <location filename="src/WebClient.cpp" line="44"/> - <source>An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. - -%1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/WebClient.cpp" line="65"/> - <source>Login failed, invalid email or password.</source> - <translation type="finished">登录失败,邮箱地址或密码错误。</translation> + <location filename="../../src/SslCertificate.cpp" line="205"/> + <source>Error loading default certificate file to memory.</source> + <translation>读取默认证书文件失败。</translation> </message> <message> - <location filename="src/WebClient.cpp" line="78"/> - <source>Login failed, an error occurred. - -%1</source> - <translation type="finished">登录失败,出错了。 -%1</translation> + <location filename="../../src/SslCertificate.cpp" line="212"/> + <source>Default certificate key file does not contain valid public key</source> + <translation>默认证书文件没有有效的公钥</translation> </message> <message> - <location filename="src/WebClient.cpp" line="86"/> - <source>Login failed, an error occurred. - -Server response: - -%1</source> - <translation type="finished">登录失败,出错了。 -服务器回应: -%1</translation> + <location filename="../../src/SslCertificate.cpp" line="220"/> + <source>Public key in default certificate key file is not RSA or DSA</source> + <translation>默认证书文件的公钥不是RSA或DSA</translation> </message> <message> - <location filename="src/WebClient.cpp" line="101"/> - <source>An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. - -%1</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/WebClient.cpp" line="120"/> - <source>Get plugin list failed, invalid user email or password.</source> - <translation type="unfinished"></translation> - </message> - <message> - <location filename="src/WebClient.cpp" line="131"/> - <source>Get plugin list failed, an error occurred. - -%1</source> - <translation type="unfinished"></translation> + <location filename="../../src/SslCertificate.cpp" line="230"/> + <source>Public key in default certificate key file is too small.</source> + <translation>默认证书文件位数不足。</translation> </message> +</context> +<context> + <name>VersionChecker</name> <message> - <location filename="src/WebClient.cpp" line="137"/> - <source>Get plugin list failed, an error occurred. - -Server response: - -%1</source> - <translation type="unfinished"></translation> + <location filename="../../src/VersionChecker.cpp" line="110"/> + <source>Unknown</source> + <translation>未知</translation> </message> </context> <context> <name>ZeroconfService</name> <message> - <location filename="src/ZeroconfService.cpp" line="82"/> + <location filename="../../src/ZeroconfService.cpp" line="106"/> <source>zeroconf server detected: %1</source> - <translation type="unfinished"></translation> + <translation>检测到zeroconf服务端:%1</translation> </message> <message> - <location filename="src/ZeroconfService.cpp" line="91"/> + <location filename="../../src/ZeroconfService.cpp" line="115"/> <source>zeroconf client detected: %1</source> - <translation type="unfinished"></translation> + <translation>检测到zeroconf客户端:%1</translation> </message> <message> - <location filename="src/ZeroconfService.cpp" line="99"/> - <location filename="src/ZeroconfService.cpp" line="130"/> + <location filename="../../src/ZeroconfService.cpp" line="123"/> + <location filename="../../src/ZeroconfService.cpp" line="154"/> <source>Zero configuration service</source> - <translation type="unfinished"></translation> + <translation>zeroconf服务</translation> </message> <message> - <location filename="src/ZeroconfService.cpp" line="100"/> + <location filename="../../src/ZeroconfService.cpp" line="124"/> <source>Error code: %1.</source> - <translation type="unfinished"></translation> + <translation>错误代码:%1。</translation> </message> <message> - <location filename="src/ZeroconfService.cpp" line="131"/> + <location filename="../../src/ZeroconfService.cpp" line="155"/> <source>Unable to start the zeroconf: %1.</source> - <translation type="unfinished"></translation> + <translation>无法启动zeroconf:%1。</translation> </message> <message> - <location filename="src/ZeroconfService.cpp" line="140"/> + <location filename="../../src/ZeroconfService.cpp" line="164"/> <source>Barrier</source> - <translation type="finished">Barrier</translation> + <translation>Barrier</translation> </message> <message> - <location filename="src/ZeroconfService.cpp" line="141"/> + <location filename="../../src/ZeroconfService.cpp" line="165"/> <source>Failed to get local IP address. Please manually type in server address on your clients</source> - <translation type="unfinished"></translation> + <translation>无法获取本地IP地址。请在客户端上手动输入服务端地址。</translation> </message> <message> - <location filename="src/ZeroconfService.cpp" line="147"/> - <location filename="src/ZeroconfService.cpp" line="154"/> + <location filename="../../src/ZeroconfService.cpp" line="171"/> + <location filename="../../src/ZeroconfService.cpp" line="178"/> <source>%1</source> - <translation type="unfinished"></translation> + <translation>%1</translation> </message> </context> -</TS>
\ No newline at end of file +</TS> diff --git a/src/gui/res/lang/gui_zh-TW.qm b/src/gui/res/lang/gui_zh-TW.qm Binary files differindex 5cc8653..ac43686 100644 --- a/src/gui/res/lang/gui_zh-TW.qm +++ b/src/gui/res/lang/gui_zh-TW.qm diff --git a/src/gui/res/lang/gui_zh-TW.ts b/src/gui/res/lang/gui_zh-TW.ts index 902a444..d4d305a 100644 --- a/src/gui/res/lang/gui_zh-TW.ts +++ b/src/gui/res/lang/gui_zh-TW.ts @@ -648,13 +648,18 @@ To automatically trust this fingerprint for future connections, click Yes. To re <name>QObject</name> <message> <location filename="src/MainWindow.cpp" line="60"/> - <source>Barrier Configurations (*.sgc);;All files (*.*)</source> - <translation type="finished">Barrier 設定檔 (*.sgc);;所有檔案 (*.*)</translation> + <source>All files (*.*)</source> + <translation type="finished">所有檔案 (*.*)</translation> + </message> + <message> + <location filename="src/MainWindow.cpp" line="60"/> + <source>Barrier Configurations (*.sgc)</source> + <translation type="finished">Barrier 設定檔 (*.sgc)</translation> </message> <message> <location filename="src/MainWindow.cpp" line="67"/> - <source>Barrier Configurations (*.conf);;All files (*.*)</source> - <translation type="finished">Barrier 設定檔 (*.conf);;所有檔案 (*.*)</translation> + <source>Barrier Configurations (*.conf)</source> + <translation type="finished">Barrier 設定檔 (*.conf)</translation> </message> <message> <location filename="src/main.cpp" line="119"/> diff --git a/src/gui/res/win/Barrier.rc b/src/gui/res/win/Barrier.rc index 9db2b3e..2825690 100644 --- a/src/gui/res/win/Barrier.rc +++ b/src/gui/res/win/Barrier.rc @@ -1 +1,112 @@ -IDI_ICON1 ICON DISCARDABLE "../icons/256x256/barrier.ico"
+// Microsoft Visual C++ generated resource script.
+//
+//#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <winresrc.h>
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// English (U.S.) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include <winresrc.h>\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION BARRIER_VERSION_MAJOR, BARRIER_VERSION_MINOR, BARRIER_VERSION_PATCH, BARRIER_BUILD_NUMBER
+ PRODUCTVERSION BARRIER_VERSION_MAJOR, BARRIER_VERSION_MINOR, BARRIER_VERSION_PATCH, BARRIER_BUILD_NUMBER
+ FILEFLAGSMASK 0x3fL
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS VOS_NT_WINDOWS32
+ FILETYPE VFT_APP
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "CompanyName", "Debauchee Open Source Group"
+ VALUE "CompanyWeb", "https://github.com/debauchee/barrier/"
+ VALUE "FileVersion", BARRIER_VERSION
+ VALUE "LegalCopyright", "Copyright (C) 2018 Debauchee Open Source Group\nCopyright (C) 2012-2016 Symless Ltd.\nCopyright (C) 2008-2014 Nick Bolton\nCopyright (C) 2002-2014 Chris Schoeneman"
+ VALUE "ProductName", "Barrier"
+ VALUE "ProductVersion", BARRIER_VERSION
+ VALUE "OriginalFilename", "barrier.exe"
+ VALUE "FileDescription", "Open source KVM software"
+ VALUE "InternalName", "barrier"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_BARRIER ICON "../icons/256x256/barrier.ico"
+
+
+#endif // English (U.S.) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/src/gui/src/AboutDialog.cpp b/src/gui/src/AboutDialog.cpp index 76ba26b..b594bee 100644 --- a/src/gui/src/AboutDialog.cpp +++ b/src/gui/src/AboutDialog.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the diff --git a/src/gui/src/AboutDialog.h b/src/gui/src/AboutDialog.h index 3c498b4..6fdb0a2 100644 --- a/src/gui/src/AboutDialog.h +++ b/src/gui/src/AboutDialog.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -40,4 +40,3 @@ class AboutDialog : public QDialog, public Ui::AboutDialogBase }; #endif - diff --git a/src/gui/src/Action.cpp b/src/gui/src/Action.cpp index 909e983..f34d1e8 100644 --- a/src/gui/src/Action.cpp +++ b/src/gui/src/Action.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -51,7 +51,7 @@ QString Action::text() const * in the end but now argument inside. If you need a function with no * argument, it can not have () in the end. */ - QString text = QString(m_ActionTypeNames[keySequence().isMouseButton() ? + QString text = QString(m_ActionTypeNames[m_KeySequence.isMouseButton() ? type() + int(mouseDown) : type()]); switch (type()) @@ -61,9 +61,9 @@ QString Action::text() const case keystroke: { text += "("; - text += keySequence().toString(); + text += m_KeySequence.toString(); - if (!keySequence().isMouseButton()) + if (!m_KeySequence.isMouseButton()) { const QStringList& screens = typeScreenNames(); if (haveScreens() && !screens.isEmpty()) @@ -116,15 +116,15 @@ QString Action::text() const void Action::loadSettings(QSettings& settings) { - keySequence().loadSettings(settings); + m_KeySequence.loadSettings(settings); setType(settings.value("type", keyDown).toInt()); - typeScreenNames().clear(); + m_TypeScreenNames.clear(); int numTypeScreens = settings.beginReadArray("typeScreenNames"); for (int i = 0; i < numTypeScreens; i++) { settings.setArrayIndex(i); - typeScreenNames().append(settings.value("typeScreenName").toString()); + m_TypeScreenNames.append(settings.value("typeScreenName").toString()); } settings.endArray(); @@ -137,7 +137,7 @@ void Action::loadSettings(QSettings& settings) void Action::saveSettings(QSettings& settings) const { - keySequence().saveSettings(settings); + m_KeySequence.saveSettings(settings); settings.setValue("type", type()); settings.beginWriteArray("typeScreenNames"); @@ -164,4 +164,3 @@ QTextStream& operator<<(QTextStream& outStream, const Action& action) return outStream; } - diff --git a/src/gui/src/Action.h b/src/gui/src/Action.h index b738f3b..c260bad 100644 --- a/src/gui/src/Action.h +++ b/src/gui/src/Action.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -32,9 +32,6 @@ class QTextStream; class Action { - friend class ActionDialog; - friend QTextStream& operator<<(QTextStream& outStream, const Action& action); - public: enum ActionType { keyDown, keyUp, keystroke, switchToScreen, toggleScreen, switchInDirection, @@ -48,25 +45,31 @@ class Action public: QString text() const; const KeySequence& keySequence() const { return m_KeySequence; } + void setKeySequence(const KeySequence& seq) { m_KeySequence = seq; } + void loadSettings(QSettings& settings); void saveSettings(QSettings& settings) const; + int type() const { return m_Type; } + void setType(int t) { m_Type = t; } + const QStringList& typeScreenNames() const { return m_TypeScreenNames; } - const QString& switchScreenName() const { return m_SwitchScreenName; } - int switchDirection() const { return m_SwitchDirection; } - int lockCursorMode() const { return m_LockCursorMode; } - bool activeOnRelease() const { return m_ActiveOnRelease; } - bool haveScreens() const { return m_HasScreens; } + void appendTypeScreenName(QString name) { m_TypeScreenNames.append(name); } + void clearTypeScreenNames() { m_TypeScreenNames.clear(); } - protected: - KeySequence& keySequence() { return m_KeySequence; } - void setKeySequence(const KeySequence& seq) { m_KeySequence = seq; } - void setType(int t) { m_Type = t; } - QStringList& typeScreenNames() { return m_TypeScreenNames; } + const QString& switchScreenName() const { return m_SwitchScreenName; } void setSwitchScreenName(const QString& n) { m_SwitchScreenName = n; } + + int switchDirection() const { return m_SwitchDirection; } void setSwitchDirection(int d) { m_SwitchDirection = d; } + + int lockCursorMode() const { return m_LockCursorMode; } void setLockCursorMode(int m) { m_LockCursorMode = m; } + + bool activeOnRelease() const { return m_ActiveOnRelease; } void setActiveOnRelease(bool b) { m_ActiveOnRelease = b; } + + bool haveScreens() const { return m_HasScreens; } void setHaveScreens(bool b) { m_HasScreens = b; } private: @@ -84,8 +87,6 @@ class Action static const char* m_LockCursorModeNames[]; }; -typedef QList<Action> ActionList; - QTextStream& operator<<(QTextStream& outStream, const Action& action); #endif diff --git a/src/gui/src/ActionDialog.cpp b/src/gui/src/ActionDialog.cpp index 2796885..89a037e 100644 --- a/src/gui/src/ActionDialog.cpp +++ b/src/gui/src/ActionDialog.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -58,7 +58,7 @@ ActionDialog::ActionDialog(QWidget* parent, ServerConfig& config, Hotkey& hotkey m_pGroupBoxScreens->setChecked(m_Action.haveScreens()); int idx = 0; - foreach(const Screen& screen, serverConfig().screens()) + for (const Screen& screen : serverConfig().screens()) { if (!screen.isNull()) { QListWidgetItem *pListItem = new QListWidgetItem(screen.name()); @@ -72,6 +72,7 @@ ActionDialog::ActionDialog(QWidget* parent, ServerConfig& config, Hotkey& hotkey idx++; } + } } void ActionDialog::accept() @@ -83,9 +84,10 @@ void ActionDialog::accept() m_Action.setType(m_pButtonGroupType->checkedId()); m_Action.setHaveScreens(m_pGroupBoxScreens->isChecked()); - m_Action.typeScreenNames().clear(); - foreach(const QListWidgetItem* pItem, m_pListScreens->selectedItems()) - m_Action.typeScreenNames().append(pItem->text()); + m_Action.clearTypeScreenNames(); + for (const QListWidgetItem* pItem : m_pListScreens->selectedItems()) { + m_Action.appendTypeScreenName(pItem->text()); + } m_Action.setSwitchScreenName(m_pComboSwitchToScreen->currentText()); m_Action.setSwitchDirection(m_pComboSwitchInDirection->currentIndex()); diff --git a/src/gui/src/ActionDialog.h b/src/gui/src/ActionDialog.h index 388be1f..ea476c5 100644 --- a/src/gui/src/ActionDialog.h +++ b/src/gui/src/ActionDialog.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the diff --git a/src/gui/src/AppConfig.cpp b/src/gui/src/AppConfig.cpp index 2f8779d..894ce49 100644 --- a/src/gui/src/AppConfig.cpp +++ b/src/gui/src/AppConfig.cpp @@ -60,6 +60,7 @@ AppConfig::AppConfig(QSettings* settings) : m_AutoConfigPrompted(false), m_CryptoEnabled(false), m_AutoHide(false), + m_AutoStart(false), m_MinimizeToTray(false) { Q_ASSERT(m_pSettings); @@ -157,7 +158,10 @@ void AppConfig::loadSettings() m_ElevateMode = static_cast<ElevateMode>(elevateMode.toInt()); m_AutoConfigPrompted = settings().value("autoConfigPrompted", false).toBool(); m_CryptoEnabled = settings().value("cryptoEnabled", true).toBool(); + // TODO: set default value of requireClientCertificate to true on Barrier 2.5.0 + m_RequireClientCertificate = settings().value("requireClientCertificate", false).toBool(); m_AutoHide = settings().value("autoHide", false).toBool(); + m_AutoStart = settings().value("autoStart", false).toBool(); m_MinimizeToTray = settings().value("minimizeToTray", false).toBool(); } @@ -179,7 +183,9 @@ void AppConfig::saveSettings() settings().setValue("elevateModeEnum", static_cast<int>(m_ElevateMode)); settings().setValue("autoConfigPrompted", m_AutoConfigPrompted); settings().setValue("cryptoEnabled", m_CryptoEnabled); + settings().setValue("requireClientCertificate", m_RequireClientCertificate); settings().setValue("autoHide", m_AutoHide); + settings().setValue("autoStart", m_AutoStart); settings().setValue("minimizeToTray", m_MinimizeToTray); settings().sync(); } @@ -208,7 +214,7 @@ void AppConfig::setElevateMode(ElevateMode em) { m_ElevateMode = em; } void AppConfig::setAutoConfig(bool autoConfig) { m_AutoConfig = autoConfig; } -bool AppConfig::autoConfigPrompted() { return m_AutoConfigPrompted; } +bool AppConfig::autoConfigPrompted() { return m_AutoConfigPrompted; } void AppConfig::setAutoConfigPrompted(bool prompted) { m_AutoConfigPrompted = prompted; } @@ -222,10 +228,18 @@ void AppConfig::setCryptoEnabled(bool e) { m_CryptoEnabled = e; } bool AppConfig::getCryptoEnabled() const { return m_CryptoEnabled; } +void AppConfig::setRequireClientCertificate(bool e) { m_RequireClientCertificate = e; } + +bool AppConfig::getRequireClientCertificate() const { return m_RequireClientCertificate; } + void AppConfig::setAutoHide(bool b) { m_AutoHide = b; } bool AppConfig::getAutoHide() { return m_AutoHide; } +void AppConfig::setAutoStart(bool b) { m_AutoStart = b; } + +bool AppConfig::getAutoStart() { return m_AutoStart; } + void AppConfig::setMinimizeToTray(bool b) { m_MinimizeToTray = b; } bool AppConfig::getMinimizeToTray() { return m_MinimizeToTray; } diff --git a/src/gui/src/AppConfig.h b/src/gui/src/AppConfig.h index c9ed38d..0dabb18 100644 --- a/src/gui/src/AppConfig.h +++ b/src/gui/src/AppConfig.h @@ -91,9 +91,15 @@ class AppConfig: public QObject void setCryptoEnabled(bool e); bool getCryptoEnabled() const; + void setRequireClientCertificate(bool e); + bool getRequireClientCertificate() const; + void setAutoHide(bool b); bool getAutoHide(); + void setAutoStart(bool b); + bool getAutoStart(); + void setMinimizeToTray(bool b); bool getMinimizeToTray(); @@ -129,7 +135,9 @@ protected: ElevateMode m_ElevateMode; bool m_AutoConfigPrompted; bool m_CryptoEnabled; + bool m_RequireClientCertificate = false; bool m_AutoHide; + bool m_AutoStart; bool m_MinimizeToTray; static const char m_BarriersName[]; diff --git a/src/gui/src/BaseConfig.cpp b/src/gui/src/BaseConfig.cpp index 241f590..0f31493 100644 --- a/src/gui/src/BaseConfig.cpp +++ b/src/gui/src/BaseConfig.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -44,4 +44,3 @@ const char* BaseConfig::m_SwitchCornerNames[] = "bottom-left", "bottom-right" }; - diff --git a/src/gui/src/BaseConfig.h b/src/gui/src/BaseConfig.h index cf41ac6..9dc6b65 100644 --- a/src/gui/src/BaseConfig.h +++ b/src/gui/src/BaseConfig.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the diff --git a/src/gui/src/Fingerprint.cpp b/src/gui/src/Fingerprint.cpp deleted file mode 100644 index 24c8a1a..0000000 --- a/src/gui/src/Fingerprint.cpp +++ /dev/null @@ -1,148 +0,0 @@ -/* - * barrier -- mouse and keyboard sharing utility - * Copyright (C) 2015-2016 Symless Ltd. - * - * This package is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * found in the file LICENSE that should have accompanied this file. - * - * This package is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "Fingerprint.h" - -#include "common/DataDirectories.h" - -#include <QDir> -#include <QTextStream> - -static const char kDirName[] = "SSL/Fingerprints"; -static const char kLocalFilename[] = "Local.txt"; -static const char kTrustedServersFilename[] = "TrustedServers.txt"; -static const char kTrustedClientsFilename[] = "TrustedClients.txt"; - -Fingerprint::Fingerprint(const QString& filename) -{ - m_Filename = filename; -} - -void Fingerprint::trust(const QString& fingerprintText, bool append) -{ - Fingerprint::persistDirectory(); - - QIODevice::OpenMode openMode; - if (append) { - openMode = QIODevice::Append; - } - else { - openMode = QIODevice::WriteOnly; - } - - QFile file(filePath()); - if (file.open(openMode)) - { - QTextStream out(&file); - out << fingerprintText << "\n"; - file.close(); - } -} - -bool Fingerprint::fileExists() const -{ - QString dirName = Fingerprint::directoryPath(); - if (!QDir(dirName).exists()) { - return false; - } - - QFile file(filePath()); - return file.exists(); -} - -bool Fingerprint::isTrusted(const QString& fingerprintText) -{ - QStringList list = readList(); - foreach (QString trusted, list) - { - if (trusted == fingerprintText) { - return true; - } - } - return false; -} - -QStringList Fingerprint::readList(const int readTo) -{ - QStringList list; - - QString dirName = Fingerprint::directoryPath(); - if (!QDir(dirName).exists()) { - return list; - } - - QFile file(filePath()); - - if (file.open(QIODevice::ReadOnly)) - { - QTextStream in(&file); - while (!in.atEnd()) - { - list.append(in.readLine()); - if (list.size() == readTo) { - break; - } - } - file.close(); - } - - return list; -} - -QString Fingerprint::readFirst() -{ - QStringList list = readList(1); - return list.at(0); -} - -QString Fingerprint::filePath() const -{ - QString dir = Fingerprint::directoryPath(); - return QString("%1/%2").arg(dir).arg(m_Filename); -} - -void Fingerprint::persistDirectory() -{ - QDir dir(Fingerprint::directoryPath()); - if (!dir.exists()) { - dir.mkpath("."); - } -} - -QString Fingerprint::directoryPath() -{ - auto profileDir = QString::fromStdString(DataDirectories::profile()); - - return QString("%1/%2") - .arg(profileDir) - .arg(kDirName); -} - -Fingerprint Fingerprint::local() -{ - return Fingerprint(kLocalFilename); -} - -Fingerprint Fingerprint::trustedServers() -{ - return Fingerprint(kTrustedServersFilename); -} - -Fingerprint Fingerprint::trustedClients() -{ - return Fingerprint(kTrustedClientsFilename); -} diff --git a/src/gui/src/Fingerprint.h b/src/gui/src/Fingerprint.h deleted file mode 100644 index 5a38d20..0000000 --- a/src/gui/src/Fingerprint.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * barrier -- mouse and keyboard sharing utility - * Copyright (C) 2015-2016 Symless Ltd. - * - * This package is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * found in the file LICENSE that should have accompanied this file. - * - * This package is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#pragma once - -#include <QString> - -class Fingerprint -{ -public: - void trust(const QString& fingerprintText, bool append = true); - bool isTrusted(const QString& fingerprintText); - QStringList readList(const int readTo = -1); - QString readFirst(); - QString filePath() const; - bool fileExists() const; - - static Fingerprint local(); - static Fingerprint trustedServers(); - static Fingerprint trustedClients(); - static QString directoryPath(); - static void persistDirectory(); - -private: - Fingerprint(const QString& filename); - - QString m_Filename; -}; diff --git a/src/gui/src/FingerprintAcceptDialog.cpp b/src/gui/src/FingerprintAcceptDialog.cpp new file mode 100644 index 0000000..e0dc7e6 --- /dev/null +++ b/src/gui/src/FingerprintAcceptDialog.cpp @@ -0,0 +1,65 @@ +/* + barrier -- mouse and keyboard sharing utility + Copyright (C) Barrier contributors + + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + found in the file LICENSE that should have accompanied this file. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "FingerprintAcceptDialog.h" +#include "ui_FingerprintAcceptDialog.h" +#include "net/SecureUtils.h" + +FingerprintAcceptDialog::FingerprintAcceptDialog(QWidget *parent, + BarrierType type, + const barrier::FingerprintData& fingerprint_sha1, + const barrier::FingerprintData& fingerprint_sha256) : + QDialog(parent), + ui_{std::make_unique<Ui::FingerprintAcceptDialog>()} +{ + ui_->setupUi(this); + + if (type == BarrierType::Server) { + ui_->label_sha1->hide(); + ui_->label_sha1_fingerprint_full->hide(); + } else { + ui_->label_sha1_fingerprint_full->setText( + QString::fromStdString(barrier::format_ssl_fingerprint(fingerprint_sha1.data))); + } + + ui_->label_sha256_fingerprint_full->setText( + QString::fromStdString(barrier::format_ssl_fingerprint_columns(fingerprint_sha256.data))); + ui_->label_sha256_fingerprint_randomart->setText( + QString::fromStdString(barrier::create_fingerprint_randomart(fingerprint_sha256.data))); + + QString explanation; + if (type == BarrierType::Server) { + explanation = tr("This is a client fingerprint. You should compare this " + "fingerprint to the one on your client's screen. If the " + "two don't match exactly, then it's probably not the client " + "you're expecting (it could be a malicious user).\n\n" + "To automatically trust this fingerprint for future " + "connections, click Yes. To reject this fingerprint and " + "disconnect the client, click No."); + } else { + explanation = tr("This is a server fingerprint. You should compare this " + "fingerprint to the one on your server's screen. If the " + "two don't match exactly, then it's probably not the server " + "you're expecting (it could be a malicious user).\n\n" + "To automatically trust this fingerprint for future " + "connections, click Yes. To reject this fingerprint and " + "disconnect from the server, click No."); + } + ui_->label_explanation->setText(explanation); +} + +FingerprintAcceptDialog::~FingerprintAcceptDialog() = default; diff --git a/src/gui/src/FingerprintAcceptDialog.h b/src/gui/src/FingerprintAcceptDialog.h new file mode 100644 index 0000000..da8884c --- /dev/null +++ b/src/gui/src/FingerprintAcceptDialog.h @@ -0,0 +1,45 @@ +/* + barrier -- mouse and keyboard sharing utility + Copyright (C) Barrier contributors + + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + found in the file LICENSE that should have accompanied this file. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef BARRIER_GUI_FINGERPRINT_ACCEPT_DIALOG_H +#define BARRIER_GUI_FINGERPRINT_ACCEPT_DIALOG_H + +#include "net/FingerprintData.h" +#include "barrier/BarrierType.h" +#include <QDialog> +#include <memory> + +namespace Ui { +class FingerprintAcceptDialog; +} + +class FingerprintAcceptDialog : public QDialog +{ + Q_OBJECT + +public: + explicit FingerprintAcceptDialog(QWidget* parent, + BarrierType type, + const barrier::FingerprintData& fingerprint_sha1, + const barrier::FingerprintData& fingerprint_sha256); + ~FingerprintAcceptDialog() override; + +private: + std::unique_ptr<Ui::FingerprintAcceptDialog> ui_; +}; + +#endif // BARRIER_GUI_FINGERPRINT_ACCEPT_DIALOG_H diff --git a/src/gui/src/FingerprintAcceptDialog.ui b/src/gui/src/FingerprintAcceptDialog.ui new file mode 100644 index 0000000..9c181ec --- /dev/null +++ b/src/gui/src/FingerprintAcceptDialog.ui @@ -0,0 +1,174 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>FingerprintAcceptDialog</class> + <widget class="QDialog" name="FingerprintAcceptDialog"> + <property name="geometry"> + <rect> + <x>0</x> + <y>0</y> + <width>600</width> + <height>400</height> + </rect> + </property> + <property name="sizePolicy"> + <sizepolicy hsizetype="Ignored" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="windowTitle"> + <string>Security question</string> + </property> + <layout class="QGridLayout" name="gridLayout"> + <property name="sizeConstraint"> + <enum>QLayout::SetFixedSize</enum> + </property> + <item row="6" column="0" colspan="2"> + <widget class="QDialogButtonBox" name="buttonBox"> + <property name="orientation"> + <enum>Qt::Horizontal</enum> + </property> + <property name="standardButtons"> + <set>QDialogButtonBox::No|QDialogButtonBox::Yes</set> + </property> + </widget> + </item> + <item row="3" column="0" colspan="2"> + <widget class="QLabel" name="label_sha1"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>SHA1 (deprecated, compare to old servers only)</string> + </property> + </widget> + </item> + <item row="5" column="0" colspan="2"> + <widget class="QLabel" name="label_explanation"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + <property name="wordWrap"> + <bool>true</bool> + </property> + <property name="margin"> + <number>10</number> + </property> + </widget> + </item> + <item row="4" column="0" colspan="2"> + <widget class="QLabel" name="label_sha1_fingerprint_full"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string/> + </property> + <property name="textInteractionFlags"> + <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> + </property> + </widget> + </item> + <item row="0" column="0" colspan="2"> + <widget class="QLabel" name="label_title"> + <property name="text"> + <string>Do you trust this fingerprint?</string> + </property> + </widget> + </item> + <item row="2" column="1"> + <widget class="QLabel" name="label_sha256_fingerprint_randomart"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="font"> + <font> + <family>Courier</family> + <weight>75</weight> + <bold>true</bold> + </font> + </property> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <property name="textInteractionFlags"> + <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> + </property> + </widget> + </item> + <item row="2" column="0"> + <widget class="QLabel" name="label_sha256_fingerprint_full"> + <property name="text"> + <string/> + </property> + <property name="alignment"> + <set>Qt::AlignCenter</set> + </property> + <property name="textInteractionFlags"> + <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> + </property> + </widget> + </item> + <item row="1" column="0" colspan="2"> + <widget class="QLabel" name="label_sha256"> + <property name="text"> + <string>SHA256:</string> + </property> + </widget> + </item> + </layout> + </widget> + <resources/> + <connections> + <connection> + <sender>buttonBox</sender> + <signal>accepted()</signal> + <receiver>FingerprintAcceptDialog</receiver> + <slot>accept()</slot> + <hints> + <hint type="sourcelabel"> + <x>248</x> + <y>254</y> + </hint> + <hint type="destinationlabel"> + <x>157</x> + <y>274</y> + </hint> + </hints> + </connection> + <connection> + <sender>buttonBox</sender> + <signal>rejected()</signal> + <receiver>FingerprintAcceptDialog</receiver> + <slot>reject()</slot> + <hints> + <hint type="sourcelabel"> + <x>316</x> + <y>260</y> + </hint> + <hint type="destinationlabel"> + <x>286</x> + <y>274</y> + </hint> + </hints> + </connection> + </connections> +</ui> diff --git a/src/gui/src/Hotkey.cpp b/src/gui/src/Hotkey.cpp index c7138e7..4c008f8 100644 --- a/src/gui/src/Hotkey.cpp +++ b/src/gui/src/Hotkey.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -28,9 +28,9 @@ Hotkey::Hotkey() : QString Hotkey::text() const { - QString text = keySequence().toString(); + QString text = m_KeySequence.toString(); - if (keySequence().isMouseButton()) + if (m_KeySequence.isMouseButton()) return "mousebutton(" + text + ")"; return "keystroke(" + text + ")"; @@ -38,16 +38,16 @@ QString Hotkey::text() const void Hotkey::loadSettings(QSettings& settings) { - keySequence().loadSettings(settings); + m_KeySequence.loadSettings(settings); - actions().clear(); + m_Actions.clear(); int num = settings.beginReadArray("actions"); for (int i = 0; i < num; i++) { settings.setArrayIndex(i); Action a; a.loadSettings(settings); - actions().append(a); + m_Actions.push_back(a); } settings.endArray(); @@ -55,21 +55,33 @@ void Hotkey::loadSettings(QSettings& settings) void Hotkey::saveSettings(QSettings& settings) const { - keySequence().saveSettings(settings); + m_KeySequence.saveSettings(settings); settings.beginWriteArray("actions"); - for (int i = 0; i < actions().size(); i++) + for (int i = 0; i < m_Actions.size(); i++) { settings.setArrayIndex(i); - actions()[i].saveSettings(settings); + m_Actions[i].saveSettings(settings); } settings.endArray(); } QTextStream& operator<<(QTextStream& outStream, const Hotkey& hotkey) { - for (int i = 0; i < hotkey.actions().size(); i++) - outStream << "\t" << hotkey.text() << " = " << hotkey.actions()[i] << endl; + // Don't write config if there are no actions + if (hotkey.actions().size() == 0) { + return outStream; + } + + outStream << "\t" << hotkey.text() << " = "; + for (int i = 0; i < hotkey.actions().size(); i++) { + outStream << hotkey.actions()[i]; + if (i != hotkey.actions().size() - 1) { + outStream << ", "; + } + } + + outStream << "\n"; return outStream; } diff --git a/src/gui/src/Hotkey.h b/src/gui/src/Hotkey.h index 475da02..5e6fc98 100644 --- a/src/gui/src/Hotkey.h +++ b/src/gui/src/Hotkey.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -27,40 +27,35 @@ #include "Action.h" #include "KeySequence.h" +#include <vector> + class HotkeyDialog; class ServerConfigDialog; class QSettings; class Hotkey { - friend class HotkeyDialog; - friend class ServerConfigDialog; - friend QTextStream& operator<<(QTextStream& outStream, const Hotkey& hotkey); - public: Hotkey(); - public: QString text() const; const KeySequence& keySequence() const { return m_KeySequence; } - const ActionList& actions() const { return m_Actions; } + void setKeySequence(const KeySequence& seq) { m_KeySequence = seq; } + + const std::vector<Action>& actions() const { return m_Actions; } + void appendAction(const Action& action) { m_Actions.push_back(action); } + void setAction(int index, const Action& action) { m_Actions[index] = action; } + void removeAction(int index) { m_Actions.erase(m_Actions.begin() + index); } void loadSettings(QSettings& settings); void saveSettings(QSettings& settings) const; - protected: - KeySequence& keySequence() { return m_KeySequence; } - void setKeySequence(const KeySequence& seq) { m_KeySequence = seq; } - ActionList& actions() { return m_Actions; } - private: KeySequence m_KeySequence; - ActionList m_Actions; + std::vector<Action> m_Actions; }; -typedef QList<Hotkey> HotkeyList; - QTextStream& operator<<(QTextStream& outStream, const Hotkey& hotkey); #endif diff --git a/src/gui/src/HotkeyDialog.cpp b/src/gui/src/HotkeyDialog.cpp index ef25c3f..5b3e5a8 100644 --- a/src/gui/src/HotkeyDialog.cpp +++ b/src/gui/src/HotkeyDialog.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the diff --git a/src/gui/src/HotkeyDialog.h b/src/gui/src/HotkeyDialog.h index a13fc24..3a9967c 100644 --- a/src/gui/src/HotkeyDialog.h +++ b/src/gui/src/HotkeyDialog.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the diff --git a/src/gui/src/IpcClient.h b/src/gui/src/IpcClient.h index cd398b3..6040029 100644 --- a/src/gui/src/IpcClient.h +++ b/src/gui/src/IpcClient.h @@ -28,7 +28,7 @@ class IpcReader; class IpcClient : public QObject { - Q_OBJECT + Q_OBJECT public: IpcClient(); diff --git a/src/gui/src/KeySequence.cpp b/src/gui/src/KeySequence.cpp index cc74cb2..ddf7d33 100644 --- a/src/gui/src/KeySequence.cpp +++ b/src/gui/src/KeySequence.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -55,6 +55,8 @@ static const struct { Qt::Key_Help, "Help" }, { Qt::Key_Enter, "KP_Enter" }, { Qt::Key_Clear, "Clear" }, + { Qt::Key_Comma, "Comma" }, + { Qt::Key_Semicolon, "Semicolon" }, { Qt::Key_Back, "WWWBack" }, { Qt::Key_Forward, "WWWForward" }, @@ -152,12 +154,12 @@ bool KeySequence::appendKey(int key, int modifiers) void KeySequence::loadSettings(QSettings& settings) { - sequence().clear(); + m_Sequence.clear(); int num = settings.beginReadArray("keys"); for (int i = 0; i < num; i++) { settings.setArrayIndex(i); - sequence().append(settings.value("key", 0).toInt()); + m_Sequence.append(settings.value("key", 0).toInt()); } settings.endArray(); @@ -168,10 +170,10 @@ void KeySequence::loadSettings(QSettings& settings) void KeySequence::saveSettings(QSettings& settings) const { settings.beginWriteArray("keys"); - for (int i = 0; i < sequence().size(); i++) + for (int i = 0; i < m_Sequence.size(); i++) { settings.setArrayIndex(i); - settings.setValue("key", sequence()[i]); + settings.setValue("key", m_Sequence[i]); } settings.endArray(); } @@ -211,23 +213,22 @@ QString KeySequence::keyToString(int key) // treat key pad like normal keys (FIXME: we should have another lookup table for keypad keys instead) key &= ~Qt::KeypadModifier; + // a special key? + int i = 0; + while (keyname[i].name) { + if (key == keyname[i].key) + return QString::fromUtf8(keyname[i].name); + i++; + } + // a printable 7 bit character? - if (key < 0x80 && key != Qt::Key_Space) + if (key < 0x80) return QChar(key & 0x7f).toLower(); // a function key? if (key >= Qt::Key_F1 && key <= Qt::Key_F35) return QString::fromUtf8("F%1").arg(key - Qt::Key_F1 + 1); - // a special key? - int i=0; - while (keyname[i].name) - { - if (key == keyname[i].key) - return QString::fromUtf8(keyname[i].name); - i++; - } - // representable in ucs2? if (key < 0x10000) return QString("\\u%1").arg(QChar(key).toLower().unicode(), 4, 16, QChar('0')); diff --git a/src/gui/src/KeySequence.h b/src/gui/src/KeySequence.h index 8d9706d..0331091 100644 --- a/src/gui/src/KeySequence.h +++ b/src/gui/src/KeySequence.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -32,7 +32,7 @@ class KeySequence public: QString toString() const; - bool appendKey(int modifiers, int key); + bool appendKey(int key, int modifiers); bool appendMouseButton(int button); bool isMouseButton() const; bool valid() const { return m_IsValid; } @@ -44,7 +44,6 @@ class KeySequence private: void setValid(bool b) { m_IsValid = b; } void setModifiers(int i) { m_Modifiers = i; } - QList<int>& sequence() { return m_Sequence; } private: QList<int> m_Sequence; @@ -55,4 +54,3 @@ class KeySequence }; #endif - diff --git a/src/gui/src/KeySequenceWidget.cpp b/src/gui/src/KeySequenceWidget.cpp index e5823e1..067c5bf 100644 --- a/src/gui/src/KeySequenceWidget.cpp +++ b/src/gui/src/KeySequenceWidget.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the diff --git a/src/gui/src/KeySequenceWidget.h b/src/gui/src/KeySequenceWidget.h index eaef514..636375b 100644 --- a/src/gui/src/KeySequenceWidget.h +++ b/src/gui/src/KeySequenceWidget.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -78,4 +78,3 @@ class KeySequenceWidget : public QPushButton }; #endif - diff --git a/src/gui/src/MainWindow.cpp b/src/gui/src/MainWindow.cpp index 01133bf..d17548a 100644 --- a/src/gui/src/MainWindow.cpp +++ b/src/gui/src/MainWindow.cpp @@ -20,18 +20,21 @@ #include "MainWindow.h" -#include "Fingerprint.h" #include "AboutDialog.h" #include "ServerConfigDialog.h" #include "SettingsDialog.h" #include "ZeroconfService.h" #include "DataDownloader.h" #include "CommandProcess.h" +#include "FingerprintAcceptDialog.h" #include "QUtility.h" #include "ProcessorArch.h" #include "SslCertificate.h" #include "ShutdownCh.h" +#include "base/String.h" #include "common/DataDirectories.h" +#include "net/FingerprintDatabase.h" +#include "net/SecureUtils.h" #include <QtCore> #include <QtGui> @@ -53,17 +56,20 @@ #include <Windows.h> #endif +static const QString allFilesFilter(QObject::tr("All files (*.*)")); #if defined(Q_OS_WIN) static const char barrierConfigName[] = "barrier.sgc"; -static const QString barrierConfigFilter(QObject::tr("Barrier Configurations (*.sgc);;All files (*.*)")); +static const QString barrierConfigFilter(QObject::tr("Barrier Configurations (*.sgc)")); static QString bonjourBaseUrl = "http://binaries.symless.com/bonjour/"; static const char bonjourFilename32[] = "Bonjour.msi"; static const char bonjourFilename64[] = "Bonjour64.msi"; static const char bonjourTargetFilename[] = "Bonjour.msi"; #else static const char barrierConfigName[] = "barrier.conf"; -static const QString barrierConfigFilter(QObject::tr("Barrier Configurations (*.conf);;All files (*.*)")); +static const QString barrierConfigFilter(QObject::tr("Barrier Configurations (*.conf)")); #endif +static const QString barrierConfigOpenFilter(barrierConfigFilter + ";;" + allFilesFilter); +static const QString barrierConfigSaveFilter(barrierConfigFilter); static const char* barrierIconFiles[] = { @@ -80,6 +86,14 @@ static const char* barrierIconFiles[] = #endif }; +static const char* barrierIconNames[] = +{ + "barrier-disconnected", + "barrier-disconnected", + "barrier-connected", + "barrier-transfering" +}; + static const char* barrierLargeIcon = ":/res/icons/256x256/barrier.ico"; MainWindow::MainWindow(QSettings& settings, AppConfig& appConfig) : @@ -145,9 +159,22 @@ MainWindow::MainWindow(QSettings& settings, AppConfig& appConfig) : m_pComboServerList->hide(); m_pLabelPadlock->hide(); + frame_fingerprint_details->hide(); updateSSLFingerprint(); + connect(toolbutton_show_fingerprint, &QToolButton::clicked, [this](bool checked) + { + m_fingerprint_expanded = !m_fingerprint_expanded; + if (m_fingerprint_expanded) { + frame_fingerprint_details->show(); + toolbutton_show_fingerprint->setArrowType(Qt::ArrowType::UpArrow); + } else { + frame_fingerprint_details->hide(); + toolbutton_show_fingerprint->setArrowType(Qt::ArrowType::DownArrow); + } + }); + // resize window to smallest reasonable size resize(0, 0); } @@ -191,7 +218,7 @@ void MainWindow::open() // only start if user has previously started. this stops the gui from // auto hiding before the user has configured barrier (which of course // confuses first time users, who think barrier has crashed). - if (appConfig().startedBefore() && appConfig().processMode() == Desktop) { + if (appConfig().startedBefore() && appConfig().getAutoStart()) { m_SuppressEmptyServerWarning = true; startBarrier(); m_SuppressEmptyServerWarning = false; @@ -296,7 +323,7 @@ void MainWindow::saveSettings() void MainWindow::setIcon(qBarrierState state) { if (m_pTrayIcon) { - QIcon icon = QIcon(barrierIconFiles[state]); + QIcon icon = QIcon::fromTheme(barrierIconNames[state], QIcon(barrierIconFiles[state])); #if defined(Q_OS_MAC) icon.setIsMask(true); #endif @@ -325,8 +352,7 @@ void MainWindow::logOutput() if (m_pBarrier) { QString text(m_pBarrier->readAllStandardOutput()); - foreach(QString line, text.split(QRegExp("\r|\n|\r\n"))) - { + for (QString line : text.split(QRegExp("\r|\n|\r\n"))) { if (!line.isEmpty()) { appendLogRaw(line); @@ -363,7 +389,7 @@ void MainWindow::appendLogError(const QString& text) void MainWindow::appendLogRaw(const QString& text) { - foreach(QString line, text.split(QRegExp("\r|\n|\r\n"))) { + for (QString line : text.split(QRegExp("\r|\n|\r\n"))) { if (!line.isEmpty()) { m_pLogWindow->appendRaw(line); updateFromLogLine(line); @@ -402,41 +428,57 @@ void MainWindow::checkConnected(const QString& line) void MainWindow::checkFingerprint(const QString& line) { - QRegExp fingerprintRegex(".*server fingerprint: ([A-F0-9:]+)"); + QRegExp fingerprintRegex(".*peer fingerprint \\(SHA1\\): ([A-F0-9:]+) \\(SHA256\\): ([A-F0-9:]+)"); if (!fingerprintRegex.exactMatch(line)) { return; } - QString fingerprint = fingerprintRegex.cap(1); - if (Fingerprint::trustedServers().isTrusted(fingerprint)) { + barrier::FingerprintData fingerprint_sha1 = { + barrier::fingerprint_type_to_string(barrier::FingerprintType::SHA1), + barrier::string::from_hex(fingerprintRegex.cap(1).toStdString()) + }; + + barrier::FingerprintData fingerprint_sha256 = { + barrier::fingerprint_type_to_string(barrier::FingerprintType::SHA256), + barrier::string::from_hex(fingerprintRegex.cap(2).toStdString()) + }; + + bool is_client = barrier_type() == BarrierType::Client; + + auto db_path = is_client + ? barrier::DataDirectories::trusted_servers_ssl_fingerprints_path() + : barrier::DataDirectories::trusted_clients_ssl_fingerprints_path(); + + auto db_dir = db_path.parent_path(); + if (!barrier::fs::exists(db_dir)) { + barrier::fs::create_directories(db_dir); + } + + // We compare only SHA256 fingerprints, but show both SHA1 and SHA256 so that the users can + // still verify fingerprints on old Barrier servers. This way the only time when we are exposed + // to SHA1 vulnerabilities is when the user is reconnecting again. + barrier::FingerprintDatabase db; + db.read(db_path); + if (db.is_trusted(fingerprint_sha256)) { return; } static bool messageBoxAlreadyShown = false; if (!messageBoxAlreadyShown) { - stopBarrier(); + if (is_client) { + stopBarrier(); + } messageBoxAlreadyShown = true; - QMessageBox::StandardButton fingerprintReply = - QMessageBox::information( - this, tr("Security question"), - tr("Do you trust this fingerprint?\n\n" - "%1\n\n" - "This is a server fingerprint. You should compare this " - "fingerprint to the one on your server's screen. If the " - "two don't match exactly, then it's probably not the server " - "you're expecting (it could be a malicious user).\n\n" - "To automatically trust this fingerprint for future " - "connections, click Yes. To reject this fingerprint and " - "disconnect from the server, click No.") - .arg(fingerprint), - QMessageBox::Yes | QMessageBox::No); - - if (fingerprintReply == QMessageBox::Yes) { + FingerprintAcceptDialog dialog{this, barrier_type(), fingerprint_sha1, fingerprint_sha256}; + if (dialog.exec() == QDialog::Accepted) { // restart core process after trusting fingerprint. - Fingerprint::trustedServers().trust(fingerprint); - startBarrier(); + db.add_trusted(fingerprint_sha256); + db.write(db_path); + if (is_client) { + startBarrier(); + } } messageBoxAlreadyShown = false; @@ -506,8 +548,8 @@ void MainWindow::startBarrier() #endif - if (m_AppConfig->getCryptoEnabled()) { - args << "--enable-crypto"; + if (!m_AppConfig->getCryptoEnabled()) { + args << "--disable-crypto"; } #if defined(Q_OS_WIN) @@ -515,11 +557,11 @@ void MainWindow::startBarrier() // launched the process (e.g. when launched with elevation). setting the // profile dir on launch ensures it uses the same profile dir is used // no matter how its relaunched. - args << "--profile-dir" << QString::fromStdString("\"" + DataDirectories::profile() + "\""); + args << "--profile-dir" << QString::fromStdString("\"" + barrier::DataDirectories::profile().u8string() + "\""); #endif - if ((barrierType() == barrierClient && !clientArgs(args, app)) - || (barrierType() == barrierServer && !serverArgs(args, app))) + if ((barrier_type() == BarrierType::Client && !clientArgs(args, app)) + || (barrier_type() == BarrierType::Server && !serverArgs(args, app))) { stopBarrier(); return; @@ -534,7 +576,7 @@ void MainWindow::startBarrier() m_pLogWindow->startNewInstance(); - appendLogInfo("starting " + QString(barrierType() == barrierServer ? "server" : "client")); + appendLogInfo("starting " + QString(barrier_type() == BarrierType::Server ? "server" : "client")); qDebug() << args; @@ -615,7 +657,7 @@ QString MainWindow::configFilename() if (m_pRadioInternalConfig->isChecked()) { // TODO: no need to use a temporary file, since we need it to - // be permenant (since it'll be used for Windows services, etc). + // be permanent (since it'll be used for Windows services, etc). m_pTempConfigFile = new QTemporaryFile(); if (!m_pTempConfigFile->open()) { @@ -644,6 +686,11 @@ QString MainWindow::configFilename() return filename; } +BarrierType MainWindow::barrier_type() const +{ + return m_pGroupClient->isChecked() ? BarrierType::Client : BarrierType::Server; +} + QString MainWindow::address() { QString address = appConfig().networkInterface(); @@ -680,6 +727,10 @@ bool MainWindow::serverArgs(QStringList& args, QString& app) args << "--log" << appConfig().logFilenameCmd(); } + if (!appConfig().getRequireClientCertificate()) { + args << "--disable-client-cert-checking"; + } + QString configFilename = this->configFilename(); #if defined(Q_OS_WIN) // wrap in quotes in case username contains spaces. @@ -720,7 +771,7 @@ void MainWindow::stopBarrier() void MainWindow::stopService() { - // send empty command to stop service from laucning anything. + // send empty command to stop service from launching anything. m_IpcClient.sendCommand("", appConfig().elevateMode()); } @@ -915,6 +966,14 @@ void MainWindow::changeEvent(QEvent* event) QMainWindow::changeEvent(event); } +bool MainWindow::event(QEvent* event) +{ + if (event->type() == QEvent::LayoutRequest) { + setFixedSize(sizeHint()); + } + return QMainWindow::event(event); +} + void MainWindow::updateZeroconfService() { QMutexLocker locker(&m_UpdateZeroconfMutex); @@ -926,7 +985,7 @@ void MainWindow::updateZeroconfService() m_pZeroconfService = NULL; } - if (m_AppConfig->autoConfig() || barrierType() == barrierServer) { + if (m_AppConfig->autoConfig() || barrier_type() == BarrierType::Server) { m_pZeroconfService = new ZeroconfService(this); } } @@ -949,14 +1008,53 @@ void MainWindow::updateSSLFingerprint() { if (m_AppConfig->getCryptoEnabled() && m_pSslCertificate == nullptr) { m_pSslCertificate = new SslCertificate(this); + connect(m_pSslCertificate, &SslCertificate::info, [&](QString info) + { + appendLogInfo(info); + }); m_pSslCertificate->generateCertificate(); } - if (m_AppConfig->getCryptoEnabled() && Fingerprint::local().fileExists()) { - m_pLabelLocalFingerprint->setText(Fingerprint::local().readFirst()); - m_pLabelLocalFingerprint->setTextInteractionFlags(Qt::TextSelectableByMouse); - } else { - m_pLabelLocalFingerprint->setText("Disabled"); + + toolbutton_show_fingerprint->setEnabled(false); + m_pLabelLocalFingerprint->setText("Disabled"); + + if (!m_AppConfig->getCryptoEnabled()) { + return; + } + + auto local_path = barrier::DataDirectories::local_ssl_fingerprints_path(); + if (!barrier::fs::exists(local_path)) { + return; } + + barrier::FingerprintDatabase db; + db.read(local_path); + if (db.fingerprints().size() != 2) { + return; + } + + for (const auto& fingerprint : db.fingerprints()) { + if (fingerprint.algorithm == "sha1") { + auto fingerprint_str = barrier::format_ssl_fingerprint(fingerprint.data); + label_sha1_fingerprint_full->setText(QString::fromStdString(fingerprint_str)); + continue; + } + + if (fingerprint.algorithm == "sha256") { + auto fingerprint_str = barrier::format_ssl_fingerprint(fingerprint.data); + fingerprint_str.resize(40); + fingerprint_str += " ..."; + + auto fingerprint_str_cols = barrier::format_ssl_fingerprint_columns(fingerprint.data); + auto fingerprint_randomart = barrier::create_fingerprint_randomart(fingerprint.data); + + m_pLabelLocalFingerprint->setText(QString::fromStdString(fingerprint_str)); + label_sha256_fingerprint_full->setText(QString::fromStdString(fingerprint_str_cols)); + label_sha256_randomart->setText(QString::fromStdString(fingerprint_randomart)); + } + } + + toolbutton_show_fingerprint->setEnabled(true); } void MainWindow::on_m_pGroupClient_toggled(bool on) @@ -977,7 +1075,7 @@ void MainWindow::on_m_pGroupServer_toggled(bool on) bool MainWindow::on_m_pButtonBrowseConfigFile_clicked() { - QString fileName = QFileDialog::getOpenFileName(this, tr("Browse for a barriers config file"), QString(), barrierConfigFilter); + QString fileName = QFileDialog::getOpenFileName(this, tr("Browse for a barriers config file"), QString(), barrierConfigOpenFilter); if (!fileName.isEmpty()) { @@ -988,9 +1086,9 @@ bool MainWindow::on_m_pButtonBrowseConfigFile_clicked() return false; } -bool MainWindow::on_m_pActionSave_triggered() +bool MainWindow::on_m_pActionSave_triggered() { - QString fileName = QFileDialog::getSaveFileName(this, tr("Save configuration as..."), QString(), tr("Barrier Configuration (*.sgc)")); + QString fileName = QFileDialog::getSaveFileName(this, tr("Save configuration as..."), QString(), barrierConfigSaveFilter); if (!fileName.isEmpty() && !serverConfig().save(fileName)) { diff --git a/src/gui/src/MainWindow.h b/src/gui/src/MainWindow.h index c115b91..0c582c9 100644 --- a/src/gui/src/MainWindow.h +++ b/src/gui/src/MainWindow.h @@ -20,6 +20,8 @@ #define MAINWINDOW__H +#include "barrier/BarrierType.h" + #include <QMainWindow> #include <QSystemTrayIcon> #include <QSettings> @@ -76,12 +78,6 @@ class MainWindow : public QMainWindow, public Ui::MainWindowBase barrierTransfering }; - enum qBarrierType - { - barrierClient, - barrierServer - }; - enum qLevel { Error, Info @@ -98,7 +94,7 @@ class MainWindow : public QMainWindow, public Ui::MainWindowBase public: void setVisible(bool visible); - int barrierType() const { return m_pGroupClient->isChecked() ? barrierClient : barrierServer; } + BarrierType barrier_type() const; int barrierState() const { return m_BarrierState; } QString hostname() const { return m_pLineEditHostname->text(); } QString configFilename(); @@ -157,6 +153,7 @@ public slots: void stopService(); void stopDesktop(); void changeEvent(QEvent* event); + bool event(QEvent* event); void retranslateMenuBar(); #if defined(Q_OS_WIN) bool isServiceRunning(QString name); @@ -202,6 +199,8 @@ public slots: QStringList m_PendingClientNames; LogWindow *m_pLogWindow; + bool m_fingerprint_expanded = false; + private slots: void on_m_pCheckBoxAutoConfig_toggled(bool checked); void on_m_pComboServerList_currentIndexChanged(QString ); @@ -211,4 +210,3 @@ private slots: }; #endif - diff --git a/src/gui/src/MainWindowBase.ui b/src/gui/src/MainWindowBase.ui index 117405c..88994cf 100644 --- a/src/gui/src/MainWindowBase.ui +++ b/src/gui/src/MainWindowBase.ui @@ -2,31 +2,20 @@ <ui version="4.0"> <class>MainWindowBase</class> <widget class="QMainWindow" name="MainWindowBase"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>600</width> - <height>550</height> - </rect> - </property> <property name="sizePolicy"> <sizepolicy hsizetype="Fixed" vsizetype="Fixed"> <horstretch>0</horstretch> <verstretch>0</verstretch> </sizepolicy> </property> - <property name="minimumSize"> - <size> - <width>600</width> - <height>0</height> - </size> - </property> <property name="windowTitle"> <string>Barrier</string> </property> <widget class="QWidget" name="centralwidget"> <layout class="QVBoxLayout" name="verticalLayout_2"> + <property name="sizeConstraint"> + <enum>QLayout::SetFixedSize</enum> + </property> <item> <widget class="QGroupBox" name="m_pGroupServer"> <property name="sizePolicy"> @@ -67,30 +56,6 @@ </layout> </item> <item> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <widget class="QLabel" name="m_pLabelFingerprint"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="text"> - <string>SSL Fingerprint:</string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="m_pLabelLocalFingerprint"> - <property name="text"> - <string/> - </property> - </widget> - </item> - </layout> - </item> - <item> <widget class="QRadioButton" name="m_pRadioInternalConfig"> <property name="text"> <string>Configure interactively:</string> @@ -240,6 +205,107 @@ </widget> </item> <item> + <layout class="QHBoxLayout" name="horizontalLayout_3"> + <item> + <widget class="QLabel" name="m_pLabelFingerprint"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Maximum" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="text"> + <string>SSL Fingerprint:</string> + </property> + </widget> + </item> + <item> + <widget class="QLabel" name="m_pLabelLocalFingerprint"> + <property name="text"> + <string/> + </property> + <property name="textFormat"> + <enum>Qt::PlainText</enum> + </property> + </widget> + </item> + <item> + <widget class="QToolButton" name="toolbutton_show_fingerprint"> + <property name="text"> + <string>...</string> + </property> + <property name="arrowType"> + <enum>Qt::DownArrow</enum> + </property> + </widget> + </item> + </layout> + </item> + <item> + <widget class="QFrame" name="frame_fingerprint_details"> + <property name="frameShape"> + <enum>QFrame::StyledPanel</enum> + </property> + <property name="frameShadow"> + <enum>QFrame::Raised</enum> + </property> + <layout class="QGridLayout" name="gridLayout"> + <property name="sizeConstraint"> + <enum>QLayout::SetMinimumSize</enum> + </property> + <item row="1" column="1"> + <widget class="QLabel" name="label_sha256_randomart"> + <property name="font"> + <font> + <family>Courier</family> + </font> + </property> + <property name="text"> + <string/> + </property> + <property name="textInteractionFlags"> + <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> + </property> + </widget> + </item> + <item row="2" column="0" colspan="2"> + <widget class="QLabel" name="label_sha1"> + <property name="text"> + <string>SHA1 (deprecated, compare to old clients and servers only):</string> + </property> + </widget> + </item> + <item row="3" column="0" colspan="2"> + <widget class="QLabel" name="label_sha1_fingerprint_full"> + <property name="text"> + <string/> + </property> + <property name="textInteractionFlags"> + <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> + </property> + </widget> + </item> + <item row="0" column="0" colspan="2"> + <widget class="QLabel" name="label_sha256"> + <property name="text"> + <string>SHA256:</string> + </property> + </widget> + </item> + <item row="1" column="0"> + <widget class="QLabel" name="label_sha256_fingerprint_full"> + <property name="text"> + <string/> + </property> + <property name="textInteractionFlags"> + <set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set> + </property> + </widget> + </item> + </layout> + </widget> + </item> + <item> <layout class="QHBoxLayout" name="horizontalLayout"> <property name="sizeConstraint"> <enum>QLayout::SetDefaultConstraint</enum> @@ -253,7 +319,7 @@ <string/> </property> <property name="pixmap"> - <pixmap resource="Barrier.qrc">:/res/icons/16x16/padlock.png</pixmap> + <pixmap resource="../res/Barrier.qrc">:/res/icons/16x16/padlock.png</pixmap> </property> </widget> </item> @@ -388,7 +454,7 @@ </action> <action name="m_pActionShowLog"> <property name="text"> - <string>Show &Log</string> + <string>Show &Log</string> </property> <property name="toolTip"> <string>Show Log</string> @@ -399,7 +465,7 @@ </action> </widget> <resources> - <include location="Barrier.qrc"/> + <include location="../res/Barrier.qrc"/> </resources> <connections> <connection> diff --git a/src/gui/src/NewScreenWidget.cpp b/src/gui/src/NewScreenWidget.cpp index 0336249..28e99fa 100644 --- a/src/gui/src/NewScreenWidget.cpp +++ b/src/gui/src/NewScreenWidget.cpp @@ -1,12 +1,12 @@ -/* +/* * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -45,4 +45,3 @@ void NewScreenWidget::mousePressEvent(QMouseEvent* event) pDrag->exec(Qt::CopyAction, Qt::CopyAction); } - diff --git a/src/gui/src/NewScreenWidget.h b/src/gui/src/NewScreenWidget.h index 34f3269..6e52795 100644 --- a/src/gui/src/NewScreenWidget.h +++ b/src/gui/src/NewScreenWidget.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -37,4 +37,3 @@ class NewScreenWidget : public QLabel }; #endif - diff --git a/src/gui/src/QBarrierApplication.cpp b/src/gui/src/QBarrierApplication.cpp index f2da382..f9362c7 100644 --- a/src/gui/src/QBarrierApplication.cpp +++ b/src/gui/src/QBarrierApplication.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -38,8 +38,7 @@ QBarrierApplication::~QBarrierApplication() void QBarrierApplication::commitData(QSessionManager&) { - foreach(QWidget* widget, topLevelWidgets()) - { + for (QWidget* widget : topLevelWidgets()) { MainWindow* mainWindow = qobject_cast<MainWindow*>(widget); if (mainWindow) mainWindow->saveSettings(); diff --git a/src/gui/src/QBarrierApplication.h b/src/gui/src/QBarrierApplication.h index 95729b2..bd348b3 100644 --- a/src/gui/src/QBarrierApplication.h +++ b/src/gui/src/QBarrierApplication.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -44,4 +44,3 @@ class QBarrierApplication : public QApplication }; #endif - diff --git a/src/gui/src/QUtility.cpp b/src/gui/src/QUtility.cpp index 7757adf..2d05fc3 100644 --- a/src/gui/src/QUtility.cpp +++ b/src/gui/src/QUtility.cpp @@ -51,8 +51,7 @@ QString hash(const QString& string) QString getFirstMacAddress() { QString mac; - foreach (const QNetworkInterface &interface, QNetworkInterface::allInterfaces()) - { + for (const QNetworkInterface &interface : QNetworkInterface::allInterfaces()) { mac = interface.hardwareAddress(); if (mac.size() != 0) { diff --git a/src/gui/src/Screen.cpp b/src/gui/src/Screen.cpp index 38d02e8..1e3b888 100644 --- a/src/gui/src/Screen.cpp +++ b/src/gui/src/Screen.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -125,8 +125,9 @@ QTextStream& Screen::writeAliasesSection(QTextStream& outStream) const { outStream << "\t" << name() << ":" << endl; - foreach (const QString& alias, aliases()) + for (const QString& alias : aliases()) { outStream << "\t\t" << alias << endl; + } } return outStream; diff --git a/src/gui/src/Screen.h b/src/gui/src/Screen.h index d728af1..6496221 100644 --- a/src/gui/src/Screen.h +++ b/src/gui/src/Screen.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -101,10 +101,7 @@ class Screen : public BaseConfig bool m_Swapped; }; -typedef QList<Screen> ScreenList; - QDataStream& operator<<(QDataStream& outStream, const Screen& screen); QDataStream& operator>>(QDataStream& inStream, Screen& screen); #endif - diff --git a/src/gui/src/ScreenSettingsDialog.cpp b/src/gui/src/ScreenSettingsDialog.cpp index 123bb8a..9055e35 100644 --- a/src/gui/src/ScreenSettingsDialog.cpp +++ b/src/gui/src/ScreenSettingsDialog.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -152,4 +152,3 @@ void ScreenSettingsDialog::on_m_pListAliases_itemSelectionChanged() { m_pButtonRemoveAlias->setEnabled(!m_pListAliases->selectedItems().isEmpty()); } - diff --git a/src/gui/src/ScreenSettingsDialog.h b/src/gui/src/ScreenSettingsDialog.h index 1c525d2..953d1f8 100644 --- a/src/gui/src/ScreenSettingsDialog.h +++ b/src/gui/src/ScreenSettingsDialog.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -50,4 +50,3 @@ class ScreenSettingsDialog : public QDialog, public Ui::ScreenSettingsDialogBase }; #endif - diff --git a/src/gui/src/ScreenSetupModel.cpp b/src/gui/src/ScreenSetupModel.cpp index fce1a8c..5c933f8 100644 --- a/src/gui/src/ScreenSetupModel.cpp +++ b/src/gui/src/ScreenSetupModel.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -24,7 +24,7 @@ const QString ScreenSetupModel::m_MimeType = "application/x-qbarrier-screen"; -ScreenSetupModel::ScreenSetupModel(ScreenList& screens, int numColumns, int numRows) : +ScreenSetupModel::ScreenSetupModel(std::vector<Screen>& screens, int numColumns, int numRows) : QAbstractTableModel(NULL), m_Screens(screens), m_NumColumns(numColumns), @@ -71,7 +71,7 @@ Qt::ItemFlags ScreenSetupModel::flags(const QModelIndex& index) const if (!screen(index).isNull()) return Qt::ItemIsEnabled | Qt::ItemIsDragEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled; - return Qt::ItemIsDropEnabled; + return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled; } Qt::DropActions ScreenSetupModel::supportedDropActions() const @@ -91,9 +91,10 @@ QMimeData* ScreenSetupModel::mimeData(const QModelIndexList& indexes) const QDataStream stream(&encodedData, QIODevice::WriteOnly); - foreach (const QModelIndex& index, indexes) + for (const QModelIndex& index : indexes) { if (index.isValid()) stream << index.column() << index.row() << screen(index); + } pMimeData->setData(m_MimeType, encodedData); @@ -109,7 +110,7 @@ bool ScreenSetupModel::dropMimeData(const QMimeData* data, Qt::DropAction action return false; if (!parent.isValid() || row != -1 || column != -1) - return false; + return false; QByteArray encodedData = data->data(m_MimeType); QDataStream stream(&encodedData, QIODevice::ReadOnly); @@ -140,4 +141,3 @@ bool ScreenSetupModel::dropMimeData(const QMimeData* data, Qt::DropAction action return true; } - diff --git a/src/gui/src/ScreenSetupModel.h b/src/gui/src/ScreenSetupModel.h index ba46af3..0f558b4 100644 --- a/src/gui/src/ScreenSetupModel.h +++ b/src/gui/src/ScreenSetupModel.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -38,7 +38,7 @@ class ScreenSetupModel : public QAbstractTableModel friend class ServerConfigDialog; public: - ScreenSetupModel(ScreenList& screens, int numColumns, int numRows); + ScreenSetupModel(std::vector<Screen>& screens, int numColumns, int numRows); public: static const QString& mimeType() { return m_MimeType; } @@ -60,7 +60,7 @@ class ScreenSetupModel : public QAbstractTableModel Screen& screen(int column, int row) { return m_Screens[row * m_NumColumns + column]; } private: - ScreenList& m_Screens; + std::vector<Screen>& m_Screens; const int m_NumColumns; const int m_NumRows; @@ -68,4 +68,3 @@ class ScreenSetupModel : public QAbstractTableModel }; #endif - diff --git a/src/gui/src/ScreenSetupView.cpp b/src/gui/src/ScreenSetupView.cpp index 46e7099..5459f23 100644 --- a/src/gui/src/ScreenSetupView.cpp +++ b/src/gui/src/ScreenSetupView.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -30,6 +30,7 @@ ScreenSetupView::ScreenSetupView(QWidget* parent) : setDropIndicatorShown(true); setDragDropMode(DragDrop); setSelectionMode(SingleSelection); + setTabKeyNavigation(false); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); @@ -65,18 +66,83 @@ void ScreenSetupView::resizeEvent(QResizeEvent* event) event->ignore(); } +void ScreenSetupView::enter(const QModelIndex& index) +{ + if (!index.isValid()) + return; + Screen& screen = model()->screen(index); + if (screen.isNull()) + screen = Screen(tr("Unnamed")); + ScreenSettingsDialog dlg(this, &screen); + dlg.exec(); +} + +void ScreenSetupView::remove(const QModelIndex& index) +{ + if (!index.isValid()) + return; + Screen& screen = model()->screen(index); + if (!screen.isNull()) { + screen = Screen(); + emit dataChanged(index, index); + } +} + +void ScreenSetupView::keyPressEvent(QKeyEvent* event) +{ + if (event->key() == Qt::Key_Return || event->key() == Qt::Key_Delete) + { + QModelIndexList indexes = selectedIndexes(); + if (indexes.count() == 1 && indexes[0].isValid()) + { + if (event->key() == Qt::Key_Return) + enter(indexes[0]); + else if (event->key() == Qt::Key_Delete) + remove(indexes[0]); + } + // Do not let base handle the event, at least not for return key because it + // results in next esc/return key in the opened Screen Settings dialog not + // only closing that but also the parent Server Configuration dialog. + } + else if ((event->modifiers() & Qt::ControlModifier) + && (event->key() == Qt::Key_Left || event->key() == Qt::Key_Right + || event->key() == Qt::Key_Up || event->key() == Qt::Key_Down)) + { + QModelIndexList indexes = selectedIndexes(); + if (indexes.count() == 1 && indexes[0].isValid()) + { + const QModelIndex& fromIndex = indexes[0]; + QModelIndex toIndex; + + if (event->key() == Qt::Key_Left) + toIndex = fromIndex.sibling(fromIndex.row(), fromIndex.column() - 1); + else if (event->key() == Qt::Key_Right) + toIndex = fromIndex.sibling(fromIndex.row(), fromIndex.column() + 1); + else if (event->key() == Qt::Key_Up) + toIndex = fromIndex.sibling(fromIndex.row() - 1, fromIndex.column()); + else if (event->key() == Qt::Key_Down) + toIndex = fromIndex.sibling(fromIndex.row() + 1, fromIndex.column()); + + if (toIndex.isValid() && fromIndex != toIndex) + std::swap(model()->screen(fromIndex), model()->screen(toIndex)); + } + // In this case let base also handle the event, because it will proceed moving + // the selection to target, update the view according to model changes etc. + QTableView::keyPressEvent(event); + } + else + { + QTableView::keyPressEvent(event); + } +} + void ScreenSetupView::mouseDoubleClickEvent(QMouseEvent* event) { if (event->buttons() & Qt::LeftButton) { int col = columnAt(event->pos().x()); int row = rowAt(event->pos().y()); - - if (!model()->screen(col, row).isNull()) - { - ScreenSettingsDialog dlg(this, &model()->screen(col, row)); - dlg.exec(); - } + enter(model()->createIndex(row, col)); } else event->ignore(); @@ -159,4 +225,3 @@ QStyleOptionViewItem ScreenSetupView::viewOptions() const option.textElideMode = Qt::ElideMiddle; return option; } - diff --git a/src/gui/src/ScreenSetupView.h b/src/gui/src/ScreenSetupView.h index a660511..64968a0 100644 --- a/src/gui/src/ScreenSetupView.h +++ b/src/gui/src/ScreenSetupView.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -44,6 +44,7 @@ class ScreenSetupView : public QTableView protected: void mouseDoubleClickEvent(QMouseEvent*) override; + void keyPressEvent(QKeyEvent*) override; void setTableSize(); void resizeEvent(QResizeEvent*) override; void dragEnterEvent(QDragEnterEvent* event) override; @@ -51,7 +52,9 @@ class ScreenSetupView : public QTableView void startDrag(Qt::DropActions supportedActions) override; QStyleOptionViewItem viewOptions() const override; void scrollTo(const QModelIndex&, ScrollHint) override {} + private: + void enter(const QModelIndex&); + void remove(const QModelIndex&); }; #endif - diff --git a/src/gui/src/ServerConfig.cpp b/src/gui/src/ServerConfig.cpp index 9fedd1e..3392572 100644 --- a/src/gui/src/ServerConfig.cpp +++ b/src/gui/src/ServerConfig.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -183,7 +183,7 @@ void ServerConfig::loadSettings() settings().setArrayIndex(i); Hotkey h; h.loadSettings(settings()); - hotkeys().append(h); + hotkeys().push_back(h); } settings().endArray(); @@ -212,17 +212,19 @@ QTextStream& operator<<(QTextStream& outStream, const ServerConfig& config) { outStream << "section: screens" << endl; - foreach (const Screen& s, config.screens()) + for (const Screen& s : config.screens()) { if (!s.isNull()) s.writeScreensSection(outStream); + } outStream << "end" << endl << endl; outStream << "section: aliases" << endl; - foreach (const Screen& s, config.screens()) + for (const Screen& s : config.screens()) { if (!s.isNull()) s.writeAliasesSection(outStream); + } outStream << "end" << endl << endl; @@ -270,8 +272,9 @@ QTextStream& operator<<(QTextStream& outStream, const ServerConfig& config) outStream << "\t" << "switchCornerSize = " << config.switchCornerSize() << endl; - foreach(const Hotkey& hotkey, config.hotkeys()) + for (const Hotkey& hotkey : config.hotkeys()) { outStream << hotkey; + } outStream << "end" << endl << endl; @@ -282,9 +285,10 @@ int ServerConfig::numScreens() const { int rval = 0; - foreach(const Screen& s, screens()) + for (const Screen& s : screens()) { if (!s.isNull()) rval++; + } return rval; } diff --git a/src/gui/src/ServerConfig.h b/src/gui/src/ServerConfig.h index c9648b0..9f3e2db 100644 --- a/src/gui/src/ServerConfig.h +++ b/src/gui/src/ServerConfig.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -44,7 +44,7 @@ class ServerConfig : public BaseConfig ~ServerConfig(); public: - const ScreenList& screens() const { return m_Screens; } + const std::vector<Screen>& screens() const { return m_Screens; } int numColumns() const { return m_NumColumns; } int numRows() const { return m_NumRows; } bool hasHeartbeat() const { return m_HasHeartbeat; } @@ -59,7 +59,7 @@ class ServerConfig : public BaseConfig bool switchCorner(SwitchCorner c) const { return m_SwitchCorners[static_cast<int>(c)]; } int switchCornerSize() const { return m_SwitchCornerSize; } const QList<bool>& switchCorners() const { return m_SwitchCorners; } - const HotkeyList& hotkeys() const { return m_Hotkeys; } + const std::vector<Hotkey>& hotkeys() const { return m_Hotkeys; } bool ignoreAutoConfigClient() const { return m_IgnoreAutoConfigClient; } bool enableDragAndDrop() const { return m_EnableDragAndDrop; } bool clipboardSharing() const { return m_ClipboardSharing; } @@ -73,9 +73,9 @@ class ServerConfig : public BaseConfig protected: QSettings& settings() { return *m_pSettings; } - ScreenList& screens() { return m_Screens; } - void setScreens(const ScreenList& screens) { m_Screens = screens; } - void addScreen(const Screen& screen) { m_Screens.append(screen); } + std::vector<Screen>& screens() { return m_Screens; } + void setScreens(const std::vector<Screen>& screens) { m_Screens = screens; } + void addScreen(const Screen& screen) { m_Screens.push_back(screen); } void setNumColumns(int n) { m_NumColumns = n; } void setNumRows(int n) { m_NumRows = n; } void haveHeartbeat(bool on) { m_HasHeartbeat = on; } @@ -93,7 +93,7 @@ class ServerConfig : public BaseConfig void setEnableDragAndDrop(bool on) { m_EnableDragAndDrop = on; } void setClipboardSharing(bool on) { m_ClipboardSharing = on; } QList<bool>& switchCorners() { return m_SwitchCorners; } - HotkeyList& hotkeys() { return m_Hotkeys; } + std::vector<Hotkey>& hotkeys() { return m_Hotkeys; } void init(); int adjacentScreenIndex(int idx, int deltaColumn, int deltaRow) const; @@ -106,7 +106,7 @@ class ServerConfig : public BaseConfig private: QSettings* m_pSettings; - ScreenList m_Screens; + std::vector<Screen> m_Screens; int m_NumColumns; int m_NumRows; bool m_HasHeartbeat; @@ -120,7 +120,7 @@ class ServerConfig : public BaseConfig int m_SwitchDoubleTap; int m_SwitchCornerSize; QList<bool> m_SwitchCorners; - HotkeyList m_Hotkeys; + std::vector<Hotkey> m_Hotkeys; QString m_ServerName; bool m_IgnoreAutoConfigClient; bool m_EnableDragAndDrop; @@ -138,4 +138,3 @@ enum { }; #endif - diff --git a/src/gui/src/ServerConfigDialog.cpp b/src/gui/src/ServerConfigDialog.cpp index 2e7ffc9..84c2047 100644 --- a/src/gui/src/ServerConfigDialog.cpp +++ b/src/gui/src/ServerConfigDialog.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -60,8 +60,9 @@ ServerConfigDialog::ServerConfigDialog(QWidget* parent, ServerConfig& config, co m_pCheckBoxEnableClipboard->setChecked(serverConfig().clipboardSharing()); - foreach(const Hotkey& hotkey, serverConfig().hotkeys()) + for (const Hotkey& hotkey : serverConfig().hotkeys()) { m_pListHotkeys->addItem(hotkey.text()); + } m_pScreenSetupView->setModel(&m_ScreenSetupModel); @@ -75,7 +76,7 @@ void ServerConfigDialog::showEvent(QShowEvent* event) if (!m_Message.isEmpty()) { - // TODO: ideally this massage box should pop up after the dialog is shown + // TODO: ideally this message box should pop up after the dialog is shown QMessageBox::information(this, tr("Configure server"), m_Message); } } @@ -121,7 +122,7 @@ void ServerConfigDialog::on_m_pButtonNewHotkey_clicked() HotkeyDialog dlg(this, hotkey); if (dlg.exec() == QDialog::Accepted) { - serverConfig().hotkeys().append(hotkey); + serverConfig().hotkeys().push_back(hotkey); m_pListHotkeys->addItem(hotkey.text()); } } @@ -140,7 +141,7 @@ void ServerConfigDialog::on_m_pButtonRemoveHotkey_clicked() { int idx = m_pListHotkeys->currentRow(); Q_ASSERT(idx >= 0 && idx < serverConfig().hotkeys().size()); - serverConfig().hotkeys().removeAt(idx); + serverConfig().hotkeys().erase(serverConfig().hotkeys().begin() + idx); m_pListActions->clear(); delete m_pListHotkeys->item(idx); } @@ -168,8 +169,9 @@ void ServerConfigDialog::on_m_pListHotkeys_itemSelectionChanged() Q_ASSERT(idx >= 0 && idx < serverConfig().hotkeys().size()); const Hotkey& hotkey = serverConfig().hotkeys()[idx]; - foreach(const Action& action, hotkey.actions()) + for (const Action& action : hotkey.actions()) { m_pListActions->addItem(action.text()); + } } } @@ -183,7 +185,7 @@ void ServerConfigDialog::on_m_pButtonNewAction_clicked() ActionDialog dlg(this, serverConfig(), hotkey, action); if (dlg.exec() == QDialog::Accepted) { - hotkey.actions().append(action); + hotkey.appendAction(action); m_pListActions->addItem(action.text()); } } @@ -196,11 +198,13 @@ void ServerConfigDialog::on_m_pButtonEditAction_clicked() int idxAction = m_pListActions->currentRow(); Q_ASSERT(idxAction >= 0 && idxAction < hotkey.actions().size()); - Action& action = hotkey.actions()[idxAction]; + Action action = hotkey.actions()[idxAction]; ActionDialog dlg(this, serverConfig(), hotkey, action); - if (dlg.exec() == QDialog::Accepted) + if (dlg.exec() == QDialog::Accepted) { + hotkey.setAction(idxAction, action); m_pListActions->currentItem()->setText(action.text()); + } } void ServerConfigDialog::on_m_pButtonRemoveAction_clicked() @@ -212,7 +216,7 @@ void ServerConfigDialog::on_m_pButtonRemoveAction_clicked() int idxAction = m_pListActions->currentRow(); Q_ASSERT(idxAction >= 0 && idxAction < hotkey.actions().size()); - hotkey.actions().removeAt(idxAction); + hotkey.removeAction(idxAction); delete m_pListActions->currentItem(); } diff --git a/src/gui/src/ServerConfigDialog.h b/src/gui/src/ServerConfigDialog.h index 1ef17d1..91da51a 100644 --- a/src/gui/src/ServerConfigDialog.h +++ b/src/gui/src/ServerConfigDialog.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -63,4 +63,3 @@ class ServerConfigDialog : public QDialog, public Ui::ServerConfigDialogBase }; #endif - diff --git a/src/gui/src/SettingsDialog.cpp b/src/gui/src/SettingsDialog.cpp index 24bb86c..8d01c77 100644 --- a/src/gui/src/SettingsDialog.cpp +++ b/src/gui/src/SettingsDialog.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -48,8 +48,10 @@ SettingsDialog::SettingsDialog(QWidget* parent, AppConfig& config) : m_pLineEditLogFilename->setText(appConfig().logFilename()); setIndexFromItemData(m_pComboLanguage, appConfig().language()); m_pCheckBoxAutoHide->setChecked(appConfig().getAutoHide()); + m_pCheckBoxAutoStart->setChecked(appConfig().getAutoStart()); m_pCheckBoxMinimizeToTray->setChecked(appConfig().getMinimizeToTray()); m_pCheckBoxEnableCrypto->setChecked(m_appConfig.getCryptoEnabled()); + checkbox_require_client_certificate->setChecked(m_appConfig.getRequireClientCertificate()); #if defined(Q_OS_WIN) m_pComboElevate->setCurrentIndex(static_cast<int>(appConfig().elevateMode())); @@ -66,12 +68,14 @@ void SettingsDialog::accept() m_appConfig.setPort(m_pSpinBoxPort->value()); m_appConfig.setNetworkInterface(m_pLineEditInterface->text()); m_appConfig.setCryptoEnabled(m_pCheckBoxEnableCrypto->isChecked()); + m_appConfig.setRequireClientCertificate(checkbox_require_client_certificate->isChecked()); m_appConfig.setLogLevel(m_pComboLogLevel->currentIndex()); m_appConfig.setLogToFile(m_pCheckBoxLogToFile->isChecked()); m_appConfig.setLogFilename(m_pLineEditLogFilename->text()); m_appConfig.setLanguage(m_pComboLanguage->itemData(m_pComboLanguage->currentIndex()).toString()); m_appConfig.setElevateMode(static_cast<ElevateMode>(m_pComboElevate->currentIndex())); m_appConfig.setAutoHide(m_pCheckBoxAutoHide->isChecked()); + m_appConfig.setAutoStart(m_pCheckBoxAutoStart->isChecked()); m_appConfig.setMinimizeToTray(m_pCheckBoxMinimizeToTray->isChecked()); m_appConfig.saveSettings(); QDialog::accept(); diff --git a/src/gui/src/SettingsDialog.h b/src/gui/src/SettingsDialog.h index b733bcc..210b6c0 100644 --- a/src/gui/src/SettingsDialog.h +++ b/src/gui/src/SettingsDialog.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the diff --git a/src/gui/src/SettingsDialogBase.ui b/src/gui/src/SettingsDialogBase.ui index d75c18c..44ed98c 100644 --- a/src/gui/src/SettingsDialogBase.ui +++ b/src/gui/src/SettingsDialogBase.ui @@ -7,7 +7,7 @@ <x>0</x> <y>0</y> <width>368</width> - <height>380</height> + <height>428</height> </rect> </property> <property name="windowTitle"> @@ -126,6 +126,13 @@ </property> </widget> </item> + <item row="5" column="0"> + <widget class="QCheckBox" name="m_pCheckBoxAutoStart"> + <property name="text"> + <string>Start &Barrier on startup</string> + </property> + </widget> + </item> </layout> </widget> </item> @@ -135,6 +142,16 @@ <string>Networking</string> </property> <layout class="QGridLayout" name="gridLayout_3"> + <item row="1" column="0"> + <widget class="QLabel" name="m_pLabel_21"> + <property name="text"> + <string>&Address:</string> + </property> + <property name="buddy"> + <cstring>m_pLineEditInterface</cstring> + </property> + </widget> + </item> <item row="0" column="0"> <widget class="QLabel" name="m_pLabel_20"> <property name="text"> @@ -164,16 +181,6 @@ </property> </widget> </item> - <item row="1" column="0"> - <widget class="QLabel" name="m_pLabel_21"> - <property name="text"> - <string>&Address:</string> - </property> - <property name="buddy"> - <cstring>m_pLineEditInterface</cstring> - </property> - </widget> - </item> <item row="1" column="1"> <widget class="QLineEdit" name="m_pLineEditInterface"> <property name="enabled"> @@ -181,13 +188,20 @@ </property> </widget> </item> - <item row="2" column="0"> + <item row="2" column="0" colspan="2"> <widget class="QCheckBox" name="m_pCheckBoxEnableCrypto"> <property name="text"> <string>Enable &SSL</string> </property> </widget> </item> + <item row="3" column="0" colspan="2"> + <widget class="QCheckBox" name="checkbox_require_client_certificate"> + <property name="text"> + <string>Require client certificate</string> + </property> + </widget> + </item> </layout> </widget> </item> @@ -209,19 +223,20 @@ <bool>false</bool> </property> <layout class="QGridLayout" name="gridLayout_2"> - <item row="0" column="0"> - <widget class="QLabel" name="m_pLabel_3"> - <property name="minimumSize"> - <size> - <width>75</width> - <height>0</height> - </size> - </property> + <item row="1" column="0"> + <widget class="QCheckBox" name="m_pCheckBoxLogToFile"> <property name="text"> - <string>&Logging level:</string> + <string>Log to file:</string> </property> - <property name="buddy"> - <cstring>m_pComboLogLevel</cstring> + </widget> + </item> + <item row="1" column="2"> + <widget class="QPushButton" name="m_pButtonBrowseLog"> + <property name="enabled"> + <bool>false</bool> + </property> + <property name="text"> + <string>Browse...</string> </property> </widget> </item> @@ -264,10 +279,19 @@ </item> </widget> </item> - <item row="1" column="0"> - <widget class="QCheckBox" name="m_pCheckBoxLogToFile"> + <item row="0" column="0"> + <widget class="QLabel" name="m_pLabel_3"> + <property name="minimumSize"> + <size> + <width>75</width> + <height>0</height> + </size> + </property> <property name="text"> - <string>Log to file:</string> + <string>&Logging level:</string> + </property> + <property name="buddy"> + <cstring>m_pComboLogLevel</cstring> </property> </widget> </item> @@ -278,16 +302,6 @@ </property> </widget> </item> - <item row="1" column="2"> - <widget class="QPushButton" name="m_pButtonBrowseLog"> - <property name="enabled"> - <bool>false</bool> - </property> - <property name="text"> - <string>Browse...</string> - </property> - </widget> - </item> </layout> </widget> </item> @@ -322,6 +336,7 @@ <tabstop>m_pComboElevate</tabstop> <tabstop>m_pCheckBoxMinimizeToTray</tabstop> <tabstop>m_pCheckBoxAutoHide</tabstop> + <tabstop>m_pCheckBoxAutoStart</tabstop> <tabstop>m_pSpinBoxPort</tabstop> <tabstop>m_pLineEditInterface</tabstop> <tabstop>m_pCheckBoxEnableCrypto</tabstop> diff --git a/src/gui/src/SetupWizard.cpp b/src/gui/src/SetupWizard.cpp index 0cfdb81..262d63c 100644 --- a/src/gui/src/SetupWizard.cpp +++ b/src/gui/src/SetupWizard.cpp @@ -1,11 +1,11 @@ /* * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ - + #include "SetupWizard.h" #include "MainWindow.h" #include "QBarrierApplication.h" @@ -37,7 +37,7 @@ SetupWizard::SetupWizard(MainWindow& mainWindow, bool startMain) : #elif defined(Q_OS_WIN) - // when areo is disabled on windows, the next/back buttons + // when aero is disabled on windows, the next/back buttons // are hidden (must be a qt bug) -- resizing the window // to +1 of the original height seems to fix this. // NOTE: calling setMinimumSize after this will break @@ -58,7 +58,7 @@ SetupWizard::~SetupWizard() } bool SetupWizard::validateCurrentPage() -{ +{ QMessageBox message; message.setWindowTitle(tr("Setup Barrier")); message.setIcon(QMessageBox::Information); diff --git a/src/gui/src/SetupWizard.h b/src/gui/src/SetupWizard.h index 80e19e9..73223b2 100644 --- a/src/gui/src/SetupWizard.h +++ b/src/gui/src/SetupWizard.h @@ -1,11 +1,11 @@ /* * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the diff --git a/src/gui/src/ShutdownCh.h b/src/gui/src/ShutdownCh.h index 2462cae..54ec84d 100644 --- a/src/gui/src/ShutdownCh.h +++ b/src/gui/src/ShutdownCh.h @@ -19,4 +19,3 @@ // included in both the GUI and the child apps (server & client) const char ShutdownCh = 'S'; - diff --git a/src/gui/src/SslCertificate.cpp b/src/gui/src/SslCertificate.cpp index 80fdfc2..65ac08a 100644 --- a/src/gui/src/SslCertificate.cpp +++ b/src/gui/src/SslCertificate.cpp @@ -16,163 +16,111 @@ */ #include "SslCertificate.h" -#include "Fingerprint.h" #include "common/DataDirectories.h" +#include "base/finally.h" +#include "io/filesystem.h" +#include "net/FingerprintDatabase.h" +#include "net/SecureUtils.h" -#include <QProcess> -#include <QDir> -#include <QCoreApplication> - -static const char kCertificateLifetime[] = "365"; -static const char kCertificateSubjectInfo[] = "/CN=Barrier"; -static const char kCertificateFilename[] = "Barrier.pem"; -static const char kSslDir[] = "SSL"; -static const char kUnixOpenSslCommand[] = "openssl"; - -#if defined(Q_OS_WIN) -static const char kWinOpenSslBinary[] = "openssl.exe"; -static const char kConfigFile[] = "barrier.conf"; -#endif +#include <openssl/bio.h> +#include <openssl/err.h> +#include <openssl/evp.h> +#include <openssl/pem.h> +#include <openssl/x509.h> SslCertificate::SslCertificate(QObject *parent) : QObject(parent) { - m_ProfileDir = QString::fromStdString(DataDirectories::profile()); - if (m_ProfileDir.isEmpty()) { + if (barrier::DataDirectories::profile().empty()) { emit error(tr("Failed to get profile directory.")); } } -bool SslCertificate::runTool(const QStringList& args) +void SslCertificate::generateCertificate() { - QString program; -#if defined(Q_OS_WIN) - program = QCoreApplication::applicationDirPath(); - program.append("\\").append(kWinOpenSslBinary); -#else - program = kUnixOpenSslCommand; -#endif - - - QStringList environment; -#if defined(Q_OS_WIN) - environment << QString("OPENSSL_CONF=%1\\%2") - .arg(QCoreApplication::applicationDirPath()) - .arg(kConfigFile); -#endif - - QProcess process; - process.setEnvironment(environment); - process.start(program, args); - - bool success = process.waitForStarted(); - - QString standardError; - if (success && process.waitForFinished()) - { - m_ToolOutput = process.readAllStandardOutput().trimmed(); - standardError = process.readAllStandardError().trimmed(); - } + auto cert_path = barrier::DataDirectories::ssl_certificate_path(); + + if (!barrier::fs::exists(cert_path) || !is_certificate_valid(cert_path)) { + try { + auto cert_dir = cert_path.parent_path(); + if (!barrier::fs::exists(cert_dir)) { + barrier::fs::create_directories(cert_dir); + } + + barrier::generate_pem_self_signed_cert(cert_path.u8string()); + } catch (const std::exception& e) { + emit error(QString("SSL tool failed: %1").arg(e.what())); + return; + } - int code = process.exitCode(); - if (!success || code != 0) - { - emit error( - QString("SSL tool failed: %1\n\nCode: %2\nError: %3") - .arg(program) - .arg(process.exitCode()) - .arg(standardError.isEmpty() ? "Unknown" : standardError)); - return false; + emit info(tr("SSL certificate generated.")); } - return true; + generate_fingerprint(cert_path); + + emit generateFinished(); } -void SslCertificate::generateCertificate() +void SslCertificate::generate_fingerprint(const barrier::fs::path& cert_path) { - QString sslDirPath = QString("%1%2%3") - .arg(m_ProfileDir) - .arg(QDir::separator()) - .arg(kSslDir); - - QString filename = QString("%1%2%3") - .arg(sslDirPath) - .arg(QDir::separator()) - .arg(kCertificateFilename); - - QFile file(filename); - if (!file.exists()) { - QStringList arguments; - - // self signed certificate - arguments.append("req"); - arguments.append("-x509"); - arguments.append("-nodes"); - - // valide duration - arguments.append("-days"); - arguments.append(kCertificateLifetime); - - // subject information - arguments.append("-subj"); - - QString subInfo(kCertificateSubjectInfo); - arguments.append(subInfo); - - // private key - arguments.append("-newkey"); - arguments.append("rsa:2048"); - - QDir sslDir(sslDirPath); - if (!sslDir.exists()) { - sslDir.mkpath("."); + try { + auto local_path = barrier::DataDirectories::local_ssl_fingerprints_path(); + auto local_dir = local_path.parent_path(); + if (!barrier::fs::exists(local_dir)) { + barrier::fs::create_directories(local_dir); } - // key output filename - arguments.append("-keyout"); - arguments.append(filename); - - // certificate output filename - arguments.append("-out"); - arguments.append(filename); + barrier::FingerprintDatabase db; + db.add_trusted(barrier::get_pem_file_cert_fingerprint(cert_path.u8string(), + barrier::FingerprintType::SHA1)); + db.add_trusted(barrier::get_pem_file_cert_fingerprint(cert_path.u8string(), + barrier::FingerprintType::SHA256)); + db.write(local_path); - if (!runTool(arguments)) { - return; - } - - emit info(tr("SSL certificate generated.")); + emit info(tr("SSL fingerprint generated.")); + } catch (const std::exception& e) { + emit error(tr("Failed to find SSL fingerprint.") + e.what()); } - - generateFingerprint(filename); - - emit generateFinished(); } -void SslCertificate::generateFingerprint(const QString& certificateFilename) +bool SslCertificate::is_certificate_valid(const barrier::fs::path& path) { - QStringList arguments; - arguments.append("x509"); - arguments.append("-fingerprint"); - arguments.append("-sha1"); - arguments.append("-noout"); - arguments.append("-in"); - arguments.append(certificateFilename); - - if (!runTool(arguments)) { - return; + OpenSSL_add_all_algorithms(); + ERR_load_crypto_strings(); + + auto fp = barrier::fopen_utf8_path(path, "r"); + if (!fp) { + emit info(tr("Could not read from default certificate file.")); + return false; } + auto file_close = barrier::finally([fp]() { std::fclose(fp); }); - // find the fingerprint from the tool output - int i = m_ToolOutput.indexOf("="); - if (i != -1) { - i++; - QString fingerprint = m_ToolOutput.mid( - i, m_ToolOutput.size() - i); + auto* cert = PEM_read_X509(fp, nullptr, nullptr, nullptr); + if (!cert) { + emit info(tr("Error loading default certificate file to memory.")); + return false; + } + auto cert_free = barrier::finally([cert]() { X509_free(cert); }); - Fingerprint::local().trust(fingerprint, false); - emit info(tr("SSL fingerprint generated.")); + auto* pubkey = X509_get_pubkey(cert); + if (!pubkey) { + emit info(tr("Default certificate key file does not contain valid public key")); + return false; + } + auto pubkey_free = barrier::finally([pubkey]() { EVP_PKEY_free(pubkey); }); + + auto type = EVP_PKEY_type(EVP_PKEY_id(pubkey)); + if (type != EVP_PKEY_RSA && type != EVP_PKEY_DSA) { + emit info(tr("Public key in default certificate key file is not RSA or DSA")); + return false; } - else { - emit error(tr("Failed to find SSL fingerprint.")); + + auto bits = EVP_PKEY_bits(pubkey); + if (bits < 2048) { + // We could have small keys in old barrier installations + emit info(tr("Public key in default certificate key file is too small.")); + return false; } + + return true; } diff --git a/src/gui/src/SslCertificate.h b/src/gui/src/SslCertificate.h index 8b20913..eae7fd6 100644 --- a/src/gui/src/SslCertificate.h +++ b/src/gui/src/SslCertificate.h @@ -18,10 +18,12 @@ #pragma once #include <QObject> +#include <string> +#include "io/filesystem.h" class SslCertificate : public QObject { -Q_OBJECT + Q_OBJECT public: explicit SslCertificate(QObject *parent = 0); @@ -35,10 +37,7 @@ signals: void generateFinished(); private: - bool runTool(const QStringList& args); - void generateFingerprint(const QString& certificateFilename); + void generate_fingerprint(const barrier::fs::path& cert_path); -private: - QString m_ProfileDir; - QString m_ToolOutput; + bool is_certificate_valid(const barrier::fs::path& path); }; diff --git a/src/gui/src/TrashScreenWidget.cpp b/src/gui/src/TrashScreenWidget.cpp index 42a9d56..6f2abad 100644 --- a/src/gui/src/TrashScreenWidget.cpp +++ b/src/gui/src/TrashScreenWidget.cpp @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -40,4 +40,3 @@ void TrashScreenWidget::dropEvent(QDropEvent* event) else event->ignore(); } - diff --git a/src/gui/src/TrashScreenWidget.h b/src/gui/src/TrashScreenWidget.h index 7ab887e..967f73d 100644 --- a/src/gui/src/TrashScreenWidget.h +++ b/src/gui/src/TrashScreenWidget.h @@ -2,11 +2,11 @@ * barrier -- mouse and keyboard sharing utility * Copyright (C) 2012-2016 Symless Ltd. * Copyright (C) 2008 Volker Lanz (vl@fidra.de) - * + * * This package is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * found in the file LICENSE that should have accompanied this file. - * + * * This package is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @@ -39,4 +39,3 @@ class TrashScreenWidget : public QLabel }; #endif - diff --git a/src/gui/src/ZeroconfService.cpp b/src/gui/src/ZeroconfService.cpp index 02902ee..fbb0ea1 100644 --- a/src/gui/src/ZeroconfService.cpp +++ b/src/gui/src/ZeroconfService.cpp @@ -66,7 +66,7 @@ ZeroconfService::ZeroconfService(MainWindow* mainWindow) : m_ServiceRegistered(false)
{
silence_avahi_warning();
- if (m_pMainWindow->barrierType() == MainWindow::barrierServer) {
+ if (m_pMainWindow->barrier_type() == BarrierType::Server) {
if (registerService(true)) {
m_pZeroconfBrowser = new ZeroconfBrowser(this);
connect(m_pZeroconfBrowser, SIGNAL(
@@ -101,7 +101,7 @@ ZeroconfService::~ZeroconfService() void ZeroconfService::serverDetected(const QList<ZeroconfRecord>& list)
{
- foreach (ZeroconfRecord record, list) {
+ for (ZeroconfRecord record : list) {
registerService(false);
m_pMainWindow->appendLogInfo(tr("zeroconf server detected: %1").arg(
record.serviceName));
@@ -111,7 +111,7 @@ void ZeroconfService::serverDetected(const QList<ZeroconfRecord>& list) void ZeroconfService::clientDetected(const QList<ZeroconfRecord>& list)
{
- foreach (ZeroconfRecord record, list) {
+ for (ZeroconfRecord record : list) {
m_pMainWindow->appendLogInfo(tr("zeroconf client detected: %1").arg(
record.serviceName));
m_pMainWindow->autoAddScreen(record.serviceName);
@@ -127,15 +127,15 @@ void ZeroconfService::errorHandle(DNSServiceErrorType errorCode) QString ZeroconfService::getLocalIPAddresses()
{
QStringList addresses;
- foreach (const QHostAddress& address, QNetworkInterface::allAddresses()) {
+ for (const QHostAddress& address : QNetworkInterface::allAddresses()) {
if (address.protocol() == QAbstractSocket::IPv4Protocol &&
address != QHostAddress(QHostAddress::LocalHost)) {
addresses.append(address.toString());
}
}
- foreach (const QString& preferedIP, preferedIPAddress) {
- foreach (const QString& address, addresses) {
+ for (const QString& preferedIP : preferedIPAddress) {
+ for (const QString& address : addresses) {
if (address.startsWith(preferedIP)) {
return address;
}
diff --git a/src/gui/src/main.cpp b/src/gui/src/main.cpp index 73251d5..776b44d 100644 --- a/src/gui/src/main.cpp +++ b/src/gui/src/main.cpp @@ -97,6 +97,12 @@ int main(int argc, char* argv[]) QApplication::setQuitOnLastWindowClosed(false); + if (QGuiApplication::platformName() == "wayland") { + QMessageBox::warning( + NULL, "Barrier", + "You are using wayland session, which is currently not fully supported by Barrier."); + } + QSettings settings; AppConfig appConfig (&settings); diff --git a/src/gui/test/HotkeyTests.cpp b/src/gui/test/HotkeyTests.cpp new file mode 100644 index 0000000..7607dfb --- /dev/null +++ b/src/gui/test/HotkeyTests.cpp @@ -0,0 +1,320 @@ +/* barrier -- mouse and keyboard sharing utility + Copyright (C) 2021 Povilas Kanapickas <povilas@radix.lt> + + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + found in the file LICENSE that should have accompanied this file. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + + +#include "../src/Hotkey.h" +#include <gtest/gtest.h> +#include "Utils.h" + +#include <QtCore/QSettings> +#include <QtCore/QTextStream> + +struct TestAction +{ + Action::ActionType type = Action::keyDown; + std::vector<TestKey> keys; + std::vector<std::string> type_screen_names; + std::string screen_name; + Action::SwitchDirection switch_direction; + Action::LockCursorMode lock_cursor_mode; + + static TestAction createKeyAction(Action::ActionType type, const std::vector<TestKey>& keys, + const std::vector<std::string>& type_screen_names = {}) + { + TestAction action; + action.type = Action::keyDown; + action.keys = keys; + action.type_screen_names = type_screen_names; + return action; + } + + static TestAction createKeyDown(const std::vector<TestKey>& keys, + const std::vector<std::string>& type_screen_names = {}) + { + return createKeyAction(Action::keyDown, keys, type_screen_names); + } + + static TestAction createKeyUp(const std::vector<TestKey>& keys, + const std::vector<std::string>& type_screen_names = {}) + { + return createKeyAction(Action::keyUp, keys, type_screen_names); + } + + static TestAction createKeyStroke(const std::vector<TestKey>& keys, + const std::vector<std::string>& type_screen_names = {}) + { + return createKeyAction(Action::keystroke, keys, type_screen_names); + } + + static TestAction createSwitchToScreen(const std::string& screen_name) + { + TestAction action; + action.type = Action::switchToScreen; + action.screen_name = screen_name; + return action; + } + + static TestAction createToggleScreen() + { + TestAction action; + action.type = Action::toggleScreen; + return action; + } + + static TestAction createSwitchInDirection(Action::SwitchDirection switch_direction) + { + TestAction action; + action.type = Action::switchInDirection; + action.switch_direction = switch_direction; + return action; + } + + static TestAction createLockCursorToScreen(Action::LockCursorMode lock_cursor_mode) + { + TestAction action; + action.type = Action::lockCursorToScreen; + action.lock_cursor_mode = lock_cursor_mode; + return action; + } +}; + +struct TestHotKey +{ + std::vector<TestKey> keys; + std::vector<TestAction> actions; +}; + +namespace { + + Action createAction(const TestAction& test_action) + { + Action action; + action.setType(test_action.type); + + switch (test_action.type) { + case Action::keyDown: + case Action::keyUp: + case Action::keystroke: { + KeySequence sequence; + for (auto key : test_action.keys) { + sequence.appendKey(key.key, key.modifier); + } + action.setKeySequence(sequence); + for (const auto& type_screen_name : test_action.type_screen_names) { + action.appendTypeScreenName(QString::fromStdString(type_screen_name)); + } + break; + } + case Action::switchToScreen: + action.setSwitchScreenName(QString::fromStdString(test_action.screen_name)); + break; + case Action::toggleScreen: + break; + case Action::switchInDirection: + action.setSwitchDirection(test_action.switch_direction); + break; + case Action::lockCursorToScreen: + action.setLockCursorMode(test_action.lock_cursor_mode); + break; + } + return action; + } + + Hotkey createHotkey(const TestHotKey& test_hotkey) + { + Hotkey hotkey; + KeySequence sequence; + for (auto key : test_hotkey.keys) { + sequence.appendKey(key.key, key.modifier); + } + hotkey.setKeySequence(sequence); + + for (auto action : test_hotkey.actions) { + hotkey.appendAction(createAction(action)); + } + return hotkey; + } + + std::string hotkeyToStringViaTextStream(const Hotkey& hotkey) + { + QString result; + QTextStream stream{&result}; + stream << hotkey; + return result.toStdString(); + } +} // namespace + +void doHotkeyLoadSaveTest(const TestHotKey& test_hotkey) +{ + auto filename = getTemporaryFilename(); + + Hotkey hotkey_before, hotkey_after; + { + QSettings settings(filename, QSettings::NativeFormat); + + hotkey_before = createHotkey(test_hotkey); + + settings.beginGroup("test"); + hotkey_before.saveSettings(settings); + settings.endGroup(); + } + { + QSettings settings(filename, QSettings::NativeFormat); + + settings.beginGroup("test"); + hotkey_after.loadSettings(settings); + settings.endGroup(); + + ASSERT_EQ(hotkey_before.keySequence().sequence(), hotkey_after.keySequence().sequence()); + ASSERT_EQ(hotkey_before.keySequence().modifiers(), hotkey_after.keySequence().modifiers()); + + const auto& actions_before = hotkey_before.actions(); + const auto& actions_after = hotkey_after.actions(); + + ASSERT_EQ(actions_before.size(), actions_after.size()); + for (int i = 0; i < actions_before.size(); ++i) { + const auto& action_before = actions_before[i]; + const auto& action_after = actions_after[i]; + + ASSERT_EQ(action_before.keySequence().sequence(), action_after.keySequence().sequence()); + ASSERT_EQ(action_before.keySequence().modifiers(), action_after.keySequence().modifiers()); + ASSERT_EQ(action_before.type(), action_after.type()); + ASSERT_EQ(action_before.typeScreenNames(), action_after.typeScreenNames()); + ASSERT_EQ(action_before.switchScreenName(), action_after.switchScreenName()); + ASSERT_EQ(action_before.switchDirection(), action_after.switchDirection()); + ASSERT_EQ(action_before.lockCursorMode(), action_after.lockCursorMode()); + ASSERT_EQ(action_before.activeOnRelease(), action_after.activeOnRelease()); + ASSERT_EQ(action_before.haveScreens(), action_after.haveScreens()); + } + } + + QFile::remove(filename); +} + +TEST(HotkeyLoadSaveTests, Empty) +{ + TestHotKey hotkey; + doHotkeyLoadSaveTest(hotkey); +} + +TEST(HotkeyLoadSaveTests, KeysNoActions) +{ + TestHotKey hotkey = {{{Qt::Key_A, Qt::NoModifier}, {Qt::Key_B, Qt::NoModifier}}, {}}; + doHotkeyLoadSaveTest(hotkey); +} + +TEST(HotkeyLoadSaveTests, CommaKeyNoActions) +{ + TestHotKey hotkey = { + { + {Qt::Key_A, Qt::NoModifier}, + {Qt::Key_Comma, Qt::NoModifier}, + {Qt::Key_B, Qt::NoModifier} + }, {}}; + doHotkeyLoadSaveTest(hotkey); +} + +TEST(HotkeyLoadSaveTests, KeysSingleAction) +{ + TestHotKey hotkey = { + { + {Qt::Key_A, Qt::NoModifier}, + {Qt::Key_B, Qt::NoModifier} + }, + { + TestAction::createKeyDown({{Qt::Key_Z, Qt::NoModifier}}) + } + }; + doHotkeyLoadSaveTest(hotkey); +} + +TEST(HotkeyLoadSaveTests, KeysMultipleAction) +{ + TestHotKey hotkey = { + { + {Qt::Key_A, Qt::NoModifier}, + {Qt::Key_B, Qt::NoModifier} + }, + { + TestAction::createKeyDown({{Qt::Key_Z, Qt::NoModifier}}), + TestAction::createSwitchToScreen("test_screen") + } + }; + doHotkeyLoadSaveTest(hotkey); +} + +TEST(HotkeyToTexStreamTests, Empty) +{ + TestHotKey hotkey; + ASSERT_EQ(hotkeyToStringViaTextStream(createHotkey(hotkey)), ""); +} + +TEST(HotkeyToTexStreamTests, KeysNoActions) +{ + TestHotKey hotkey = { + { + {Qt::Key_A, Qt::NoModifier}, + {Qt::Key_B, Qt::NoModifier} + }, + {} + }; + ASSERT_EQ(hotkeyToStringViaTextStream(createHotkey(hotkey)), ""); +} + +TEST(HotkeyToTexStreamTests, KeysSingleAction) +{ + TestHotKey hotkey = { + { + {Qt::Key_A, Qt::NoModifier}, + {Qt::Key_B, Qt::NoModifier} + }, + {} + }; + ASSERT_EQ(hotkeyToStringViaTextStream(createHotkey(hotkey)), ""); +} + + +TEST(HotkeyToTexStreamTests, KeysCommaSingleAction) +{ + TestHotKey hotkey = { + { + {Qt::Key_A, Qt::NoModifier}, + {Qt::Key_Comma, Qt::NoModifier}, + {Qt::Key_B, Qt::NoModifier} + }, + { + TestAction::createKeyDown({{Qt::Key_Z, Qt::NoModifier}}) + } + }; + ASSERT_EQ(hotkeyToStringViaTextStream(createHotkey(hotkey)), + "\tkeystroke(a+Comma+b) = keyDown(z,*)\n"); +} + +TEST(HotkeyToTexStreamTests, KeysMultipleAction) +{ + TestHotKey hotkey = { + { + {Qt::Key_A, Qt::NoModifier}, + {Qt::Key_B, Qt::NoModifier} + }, + { + TestAction::createKeyDown({{Qt::Key_Z, Qt::NoModifier}}), + TestAction::createSwitchToScreen("test_screen") + } + }; + ASSERT_EQ(hotkeyToStringViaTextStream(createHotkey(hotkey)), + "\tkeystroke(a+b) = keyDown(z,*), switchToScreen(test_screen)\n"); +} diff --git a/src/gui/test/KeySequenceTests.cpp b/src/gui/test/KeySequenceTests.cpp new file mode 100644 index 0000000..9fa9273 --- /dev/null +++ b/src/gui/test/KeySequenceTests.cpp @@ -0,0 +1,145 @@ +/* barrier -- mouse and keyboard sharing utility + Copyright (C) 2021 Povilas Kanapickas <povilas@radix.lt> + + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + found in the file LICENSE that should have accompanied this file. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "../src/KeySequence.h" +#include "Utils.h" +#include <gtest/gtest.h> +#include <cstdio> + +#include <QtCore/QFile> +#include <QtCore/QSettings> +#include <QtCore/QTemporaryFile> + +namespace { + + auto s_key_sequence_test_keys = { + Qt::Key_Space, + Qt::Key_Escape, + Qt::Key_Tab, + Qt::Key_Backtab, + Qt::Key_Backspace, + Qt::Key_Return, + Qt::Key_Insert, + Qt::Key_Delete, + Qt::Key_Pause, + Qt::Key_Print, + Qt::Key_SysReq, + Qt::Key_Home, + Qt::Key_End, + Qt::Key_Left, + Qt::Key_Up, + Qt::Key_Right, + Qt::Key_Down, + Qt::Key_Comma, + Qt::Key_Semicolon, + Qt::Key_PageUp, + Qt::Key_PageDown, + Qt::Key_CapsLock, + Qt::Key_NumLock, + Qt::Key_ScrollLock, + Qt::Key_Help, + Qt::Key_Enter, + Qt::Key_Clear, + Qt::Key_Back, + Qt::Key_Forward, + Qt::Key_Stop, + Qt::Key_Refresh, + Qt::Key_VolumeDown, + Qt::Key_VolumeMute, + Qt::Key_VolumeUp, + Qt::Key_MediaPlay, + Qt::Key_MediaStop, + Qt::Key_MediaPrevious, + Qt::Key_MediaNext, + Qt::Key_HomePage, + Qt::Key_Favorites, + Qt::Key_Search, + Qt::Key_Standby, + Qt::Key_LaunchMail, + Qt::Key_LaunchMedia, + Qt::Key_Launch0, + Qt::Key_Launch1, + Qt::Key_Select, + }; + + std::string keySequenceToString(const std::vector<TestKey>& key_pairs) + { + KeySequence sequence; + for (auto key_pair : key_pairs) { + sequence.appendKey(key_pair.key, key_pair.modifier); + } + return sequence.toString().toStdString(); + } +} // namespace + +class KeySequenceLoadSaveTestFixture : + public ::testing::TestWithParam<Qt::Key> {}; + +TEST_P(KeySequenceLoadSaveTestFixture, SupportsSpecialSymbols) +{ + int key = GetParam(); + + auto filename = getTemporaryFilename(); + + { + QSettings settings(filename, QSettings::NativeFormat); + KeySequence sequence; + + sequence.appendKey(key, 0); + sequence.appendKey(key, 0); + settings.beginGroup("test"); + sequence.saveSettings(settings); + settings.endGroup(); + } + { + QSettings settings(filename, QSettings::NativeFormat); + KeySequence sequence; + + settings.beginGroup("test"); + sequence.loadSettings(settings); + settings.endGroup(); + + const auto& data = sequence.sequence(); + ASSERT_EQ(data.size(), 2); + ASSERT_EQ(data[0], key); + ASSERT_EQ(data[1], key); + } + + QFile::remove(filename); +} + +INSTANTIATE_TEST_CASE_P( + KeySequenceLoadSaveTests, + KeySequenceLoadSaveTestFixture, + ::testing::ValuesIn(s_key_sequence_test_keys)); + +TEST(KeySequenceTests, ToString) +{ + ASSERT_EQ(keySequenceToString({{Qt::Key_Menu, Qt::MetaModifier}}), + "Meta"); + ASSERT_EQ(keySequenceToString({{Qt::Key_A, 0}, {Qt::Key_B, 0}}), + "a+b"); + ASSERT_EQ(keySequenceToString({{Qt::Key_A, 0}, {Qt::Key_Comma, 0}, {Qt::Key_B, 0}}), + "a+Comma+b"); + ASSERT_EQ(keySequenceToString({{Qt::Key_A, 0}, {Qt::Key_Semicolon, 0}, {Qt::Key_B, 0}}), + "a+Semicolon+b"); + ASSERT_EQ(keySequenceToString({{Qt::Key_A, 0}, {Qt::Key_Shift, Qt::ShiftModifier}, + {Qt::Key_0, Qt::ShiftModifier}}), + "a+Shift+0"); + ASSERT_EQ(keySequenceToString({{Qt::Key_A, 0}, {Qt::Key_Control, Qt::ControlModifier}, + {Qt::Key_0, Qt::ControlModifier}}), + "a+Control+0"); +} diff --git a/src/gui/test/Utils.h b/src/gui/test/Utils.h new file mode 100644 index 0000000..da66ce7 --- /dev/null +++ b/src/gui/test/Utils.h @@ -0,0 +1,38 @@ +/* barrier -- mouse and keyboard sharing utility + Copyright (C) 2021 Povilas Kanapickas <povilas@radix.lt> + + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + found in the file LICENSE that should have accompanied this file. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef BARRIER_GUI_TEST_UTILS_H +#define BARRIER_GUI_TEST_UTILS_H + +#include <QtCore/QFile> +#include <QtCore/QTemporaryFile> + +struct TestKey +{ + int key = 0; + int modifier = Qt::NoModifier; + + TestKey(int key, int modifier) : key{key}, modifier{modifier} {} +}; + +inline QString getTemporaryFilename() +{ + QTemporaryFile temp_file; + temp_file.open(); + return temp_file.fileName(); +} + +#endif // BARRIER_GUI_TEST_UTILS_H diff --git a/src/gui/test/main.cpp b/src/gui/test/main.cpp new file mode 100644 index 0000000..b57dd76 --- /dev/null +++ b/src/gui/test/main.cpp @@ -0,0 +1,23 @@ +/* barrier -- mouse and keyboard sharing utility + Copyright (C) 2021 Povilas Kanapickas <povilas@radix.lt> + + This package is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + found in the file LICENSE that should have accompanied this file. + + This package is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <gtest/gtest.h> + +int main(int argc, char **argv) +{ + testing::InitGoogleTest(&argc, argv); + return (RUN_ALL_TESTS() == 1) ? 1 : 0; +} |
