From 3ccf3d17e49ed2436a53bbdb8dd9ad763cf6578e Mon Sep 17 00:00:00 2001 From: Andrew Nelless Date: Tue, 5 Sep 2017 20:21:22 +0100 Subject: [PATCH] Revert "Removed v1 legacy config UI" This reverts commit 956f071f208dc16622fe5573c9ca65f60e64b319. --- src/CMakeLists.txt | 4 +- src/gui/CMakeLists.txt | 46 + src/gui/gui.pro | 162 ++ src/gui/gui.ts | 1407 +++++++++++++++ src/gui/lang.cmd | 1 + src/gui/langbuild.cmd | 2 + src/gui/res/Synergy.qrc | 58 + src/gui/res/icons/16x16/money.png | Bin 0 -> 738 bytes src/gui/res/icons/16x16/padlock.png | Bin 0 -> 450 bytes src/gui/res/icons/16x16/synergy-connected.png | Bin 0 -> 651 bytes src/gui/res/icons/16x16/synergy-connected.psd | Bin 0 -> 29740 bytes .../res/icons/16x16/synergy-disconnected.png | Bin 0 -> 442 bytes .../res/icons/16x16/synergy-disconnected.psd | Bin 0 -> 32764 bytes .../res/icons/16x16/synergy-transfering.png | Bin 0 -> 15542 bytes src/gui/res/icons/16x16/warning.png | Bin 0 -> 693 bytes src/gui/res/icons/256x256/synergy.ico | Bin 0 -> 109617 bytes src/gui/res/icons/64x64/user-trash.png | Bin 0 -> 3815 bytes src/gui/res/icons/64x64/video-display.png | Bin 0 -> 2579 bytes src/gui/res/image/about.png | Bin 0 -> 2267 bytes src/gui/res/image/spinning-wheel.gif | Bin 0 -> 9689 bytes src/gui/res/lang/Languages.xml | 46 + src/gui/res/lang/gui_af-ZA.qm | 1 + src/gui/res/lang/gui_af-ZA.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_ar.qm | Bin 0 -> 7606 bytes src/gui/res/lang/gui_ar.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_bg-BG.qm | Bin 0 -> 21881 bytes src/gui/res/lang/gui_bg-BG.ts | 1410 +++++++++++++++ src/gui/res/lang/gui_ca-AD.qm | Bin 0 -> 23075 bytes src/gui/res/lang/gui_ca-AD.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_cs-CZ.qm | Bin 0 -> 22885 bytes src/gui/res/lang/gui_cs-CZ.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_cy.qm | Bin 0 -> 15069 bytes src/gui/res/lang/gui_cy.ts | 1407 +++++++++++++++ src/gui/res/lang/gui_da.qm | Bin 0 -> 22064 bytes src/gui/res/lang/gui_da.ts | 1410 +++++++++++++++ src/gui/res/lang/gui_de.qm | Bin 0 -> 23630 bytes src/gui/res/lang/gui_de.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_es.qm | Bin 0 -> 23608 bytes src/gui/res/lang/gui_es.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_et-EE.qm | Bin 0 -> 21523 bytes src/gui/res/lang/gui_et-EE.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_fi.qm | Bin 0 -> 21784 bytes src/gui/res/lang/gui_fi.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_fr.qm | Bin 0 -> 23634 bytes src/gui/res/lang/gui_fr.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_gl.qm | Bin 0 -> 3447 bytes src/gui/res/lang/gui_gl.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_grk.qm | Bin 0 -> 4629 bytes src/gui/res/lang/gui_grk.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_he.qm | Bin 0 -> 13575 bytes src/gui/res/lang/gui_he.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_hi.qm | Bin 0 -> 23 bytes src/gui/res/lang/gui_hi.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_hr-HR.qm | Bin 0 -> 20485 bytes src/gui/res/lang/gui_hr-HR.ts | 1408 +++++++++++++++ src/gui/res/lang/gui_hu-HU.qm | Bin 0 -> 18573 bytes src/gui/res/lang/gui_hu-HU.ts | 1407 +++++++++++++++ src/gui/res/lang/gui_id.qm | Bin 0 -> 4680 bytes src/gui/res/lang/gui_id.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_is-IS.qm | 1 + src/gui/res/lang/gui_is-IS.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_it.qm | Bin 0 -> 21855 bytes src/gui/res/lang/gui_it.ts | 1408 +++++++++++++++ src/gui/res/lang/gui_ja-JP.qm | Bin 0 -> 17379 bytes src/gui/res/lang/gui_ja-JP.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_ko.qm | Bin 0 -> 18395 bytes src/gui/res/lang/gui_ko.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_lt.qm | Bin 0 -> 2228 bytes src/gui/res/lang/gui_lt.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_lv.qm | Bin 0 -> 1234 bytes src/gui/res/lang/gui_lv.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_mr.qm | Bin 0 -> 3637 bytes src/gui/res/lang/gui_mr.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_nl-NL.qm | Bin 0 -> 22477 bytes src/gui/res/lang/gui_nl-NL.ts | 1410 +++++++++++++++ src/gui/res/lang/gui_no.qm | Bin 0 -> 21716 bytes src/gui/res/lang/gui_no.ts | 1412 ++++++++++++++++ src/gui/res/lang/gui_pes-IR.qm | Bin 0 -> 1070 bytes src/gui/res/lang/gui_pes-IR.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_pl-PL.qm | Bin 0 -> 22465 bytes src/gui/res/lang/gui_pl-PL.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_pt-BR.qm | Bin 0 -> 22443 bytes src/gui/res/lang/gui_pt-BR.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_pt-PT.qm | Bin 0 -> 21258 bytes src/gui/res/lang/gui_pt-PT.ts | 1407 +++++++++++++++ src/gui/res/lang/gui_ro.qm | Bin 0 -> 19806 bytes src/gui/res/lang/gui_ro.ts | 1407 +++++++++++++++ src/gui/res/lang/gui_ru.qm | Bin 0 -> 22329 bytes src/gui/res/lang/gui_ru.ts | 1414 ++++++++++++++++ src/gui/res/lang/gui_si.qm | Bin 0 -> 677 bytes src/gui/res/lang/gui_si.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_sk-SK.qm | Bin 0 -> 1187 bytes src/gui/res/lang/gui_sk-SK.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_sl-SI.qm | Bin 0 -> 1709 bytes src/gui/res/lang/gui_sl-SI.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_sq-AL.qm | Bin 0 -> 20251 bytes src/gui/res/lang/gui_sq-AL.ts | 1408 +++++++++++++++ src/gui/res/lang/gui_sr.qm | Bin 0 -> 117 bytes src/gui/res/lang/gui_sr.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_sv.qm | Bin 0 -> 22156 bytes src/gui/res/lang/gui_sv.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_th-TH.qm | Bin 0 -> 3721 bytes src/gui/res/lang/gui_th-TH.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_tr-TR.qm | Bin 0 -> 20445 bytes src/gui/res/lang/gui_tr-TR.ts | 1410 +++++++++++++++ src/gui/res/lang/gui_uk.qm | Bin 0 -> 22693 bytes src/gui/res/lang/gui_uk.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_ur.qm | Bin 0 -> 1316 bytes src/gui/res/lang/gui_ur.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_vi.qm | Bin 0 -> 5101 bytes src/gui/res/lang/gui_vi.ts | 1405 +++++++++++++++ src/gui/res/lang/gui_zh-CN.qm | Bin 0 -> 16197 bytes src/gui/res/lang/gui_zh-CN.ts | 1411 +++++++++++++++ src/gui/res/lang/gui_zh-TW.qm | Bin 0 -> 16331 bytes src/gui/res/lang/gui_zh-TW.ts | 1414 ++++++++++++++++ src/gui/res/mac/Info.plist | 28 + src/gui/res/mac/QSynergy.icns | Bin 0 -> 124558 bytes src/gui/res/win/Synergy.rc | 1 + src/gui/src/AboutDialog.cpp | 49 + src/gui/src/AboutDialog.h | 43 + src/gui/src/AboutDialogBase.ui | 223 +++ src/gui/src/Action.cpp | 150 ++ src/gui/src/Action.h | 89 + src/gui/src/ActionDialog.cpp | 109 ++ src/gui/src/ActionDialog.h | 56 + src/gui/src/ActionDialogBase.ui | 581 +++++++ src/gui/src/ActivationDialog.cpp | 123 ++ src/gui/src/ActivationDialog.h | 35 + src/gui/src/ActivationDialog.ui | 163 ++ src/gui/src/ActivationNotifier.cpp | 60 + src/gui/src/ActivationNotifier.h | 47 + src/gui/src/AddClientDialog.cpp | 129 ++ src/gui/src/AddClientDialog.h | 68 + src/gui/src/AddClientDialogBase.ui | 144 ++ src/gui/src/AppConfig.cpp | 293 ++++ src/gui/src/AppConfig.h | 159 ++ src/gui/src/BaseConfig.cpp | 46 + src/gui/src/BaseConfig.h | 91 + src/gui/src/CancelActivationDialog.cpp | 14 + src/gui/src/CancelActivationDialog.h | 22 + src/gui/src/CancelActivationDialog.ui | 89 + src/gui/src/CommandProcess.cpp | 63 + src/gui/src/CommandProcess.h | 43 + src/gui/src/CoreInterface.cpp | 96 ++ src/gui/src/CoreInterface.h | 36 + src/gui/src/DataDownloader.cpp | 58 + src/gui/src/DataDownloader.h | 53 + src/gui/src/ElevateMode.h | 41 + src/gui/src/FailedLoginDialog.cpp | 15 + src/gui/src/FailedLoginDialog.h | 23 + src/gui/src/FailedLoginDialog.ui | 108 ++ src/gui/src/Fingerprint.cpp | 149 ++ src/gui/src/Fingerprint.h | 46 + src/gui/src/Hotkey.cpp | 75 + src/gui/src/Hotkey.h | 66 + src/gui/src/HotkeyDialog.cpp | 41 + src/gui/src/HotkeyDialog.h | 49 + src/gui/src/HotkeyDialogBase.ui | 81 + src/gui/src/Ipc.cpp | 26 + src/gui/src/Ipc.h | 42 + src/gui/src/IpcClient.cpp | 146 ++ src/gui/src/IpcClient.h | 63 + src/gui/src/IpcReader.cpp | 131 ++ src/gui/src/IpcReader.h | 49 + src/gui/src/KeySequence.cpp | 237 +++ src/gui/src/KeySequence.h | 58 + src/gui/src/KeySequenceWidget.cpp | 145 ++ src/gui/src/KeySequenceWidget.h | 81 + src/gui/src/LicenseManager.cpp | 168 ++ src/gui/src/LicenseManager.h | 54 + src/gui/src/MainWindow.cpp | 1506 +++++++++++++++++ src/gui/src/MainWindow.h | 241 +++ src/gui/src/MainWindowBase.ui | 613 +++++++ src/gui/src/NewScreenWidget.cpp | 48 + src/gui/src/NewScreenWidget.h | 40 + src/gui/src/ProcessorArch.h | 28 + src/gui/src/QSynergyApplication.cpp | 72 + src/gui/src/QSynergyApplication.h | 47 + src/gui/src/QUtility.cpp | 115 ++ src/gui/src/QUtility.h | 31 + src/gui/src/Screen.cpp | 147 ++ src/gui/src/Screen.h | 105 ++ src/gui/src/ScreenSettingsDialog.cpp | 137 ++ src/gui/src/ScreenSettingsDialog.h | 53 + src/gui/src/ScreenSettingsDialogBase.ui | 543 ++++++ src/gui/src/ScreenSetupModel.cpp | 143 ++ src/gui/src/ScreenSetupModel.h | 71 + src/gui/src/ScreenSetupView.cpp | 161 ++ src/gui/src/ScreenSetupView.h | 57 + src/gui/src/ServerConfig.cpp | 403 +++++ src/gui/src/ServerConfig.h | 141 ++ src/gui/src/ServerConfigDialog.cpp | 219 +++ src/gui/src/ServerConfigDialog.h | 66 + src/gui/src/ServerConfigDialogBase.ui | 781 +++++++++ src/gui/src/SettingsDialog.cpp | 154 ++ src/gui/src/SettingsDialog.h | 57 + src/gui/src/SettingsDialogBase.ui | 376 ++++ src/gui/src/SetupWizard.cpp | 151 ++ src/gui/src/SetupWizard.h | 53 + src/gui/src/SetupWizardBase.ui | 245 +++ src/gui/src/SslCertificate.cpp | 178 ++ src/gui/src/SslCertificate.h | 47 + src/gui/src/SynergyLocale.cpp | 68 + src/gui/src/SynergyLocale.h | 48 + src/gui/src/TrashScreenWidget.cpp | 43 + src/gui/src/TrashScreenWidget.h | 42 + src/gui/src/VersionChecker.cpp | 107 ++ src/gui/src/VersionChecker.h | 44 + src/gui/src/WebClient.cpp | 83 + src/gui/src/WebClient.h | 49 + src/gui/src/ZeroconfBrowser.cpp | 92 + src/gui/src/ZeroconfBrowser.h | 57 + src/gui/src/ZeroconfRecord.h | 50 + src/gui/src/ZeroconfRegister.cpp | 94 + src/gui/src/ZeroconfRegister.h | 61 + src/gui/src/ZeroconfServer.cpp | 33 + src/gui/src/ZeroconfServer.h | 37 + src/gui/src/ZeroconfService.cpp | 164 ++ src/gui/src/ZeroconfService.h | 57 + src/gui/src/ZeroconfThread.cpp | 38 + src/gui/src/ZeroconfThread.h | 38 + src/gui/src/main.cpp | 176 ++ 222 files changed, 81373 insertions(+), 1 deletion(-) create mode 100644 src/gui/CMakeLists.txt create mode 100644 src/gui/gui.pro create mode 100644 src/gui/gui.ts create mode 100644 src/gui/lang.cmd create mode 100644 src/gui/langbuild.cmd create mode 100644 src/gui/res/Synergy.qrc create mode 100644 src/gui/res/icons/16x16/money.png create mode 100644 src/gui/res/icons/16x16/padlock.png create mode 100644 src/gui/res/icons/16x16/synergy-connected.png create mode 100644 src/gui/res/icons/16x16/synergy-connected.psd create mode 100644 src/gui/res/icons/16x16/synergy-disconnected.png create mode 100644 src/gui/res/icons/16x16/synergy-disconnected.psd create mode 100644 src/gui/res/icons/16x16/synergy-transfering.png create mode 100644 src/gui/res/icons/16x16/warning.png create mode 100644 src/gui/res/icons/256x256/synergy.ico create mode 100644 src/gui/res/icons/64x64/user-trash.png create mode 100644 src/gui/res/icons/64x64/video-display.png create mode 100644 src/gui/res/image/about.png create mode 100644 src/gui/res/image/spinning-wheel.gif create mode 100644 src/gui/res/lang/Languages.xml create mode 100644 src/gui/res/lang/gui_af-ZA.qm create mode 100644 src/gui/res/lang/gui_af-ZA.ts create mode 100644 src/gui/res/lang/gui_ar.qm create mode 100644 src/gui/res/lang/gui_ar.ts create mode 100644 src/gui/res/lang/gui_bg-BG.qm create mode 100644 src/gui/res/lang/gui_bg-BG.ts create mode 100644 src/gui/res/lang/gui_ca-AD.qm create mode 100644 src/gui/res/lang/gui_ca-AD.ts create mode 100644 src/gui/res/lang/gui_cs-CZ.qm create mode 100644 src/gui/res/lang/gui_cs-CZ.ts create mode 100644 src/gui/res/lang/gui_cy.qm create mode 100644 src/gui/res/lang/gui_cy.ts create mode 100644 src/gui/res/lang/gui_da.qm create mode 100644 src/gui/res/lang/gui_da.ts create mode 100644 src/gui/res/lang/gui_de.qm create mode 100644 src/gui/res/lang/gui_de.ts create mode 100644 src/gui/res/lang/gui_es.qm create mode 100644 src/gui/res/lang/gui_es.ts create mode 100644 src/gui/res/lang/gui_et-EE.qm create mode 100644 src/gui/res/lang/gui_et-EE.ts create mode 100644 src/gui/res/lang/gui_fi.qm create mode 100644 src/gui/res/lang/gui_fi.ts create mode 100644 src/gui/res/lang/gui_fr.qm create mode 100644 src/gui/res/lang/gui_fr.ts create mode 100644 src/gui/res/lang/gui_gl.qm create mode 100644 src/gui/res/lang/gui_gl.ts create mode 100644 src/gui/res/lang/gui_grk.qm create mode 100644 src/gui/res/lang/gui_grk.ts create mode 100644 src/gui/res/lang/gui_he.qm create mode 100644 src/gui/res/lang/gui_he.ts create mode 100644 src/gui/res/lang/gui_hi.qm create mode 100644 src/gui/res/lang/gui_hi.ts create mode 100644 src/gui/res/lang/gui_hr-HR.qm create mode 100644 src/gui/res/lang/gui_hr-HR.ts create mode 100644 src/gui/res/lang/gui_hu-HU.qm create mode 100644 src/gui/res/lang/gui_hu-HU.ts create mode 100644 src/gui/res/lang/gui_id.qm create mode 100644 src/gui/res/lang/gui_id.ts create mode 100644 src/gui/res/lang/gui_is-IS.qm create mode 100644 src/gui/res/lang/gui_is-IS.ts create mode 100644 src/gui/res/lang/gui_it.qm create mode 100644 src/gui/res/lang/gui_it.ts create mode 100644 src/gui/res/lang/gui_ja-JP.qm create mode 100644 src/gui/res/lang/gui_ja-JP.ts create mode 100644 src/gui/res/lang/gui_ko.qm create mode 100644 src/gui/res/lang/gui_ko.ts create mode 100644 src/gui/res/lang/gui_lt.qm create mode 100644 src/gui/res/lang/gui_lt.ts create mode 100644 src/gui/res/lang/gui_lv.qm create mode 100644 src/gui/res/lang/gui_lv.ts create mode 100644 src/gui/res/lang/gui_mr.qm create mode 100644 src/gui/res/lang/gui_mr.ts create mode 100644 src/gui/res/lang/gui_nl-NL.qm create mode 100644 src/gui/res/lang/gui_nl-NL.ts create mode 100644 src/gui/res/lang/gui_no.qm create mode 100644 src/gui/res/lang/gui_no.ts create mode 100644 src/gui/res/lang/gui_pes-IR.qm create mode 100644 src/gui/res/lang/gui_pes-IR.ts create mode 100644 src/gui/res/lang/gui_pl-PL.qm create mode 100644 src/gui/res/lang/gui_pl-PL.ts create mode 100644 src/gui/res/lang/gui_pt-BR.qm create mode 100644 src/gui/res/lang/gui_pt-BR.ts create mode 100644 src/gui/res/lang/gui_pt-PT.qm create mode 100644 src/gui/res/lang/gui_pt-PT.ts create mode 100644 src/gui/res/lang/gui_ro.qm create mode 100644 src/gui/res/lang/gui_ro.ts create mode 100644 src/gui/res/lang/gui_ru.qm create mode 100644 src/gui/res/lang/gui_ru.ts create mode 100644 src/gui/res/lang/gui_si.qm create mode 100644 src/gui/res/lang/gui_si.ts create mode 100644 src/gui/res/lang/gui_sk-SK.qm create mode 100644 src/gui/res/lang/gui_sk-SK.ts create mode 100644 src/gui/res/lang/gui_sl-SI.qm create mode 100644 src/gui/res/lang/gui_sl-SI.ts create mode 100644 src/gui/res/lang/gui_sq-AL.qm create mode 100644 src/gui/res/lang/gui_sq-AL.ts create mode 100644 src/gui/res/lang/gui_sr.qm create mode 100644 src/gui/res/lang/gui_sr.ts create mode 100644 src/gui/res/lang/gui_sv.qm create mode 100644 src/gui/res/lang/gui_sv.ts create mode 100644 src/gui/res/lang/gui_th-TH.qm create mode 100644 src/gui/res/lang/gui_th-TH.ts create mode 100644 src/gui/res/lang/gui_tr-TR.qm create mode 100644 src/gui/res/lang/gui_tr-TR.ts create mode 100644 src/gui/res/lang/gui_uk.qm create mode 100644 src/gui/res/lang/gui_uk.ts create mode 100644 src/gui/res/lang/gui_ur.qm create mode 100644 src/gui/res/lang/gui_ur.ts create mode 100644 src/gui/res/lang/gui_vi.qm create mode 100644 src/gui/res/lang/gui_vi.ts create mode 100644 src/gui/res/lang/gui_zh-CN.qm create mode 100644 src/gui/res/lang/gui_zh-CN.ts create mode 100644 src/gui/res/lang/gui_zh-TW.qm create mode 100644 src/gui/res/lang/gui_zh-TW.ts create mode 100644 src/gui/res/mac/Info.plist create mode 100644 src/gui/res/mac/QSynergy.icns create mode 100644 src/gui/res/win/Synergy.rc create mode 100644 src/gui/src/AboutDialog.cpp create mode 100644 src/gui/src/AboutDialog.h create mode 100644 src/gui/src/AboutDialogBase.ui create mode 100644 src/gui/src/Action.cpp create mode 100644 src/gui/src/Action.h create mode 100644 src/gui/src/ActionDialog.cpp create mode 100644 src/gui/src/ActionDialog.h create mode 100644 src/gui/src/ActionDialogBase.ui create mode 100644 src/gui/src/ActivationDialog.cpp create mode 100644 src/gui/src/ActivationDialog.h create mode 100644 src/gui/src/ActivationDialog.ui create mode 100644 src/gui/src/ActivationNotifier.cpp create mode 100644 src/gui/src/ActivationNotifier.h create mode 100644 src/gui/src/AddClientDialog.cpp create mode 100644 src/gui/src/AddClientDialog.h create mode 100644 src/gui/src/AddClientDialogBase.ui create mode 100644 src/gui/src/AppConfig.cpp create mode 100644 src/gui/src/AppConfig.h create mode 100644 src/gui/src/BaseConfig.cpp create mode 100644 src/gui/src/BaseConfig.h create mode 100644 src/gui/src/CancelActivationDialog.cpp create mode 100644 src/gui/src/CancelActivationDialog.h create mode 100644 src/gui/src/CancelActivationDialog.ui create mode 100644 src/gui/src/CommandProcess.cpp create mode 100644 src/gui/src/CommandProcess.h create mode 100644 src/gui/src/CoreInterface.cpp create mode 100644 src/gui/src/CoreInterface.h create mode 100644 src/gui/src/DataDownloader.cpp create mode 100644 src/gui/src/DataDownloader.h create mode 100644 src/gui/src/ElevateMode.h create mode 100644 src/gui/src/FailedLoginDialog.cpp create mode 100644 src/gui/src/FailedLoginDialog.h create mode 100644 src/gui/src/FailedLoginDialog.ui create mode 100644 src/gui/src/Fingerprint.cpp create mode 100644 src/gui/src/Fingerprint.h create mode 100644 src/gui/src/Hotkey.cpp create mode 100644 src/gui/src/Hotkey.h create mode 100644 src/gui/src/HotkeyDialog.cpp create mode 100644 src/gui/src/HotkeyDialog.h create mode 100644 src/gui/src/HotkeyDialogBase.ui create mode 100644 src/gui/src/Ipc.cpp create mode 100644 src/gui/src/Ipc.h create mode 100644 src/gui/src/IpcClient.cpp create mode 100644 src/gui/src/IpcClient.h create mode 100644 src/gui/src/IpcReader.cpp create mode 100644 src/gui/src/IpcReader.h create mode 100644 src/gui/src/KeySequence.cpp create mode 100644 src/gui/src/KeySequence.h create mode 100644 src/gui/src/KeySequenceWidget.cpp create mode 100644 src/gui/src/KeySequenceWidget.h create mode 100644 src/gui/src/LicenseManager.cpp create mode 100644 src/gui/src/LicenseManager.h create mode 100644 src/gui/src/MainWindow.cpp create mode 100644 src/gui/src/MainWindow.h create mode 100644 src/gui/src/MainWindowBase.ui create mode 100644 src/gui/src/NewScreenWidget.cpp create mode 100644 src/gui/src/NewScreenWidget.h create mode 100644 src/gui/src/ProcessorArch.h create mode 100644 src/gui/src/QSynergyApplication.cpp create mode 100644 src/gui/src/QSynergyApplication.h create mode 100644 src/gui/src/QUtility.cpp create mode 100644 src/gui/src/QUtility.h create mode 100644 src/gui/src/Screen.cpp create mode 100644 src/gui/src/Screen.h create mode 100644 src/gui/src/ScreenSettingsDialog.cpp create mode 100644 src/gui/src/ScreenSettingsDialog.h create mode 100644 src/gui/src/ScreenSettingsDialogBase.ui create mode 100644 src/gui/src/ScreenSetupModel.cpp create mode 100644 src/gui/src/ScreenSetupModel.h create mode 100644 src/gui/src/ScreenSetupView.cpp create mode 100644 src/gui/src/ScreenSetupView.h create mode 100644 src/gui/src/ServerConfig.cpp create mode 100644 src/gui/src/ServerConfig.h create mode 100644 src/gui/src/ServerConfigDialog.cpp create mode 100644 src/gui/src/ServerConfigDialog.h create mode 100644 src/gui/src/ServerConfigDialogBase.ui create mode 100644 src/gui/src/SettingsDialog.cpp create mode 100644 src/gui/src/SettingsDialog.h create mode 100644 src/gui/src/SettingsDialogBase.ui create mode 100644 src/gui/src/SetupWizard.cpp create mode 100644 src/gui/src/SetupWizard.h create mode 100644 src/gui/src/SetupWizardBase.ui create mode 100644 src/gui/src/SslCertificate.cpp create mode 100644 src/gui/src/SslCertificate.h create mode 100644 src/gui/src/SynergyLocale.cpp create mode 100644 src/gui/src/SynergyLocale.h create mode 100644 src/gui/src/TrashScreenWidget.cpp create mode 100644 src/gui/src/TrashScreenWidget.h create mode 100644 src/gui/src/VersionChecker.cpp create mode 100644 src/gui/src/VersionChecker.h create mode 100644 src/gui/src/WebClient.cpp create mode 100644 src/gui/src/WebClient.h create mode 100644 src/gui/src/ZeroconfBrowser.cpp create mode 100644 src/gui/src/ZeroconfBrowser.h create mode 100644 src/gui/src/ZeroconfRecord.h create mode 100644 src/gui/src/ZeroconfRegister.cpp create mode 100644 src/gui/src/ZeroconfRegister.h create mode 100644 src/gui/src/ZeroconfServer.cpp create mode 100644 src/gui/src/ZeroconfServer.h create mode 100644 src/gui/src/ZeroconfService.cpp create mode 100644 src/gui/src/ZeroconfService.h create mode 100644 src/gui/src/ZeroconfThread.cpp create mode 100644 src/gui/src/ZeroconfThread.h create mode 100644 src/gui/src/main.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d36312f8..ab63a066 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -19,4 +19,6 @@ include_directories (${CMAKE_CURRENT_BINARY_DIR}/lib) add_subdirectory(lib) add_subdirectory(cmd) - +if (SYNERGY_BUILD_LEGACY_GUI) +add_subdirectory(gui) +endif (SYNERGY_BUILD_LEGACY_GUI) diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt new file mode 100644 index 00000000..6781cf31 --- /dev/null +++ b/src/gui/CMakeLists.txt @@ -0,0 +1,46 @@ +cmake_minimum_required (VERSION 3.4) + +find_package (Qt5 COMPONENTS Core Widgets Network) +set (CMAKE_AUTOMOC ON) +set (CMAKE_AUTORCC ON) +set (CMAKE_AUTOUIC ON) +set (CMAKE_INCLUDE_CURRENT_DIR ON) + +file (GLOB LEGACY_GUI_SOURCE_FILES src/*.cpp src/*.h) +file (GLOB LEGACY_GUI_UI_FILES src/*.ui) + +if (WIN32) + set (LEGACY_GUI_RC_FILES res/win/Synergy.rc) +endif() + +add_executable (synergy WIN32 + ${LEGACY_GUI_SOURCE_FILES} + ${LEGACY_GUI_UI_FILES} + ${LEGACY_GUI_RC_FILES} + res/Synergy.qrc +) + +include_directories (./src) +target_link_libraries (synergy shared) + +if (WIN32) + include_directories ($ENV{BONJOUR_SDK_HOME}/Include) + find_library (DNSSD_LIB dnssd.lib + HINTS ENV BONJOUR_SDK_HOME + PATH_SUFFIXES "Lib/x64") +elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") + target_link_libraries (synergy dns_sd) +endif() + +qt5_use_modules (synergy Core Widgets Network) + +if (WIN32) + target_link_libraries (synergy ${DNSSD_LIB}) + set_target_properties (synergy PROPERTIES LINK_FLAGS "/NODEFAULTLIB:LIBCMT") +endif() + +if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") + install (TARGETS synergy DESTINATION ${SYNERGY_BUNDLE_BINARY_DIR}) +elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") + install (TARGETS synergy DESTINATION bin) +endif() diff --git a/src/gui/gui.pro b/src/gui/gui.pro new file mode 100644 index 00000000..176d6851 --- /dev/null +++ b/src/gui/gui.pro @@ -0,0 +1,162 @@ +QT += widgets \ + network +TEMPLATE = app +TARGET = synergy +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/QSynergyApplication.cpp \ + src/VersionChecker.cpp \ + src/SetupWizard.cpp \ + src/IpcClient.cpp \ + src/IpcReader.cpp \ + src/Ipc.cpp \ + src/SynergyLocale.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/QSynergyApplication.h \ + src/VersionChecker.h \ + src/SetupWizard.h \ + src/IpcClient.h \ + src/IpcReader.h \ + src/Ipc.h \ + src/SynergyLocale.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/Synergy.qrc +RC_FILE = res/win/Synergy.rc +macx { + QMAKE_INFO_PLIST = res/mac/Info.plist + TARGET = Synergy + QSYNERGY_ICON.files = res/mac/Synergy.icns + QSYNERGY_ICON.path = Contents/Resources + QMAKE_BUNDLE_DATA += QSYNERGY_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 new file mode 100644 index 00000000..96eeeb7d --- /dev/null +++ b/src/gui/gui.ts @@ -0,0 +1,1407 @@ + + + + + AboutDialogBase + + + About Synergy + + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + + + + + &Ok + + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + diff --git a/src/gui/lang.cmd b/src/gui/lang.cmd new file mode 100644 index 00000000..44185934 --- /dev/null +++ b/src/gui/lang.cmd @@ -0,0 +1 @@ +lupdate -noobsolete gui.pro -ts gui.ts \ No newline at end of file diff --git a/src/gui/langbuild.cmd b/src/gui/langbuild.cmd new file mode 100644 index 00000000..b86d2021 --- /dev/null +++ b/src/gui/langbuild.cmd @@ -0,0 +1,2 @@ +cd res/lang +lrelease *.ts \ No newline at end of file diff --git a/src/gui/res/Synergy.qrc b/src/gui/res/Synergy.qrc new file mode 100644 index 00000000..8f8ac0c8 --- /dev/null +++ b/src/gui/res/Synergy.qrc @@ -0,0 +1,58 @@ + + + icons/16x16/synergy-connected.png + icons/16x16/synergy-disconnected.png + icons/64x64/video-display.png + icons/64x64/user-trash.png + icons/16x16/warning.png + icons/256x256/synergy.ico + image/about.png + lang/gui_ar.qm + lang/gui_bg-BG.qm + lang/gui_ca-AD.qm + lang/gui_cs-CZ.qm + lang/gui_cy.qm + lang/gui_da.qm + lang/gui_de.qm + lang/gui_es.qm + lang/gui_fi.qm + lang/gui_fr.qm + lang/gui_grk.qm + lang/gui_he.qm + lang/gui_hr-HR.qm + lang/gui_hu-HU.qm + lang/gui_id.qm + lang/gui_it.qm + lang/gui_ja-JP.qm + lang/gui_ko.qm + lang/gui_lt.qm + lang/gui_lv.qm + lang/gui_nl-NL.qm + lang/gui_no.qm + lang/gui_pes-IR.qm + lang/gui_pl-PL.qm + lang/gui_pt-BR.qm + lang/gui_pt-PT.qm + lang/gui_ro.qm + lang/gui_ru.qm + lang/gui_si.qm + lang/gui_sk-SK.qm + lang/gui_sl-SI.qm + lang/gui_sq-AL.qm + lang/gui_sr.qm + lang/gui_sv.qm + lang/gui_th-TH.qm + lang/gui_tr-TR.qm + lang/gui_uk.qm + lang/gui_ur.qm + lang/gui_mr.qm + lang/gui_vi.qm + lang/gui_zh-CN.qm + lang/gui_zh-TW.qm + lang/Languages.xml + icons/16x16/money.png + image/spinning-wheel.gif + icons/16x16/padlock.png + icons/16x16/synergy-transfering.png + + diff --git a/src/gui/res/icons/16x16/money.png b/src/gui/res/icons/16x16/money.png new file mode 100644 index 0000000000000000000000000000000000000000..42c52d05f6f8242e4de6fd953d9fcfcfcde81f3e GIT binary patch literal 738 zcmV<80v-K{P)kKmx=vV@a|w4d?1G z{A&|1yzGF~TZ8KHTl_r*T3@s<=A;pUk6t|eFbv0%74?%+OlCdki0e@06yy3x1%Foo zZA8IP3kLWJ+!ohD8&$%-Xu;s38IP9-L1$fP3CnTSerf$50rgDty6Lr^*!3d)Z5bO| z-!b-f1e)3AZ8+nCGAzU8!LrRAB^VQ3$5hYdKYA07xLVs{S`MaSy~ut|Ll;xQn;C~< zTE=EZ#ZWme+JuKV0b`<5t|FFt=DRug$%=#6R&beFSRGVu!=XktGv>d{p(*$PrItbs zC%{@V&UayoG-zyPh^uwrJq0zft&6HKksgOU)PPF&4Gy0B97SX;1Yuth&KvTM@H8_D zI|j&k17#5C^Q5`mXHM}n5yer~ z1v@0vf}XSMShQ`!KZ;`Qm@#H#oe^ U8%xtYa{vGU07*qoM6N<$f()ing#Z8m literal 0 HcmV?d00001 diff --git a/src/gui/res/icons/16x16/padlock.png b/src/gui/res/icons/16x16/padlock.png new file mode 100644 index 0000000000000000000000000000000000000000..e313e97e96215bfc299305c9976f269fc5f3561f GIT binary patch literal 450 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 literal 0 HcmV?d00001 diff --git a/src/gui/res/icons/16x16/synergy-disconnected.png b/src/gui/res/icons/16x16/synergy-disconnected.png new file mode 100644 index 0000000000000000000000000000000000000000..12efe2d49f158a983518090264a6c3c52d69123d GIT binary patch literal 442 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 literal 0 HcmV?d00001 diff --git a/src/gui/res/icons/64x64/user-trash.png b/src/gui/res/icons/64x64/user-trash.png new file mode 100644 index 0000000000000000000000000000000000000000..05eb80ec30ea3b8e3714fc74f39e4ee527ae3195 GIT binary patch literal 3815 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 ppZ(=1%NYP?0Gt7E2EcpUz6L0000PbVXQnQ*UN; zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU)eMv+?RCwC#Ts>?fMHF5~X%S8tA-IiB zf(CT91P$oqT^)ilb_c~NYdUBW_aNJX-f;sR-slSG;*=mz99;{FPjpBqdj&#Bh})|W z6};zrlRPH#x9hdfK6a#$ll}9&nQy-Ly*IP2cypAypM3AbM*y_}wMJEx>7&1Y@BH}3 zx4Z2486N-b%XsXSWi3l3Cr~2z*dws0N(w+}0bq{d@2cuNR0Pcsz%wm};TZ)C0i_Go zw_Mu)?$>(_1E6@BK<$*kd4>Q3KtY!>l3b3dgaDY+jBPnYpaF2wa#&WkY&d}B06xw$ zfJL~RtOdX4bo+y-Ru0RW0tUc>tTM>)Ty$AUj{9mQXx0=k1ePf0bN5lu=DfFBf@aMC zGbdPP4DvE(5ez&=OPG&oIz(8q7TPI= z@QMP4qM`E)_s7U0Dv;<3foG6GL{9)PVL4Q*2^iOC2;EH^fRa0R0>J5cPjWggr468o z%i&rfz)(_duk;h-Hr!{>h&x@sS*GK3;03+O_^EF8zm9D*uXM#Lq#`$mIOKum+m=SBZFm1 zj5w7duu(bm^M%#>E;^zJH>3egOp%r`R0lR{8rY>Kfu#j3QiqCcQiuQREW|Iv^}K+g zEef^{jOP)!uEN%{=WKQj=Qx-S0VMwcAi1E@4b53LJ+~F*{-PU#f)*GAndZO(ih0~( zM`$Gy#=dY{CLv7hC9@l*62{^_xTZ;f7Owq_1a@N3TX;`HcMn{H$0Me_CPI7hb8xK3 zo*B_Ih1eI*Of`16+CK{*Dh^rQ!iBCu0AnXyST3upwnET=9lHu!xc-z)7VNOl5OIx6 z5u-t9V>{Y1+fiFb2BD7(*@5c<3J7@Fq4DZ6_N>sL>Vk)qCX3b%gZ;c;XBx&Pc2AZ? zcL0RM!EGqrCk;x%gzY&PJD{0pD}muUlfDxJs$=PE0-FHHQweDAp`_ss;JTinJzWI@ z$Y7aJbrJd|`@1U9Ys%54&%u z5b}@ZAcO!RST&Gbamt>VDkf6uXn!QzzwzcfGv%;H&beS45|eTr--ugqeD5g$CVBCdJ1qdp?)J^MaBb@p{>GYSiIAW( zCK}-Ql0P4+I*10(XQEK2t#tXLRHJ!B8IkUg>%iiEWl#i;?5sQIV*gawzexuM0FH!= ze@ruBprEaV7XpTAedz$s9sc~oSDD&_z`+5Rq8*&gHS7eWb@)4>&Y6innt6P(9GMtx zL0V16QV)vkZ%6xwJP*Use6Rw!p~w(!B53f{lsp|1LuWLYU#>CnI%E@MAFk^&ca+Ln zV~&zC+gdpnK@)`wx9U46&s*|rBc|IrI{PLvJGY1kuvwtyyL_g>e$)4jx&6e(O8Yk)@*cZO223u1vRuTeDyKjlxu+UDNfgSV z@327Icus3TZC2Uhi%{HwITI=0GEh9PXPRhaf6SiI)!DyEe$v#q=CX85Pdxi7@n8w; z5;%0w#35;CdQ)NQnb(*&{mv_P6IDBiF+z(rnov8Pf3$$wT9@>g&?lkiw!~w#f0I2l zvan1Kz|~t2SX?(X4K1C99ffV|5iJLdRVEI*>|`PA8Q84qFk`n=T7=r!CU+Dt_DeKw zFlLiwYMC@`RlW+oD{D?oX@7+xA>XsF63^(A7^!H$96Lk}6L3cheS1J!!QLrIzdZFq zg8zbnd`qQ`TsLuFYaU>I;>VjHKQ zA^Y>M?GuMQ3j!s?q#V?w9F8@Ol3WUHdDv5g%QM#kQ4-${sS3Y`B}o29fKi0umoHKQ pSR(Igr`{Q3lW8et*Sq{HzyL+Q4e#}8bejMG002ovPDHLkV1l<+8Lt2U literal 0 HcmV?d00001 diff --git a/src/gui/res/image/spinning-wheel.gif b/src/gui/res/image/spinning-wheel.gif new file mode 100644 index 0000000000000000000000000000000000000000..220f0207169d354365e555b1e89ad0c1295a7914 GIT binary patch literal 9689 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 CnP_hS literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/Languages.xml b/src/gui/res/lang/Languages.xml new file mode 100644 index 00000000..5948f9c6 --- /dev/null +++ b/src/gui/res/lang/Languages.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/gui/res/lang/gui_af-ZA.qm b/src/gui/res/lang/gui_af-ZA.qm new file mode 100644 index 00000000..be651eed --- /dev/null +++ b/src/gui/res/lang/gui_af-ZA.qm @@ -0,0 +1 @@ + + + AboutDialogBase + + + About Synergy + + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + + + + + &Ok + + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_ar.qm b/src/gui/res/lang/gui_ar.qm new file mode 100644 index 0000000000000000000000000000000000000000..dfc4afad010776d00b6537235d770dc809c89c2e GIT binary patch literal 7606 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 tJ0@&d3AI;#ZN5d=7UW)_RBq%%=x!XRC&Vs + + AboutDialogBase + + + About Synergy + عن سينيرجي + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + غير معروف + + + + Version: + الإصدار + + + + &Ok + حسنًا + + + + ActionDialogBase + + + Configure Action + تكوين العمل + + + + Choose the action to perform + اختار الامر للعمل + + + + Press a hotkey + اضغط على مفتاح التشغيل السريع + + + + Release a hotkey + الافراج عنه + + + + Press and release a hotkey + اضغط وافرج عن مفتاح التشغيل السريع + + + + only on these screens + فقط على هذه الشاشات + + + + Switch to screen + تغيير الشاشة + + + + Switch in direction + تغيير الاتجاه + + + + left + شمال + + + + right + يمين + + + + up + اعلى + + + + down + اسفل + + + + Lock cursor to screen + غلق المؤشر لشاشة + + + + toggle + تبديل + + + + on + تشغيل + + + + off + تعطيل + + + + This action is performed when + هذا الامر تم عمله عندما + + + + the hotkey is pressed + مفتاح التشغيل السريع ضُغط + + + + the hotkey is released + مفتاح التشغيل السريع افرج عنه + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + مفتاح التشغيل السريع + + + + Enter the specification for the hotkey: + ادخل صفات مفتاح التشغيل السريع: + + + + MainWindow + + + &Start + + + + + &File + ملف + + + + &Edit + تعديل + + + + &Window + شباك + + + + &Help + مساعدة + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + البرناج لا يستطيع ان يبدأ + + + + 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. + 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. + + + + Synergy client not found + عامل التآزر لم يتم العثور عليه + + + + The executable for the synergy client does not exist. + لا وجود للتنفيذ لان عامل التآزر غير موجود. + + + + Hostname is empty + المضيف فارغ + + + + Please fill in a hostname for the synergy client to connect to. + الرجاء ملء اسم المضيف لعاملالتآزر للاتصال. + + + + Cannot write configuration file + لا يمكن كتابة ملف التكوين + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + غير معروف + + + + + + Synergy + سينيرجي + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + سينيرجي + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + اسم الشاشة: + + + + &Server IP: + خدمة ال IP : + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + تصفح + + + + Configure interactively: + تكوين تبادلي + + + + &Configure Server... + + + + + Ready + جاهز + + + + Log + سجل + + + + &Apply + + + + + IP addresses: + عنوان ال IP + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + خروج + + + + Quit + خروج + + + + Run + تشغلي + + + + S&top + + + + + Stop + توقف + + + + S&how Status + + + + + &Hide + + + + + Hide + إخفاء + + + + &Show + + + + + Show + اظهر + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + إعدادات + + + + Edit settings + تعديل الإعدادات + + + + Run Wizard + تشغيلي + + + + NewScreenWidget + + + Unnamed + غير مسمى + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + شمال + + + + Top-right + اليمين الاعلى + + + + Bottom-left + يسار + + + + Bottom-right + يمين + + + + Corner Si&ze: + + + + + &Fixes + تصليحات + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + تعديل + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + إعدادات + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + تسجيل الدخول + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + خطأ + + + + &Language: + اللغة: + + + + &Miscellaneous + + + + + Warning + تحذير + + + + Note + ملاحظة + + + + Info + معلومات + + + + Debug + تصحيح + + + + Debug1 + تصحيح1 + + + + Debug2 + تصحيح2 + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + الرجاء اختيار خيار. + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + اهلًا وسهلًا + + + + Thanks for installing Synergy! + شكرا لتنزيل السنغري + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + التآزر يتيح لك بسهولة مشاركة الماوس ولوحة المفاتيح بين العديد من أجهزة الكمبيوتر في مكتبك، وانها لالحرة والمفتوحة المصدر. مجرد تحرك الماوس من على حافة شاشة جهاز كمبيوتر واحد على آخر. يمكنك حتى أن حصة كل من الألواح الكتابة الخاصة بك. كل ما تحتاجه هو اتصال بالشبكة. التآزر هو عبر منصة (يعمل على ويندوز، وماكنتوش ولينكس). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + غير معروف + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + سينيرجي + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_bg-BG.qm b/src/gui/res/lang/gui_bg-BG.qm new file mode 100644 index 0000000000000000000000000000000000000000..a93d7af501832f6aa3e80d9066d74726b637722e GIT binary patch literal 21881 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 + + AboutDialogBase + + + About Synergy + За Синерджи + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Неизвестно + + + + Version: + Версия: + + + + &Ok + ОК + + + + ActionDialogBase + + + Configure Action + Конфигуриране на действие + + + + Choose the action to perform + Изберете действие, което да бъде изпълнено. + + + + Press a hotkey + Натисни горещ клавиш. + + + + Release a hotkey + Отпусни горещият клавиш. + + + + Press and release a hotkey + Натисни и пусни горещ клавиш + + + + only on these screens + само на тези екрани + + + + Switch to screen + Превключи към екран + + + + Switch in direction + Превключи в посока + + + + left + ляво + + + + right + дясно + + + + up + горе + + + + down + долу + + + + Lock cursor to screen + Заключи курсора на екрана + + + + toggle + превключи + + + + on + вкл. + + + + off + изкл. + + + + This action is performed when + Действието се извършва когато + + + + the hotkey is pressed + горещият клавиш бъде натиснат + + + + the hotkey is released + горещият клавиш бъде отпуснат. + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + Въведи спецификация за горещ клавиш + + + + MainWindow + + + &Start + Старт + + + + &File + Файл + + + + &Edit + Редакция + + + + &Window + Прозорец + + + + &Help + Помощ + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Вашата версия на Синерджи не е актуална. Версия <b>%1</b> е достъпна за <a href="%2">сваляне</a>.</p> + + + + Program can not be started + Програмата не може да бъде стартирана + + + + 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. + The executable<br><br>%1<br><br>could not be successfully started, although it does exist. Моля проверете дали имате необходимите правомощия за стартиране на тази програма. + + + + Synergy client not found + Синерджи клиентът не е намерен. + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + Името на приемника е празно + + + + Please fill in a hostname for the synergy client to connect to. + Моля попълнете име на приемника за да може синерджи клиентът да се свърже. + + + + Cannot write configuration file + Конфигурационният файл не може да бъде записан + + + + The temporary configuration file required to start synergy can not be written. + Временният конфигурационен файл, необходим за стартиране на синерджи, не може да бъде записан. + + + + Configuration filename invalid + Името на конфигурационния файл е невалидно + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Не сте записали валидно име на конфигурационния файл за синерджи сървъра. Искате ли да направите това сега? + + + + Synergy server not found + Синерджи сървърът не е намерен + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + Синерджи беше изключена поради грешка + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Синерджи беше неочаквано изключена с изходен код %1.<br><br> Моля за детайли вижте регистрационния файл. + + + + &Stop + Стоп + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Синерджи се стартира. + + + + Synergy is running. + Синерджи е активна. + + + + Synergy is not running. + Синерджи не е активна. + + + + Unknown + Неизвестно + + + + + + Synergy + Синерджи + + + + Browse for a synergys config file + Браузвайте за да намерите конфигурационния файл на програмата + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Записване на конфигурацията като... + + + + Save failed + Записването се провали + + + + Could not save configuration to file. + Конфигурационният файл не можа да бъде записан. + + + + MainWindowBase + + + Synergy + Синерджи + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Екранно име: + + + + &Server IP: + IP на сървъра: + + + + + &Start + Старт + + + + Use existing configuration: + Използвай налична конфигурация: + + + + &Configuration file: + Конфигурационен файл: + + + + &Browse... + Браузвай... + + + + Configure interactively: + Интерактивно конфигуриране: + + + + &Configure Server... + Конфигурирай сървър... + + + + Ready + Готов + + + + Log + Регистър + + + + &Apply + Приложи + + + + IP addresses: + IP адреси: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Относно Синерджи + + + + &Quit + Прекрати + + + + Quit + Прекрати + + + + Run + Стартирай + + + + S&top + Стоп + + + + Stop + Стоп + + + + S&how Status + Покажи статус + + + + &Hide + Скрий + + + + Hide + Скрий + + + + &Show + Покажи + + + + Show + Покажи + + + + Save configuration &as... + Записване на конфигурацията като... + + + + Save the interactively generated server configuration to a file. + Записване на интерактивно генерираната конфигурация във файл. + + + + Settings + Настройки + + + + Edit settings + Редактирай настройките + + + + Run Wizard + Стартирай помощник + + + + NewScreenWidget + + + Unnamed + Безименен + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Настройка на Синерджи + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Конфигурации на Синерджи (*.sgc);; Всички файлове (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Конфигурации на Синерджи (*.conf);; Всички файлове (*.*) + + + + System tray is unavailable, quitting. + Системният контейнер (трей) не е достъпен, затваряне. + + + + ScreenSettingsDialog + + + Screen name is empty + Екранното име липсва + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Екранното име не може да е празно. Моля въведете име или откажете диалога. + + + + Screen name matches alias + Екранното име се припокрива с псевдонима + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Екранното име не може да е същото като псевдонима. Моля премахнете псевдонима или сменете екранното име. + + + + ScreenSettingsDialogBase + + + Screen Settings + Настройки на екрана + + + + Screen &name: + Екранно име: + + + + A&liases + Псевдоним + + + + &Add + Добави + + + + &Remove + Премахни + + + + &Modifier keys + + + + + &Shift: + Регистър: + + + + + + + + Shift + Shift (Регистър) + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Супер + + + + + + + + None + Няма + + + + &Ctrl: + + + + + Al&t: + Alt: + + + + M&eta: + Meta: + + + + S&uper: + Super: + + + + &Dead corners + Мъртъв ъгъл + + + + Top-left + Горе-ляво + + + + Top-right + Горе-дясно + + + + Bottom-left + Долу-дясно + + + + Bottom-right + Долу-дясно + + + + Corner Si&ze: + Размер на ъглите: + + + + &Fixes + Fixes + + + + Fix CAPS LOCK key + Коригирай клавиш CAPS LOCK + + + + Fix NUM LOCK key + Коригирай клавиш NUM LOCK + + + + Fix SCROLL LOCK key + Коригирай клавиш SCROLL LOCK + + + + Fix XTest for Xinerama + Коригирай XTest за Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Екран <b>%1</b></center><br>За редакция на настройките шракнете двукратно<br>За да премахнете екран го привлачете към кошчето + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Конфигурация на сървъра + + + + Screens and links + Екрани и препратки + + + + Drag a screen from the grid to the trashcan to remove it. + За да премахнете екран, го изтеглете към кошчето. + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + Привлечете към мрежата този бутон, за да добавите нов екран. + + + + 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. + Привлачете нови екрани към мрежата или разместете съществуващите. +За да изтриете екран, го привлачете към кошчето. +Щракнете двукратно върху екрана, за да редактирате настройките му. + + + + Hotkeys + Горещ клавиш + + + + &Hotkeys + Горещ клавиш + + + + &New + Ново + + + + &Edit + Редакция + + + + &Remove + Премахни + + + + A&ctions + Действия + + + + Ne&w + Ново + + + + E&dit + Редакция + + + + Re&move + Премахване + + + + Advanced server settings + Разширени настройки на сървъра + + + + &Switch + Превключи + + + + Switch &after waiting + Превключи след изчакване + + + + + + ms + ms + + + + Switch on double &tap within + Превключи при двойно щракане вътре + + + + &Options + Опции + + + + &Check clients every + Проверявай клиентите на всеки + + + + Use &relative mouse moves + Използвай относителни движения на мишката + + + + S&ynchronize screen savers + Синхронизирай скрийнсейвърите + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + Мъртъв ъгъл + + + + To&p-left + Горе ляво + + + + Top-rig&ht + Горе дясно + + + + &Bottom-left + Долу ляво + + + + Bottom-ri&ght + Долу дясно + + + + Cor&ner Size: + Размер на ъгъла: + + + + SettingsDialog + + + Save log file to... + Записване на регистъра във файл... + + + + Elevate Synergy + Вдигане на предимството на Синерджи + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Сигурни ли сте че искате да повишите предимството на Синерджи? Това ще позволи на Синерджи да общува с процеси с по-голямо предимство и UAC диалоговите прозорци, но може да предизвика проблеми с процеси с по-нисък проритет. Вдигнете предимството само ако е наистина необходимо. + + + + SettingsDialogBase + + + Settings + Настройки + + + + Sc&reen name: + Екранно име: + + + + P&ort: + Порт: + + + + &Interface: + Интерфейс: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Регистриране + + + + &Logging level: + Ниво на регистриране: + + + + Log to file: + Регистър към файл: + + + + Browse... + Преглеждане... + + + + Error + Грешка + + + + &Language: + Език: + + + + &Miscellaneous + Други + + + + Warning + Предупреждение + + + + Note + Бележка + + + + Info + Информация + + + + Debug + Дебъгване + + + + Debug1 + Дебъгване1 + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + Настройка на Синерджи + + + + Please select an option. + Моля изберете опция. + + + + Please enter your email address and password. + Моля въведете вашия имейл адрес и парола. + + + + SetupWizardBase + + + Setup Synergy + Настройка на Синерджи + + + + Welcome + Добре дошли + + + + Thanks for installing Synergy! + Благодарим, че инсталирахте Синерджи! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Синерджи ти помага лесно да споделиш мишката и клавиатурата си с множество компютри на работното ти място и е безплатен и с отворен код. Просто местиш мишка от ръба на екрана на един от компютрите на друг. Можеш да ползваш дори клипборд функцията на всички компютри свързани чрез Синерджи. Всичко, от което имаш нужда е мрежова връзка между компютрите, които ползваш. Синерджи е мултиплатформена (работи на Windows, Mac OS X и Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Сървър или клиент? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Неизвестно + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Вписването е неуспешно, невалидно име или парола. + + + + Login failed, an error occurred. + +%1 + Вписването е неуспешно, възникна грешка. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Вписването е неуспешно, възникна грешка. +Сървърът отговаря: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Синерджи + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_ca-AD.qm b/src/gui/res/lang/gui_ca-AD.qm new file mode 100644 index 0000000000000000000000000000000000000000..45e8f7f5ab4b61e92e4416333aa052c38f513523 GIT binary patch literal 23075 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 JlT6BK_&?qkN*VwF literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_ca-AD.ts b/src/gui/res/lang/gui_ca-AD.ts new file mode 100644 index 00000000..7e41d58b --- /dev/null +++ b/src/gui/res/lang/gui_ca-AD.ts @@ -0,0 +1,1411 @@ + + + AboutDialogBase + + + About Synergy + En quant a Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Desconegut + + + + Version: + Versió: + + + + &Ok + Ok + + + + ActionDialogBase + + + Configure Action + Configurar Acció + + + + Choose the action to perform + Tria l'acció a realitzar + + + + Press a hotkey + Prem una tecla d'accés ràpid + + + + Release a hotkey + Allibera una tecla d'accés ràpid + + + + Press and release a hotkey + Prem i allibera una tecla d'accés ràpid + + + + only on these screens + només en aquestes pantalles + + + + Switch to screen + Canviar de pantalla + + + + Switch in direction + Canviar de direcció + + + + left + esquerra + + + + right + dreta + + + + up + amunt + + + + down + avall + + + + Lock cursor to screen + Bloquejar el cursor a la pantalla + + + + toggle + intercanviar + + + + on + on + + + + off + off + + + + This action is performed when + Aquesta acció es realitza quan + + + + the hotkey is pressed + s'ha premut la tecla d'accés ràpid + + + + the hotkey is released + s'ha allibrerat la tecla d'accés ràpid + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Accés Ràpid + + + + Enter the specification for the hotkey: + Entrar l'especificació per la tecla d'accés ràpid + + + + MainWindow + + + &Start + &Engegar + + + + &File + &Arxiu + + + + &Edit + &Editar + + + + &Window + &Finestra + + + + &Help + &Ajuda + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>La teva versió de Synergy està desactualitzada. La nova versió <b>%1</b> està ara disponible per <a href="%2">descarregar</a>.</p> + + + + Program can not be started + El programa no ha pogut iniciar-se + + + + 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. + L'executable <br><br>%1<br><br>no ha pogut ser iniciat correctament, tot i que aquest existeix. Si us plau revisa si tens permisos suficients per executar aquest programa. + + + + Synergy client not found + No s'ha trobat cap client de Synergy + + + + The executable for the synergy client does not exist. + L'executable del client de Synergy no existeix. + + + + Hostname is empty + El nom de Host està buit + + + + Please fill in a hostname for the synergy client to connect to. + Si us plau completa el camp nom de host per al client de Synergy per connectar-t'hi. + + + + Cannot write configuration file + No es pot escriure el fitxer de configuració + + + + The temporary configuration file required to start synergy can not be written. + No s'ha pogut escriure al fitxer de configuració temporal requerit per iniciar Synergy + + + + Configuration filename invalid + Nom del fitxer de configuració invàlid + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + No has omplert un arxiu de configuració vàlid per al servidor de Synergy. Vols veure ara el fitxer de configuració? + + + + Synergy server not found + No s'ha trobat el Servidor de Synergy + + + + The executable for the synergy server does not exist. + L'executable del servidor de Synergy no existeix. + + + + Synergy terminated with an error + Synergy ha finalitzat degut a un error + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy ha finalitzat inesperadament amb el codi d'error %1.<br><br>Si us plau mira el log de sortida per més detalls. + + + + &Stop + A&turar + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy està engegant-se. + + + + Synergy is running. + Synergy està executant-se. + + + + Synergy is not running. + Synergy no s'està executant. + + + + Unknown + Desconegut + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Mostrar el fitxer de configuració de Sygergy + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Desar configuració com... + + + + Save failed + Error al guardar + + + + Could not save configuration to file. + No es pot guardar la configuració a l'arxiu. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Nom pantalla: + + + + &Server IP: + IP del Servidor: + + + + + &Start + &Engegar + + + + Use existing configuration: + Utilitzar la configuració actual: + + + + &Configuration file: + Fitxer &configuració: + + + + &Browse... + &Mostrar... + + + + Configure interactively: + Configurar interactivament: + + + + &Configure Server... + &Configurar Servidor... + + + + Ready + Llest + + + + Log + Log + + + + &Apply + Aplicar + + + + IP addresses: + Adreces IP: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + En &quant a Synergy... + + + + &Quit + &Sortir + + + + Quit + Sortir + + + + Run + Executa + + + + S&top + A&turar + + + + Stop + Aturar + + + + S&how Status + &Mostrar Estat + + + + &Hide + A&maga + + + + Hide + Amaga + + + + &Show + Mo&stra + + + + Show + Mostra + + + + Save configuration &as... + &Guardar configuració com... + + + + Save the interactively generated server configuration to a file. + Guardar la configuració del servidor generada interactivament a un fitxer. + + + + Settings + Configuració + + + + Edit settings + Editar configuració + + + + Run Wizard + Executar Assistent + + + + NewScreenWidget + + + Unnamed + Sense nom + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Configurar Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Configuracions Synergy (*.sgc);;Tots els arxius (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Configuracions Synergy (*.conf);;Tots els arxius (*.*) + + + + System tray is unavailable, quitting. + La safata del sistema no està disponible, sortint. + + + + ScreenSettingsDialog + + + Screen name is empty + El nom de pantalla és buit + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + El nom de pantalla no pot estar buit. Si us plau introdueix un nom o cancel·la el diàleg. + + + + Screen name matches alias + Nom de pantalla coincideix amb l'àlies + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + El nom de pantalla no pot ser el mateix que un àlies. Si us plau treu l'àlies o bé canvia el nom de la pantalla. + + + + ScreenSettingsDialogBase + + + Screen Settings + Configuració Pantalla + + + + Screen &name: + &Nom pantalla: + + + + A&liases + À&lies + + + + &Add + A&fegir + + + + &Remove + Elimina&r + + + + &Modifier keys + &Modificar claus + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Cap + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + S&uper: + + + + &Dead corners + &Cantonades mortes + + + + Top-left + Amunt-esquerra + + + + Top-right + Amunt-dreta + + + + Bottom-left + Avall-esquerra + + + + Bottom-right + Avall-dreta + + + + Corner Si&ze: + Mida cantonada: + + + + &Fixes + &Fixes + + + + Fix CAPS LOCK key + Arreglar tecla CAPS LOCK + + + + Fix NUM LOCK key + Arreglar tecla NUM LOCK + + + + Fix SCROLL LOCK key + Arreglar tecla SCROLL LOCK + + + + Fix XTest for Xinerama + Arreglar XTest per Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Pantalla: <b>%1</b></center><br>Doble clic per editar configuració <br>Arrossega la pantalla a la paperera per eliminar-la + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Configuració Servidor + + + + Screens and links + Pantalles i enllaços + + + + Drag a screen from the grid to the trashcan to remove it. + Arrossega una pantalla de la graella a la paperera per eliminar-la. + + + + Configure the layout of your synergy server configuration. + Configura la disposició de configuració del teu servidor synergy. + + + + Drag this button to the grid to add a new screen. + Arrossega aquest botó a la graella per afegir una nova pantalla. + + + + 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. + 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ó. + + + + Hotkeys + Accés ràpid + + + + &Hotkeys + &Accés ràpid + + + + &New + &Nou + + + + &Edit + &Editar + + + + &Remove + Elimina&r + + + + A&ctions + A&ccions + + + + Ne&w + No&u + + + + E&dit + E&ditar + + + + Re&move + Eli&minar + + + + Advanced server settings + Configuracions avançades del servidor + + + + &Switch + Can&viar + + + + Switch &after waiting + Canvia després d'esperar + + + + + + ms + ms + + + + Switch on double &tap within + Canvia a doble &toc a + + + + &Options + &Opcions + + + + &Check clients every + Comprova clients cada + + + + Use &relative mouse moves + Utilitza moviments relatius ratolí + + + + S&ynchronize screen savers + Sincronitza protectors de pantalla + + + + Don't take &foreground window on Windows servers + No prenguis la finestra en primer pla en Windows servers + + + + Ignore auto config clients + + + + + &Dead corners + &Cantonades mortes + + + + To&p-left + Amunt-&esquerra + + + + Top-rig&ht + Amunt-&dreta + + + + &Bottom-left + Avall-&esquerra + + + + Bottom-ri&ght + Avall-&dreta + + + + Cor&ner Size: + Mida ca&ntonada: + + + + SettingsDialog + + + Save log file to... + Guardar fitxer log a... + + + + Elevate Synergy + Elevar Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Estas segur que vols elevar Synergy? +Això permet a Synergy interactuar amb processos elevats i el diàleg del UAC, però pot causar problemes amb processos no elevats. Eleva Synergy només si realment ho necessites. + + + + SettingsDialogBase + + + Settings + Configuració + + + + Sc&reen name: + Nom pantalla: + + + + P&ort: + Port: + + + + &Interface: + &Interfície: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Logging + + + + &Logging level: + Nivell &logging: + + + + Log to file: + Log a fitxer: + + + + Browse... + Mostrar... + + + + Error + Error + + + + &Language: + Idioma: + + + + &Miscellaneous + Miscel·lània + + + + Warning + Advertència + + + + Note + Nota + + + + Info + Info + + + + Debug + Debug + + + + Debug1 + Debug1 + + + + Debug2 + Debug2 + + + + SetupWizard + + + Setup Synergy + Configurar Synergy + + + + Please select an option. + Siusplau tria una opció. + + + + Please enter your email address and password. + Si us plau introdueix la teva adreça d'email i contrasenya. + + + + SetupWizardBase + + + Setup Synergy + Configurar Synergy + + + + Welcome + Benvingut + + + + Thanks for installing Synergy! + Gràcies per instal·lar Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy et permet compartir fàcilment el ratolí i teclat entre diversos ordinadors al teu escriptori, i és lliure i de codi obert. Només cal moure el punter del ratolí per la vora de la pantalla d'un ordinador a un altre. Fins i tot pots compartir el portapapers. Únicament el que necessites és una connexió de xarxa. Synergy és multiplataforma (funciona en Windows, Mac OS X i Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Servidor o Client? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Desconegut + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Ha fallat l'inici de sessió, email o contrasenya incorrectes. + + + + Login failed, an error occurred. + +%1 + Error inici de sessió, hi ha hagut un error. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Error inici de sessió, hi ha hagut un error. +Resposta del servidor: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_cs-CZ.qm b/src/gui/res/lang/gui_cs-CZ.qm new file mode 100644 index 0000000000000000000000000000000000000000..01a1b70f057432326333b631af29fc4217386a84 GIT binary patch literal 22885 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 literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_cs-CZ.ts b/src/gui/res/lang/gui_cs-CZ.ts new file mode 100644 index 00000000..5dbe5cdd --- /dev/null +++ b/src/gui/res/lang/gui_cs-CZ.ts @@ -0,0 +1,1411 @@ + + + AboutDialogBase + + + About Synergy + O Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Neznámá + + + + Version: + Verze: + + + + &Ok + Ok + + + + ActionDialogBase + + + Configure Action + Nastavit akci + + + + Choose the action to perform + Vyberte akci k provedení + + + + Press a hotkey + Stisknout klávesovou zkratku + + + + Release a hotkey + Pustit (uvolnit) klávesy zkratky + + + + Press and release a hotkey + Stisknout a pustit (uvolnit) klávesy zkratky + + + + only on these screens + pouze na těchto obrazovkách + + + + Switch to screen + Přepnout na obrazovku + + + + Switch in direction + Přepnout směrem + + + + left + vlevo + + + + right + vpravo + + + + up + nahoru + + + + down + dolů + + + + Lock cursor to screen + Uzamknout kurzor k obrazovce + + + + toggle + přepnout + + + + on + zap + + + + off + vyp + + + + This action is performed when + Tato akce se spustí když + + + + the hotkey is pressed + je stisknuta klávesová zkratka + + + + the hotkey is released + jsou puštěny (uvolněny) klávesy zkratky + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Klávesová zkratka + + + + Enter the specification for the hotkey: + Vytvořte klávesovou zkratku: + + + + MainWindow + + + &Start + &Spustit + + + + &File + Soubor + + + + &Edit + Upra&vit + + + + &Window + O&kno + + + + &Help + &Nápověda + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Používáte starou verzi aplikace Synergy. Ke <a href="%2">stažení</a> je nyní již verze <b>%1</b>.</p> + + + + Program can not be started + Program nelze spustit + + + + 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. + Program <br><br>%1<br><br> existuje, ale nelze jej spustit. Ověřte, zda máte potřebná (souborová) oprávnění ke spuštění tohoto programu. + + + + Synergy client not found + Synergy klient nebyl nalezen + + + + The executable for the synergy client does not exist. + Spustitelný soubor s programem Synergy klienta neexistuje. + + + + Hostname is empty + Nevyplněn cílový počítač + + + + Please fill in a hostname for the synergy client to connect to. + Vyplňte adresu cílového počítače ke kterému se Synergy klient má připojit. + + + + Cannot write configuration file + Do souboru s nastaveními nelze zapisovat + + + + The temporary configuration file required to start synergy can not be written. + Do dočasného souboru s nastaveními, potřebného pro spuštění Synergy, nelze zapisovat. + + + + Configuration filename invalid + Neplatný název souboru s nastaveními. + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Nevyplnili jste platný soubor s nastaveními pro synergy server. Chcete nyní určit umístění souboru s nastaveními? + + + + Synergy server not found + Synergy server nebyl nalezen + + + + The executable for the synergy server does not exist. + Spustitelný soubor s programem synergy serveru neexistuje. + + + + Synergy terminated with an error + Synergy bylo ukončeno s chybou + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Neočekávané ukončení Synergy. Běh skončil s kódem %1. <br><br>Podrobnosti viz protokol. + + + + &Stop + Za&stavit + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy se spouští. + + + + Synergy is running. + Synergy je spuštěné. + + + + Synergy is not running. + Synergy není spuštěné. + + + + Unknown + Neznámá + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Otevřít existující soubor s nastaveními pro synergy + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Uložit nastavení jako… + + + + Save failed + Uložení se nezdařilo + + + + Could not save configuration to file. + Nelze uložit nastavení do souboru. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Název obrazovky: + + + + &Server IP: + IP &adresa &serveru: + + + + + &Start + &Spustit + + + + Use existing configuration: + Použít existující nastavení: + + + + &Configuration file: + Sou&bor s nastaveními: + + + + &Browse... + Pr&ocházet… + + + + Configure interactively: + Interaktivní nastavení: + + + + &Configure Server... + N&astavit Server… + + + + Ready + Připraven + + + + Log + Protokol + + + + &Apply + &Použít + + + + IP addresses: + IP adresy: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + &O Synergy… + + + + &Quit + &Ukončit + + + + Quit + Ukončit + + + + Run + Spustit + + + + S&top + Zas&tavit + + + + Stop + Zastavit + + + + S&how Status + Zobrazit stav + + + + &Hide + Skrýt + + + + Hide + Skrýt + + + + &Show + &Zobrazit + + + + Show + Zobrazit + + + + Save configuration &as... + Uložit nastavení j&ako… + + + + Save the interactively generated server configuration to a file. + Uložit interaktivně vytvořené nastavení serveru do souboru. + + + + Settings + Nastavení + + + + Edit settings + Upravit nastavení + + + + Run Wizard + Spustit průvodce + + + + NewScreenWidget + + + Unnamed + Nepojmenováno + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Instalovat Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Nastavení Synergy (*.sgc);;Všechny soubory (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Nastavení Synergy (*.conf);;Všechny soubory (*.*) + + + + System tray is unavailable, quitting. + Oznamovací oblast systémové lišty je nedostupná, aplikace proto bude ukončena. + + + + ScreenSettingsDialog + + + Screen name is empty + Název obrazovky nebyl vyplněn + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Název obrazovky nemůže zůstat prázdný. Buď jej vyplňte, nebo dialog zrušte. + + + + Screen name matches alias + Název obrazovky koliduje s jejím alternativním názvem + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Název obrazovky a zástupný název být stejné. Buď zástupný název odeberte nebo změňte název obrazovky. + + + + ScreenSettingsDialogBase + + + Screen Settings + Natavení obrazovky + + + + Screen &name: + Název &plochy + + + + A&liases + A&lternativní názvy + + + + &Add + Přid&at + + + + &Remove + Odst&ranit + + + + &Modifier keys + &Modifikátory (klávesy) + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Žádné + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + Meta: + + + + S&uper: + Super: + + + + &Dead corners + Nevyužité rohy + + + + Top-left + Vlevo nahoře + + + + Top-right + Vpravo nahoře + + + + Bottom-left + Vlevo dole + + + + Bottom-right + Vpravo dole + + + + Corner Si&ze: + Velikost ro&hu: + + + + &Fixes + &Opravy + + + + Fix CAPS LOCK key + Oprava chování klávesy Caps Lock + + + + Fix NUM LOCK key + Oprava chování klávesy Num Lock + + + + Fix SCROLL LOCK key + Oprava chování klávesy Scroll Lock + + + + Fix XTest for Xinerama + Oprava chování rozšíření grafického serveru X – XTest a Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Obrazovka: <b>%1</b></center><br>Dvojklikem upravíte nastavení<br>Přetažením do koše obrazovku smažete + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Nastavení serveru + + + + Screens and links + Obrazovky a propojení + + + + Drag a screen from the grid to the trashcan to remove it. + Obrazovku odstraníte jejím přetažením z mřížky do koše. + + + + Configure the layout of your synergy server configuration. + Nastavte rozložení svého nastavení serveru synergy. + + + + Drag this button to the grid to add a new screen. + Novou obrazovku vytvoříte přetažením tohoto tlačítka do mřížky. + + + + 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. + Přetáhněte nové obrazovky do mřížky nebo přesuňte stávající. +Přetáhnutím obrazovky do koše ji smažete. +Nastavení obrazovky upravíte dvojklikem na ni. + + + + Hotkeys + Klávesové zkratky + + + + &Hotkeys + &Klávesové zkratky + + + + &New + &Nová + + + + &Edit + Upra&vit + + + + &Remove + Odst&ranit + + + + A&ctions + Ak&ce + + + + Ne&w + No&vá + + + + E&dit + Upravi&t + + + + Re&move + Ode&brat + + + + Advanced server settings + Pokročilé nastavení serveru + + + + &Switch + Přepnout + + + + Switch &after waiting + Přepnout po prodlevě + + + + + + ms + ms + + + + Switch on double &tap within + Přepnout po dvojitém doteku během + + + + &Options + M&ožnosti + + + + &Check clients every + Kontrolovat klienty každých + + + + Use &relative mouse moves + Používat relativní pohyby myši + + + + S&ynchronize screen savers + S&ynchronizovat šetřiče obrazovky + + + + Don't take &foreground window on Windows servers + Na serverech s Windows se nepřepínat do popředí + + + + Ignore auto config clients + + + + + &Dead corners + Nevyužité rohy + + + + To&p-left + Levý horní + + + + Top-rig&ht + Pravý &horní + + + + &Bottom-left + Spodní levý + + + + Bottom-ri&ght + Spodní pravý + + + + Cor&ner Size: + Velikost rohu: + + + + SettingsDialog + + + Save log file to... + Uložit soubor s protokolem do… + + + + Elevate Synergy + Zvýšit stupeň oprávnění pro Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Opravdu chcete zvýšit stupeň oprávnění pro Synergy? +Sice to Synergy umožní pracovat s procesy, které mají také takový stupeň a s dialogem řízení uživatelských účtů (UAC), může ale působit problémy aplikacím s běžnými oprávněními. Tuto možnost byste tedy měli využít pouze pokud ji opravdu potřebujete. + + + + SettingsDialogBase + + + Settings + Nastavení + + + + Sc&reen name: + Název ob&razovky: + + + + P&ort: + P&ort: + + + + &Interface: + Rozhraní: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Protokolování + + + + &Logging level: + Stupeň podrobnosti protoko&lování: + + + + Log to file: + Protokolovat do souboru: + + + + Browse... + Procházet… + + + + Error + Chyba + + + + &Language: + &Jazyk: + + + + &Miscellaneous + Různé + + + + Warning + Varování + + + + Note + Poznámka + + + + Info + Informace + + + + Debug + Ladění + + + + Debug1 + Ladění1 + + + + Debug2 + Ladění2 + + + + SetupWizard + + + Setup Synergy + Instalovat Synergy + + + + Please select an option. + Zvolte možnost. + + + + Please enter your email address and password. + Zadejte svou e-mailovou adresu a heslo. + + + + SetupWizardBase + + + Setup Synergy + Instalovat Synergy + + + + Welcome + Vítejte + + + + Thanks for installing Synergy! + Těší nás, že jste si nainstalovali Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy vám umožní snadno sdílet myš a klávesnici napříč vícero počítači na vašem stole. Aplikace je svobodná a s otevřeným zdrojovým kódem. Stačí jen přesunout kurzor myši mimo okraj obrazovky jednoho počítače na obrazovku dalšího. Mezi počítači můžete dokonce sdílet obsahy jejich schránek. Jediné, co je potřeba, je propojení sítí. Synergy je multiplatformní (funguje na Windows, Mac OS X a GNU/Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Server nebo klient? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Neznámá + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Přihlášení se nezdařilo, e-mailová adresa či heslo nebylo zadáno správně. + + + + Login failed, an error occurred. + +%1 + Přihlášení se nezdařilo, došlo k chybě. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Přihlášení se nezdařilo, došlo k chybě. +Odpověď ze serveru: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_cy.qm b/src/gui/res/lang/gui_cy.qm new file mode 100644 index 0000000000000000000000000000000000000000..a62d57850ea1f86fa92b19aa28b14e2304fbc6df GIT binary patch literal 15069 zcmb_jd5|2{d4Ib*JG&a~C81*xl4xORw7NzIf+QS5(n>-QU1$Z8a2e>G>6vXb+r8;y zM~j0)Vg4{Srcx=Wva#a>JGRS837kq|0yeQJ$BE+@D4c|ZR7k2YA;d0lVoH=#6_elZ zy}o9qXJ!FwYt%D6{oecT@ArN0%{5PyM*sHB&p!O4H7oz}jxT=uU-t^p^K&8kZWE%n zAJ^{)k$qK&O&=8U-^58FR-6*z^wYS$DTM!hAu`X4?yr7Xh&7|4`%nK`h;;#`+lje>w3k;=hq3*zd>yL**08HicK7UaY1b2`2KH+>wk#Po6d|CQg0xFR;!x#o7OR3;cXleD`cYh~=+~pZ?P>A;y-9UtH3I`&Ww#cTeE?a@Qq3 z?q77IYwXqqLM+_Wb?t&Tgcx|f%bL6sbUxYj_+vYT7(Uwdz;jkqr9{o(GC5SRT% z?|(dWANXFA9UglJ^e@Ve4O&8UJ&@g5!1rqhvmfq%1^WC!_MR_(U5L@M+0S0NONf<+ zv!8qLdqNCek$racUC_g)v(LVU`%7=kzJ4RtE4+~X>3`umdTn3sOP53b*}iN4`vjgp z*LUxmtFhiIeINfW*3Ite`?Hs!*X-l{t6mw0{d}y`H}{M~1L%%<8{O$9&jt!jn=ue=J-yFE*+dE-T zFAhA?g?Yq11LwMn827P(r@CC&&xpEieS6@0#b1HG9}T>G;LFg%CkA_O!#q8o7~J|v z@VVyagXWrNVSf(~Izzw2JX;6vI`hx4vlj;MKL$RxT{ZZhAG!^8_;*9gzkutu*`aH@ zA(yVVh6nz@0e{Pfx4!xy2&GanJDi|1Aiy{?PD`m+k`HZw&v> zAAcO{zhnw=>xm1PxQgjW zZ4pa2lBYRvpmc2X4_Z46F4zW0G85&J@b6jP+c| zr;0yKOkxFmj+hua<`}N4>DrX-oiU^~(`B{81kI`*31*y!mXC2%VSq#%HN}GD05;yan$o_%4nQ zt4>UrFa_l=co+DKQPOHt?X0dJvoq2-kyT|%cCC$>4oLH-d&8CEK~DXGgKPZui;ASXq}4I_CB|i(NMX$M(xt^ zjZ$mMc19~DeSE&FEvsKG@bWgx3(gpu{^N~LPFrm-L9Kr@fCQ@20U`tehU zAX8W+8K|gCOn`L_1T77pC{83i>H4ijTZ8a5%vPV<*6+7G1F;&Sc4v&DSvHHh%sVOnoB556AU0y+hAu7O!$!~d-MBCrnIZvVcoP& znihOiX8s%!wTg1p#M1{%CHKashh&bN#tKfI_x9!w8dWL!<`GQhOyUlN8&j0cPk6eM zO40zJ2d!ZS#vNNjF9z5xmQXA(vbn;G*yzhEJ}In5vi6E&Ajk&mjEXv(TEqK55RnCh zPyoRn_gn~-Ye+zp$f9fZI(7}-P9^J_tB{ea6(vB>$}L2B0CC))5M@{i0}Uy#@W)VN z1~I-ZT@kmJj_a0Xds@vgJtJ7$cLMWkLBqiymoPh6uw|7~+O7w>RA!;y5GK*oVnnez zghlbfmOgDDRnF>FQwD%WRa_GZqK2s`XeO=F{K$#eUpH?1)sjXDxcY3P0FYOyheDbu zTveA)l^_@bm|9^@_@59~g#t$2NtjIuuc|Pk)fXMKT~9IUYR2@8C$Ur`r%povYPVLX z{Gtp^rc{uJ)$5H=L12a}-Y3ZO0@EQXvqd4I@Va9PXh95B0vBSwfaEYZ1(vH7tEORj zM4T{T3-AVSQzf?}MRRjOc2`Ei9O}Ttbs5^hZ$u9;pj~nFX|1SRQfrflnT!Z3DK(0Y z7&>Vb3Y^vZCw-?X3jB+f8J%c02HhdyqrqCC9_bQg+qY5)-T`o`;O-oZyrJmBXQf7} zkQJ8!5@Ojd4;KQS;3AH1S*BG<747E0$==-x7bR9`H+!MO?4&$OK?x3)B<7dK*NXi4 z>qr4|LJC#hb%?~W(KWJS+!b9_Ib6j&sw&qpTNTf!ii0(71#^bkG(=V`rLBb2 z%c0bPm8MNghs$feWt;_K!du{HR990P!h&(u^bmtehGv(wb=wQqOgg*x3PPD{s2U%Q z3=J)f8J~9UXeGmgf4Zq=c;kB%Wh^iXQL-Jygs>N)CD@5La2(r7OFH+~`CW6~ZLI55 z>|;1hN2s0BgtCQ1>PqP2iW9)A##y82d-`Nm;TQ>F6_N?#NXa&opF=IKmnz=-e$8B| zB+T+Fbf?Dj_kQ>ae6KTKUArQ_YiKfuzcDodG=cZ3_7xFp=&$N2)sy2K;b_?jkbK#JXR}Mi z!oJtN1@i=GjfM~N{}FD3g0Psr|gRwuRwRSB+8n1 zlUb|*3P$1R2xaU6gW8Vn%%v0p=(+ulkG54w_7n-Z!kQ(C#aKpohLtLkHxeQ#1xByh zvouvrCIy9U`Dt1jAlc|tSa7r~C-7`~nClb}X!HjmQnivwQv9EEP-*Ps#R;l?xo1h^ zcf@s(Xn*f?Xj3v@14%=O5=+bCCQa6j*jmM$g0|0=23pe<(4LGdNJd^&Iwq?(AcWd= zX^CY1o%==ky4HPwfrsLLK(re$gyLAqsvb<|@~YBpGgOP)2@v!+j3aKSGl#|d088@C zrJ`(%q){~1FjcZQA0~%-TI1;rZ9;;qHdM1|Lh59%G*WkO{w7~FP0~mjlDiZ%u9l6B zv|&4%I8h;mp_Ab`v~Yqv0;g(1WTTKw(bMaCch5W`1 znL&1lG}rJvfMD6OOd~%l4q<%U@a#EcS7?@L&!$T?(@v-(avzGmO8*C;u`-SudP!E* z=}R4lyn+%X8q;&!w^|W5Dr@nusL`S=r?^7RVYGJAyi0dv<&?JU3Jg!de9-brTl~G2#22TO#QCTuPFv}Yc@*EF-G<)CD60w$ zOIo(t^a?9nM&URc#6e-Vq>Ul4&cL;bf$c_FCv4l8jfExB6I$7R|3n9~ zkM)DLWTe_m*pW`>G1j_DP(KYeRM)KtNmkhE@Id>#`U0exB4T3CI9xEg=V zW(4T5#f8sp6dNMewuNPB7-eM()78c{7HDl7uD*H?T4!t{%6l6(klenTj!xc*x>fRi z>RnPv=vaJLG;VE8qgyG?gTz}B&@JruaucZv;phSOXN{#ApX`cD~rnO!8Ptdm^a9#RIU3|>L&H=xOIQP$pZ z@>!y+Pitzt2493;t@c=?iWVcms2YuNo0UtP0Wvx4_zuUMz8!4}O#YlbOAL zPrhnmlYJgUtc3Sc#%!b#CTt0WRlireaIfuo_Vku;%eFmf%bMntrA)-+Krmah_1S*9 z6|&dIo&ek7;~>+KnoLH%!ExI`!q6tn{9T5Ob?xWOO4(0GBxR1+*1UwiA4{`s8d+*I z#b98Yc^cQDt?e0}GNod(s9X1O*Qi4$;M7WQgy0(&gzno2adOo4k9vl}*3JMD$G z8@nRK%Nvi+^yk$UtaPk)lMNv1vI`?Kdc;#Ej|58XwHvxb!U1&{io&S}?fvb_IBV%<>jz>9PX($^GC=t4Nkf199xoVXR=mlhS_R&j&huqCuLlq&Rhp- z!u8*k6frAn+xXZDcL7aMNom)h2g+Z8w4^Rcwc=iBQo;G=3==nJAC_9Oj9PeXiK>Xy zgpCybya0m~_5}?xDKHKLm10p#ZwKysj*#(9f>_M2G z8}%VNSpZ;bvrRJ!FnzEPCxi{<9_yXb37hp15X8Nt1e3NCOKH1gRd$UheV`y|u#uF& zf?g_trC5v|IcSlk_UD5WJMBDrK3S^o{Uxa*M!sW`O3g0EjeLk*+p(}VfH=uRc5EG} zeGH;moHB``<01uqV0kz^S~aaR9g{}mv0kRo_+W2PWk>TbQE);FgRratJ0&?SPLP;d z`QlrVU&802>6ZrQJo9>)2gPc-$!=Sx`8T(mpY5g@DJ*W&$SNsXYh|z&Othq2F7N3x za&y(RIxTr5r3*p#2*YFqMX)F{Adj1|V4%JjE}7Ms@tNV!m57MCm_3O+&I3ZQh$hpv zkIyudj(Tj>lwMHRlU^L6;sz)<0)D7@HY8Z@#^=hi`;1AyvV#I?H8>|hO#QBJ@BVOW zx78@NoCx_CiBzEsfkcAH++daM_KO~o10lh9&=K2{bxFH5n__%4yspjFYKkG5Zb&xM zVO-Gmozxv3?`TK!;sjV#i8KzJqtUK?l}Cz@>1_#JWqe!+wfQru>GNx8BQ;I9F#@7t zV@>5pqMPesz|4;{UN5oVvnU7#$bIATOqAS#8BWj|H3i;p+beC-9-ca3E#BPaqFWK^ z#w{4NNl5I%+@_FAco2lVDOA(!s(R2|Or9Q&4q0O+wUXKhCc0B|^S}o;eR%+oyJ*}H zW-&)d%pI5qsx76qnn)kf z5qTvRWfa_lS=km~cfWwo`y>}(Kbkx+kST7G+pOvcR2<}zkiJ=R@#ZaqqB>ZU#1A|h zuC~mZC8D&Yo?yOE2WdzvH=?*!h(p8kUrGst%OO$d@5@1nnA`CO!$>Z{P z-j}jC9nr)Yl9J#&)I_}PtmMIBhBD#IUZB;`3MfVPi&S|>`rBJ9WyT`~E_xB_cmvyx zq+_g3`^43xC)@=Kt>+}}Sy+>3*p-&U^@c>hS1fX#$hA;jEV47 zjw%`MnavWDnBICQtnj)H{qREvmN}f zNFDA(_n;6q;Q2t&v0Zn|3=%ZF#}}EBpWFVLl%K literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_cy.ts b/src/gui/res/lang/gui_cy.ts new file mode 100644 index 00000000..70b352c9 --- /dev/null +++ b/src/gui/res/lang/gui_cy.ts @@ -0,0 +1,1407 @@ + + + AboutDialogBase + + + About Synergy + Ynghylch Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + Fersiwn: + + + + &Ok + Iawn + + + + ActionDialogBase + + + Configure Action + Cyflunio Gweithred + + + + Choose the action to perform + Dewiswch y weithred i wneud + + + + Press a hotkey + Gwasgwch fysell brys + + + + Release a hotkey + Ryddhewch y bysell frys + + + + Press and release a hotkey + Gwasgwch a ryddhewch y bysell frys + + + + only on these screens + ar y sgriniau yma yn unig + + + + Switch to screen + Newid i sgrîn + + + + Switch in direction + Newid cyfeiriad + + + + left + chwith + + + + right + dde + + + + up + fyny + + + + down + lawr + + + + Lock cursor to screen + Cloi cyrchydd i'r sgrîn + + + + toggle + toglo + + + + on + ymlaen + + + + off + i ffwrdd + + + + This action is performed when + Mae'r weithred hwn yn cael ei wneud gan + + + + the hotkey is pressed + pan wasgir y bysell frys + + + + the hotkey is released + pan ryddheir y bysell frys + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Bysell frys + + + + Enter the specification for the hotkey: + Rhowch y manyleb ar gyfer y bysell frws hwn: + + + + MainWindow + + + &Start + Dechrau + + + + &File + Ffeil + + + + &Edit + Golygu + + + + &Window + Ffenest + + + + &Help + Cymorth + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + Methwyd cychwyn y rhaglen + + + + 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. + Nid oedd yn bosib cychwyn y rhaglen <br><br>%1<br><br>yn llwyddiannus er ei fod yn bodoli. Gwnewch yn siwr fod ganddoch yr hawliau cywir i redeg y rhaglen yma. + + + + Synergy client not found + Methwyd dod o hyd i gleient Synergy + + + + The executable for the synergy client does not exist. + Nid yw'r ffeil weithredadwy ar gyfer y cleient synergy yn bodoli. + + + + Hostname is empty + Mae'r enw gwesteiwr yn bodoli + + + + Please fill in a hostname for the synergy client to connect to. + Rhowch enw gwesteiwr i'r cleient synergy i gysylltu iddo. + + + + Cannot write configuration file + Methu sgrifennu i'r ffeil gyfluniad + + + + The temporary configuration file required to start synergy can not be written. + Nid yw'n bosib sgrifennu i'r ffeil gyfluniad dros dro sydd angen i ddechrau synergy + + + + Configuration filename invalid + Mae enw'r ffeil gyfluniad yn annilys + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Nid ydych wedi llenwi mewn ffeil gyfluniad dilys ar gyfer y gweinydd synergy. Hoffech chi bori am ffeil gyfluniad nawr? + + + + Synergy server not found + Methwyd dod o hyd i weinydd Synergy + + + + The executable for the synergy server does not exist. + Nid yw'r ffeil weithredadwy ar gyfer y gweinydd synergy yn bodoli. + + + + Synergy terminated with an error + Fe wnaeth Synergy derfynnu gyda gwall + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Fe wnaeth Synergy derfynnu yn annisgwyl gyda cod gorffen %1.<br><br>Gwelwch allbwn log am fanylion. + + + + &Stop + Stopio + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Mae Synergy yn dechrau. + + + + Synergy is running. + Mae Synergy yn rhedeg. + + + + Synergy is not running. + Nid yw Synergy yn rhedeg. + + + + Unknown + + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Profi am ffeil gyfluniad synergys + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Cadw'r cyfluniad fel... + + + + Save failed + Methwyd cadw + + + + Could not save configuration to file. + Methwyd cadw'r ffeil gyfluniad + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + Dechrau + + + + Use existing configuration: + Defnyddio'r cyfluniad presennol: + + + + &Configuration file: + Ffeil Cyfluniad: + + + + &Browse... + Pori... + + + + Configure interactively: + Cyflunio'n rhyngweithiol: + + + + &Configure Server... + Cyflunio Gweinydd... + + + + Ready + Yn barod + + + + Log + Log + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Ynghylch Synergy + + + + &Quit + Gadael + + + + Quit + Gadael + + + + Run + Rhedeg + + + + S&top + Stopio + + + + Stop + Stopop + + + + S&how Status + Dangos Statws + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + Cadw'r cyfluniad fel... + + + + Save the interactively generated server configuration to a file. + Cadw'r cyfluniad gweinydd a gynhyrchwyd i ffeil: + + + + Settings + Gosodiadau + + + + Edit settings + Golygu gosodiadau + + + + Run Wizard + Rhedeg Dewin + + + + NewScreenWidget + + + Unnamed + Heb ei enwi + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Gosod fyny Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Cyfluniadau Synergy (*.sgc);;Pob ffeil (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Cyfluniadau Synergy (*.conf);;Pob ffeil (*.*) + + + + System tray is unavailable, quitting. + Nid yw'r gilfach system ar gael, yn gadael. + + + + ScreenSettingsDialog + + + Screen name is empty + Mae enw'r sgrîn yn wag + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + Gosodiadau Sgrîn + + + + Screen &name: + Enw sgrîn + + + + A&liases + Ffugenwau + + + + &Add + Ychwanegu + + + + &Remove + Dileu + + + + &Modifier keys + Bysellau newid + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + Dim + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + Top-chwith + + + + Top-right + Top-dde + + + + Bottom-left + Gwaelod-chwith + + + + Bottom-right + Gwaelod-dde + + + + Corner Si&ze: + Maint Cornel: + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Cyfluniad Gweinydd + + + + Screens and links + Sgriniau a dolenni + + + + Drag a screen from the grid to the trashcan to remove it. + Llusgwch sgrîn o'r grid neu i'r bin sbwriel i'w ddileu. + + + + Configure the layout of your synergy server configuration. + Cyfluniwch gynllun eich cyfluniad gweinydd synergy + + + + Drag this button to the grid to add a new screen. + Llusgwch y botwm i'r grid i ychwanegu sgrîn newydd. + + + + 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. + Llusgwch sgrîn newydd i'r grid neu symudwch y rhai presennol o gwmpas. +Llusgwch sgrîn i'r bin sbwriel i'w ddileu. +Rhowch glic dwbl ar sgrîn i newid ei osodiadau. + + + + Hotkeys + Bysellau brys + + + + &Hotkeys + Bysellau brys + + + + &New + Newydd + + + + &Edit + Golygu + + + + &Remove + Dileu + + + + A&ctions + Gweithredoedd + + + + Ne&w + Newydd + + + + E&dit + Golygu + + + + Re&move + Dileu + + + + Advanced server settings + Gosodiadau uwch y gweinydd + + + + &Switch + Newid + + + + Switch &after waiting + Newid ar ôl aros + + + + + + ms + + + + + Switch on double &tap within + Newid ar ôl tap dwl yn + + + + &Options + Dewisiadau + + + + &Check clients every + Gwirio cleientiaid bob + + + + Use &relative mouse moves + Defnyddio symudiadau llygoden perthynol + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + Gosodiadau + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + Pori... + + + + Error + Gwall + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + Rhybudd + + + + Note + Nodyn + + + + Info + Gwybodaeth + + + + Debug + + + + + Debug1 + + + + + Debug2 + Dadfygio + + + + SetupWizard + + + Setup Synergy + Gosod fyny Synergy + + + + Please select an option. + Dewiswch. + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + Gosod fyny Synergy + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Mae Synergy yn gadael i chi rhannu eich llygoden a'r bysellfwrdd yn hawdd rhwng nifer o gyfrifiaduron ar eich desg, ac mae'n rhad ac am ddim a Ffynhonnell Agored. Dyna gyd sydd angen yw symud eich llygoden dros ymyl sgrîn un cyfrifiadur i un arall. Gallwch hyd yn oed rannu eich holl clipfyrddau. Y cyfan sydd ei angen yw cysylltiad rhwydwaith. Mae Synergy yn draws-lwyfan (mae'n gweithio ar Windows, Mac OS X a Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Gweinydd neu Gleient? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_da.qm b/src/gui/res/lang/gui_da.qm new file mode 100644 index 0000000000000000000000000000000000000000..280988fbc145fc57c9c5d6b35a36c6ba82070b25 GIT binary patch literal 22064 zcmd5^eUw~fd4G3zc6KxS6_SuILb!>^%@VQ`5(6HV&BA7rkic%TWD*im74FX5*&TLv z?s)IaZWe`lEPqr*T6^$RtqS-_#iH$@1@VX#In-(ej#%-dQhNlHYD+~ATC23b-}~P8 z-aE7NvBZCBj?C=c`@ZklSq zhNtoQW+7tV#pmA(5&xVJ7yW^d|2wothzlkwINrZcw0`R2 zLYQ9?tq=Tz5WA1!(d|NPf2)YS^a;GbR5_AlVQj=R<8 zu748SpW2F_za_T+3^aCPX|B6|SX{*U*1O^&&bR(&;v&x1X^E@8j^~4$#8v-svk?8i z6jy)#K_Nz85Mv*h1f6$_6W_;s=RYM*J@|Rh^Izinm$2@@@5JfH9~B~bnK<*iUxIHX z@#Ql~A=dtl`000sg}C&v_{Di`cpew8+>*lhcek8Z#`9HcTKZ2f6QcXZmc7gVQ;6O* zErrROu&-Rp=ROO*E`LYM!;icwMB6u7zPa%qg=n2_dG&%-LhRhqx@PVXAr3v$y8iSX zLLAMs9+<;=D{pAM;R3wB`N>xMr&#au6|MKqUna!5*49ry^c%?G)z-i2{fZFV-rM@{ zy?0{27pu?nHnhdwk9m9UZM*!?EkcOr+YWsazfV5Vb~N##5SvW(dDTzU=b_u%-t@yY zkjss2Z)^RC5L;*39;Lhz560pTJq><*ICkR52f*wHV%L`k@!q+y{0*3|YczJtGuZDY zH} zk&eATKaO!Pcg&F9iy!D%NPk&~BfC4^@zO@j+uHH2FN5xQqT_F$g?`6pJ6^u>R><=! zo#+2(6ny$l=Pd`{2R;6F=i478{cr5N>%(}y_m$2stoVfxuYZ5%uO50Q^knn0!_VFz z#G1inS9gNGgWbz!UU{7mm)yB*?taX7*?3~*osjd;SmOMFOCaBi5)&WAe3w6;$h`7- z@Mk)4>m`uO;?}o-z6TQDz76A6e5xz8QlAs?F6-g@A+KcD+y3=? z;Qx5n?FXNSoeikZ-A{LY^K94siHAVvIbA=z<|^##Pr9#s>mx$+J=uNix;vns zuKHZlsXoVl+kNa;n741H`}iL{2mASP_jO;~1ADu-`-3f5NBm{?r{1<5>)zUZUn}JE z`lH=nXz?KLKUJRxk9R+oeii$CwENkEABTQC*8S2qA1 z`|kfu66=-wo<4UN>+S4&`7`f=JzkI#V&aN6P#PDeI4Wk~5&0ckG>^`7;InUJ(kYkr z=d8Rlwa@bG7QVa+ug(fXq{M;3tYMlzH!jYkQty8PiT_#+E{_ zJ>3pW=R$2}Fr6dW?t#fUQEWK|Y{?UD#Dp`TH7l8s z1I3hN3F;$NC}8o*)O@a#o;Gp?Ba?G&sS@=?SUGEb!7cY^U4qOm75k;EXq&Y(J*wfJ z*nxKn&>}b3!1>3ga}cJ|aD4MM+|C&D(~Wc`j(Kd63Fe7qd`qsa3%z1al1b$PC&OWR zJ6o#Hus8(Z3M+WM&Bz~@(Tu?!n6$yRhH$|CoKU}`n9;JV(;y4Zfd&0=KG`OC$>rc(J<*x$VFNf zO*8bU=h9m#vot768mgVCPgSE8Xsc!LrdYAU>dF;-3vIB(TFFdpNVAwsu`~2i@scw& zmAC6t8H4vIhC(eD>%Y2B9EL~{WCA}ni4`eM7lNb;N-qxvTF|Tt|K>9|j4|5|6iPPy zCRpkf?Q|}iOItDyAOgsziqSFzEk7iEVO22b7Kdv1&$xP5ZldO}<%rM6Kq@tI3ZJ3Y zwVMYrIjJ#;aVu9inJd8RWSH*6n1j^SfKTn_!JOi1^}F48_YicE;W6ZEyLrgYOV-wU zKP6e}MszK1rb?Dulb8e+;DD&u+VQ$mbNXJqeH}=r+{zKx&|#|mkx|toeNPNQF^A#% zIL?rgbs=Yk6SQ1QY zU+}8m z&likZg@RKu=G|P$_K7IFzNy!tSnXux4#Q zi#aQwlP%jA1JHhisur&f*_qS$(l6F%sKQXpC_Mkqp?fb<`>6Gf<+E;aPLl zjDa>$PRUwIqo6l@1md4AyQ@yEP3>Oxjk}q@>!~k?o3K=LvSJ*A&))f;9s)8wb zfVpzMdQDe9kVEXpd0%0w5#4*5Ts>Rwr@>1oGucE|R)xGho2uo)PQ<2?9ww zQ?4~@q^*LK<0K*(eYS!G)eOB@T!rDx_3EpPW@8fmD%||q)M5p(ykxTGu2u)jWU<^$ zQt!aqfa)$eSr%@qHkrL}NwreZjz|((y|sOnW2CdHminZmWDeU8^)oB2OX^iX-&%hi zEk_zi)+rZi8fda=;l(E4L11>S)C@!A>3Ca@}z z)n2J4%l?1S?OR22x?8&I^1E8M6)vvSca=<61CgkwP}K*W|4|Csf||$(Z(akdp*1ob zYJbL{PK?QUh{;*y_v}M}dG`@2cl`^ZEpBkfmB-8)JK{nKjyDIfUTNF^XZ(HdA zCNaF0(`n?~*>WCM>Brg~hLtZ(JLM@EH_P<2jWS&>Yb-crW16AVD`$~y zN|=Cp%xunMt~513U{BOGGQvkXn+c_La)#B#r%!ROxw3 z!QII)>tj(xrF+p#3yyXEidvyy14;xnjv)v_BPw%_S#cWS_}t;H~6WR-BuLSKQWDo99}Dz$B}c0VRj?yPpIOrxSy!$Q<5b8%)U zt4_6O++JgP<^PCCG{mZ;I$XduQW8Zqpr6&F6ioRhSVEZ6qk5Ff$QoWPq7=UapcUv^ zyLoL{)w61iS}j)!i5@`4Hxc1Wm#K&~4o}o&2kTyJae>@P!4|(9<%JsBe0qaMxsl$00mR*m^x~>~?nXq^b9lnAG8tKi_Udja zj*~5*;(*<4W6o540gZ%+Js1&dq(_~ww>-f?@Ot|(+sf26^Elqekznw4+p%(?9yu%2 zyO07;`xs!uOg4dW#>w2xmMe3^S}b1;^mG62j?( zmFZ^G2Q;FXwJa5Pl@AT!#Fdh2hMfv4Gp1~uT+4*Y2g;RE3DCj{3thD~w@Mm~Ja+}@ zssb2VcXvu2xf-ly)m8uXekH4s1$U;J7;n7F&BYpdxlXBUQGJQ&>U^y|E~VsBYuuG$ zAH+zsNU>DsVY;MNU!Wl$&pUx~u|&;qV3o+BE?ZZjMyn;VxX6g+0}4f2X5SHeUJ2@C zE;D79HKm#;GT?WlX4SA* zPF*)dzt|37k%mpPq<*2e9REh7cPGA6+8up!ySOl*>SA3k(4j>Zls%(=dy?9H;pLZ) zph(H`t$eoqLK5C_?a|4bP*0G1pFB%?J%~E}8mZk`pIUD!y#!)UNn&X{tX@vS2G!{R zYcq;PAxu{xvijVHP&yJ-eAg5@kFBW%52=Vza;*g(tdtAEvC0kuNr()qGR3Ii;%*S; zw`2s0xR|8cHSkpt$H66oGPwT>?GDt5qZHbn$a3Ln1ao24F;aqPm=9CESY^uLzacDI z7hQ1HLQey<1LqEw3_JB#{b++#7w3DbG*1;~xSGX($@>Ff52Z(mG1F8hI%E}T*EY(>v-&G4;l{)|x` zlGplVp5Ijz3pvh}Lhj}2bB}S=<5`sjox$M;)ux)6u089Zw82;9?+vnZ+A2(`XA!Y9 z;VF}eybtr_h#c_~-#$LiSB<*pK zqQLk7_Nbbk1)n=dOlsOvc$1LPlPEbPp?xH8E`@-&92*|aw2kCt+e71xo8kzF zrJArYfyS(Yk3JOOGhp0+rCs}+QpuSe&<#t zCjxS%n;{E(Mx~A$shoMU0=SLm?$o9iY&%A~YpzE9vb*IBxHt-FOhBa!B#lS$(=|X- zp{5stiO+%67^5Q-DP!#D=rz>#=Bub48m@8#;Bma^8q2xHkrU&uVTm2VMp7XD7`8Bm zf6X?tk_)9qj~yKwJFB%$fkmvZQVn%?!YNpkO12nd!XCTTTjuY6EJJC8DiR+zalW(!JMYABIXDnuY#bw-ubYthlgu5%p+}s8EJrogM`kuAPz0OY zqIHXolvzgQeF;>rjzoA9{H)FZdwg7F1}R`;inc`NYhKvt^JmwwZYj(Pym7#+cIk?j zHrD4=WGorgeC!tS9shWDDbBF-xKmuBCp79zyx0#eCV>lDKgu?)h9 z7B`5ok*jiqJ~rDA7&?i6bf0XdW+-D%v^GR_ctZE8k7xM3L0vC6WIhh1eL>C@g>O2} zOh6fnSc|RV>_k`9?&@`U_)W8;gYb{!0^vGCX|$@??yyp`!LYw8 z6;M~JYOzX+t2#9~{iw{2(vqE(O+n08V(jC;RTX&jAi)^`V zN<(v$+K3oc^!Ib2K*B(%vbVq4R#u~#)`Y1Mc-Jbv1EtFD`lg#02C|ux6VZ<-e?Xh8 ztbaBS3TsC)bIemSsQAm47%x&gY{Z8xbxn-U)C4L7Q2~E?0$6GKZS0NazOhQ&RV6im zxacatZ9pKfqQT&vtG6VFDQ*ev^| z$qJS7QFjTHDXUu0*aUO}Huj-$qnS_3t2Zo^hQ%t=j}YwtW0z+JESbaa`3;TIc&hI% zob;cvwU~^lU}Ye%i}yQ)ZRj?%W^BX6nXNtLvTqIDLu@1GWd_x7?fH7sRAJwaps0ce zYcslfqpJuEH|&{G;f=`-LlrM9gq$55Zk(ETLj`Fwo#-e`hP!`Jkvi*!O zmX0x5*Fm)oQD(}`Wf)=VMx16MZ@E!kVp2i20ButSscR+tDWp_gBw4%{Du=F8=?hWy z>)~N2=j>YaC6Rzwe?M-Als4cg)~N?r)c&IMQRZh4W0-w}GJKzuVZol)w`sKCq!3Xp zlJ%qD5CHfd#U`o2$wa02YX}@T!bW#@u7r1^Xa!0iXbpx*Ve%&C8~s$udd^5>iE#9|y45WXRa2 zds>dXl!;sbM*|nqe!%oEpfqx3z0rFw5lGRoWJGZU>xVZEV@GVWDWc%%HOoYB9|5@? z$83{Y(=3FubdCifG8UhC=E5Uc2qoYR0)su}oM*rqYDhM3m!aTONtfbuZ=_p@h!$Z#tS*7I}s-Z{^sc&}`KqASK;q z@gg?KfD+BIcy`Sy1kF#yOJzjT(1Hzb@YjaLWRy=ZOIA@f)8-1zNHAsE$qg^9yocn| z3{%=hIayW&>LH;3P;1lTCK)+EsW#1D)!QPl6$~zp?pFrTbK~ z%A?k8n5SM(=oR?QeySrr^$9W8s+^(T=&+!x6rGAjJI7Uipq@qPRp$t* z2bHj2_t0=x^aUrN>Z5Qx(G#sn{EnyTRBG~s&DV^?oQr$W=WcpWy2n+u)bnlbQnzd` zUYm33(w9#F? zy6-f^8)~;<9Q^hOF441v*5hq@e$kDGi2ZZu@zCe=S0obZ(sMqKYiRl@(T45~Q4RI} zung|eI_&Bt-hlgMXgx79iu>ODLkT+!1YOy2nzm>eco(&hSx-$-a0&y9r%4(IDk%c? zM!&G%0qoiqyN3(5Y;Bdnx>witBFDX#Rx(A66h~CAaHMp>9akZ!%q0(PLU~mgP8TQ1`3YErOgekbL`o zd$KHJY`w87s>h05!RWXgy{pj%77yQDHGFrY;hlQ*U{L!3eMzJq#j9m`K>=z0c?`xi z;J9Fh*x^FfX|(8CUmHTNu9|E@E$D_4&`D6m8>&`srD6p%bog4-h>UL72HRK&3B$k8 z5I3tp@SZSZDdQy>ZQ(mHL}d@F zj=p?4h2JUvz-knuP8f3r{3{%?O3s+$qLT!dsdUq;3>Zbr^X45lBVBnHoLRZ3`om;p zd$S~2{h=Ba#)-sK_*2(c!sXTm7rFAhH;U@HBkQBJXFj_QwnYS1W)hWMIBcxdmuJH( z1n2mf1akIKdD&Gq_4h?~9{BLHqp{Xhtp`k-=IdU#5mD2b9}y2x)z9~1=E zve$>obS6ALQHV)Za(GLYflH%2HtNkH7_kzmpM`%`gsVk0koe8Tszg8vFqF-g5aJf+klg(swkXpuxoQ5-?&mY>2Xw)4DdW&NV|^b4HS{OqTD@e^z&W0QNPf=!x*>H#?h2%SwZSN~Nry#aW`k!2rj_6Y>0r}afPrwCOkMA%mKipoo#CYMXUcGyFPTVe zmDqCGNqbTS4@tore-8=_(2xR^x)?^|QUGJHin>diQ|E^^+-ND{T+$vqD|(fSV46$7 zMh?zGaTE}tXq5sfP|^r~^jFgB|D_Ngf`F?P$fJs*OKIxwJ8dKNMb9{QolDy-e+;E; HZE5*GhV-E& literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_da.ts b/src/gui/res/lang/gui_da.ts new file mode 100644 index 00000000..c871d64e --- /dev/null +++ b/src/gui/res/lang/gui_da.ts @@ -0,0 +1,1410 @@ + + + AboutDialogBase + + + About Synergy + Om Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Ukendt + + + + Version: + Version: + + + + &Ok + &Ok + + + + ActionDialogBase + + + Configure Action + Konfigurer handling + + + + Choose the action to perform + Vælg handling til udførelse + + + + Press a hotkey + Tast en hotkey + + + + Release a hotkey + Slip en hotkey + + + + Press and release a hotkey + Tryk og slip en hotkey + + + + only on these screens + kun på disse skærmbilleder + + + + Switch to screen + Skift til skærm + + + + Switch in direction + Skift i retning + + + + left + venstre + + + + right + højre + + + + up + op + + + + down + ned + + + + Lock cursor to screen + Lås markør til skærm + + + + toggle + skift mellem + + + + on + til + + + + off + fra + + + + This action is performed when + Denne handling udføres, når + + + + the hotkey is pressed + hotkey'en er trykket + + + + the hotkey is released + hotkey'en er sluppet + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Hotkey + + + + Enter the specification for the hotkey: + Indtast beskrivelse af hotkey'en: + + + + MainWindow + + + &Start + &Start + + + + &File + &Fil + + + + &Edit + &Rediger + + + + &Window + &Vindue + + + + &Help + &Hjælp + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Din version af Synergy er forældet. Version <b>%1</b> er nu tilgængelig som <a href="%2">download</a>.</p> + + + + Program can not be started + Programmet kan ikke startes + + + + 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. + Programfilen<br><br>%1<br><br>kunne ikke startes, eller den eksisterer ikke. Kontroller, at du har rettigheder til at køre programmet. + + + + Synergy client not found + Synergy-klienten blev ikke fundet + + + + The executable for the synergy client does not exist. + Programfilen til Synergy-klienten eksisterer ikke. + + + + Hostname is empty + Værtsnavnet er ikke angivet + + + + Please fill in a hostname for the synergy client to connect to. + Indtast det værtsnavn, som Synergy-klienten skal forbinde sig til. + + + + Cannot write configuration file + Kan ikke skrive til konfigurationsfilen + + + + The temporary configuration file required to start synergy can not be written. + Den midlertidige konfigurationsfil, som skal bruges for at starte Synergy, kan ikke oprettes. + + + + Configuration filename invalid + Ugyldigt navn for konfigurationsfilen + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Du har ikke oprettet en gyldig konfigurationsfil til Synergy-serveren. Vil du søge efter konfigurationsfilen? + + + + Synergy server not found + Synergy-serveren blev ikke fundet + + + + The executable for the synergy server does not exist. + Programfilen til Synergy-klienten eksisterer ikke. + + + + Synergy terminated with an error + Synergy afsluttede med en fejl + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy afsluttede uventet med fejlkoden %1.<br><br>Se venligst logfilen for detaljer. + + + + &Stop + &Stop + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy starter. + + + + Synergy is running. + Synergy kører allerede. + + + + Synergy is not running. + Synergy er ikke startet + + + + Unknown + Ukendt + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Søg efter en Synergy-konfigurationsfil + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Gem konfiguration som... + + + + Save failed + Gem fejlede + + + + Could not save configuration to file. + Kunne ikke gemme konfigurationen i filen. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Skærmnavn: + + + + &Server IP: + &Server-IP: + + + + + &Start + &Start + + + + Use existing configuration: + Brug eksisterende konfiguration: + + + + &Configuration file: + &Konfigurations fil: + + + + &Browse... + &Gennemse... + + + + Configure interactively: + Interaktiv konfiguration: + + + + &Configure Server... + &Konfigurer Server... + + + + Ready + Klar + + + + Log + Log + + + + &Apply + &Anvend + + + + IP addresses: + IP-adresser: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + &Om Synergy... + + + + &Quit + &Afslut + + + + Quit + Afslut + + + + Run + Kør + + + + S&top + S&top + + + + Stop + Stop + + + + S&how Status + V&is Status + + + + &Hide + &Skjul + + + + Hide + Skjul + + + + &Show + &Vis + + + + Show + Vis + + + + Save configuration &as... + Gem konfiguration &som... + + + + Save the interactively generated server configuration to a file. + Gem den interaktivt genererede server-konfiguration i en fil. + + + + Settings + Indstillinger + + + + Edit settings + Rediger indstillinger + + + + Run Wizard + Kør guide + + + + NewScreenWidget + + + Unnamed + Unavngivet + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Opsæt Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy-konfigurationer (*.sgc);;Alle filer (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy-konfigurationer (*.conf);;Alle filer (*.*) + + + + System tray is unavailable, quitting. + Systembakken er ikke tilgængelig. Afslutter. + + + + ScreenSettingsDialog + + + Screen name is empty + Skærmnavn er ikke angivet + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Skærm navnet kan ikke være tomt. Enten skriv et navn eller annuller denne dialog. + + + + Screen name matches alias + Skærm navnet matcher alias + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Skærm navnet kan ikke være det samme som et alias. Enten fjern alias'et eller skift skærm navnet. + + + + ScreenSettingsDialogBase + + + Screen Settings + Skærmindstillinger + + + + Screen &name: + Skærm&navn: + + + + A&liases + A&liaser + + + + &Add + &Tilføj + + + + &Remove + &Fjern + + + + &Modifier keys + &Ændre-taster + + + + &Shift: + &Skift: + + + + + + + + Shift + Skift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Ingen + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + S&uper: + + + + &Dead corners + &Døde hjørner + + + + Top-left + Øverst til venstre + + + + Top-right + Øverst til højre + + + + Bottom-left + Nederst til venstre + + + + Bottom-right + Nederst til højre + + + + Corner Si&ze: + Hjørnest&ørrelse: + + + + &Fixes + &Rettelser + + + + Fix CAPS LOCK key + Fix CAPS LOCK-tasten + + + + Fix NUM LOCK key + Fix NUM LOCK-tasten + + + + Fix SCROLL LOCK key + Fix SCROLL LOCK-tasten + + + + Fix XTest for Xinerama + Fix Xtest for Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Skærm: <b>%1</b></center><br>Dobbeltklik for at redigere indstillinger<br>Træk skærm til Papirkurven for at slette den + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Server-konfiguration + + + + Screens and links + Skærme og links + + + + Drag a screen from the grid to the trashcan to remove it. + Slet en skærm ved at trække den fra gitteret over i Papirkurven. + + + + Configure the layout of your synergy server configuration. + Indstil Synergy-serverens konfigurations-layout. + + + + Drag this button to the grid to add a new screen. + Træk denne knap over på gitteret for at tilføje en ny skærm. + + + + 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. + Træk nye skærme over på gitteret eller ryk eksisterende skærme rundt +slet en skærm ved at trække den over i Papirkurven. +Dobbeltklik på skærmen for at redigere indstillingerne. + + + + Hotkeys + Hotkeys + + + + &Hotkeys + &Hotkeys + + + + &New + &Ny + + + + &Edit + &Rediger + + + + &Remove + &Fjern + + + + A&ctions + H&andlinger + + + + Ne&w + N&y + + + + E&dit + R&ediger + + + + Re&move + S&let + + + + Advanced server settings + Avancerede server-indstillinger + + + + &Switch + &Skift + + + + Switch &after waiting + Skift &efter at have ventet + + + + + + ms + ms + + + + Switch on double &tap within + Aktivér dobbelt &tap inden for + + + + &Options + &Indstillinger + + + + &Check clients every + &Check klienter hver + + + + Use &relative mouse moves + Brug &relative museflyt + + + + S&ynchronize screen savers + S&ynkroniser screen-savere + + + + Don't take &foreground window on Windows servers + Tag ikke &forgrundsvinduer på Windows-servere + + + + Ignore auto config clients + + + + + &Dead corners + &Døde hjørner + + + + To&p-left + Øv&erst til venstre + + + + Top-rig&ht + Øverst til hø&jre + + + + &Bottom-left + &Nederst til venstre + + + + Bottom-ri&ght + Nederst til hø&jre + + + + Cor&ner Size: + Hjø&rnestørrelse: + + + + SettingsDialog + + + Save log file to... + Gem logfil i: + + + + Elevate Synergy + Ophøj Synergy's rettigheder + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Er du sikker på, at du vil ophøje Synergy's rettigheder? Det giver Synergy rettigheder til at interagere med andre ophøjede processer og UAC-dialogboksen, men det kan give problemer med processer, som ikke har samme rettigheder. Ophøj kun Synergy, hvis du virkelig har brug for det. + + + + SettingsDialogBase + + + Settings + Indstillinger + + + + Sc&reen name: + Sk&rmnavn: + + + + P&ort: + P&ort: + + + + &Interface: + &Brugerflade + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Logning + + + + &Logging level: + &Lognings niveau: + + + + Log to file: + Log til fil: + + + + Browse... + Gennemse... + + + + Error + Fejl + + + + &Language: + Sprog: + + + + &Miscellaneous + Diverse + + + + Warning + Advarsel + + + + Note + Bemærk + + + + Info + Information + + + + Debug + Fejlfind + + + + Debug1 + Fejlfind1 + + + + Debug2 + Fejlfind2 + + + + SetupWizard + + + Setup Synergy + Opsæt Synergy + + + + Please select an option. + Vælg en mulighed. + + + + Please enter your email address and password. + Vær sød at skrive din email adresse og adgangskode. + + + + SetupWizardBase + + + Setup Synergy + Opsæt Synergy + + + + Welcome + Velkommen + + + + Thanks for installing Synergy! + Tak fordi du installerede Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy lader dig nemt dele din mus og tastatur mellem flere computere på dit skrivebord, og det er gratis og Open Source. Flyt blot din mus forbi skærmkanten på en computers skærm til en anden. Du kan endda dele din udklipsholder også. Det eneste du behøver er en netværksforbindelse. Desuden fungere Synergy på flere platforme (Virker på Windows, Mac OS X samt Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Server eller Klient? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Ukendt + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Fejl i login, forkert email eller adgangskode. + + + + Login failed, an error occurred. + +%1 + Fejl i login, en fejl opstod. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Fejl i login, en fejl opstod. +Server svar: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_de.qm b/src/gui/res/lang/gui_de.qm new file mode 100644 index 0000000000000000000000000000000000000000..095a69801ea51c0525c75eb31d5382711b547860 GIT binary patch literal 23630 zcmcg!3vgW3c|MX>D_Pdd*nly%xfpyg#+Dy35R4F(CHaLP!s`bp1#-1}ceQA>SGl_@ zSq`sh9+NPH88S)RkO$3+Fp$!8k~9z!S}2pYNlG##&7&bCZ6JX{VUl#5G=a3=cg{Wc zvAVk}l1yRbyN`R$`Op9V=l{R|aku}W%<`|k@}c+t%egE6?#&i1kNB z^XL9ih)YI9;(BtWwHJd+}D0kT`&HU zSpUtnc>gZ3{w3_8{UNcQ>#qE@xQO$uxZHGlEG z_kkbJtLv(twj}-n^LGD7%jJ7+hVWi#*>f+x-+Eiip^g`XIDb@K_y0y+58T^w-H*?N zTsF7d)cg@4*8OYC_o!2GqE<7ki%ZbE&r?Aepe@{H{LFmEWZd^Zx>+Zy7I-V5b@}r3-wqxG) zKTy|;Z%jOU3hQ=$JMqFdI)vE$rNqzAAH(&v#HqglpW4q%y!zFB(4Y3!HCN->c5Ca# zJmk6W^Q~Xok%9g#Ykj(aaho4${ptJO4tZ=&_O#=^HMwNZy8i`VuS%}o4mn+Lc5+=; zQHZ9WCAalq+}2BzJC4j@U-u{XpNIYJ`dsp@?LUED-;})VqxVCvHYeZHpN75+B|mh@ zfDq@tGx?D_vCp38lTWV3`m4`QKKV0zzT8f}un+X_xg+`Ff8u)fbIF%}dN=gxyta;y zzXA8XtL=)P9}%K=rfrh+ZhLRrT>3Gbv1i-<^p(|^H`#XkW1u_vXKkN<2KwE$r0o|w zZh`*Z+P>;1Ly+&u_M3OTAM!uae%s@u|MvEKK8(+I-rxSnX}=WW(mUFJ_0YS8SUa|8 z?=v?Dan`9t``XE$mlsW*I!}np?pQSQAm+Q`;f|&6gPeE#x?|PGi-qWTp=0!8m~Y2j z9hp-PL(d-UxaDHVWyg6PpS;J01d^ZHs?=)o$!-Z|9D;J}ShL zsm{a4?u35MsOwpes%z@L&cnaLyuH8eJo2_@ps9@oPo#e*#9+4bnO&cNevEg%@)YE`s@Tul^gIr)9ue_q$SN5QwN-qH2= zy*A{Q@A~lx(DTMcUC&>4J;B{~9)&)Bu&49AF8JHqv+21zp>KEfT>9Kupkryz^MS&CA8pVqDn5g=J5PIZ>3ab7IaP-X(__skx%<=H_ZnbecGd z!JKMRSa?+wWq*pcqs7UhGh3`VxK|vL>y|`bI2gL!AKHG*c1wAuxV`4sF>zcxD<(t% zGZ^^GV?19Cf{?N|-v+$T;59$DL`9TD4zIJ~Rg80Smmy~H-o-sOMjQCv!F&auij_kX zj#ILY@`P(7?Rc$OnxgF3)b z9{EX83WgNyY`HcglgbA8x3@UiY`wdsP4Vw;cIq6DOT1!%N7 zkYwx>ndeV_x>GF788j~wHZ)nC#!_wK$TFo{<JW0}&^edt6A0NG30Jt>b`|FCNbqab6{~=)}ljjN|=zf5BFBS6*>D?*2WP zzW~mlm%ELX{O4STazFTaKyBj4lR%>JFyG&VgtLlS?EsGCbgMr zpJZD#Sx<|8%s&8UKx{#K8o^a~AH_Nbw#@krF@w8ZY)5HmS@gx++YccOh_zx1R@o$9 z2jg$V_%eJy=Q=5M-oRZJ-YH75;tH__W4Gep0f@%Ikt||02lr&;d=@^}bPyfoumaiJ zC%?t6e6BhD(*xH!71x+i_{?y!8Y0ph0BG`)j8(S#3=hH?{o?~`xAbosAK)FpgN8L@ z;J`hgZ)JA1{NwOiK=(B>B$E7QNp8tCiaG(8Z<=?sjmB^_&k`*@6+Re?a4F@d*H?Yg|P zWTXpuyI7_zz@aJv4&!AkcaKO#B^O7*0S6o)AExksJzXHOATOl9!0TF4M?~S|Tx-fm zTSY1Rarj*N6a{apMY6N5YL?&&!m36A_!t+j`}n`F1j|$N)yyjO^~G{wGbBELa`;Zj zupqTU84aQ-?md7!i{&y|7~l9Ubw^F2PhMLn2~f?3gTBT`wZ^E@nptdL1={nCTvoD1 z>XN_aa&Jwo9XyO#r&5eH6a7)b!QUWy30u^-96%t2Gxd_vO_dF|QY_|+xmY2roVQ{D z*$77B@ZbI>mWF1mH(TGl*#i3Kt8Xy>ve5ieRcnzuT2o3XXo%}U5VCDSQVMO+ms81h zfeGZnsVS%DWA+&=$n!yBW+O*+3WkP9b`bt=9N#J*oyPH}!Wa@0scZ*L5kFH1iipVt zuF+Qm`68Z3iRk3Wy|_P%c^HfZSV0-INpT9_k{+I1&PpS*Um6{nQkudd-qHA|dqQ40 z#Gb5{5K#P7z6e~DF)Bs-1h70_BIZLTV8VdGu}|d7uzwkw_-XByzW#A{fPbDDE!ipy zg&ZD1)--Sy&1l9h<209IRrFw8W^1-;ufgpR^s0m!K>^_gx8||bS85;cg|_7H!gU=t z&M}^Z0xCD9&Y;f0DV#|;1{fqjXk1#kxKM@?_eLF(Elyx=ns~0D+H5kyh; z2|HaWOYm944`m#iFttpPl*+NJ{p0Q?dIbMiyYbFrCvZ1 zMIhBDs}Y8+>3jv@hyzud#lKWN1xKh4Gx)^CXG|(CW{#B!PN)6Jf6_v0ho>kuxIPqu<;#!h%1S2ekcmwz} zpNovdEJqabrS5(mX<{!6~D zkYiKeIi>V0{wTAB#tMz}g>Y1*$zx(386RuV8~8~^!5L7apsbGZwC1EBVFdt{X2n^R zYK;gi$3aS}40P_emOB>{ULgnlmI_k288T7|M@NcbG|AwsY!_o0yU;pHHU4@WR$eJ| zpkhSB+O9M534*cLBP1R?Dn9=dYk2UEgT*M3;IrV686up5V8o;22~x%!Xf(*=VGKg; zEBym;D>4g8OC{Pv88HP_Z6UE$qMs>Bwc~{1{&59^+_bpb`d`Ce$*Tp`m)vauloLpeL#IQgucn-U>9gWtC^Z`W~qyD>oU9Q8#ABQQ1&x!&{kQZQpneW6o`~& zaF}b$BiPDvEpaAl0Qp$onXwCVHTShyj9_}5Jf*Er4pLbRS`r#!UaND;T}&w(CA(Zk z93!hAahq9ISK5hs!d?zOj7tB_A_q+qjZ?Vp+_iVqure80)hN~6Vp2r{KKontJGoi{ z>#m_*iF(@ADX}=AEVRR4ruDFGWonv+ju^dYIb12$B8)bO3{aqoY+#rbh3ELxU%dl! z8OQS{Emy|iaiXDtG^M9y5tNACDOg}RdxBe}lIl2aYt_Gbv7xRxHjUdApR=`vd zpdOTB;-9{k=SQ_X1ff%(FRdMtayq-nsWoyo`Z;76>IDcl+A0-p@8IB?m1}BDxn?E zXL5E~*742n}Eq^Fe3G1$7OTN|xv6zABv+UV6$x z4-a$(wJS@yu-fZC>aQQy2oh{LgVkIpc~m|g1Mn%)3XMJkv2X??Cc=F|B} zHImsD+8i=omkEf%e}q4}DRMz20yTg`71-Z@ig9o$u#Nf;L0t!15O6*J2(~Sj9kE^ z%P{Fkwf^~hZ!-@|5z|-I-{&$k=uTlSb=p;zNg#qY1e^J6c>yx$hNhd^B8D1u+6PT) z;6nJ+ArA`!gn)q7!GgJv<&$!3(C^bSSdh&=^*4Wp>`s=F5E~`&(T>5zJDqabncAou z2kXzaJTe=VMd6^pL3Dca`Hgt>Cu9m>H?;1Qw7&sUx`w0{8>zf`QbFkY^C&=z!{zHo zf+wr7a=bC-2n6L9)`O_WN|#k^;%TvXq+?cBEg_m2(Bp>vizV4_yIfOFoC;c~D~ zN#X!THeR;_TUQ_>=;BKpbc!<2d4F@VjF*WPPMtr>X6<7( zgjHKpWL@L&%ka<$ql99tfownGOfS$no)MZT&NeRMR0}hVOdEh58;r3!dC$E z^jc#W#X34!8eWN?R!2KJmqVz?yGNn4({j8kle5f|YN|AdR4eoT2sHH-$LUX_oyv9x zlrnA)`Y-!8dEcS(ytxY1t2&wY$+j<5;SHX9p|xUby?+|PFxHMK zNVBR_far(ORM38hN`owssvfkGVWWpdda!zg{C;q>-i!8o@&K2#o2toM z;?8l(kuIX z2+W9ip&LFSz`F9en?{?_B_Vba$aWZi24G$JbW6jnYzK5_Ba?17q7|bppedp90iE6^V)j{Ph-o!Dk z%0Lm+sWkkqc;+3d(~4oX)XRki(eZYj%2VNN!9sh3Y&^%+^(*gj32qtg*4t`5NNxgx z0h4=>yxuG);I9}ivtAx@&Q&@!rmd?GGrY@!L&r9598 zzN&5>c8V9Elh&HF4HH#zJLj@{68&a;P=k*esYe+~o^~}<>GvYUjdN@sbJH!nLfYWl85>d^Fw8oQ>6tH?tg z-8J{d5*kIXvuV-&2RR~T2o&}sXB7$yvPIRMV05Ac3VouZ2356X@kiu3R0&-w7E9Mtb5St){CeKA*M^uGk01r@& zjb|(JW!xLaPB==w=3$t`QTZ~@m8xSm(lK#+l{6Lnr0-I;atfNkD7BGhDP9J=uBD^w zMx#CuNb=9m>V-JDMY2P-gN;{^B9V~K=Ong?B007lu)5(cyTub&)07&FY^ralT1QOp zL9%)VwYvteXlERMw8<->w@+m~>v3^wm5rvgqKBqqQ7tt3u?`AU+NZyhtHmoNVYZ)^fW;r*hWIm@lO7Fg4c}e^XDv<#Z5d63|&FR zW6G)EJr89=^-KU~1%SADs?mVvF_|_{r$r|actCkzm8iAH*WXqn-4Sog(Xe1AMiVKs zbijEOVpj!rUC(2WE$ut+WCbf|!n_jxco>Xg-HxNl!U|Z%bVl|1I_Ib!pW4x^4rv%1VVup!vvit-YOan0A4&4Ts_f1V z>UXL`nn#8L&*RD`EY#B(y5TgAa`o9b)+8mQQz0wXb4s8^$wyU9<0TN?C6DWT-qAAZ zj&n+jbgFfN23bmm65@FBR#{i>hCZFDOQ{sWVcFP)*Iq}vug>2Y#7}^*S-ZsF0^tkY z!V2^;gT5WzVR2Q9Mxbia>!w8R^h!ISz9`^SlRV8H3hj}8vu_b2$X zFdGawdD*F)ws?MUFLFauB{fCSDQ=uUO`kCmr3f(vI@7&gbJw=mr(U#WOSA+B-8w58 zD$K8$r=mOzSujY)K7rrssalW5FK*8H&&N@T$atzMg`ytg;iLIfnZO1tl|55@#D?7< z;HB<5jiHblSqOJh5_)hmsxdWS4@#K%5~}wF zt7yZ_lK-_PS_w1IxJh|Yq(`~dTr_VCjw+$@R_m}mUXi}K)~L>4l-S}QucREer5@?w zfm^EvZmmC%^)m1IDSu$=h<+rh7NzaFS;rrf*jvmx^_DtK4hc6u1q#y%anlS?h3l%! zYMD-DN!^jTW~N4!X_j8rr>4!*pLzrlp3}h5{K2I8V^RMpOL$ys^PM2VlvX}m6i$ws zj;pG|wFa{0ULAVJ6nuaT>|)S~SbMe+Nq=yL=Oc|sH)5@cSdC$P>SexsMzkHbTs}-% zkBM%irzh-HG@b~4TVe#BmhgxsjG32kKXZWT)%~ihKu=HHpiH5P5`&D|M(=?kSvjEJ zanaF(M+oVOKPL1HQ8-@|=9;U^D+2UnJOaSJjGL-JvE z`6x+Gh(o@m|3hhwo3!P6=mMS4eAE(sj#cZCl0JO}U09HvHBg^cxjMpdg>f{_(_oy! zqDYCf7|M`O3YD_)nooog$?{X)r87WUbBPp{4$zX;RWm+!8vXaKSHlH0wQq!LwGnG`grb^&hXx2nuW}k5_0t?o0fe4Ep@xbdGE@wtHbXt;* z#zHnn<3k1I(Qa$uRT*9YzaFT5tplaKK0p4z4QbaYl{QWzAV=9@%2>yHW$BA(hTAgz_tTRE4mI+mhkvZzB1=krtEF97(nwjH+%kgr5NvBQI= zd>#4*IjQh3W_EkOpCk*^wkv(?gcrMTlkC${c#}{;9}oSzFl3c7^VQGwYcr}21;?^| znExun(!rlp@V9e5&>tSbR6iO*4K-{6TEj`>$0PB;YhOplT8XC@9k<7o^OKam^Z$j? zu$!imlzoV^9chv9J}zmz56_9?*{^9-tL^PIb~f|6c19Od@T5cBQy;hm#UU2P!jLV1 sYU`pq@qRtYgKLmX1f^9;Wg(BU^o-d^72wGT@*|(No8E + + AboutDialogBase + + + About Synergy + Über Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Unbekannt + + + + Version: + Version: + + + + &Ok + &Ok + + + + ActionDialogBase + + + Configure Action + Aktion konfigurieren + + + + Choose the action to perform + Wähle eine Aktion, die ausgeführt werden soll + + + + Press a hotkey + Hotkey drücken + + + + Release a hotkey + Hotkey loslassen + + + + Press and release a hotkey + Hotkey drücken und loslassen + + + + only on these screens + Nur auf diesen Bildschirmen + + + + Switch to screen + Zu Anzeige Wechseln + + + + Switch in direction + In Richtung wechseln + + + + left + links + + + + right + rechts + + + + up + hoch + + + + down + runter + + + + Lock cursor to screen + Cursor auf Anzeige beschränken + + + + toggle + umschalten + + + + on + ein + + + + off + aus + + + + This action is performed when + Diese Aktion wird ausgeführt, wenn + + + + the hotkey is pressed + wenn der Hotkey gedrückt wird + + + + the hotkey is released + wenn der Hotkey losgelassen wird + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Hotkey + + + + Enter the specification for the hotkey: + Gib die Definition für den Hotkey ein: + + + + MainWindow + + + &Start + &Start + + + + &File + &Datei + + + + &Edit + &Bearbeiten + + + + &Window + &Fenster + + + + &Help + &Hilfe + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Ihre Synergy Version ist veraltet. Version <b>%1</b> ist jetzt zum <a href="%2">Download</a> verfügbar.</p> + + + + Program can not be started + Das Programm konnte nicht gestartet werden + + + + 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. + 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, + + + + Synergy client not found + Der Synergy Client wurde nicht gefunden + + + + The executable for the synergy client does not exist. + Die ausführbare Datei für den Synergy Client existiert nicht. + + + + Hostname is empty + Der Hostname is leer + + + + Please fill in a hostname for the synergy client to connect to. + Bitte tragen Sie einen Hostnamen ein, zu dem sich der Synergy-Client verbinden soll. + + + + Cannot write configuration file + Konfigurationsdatei konnte nicht geschrieben werden + + + + The temporary configuration file required to start synergy can not be written. + Die temporäre Konfigurationsdatei konnte nicht geschrieben werden. Sie wird jedoch für den Start von Synergy benötigt. + + + + Configuration filename invalid + Der Dateiname der Konfigurationsdatei ist ungültig. + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Sie haben keine gültige Konfigurationsdatei angegeben. Wollen sie jetzt nach dieser Datei suchen? + + + + Synergy server not found + Der Synergy Server wurde nicht gefunden. + + + + The executable for the synergy server does not exist. + Die ausführbare Datei für den Synergy Server existiert nicht. + + + + Synergy terminated with an error + Synergy wurde mit einem Fehler beendet. + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy wurde unerwartet mit Abbruchcode %1 beendet. <br><br> Weitere Informationen können dem Log entnommen werden. + + + + &Stop + &Stopp + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy wird gestartet. + + + + Synergy is running. + Synergy läuft. + + + + Synergy is not running. + Synergy wird nicht ausgeführt. + + + + Unknown + Unbekannt + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Nach einer Konfigurationsdatei für Synergy suchen. + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Konfiguration speichern unter ... + + + + Save failed + Speichern fehlgeschlagen + + + + Could not save configuration to file. + Konfiguration konnte nicht in Datei gespeichert werden + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Anzeigename: + + + + &Server IP: + Server IP: + + + + + &Start + &Start + + + + Use existing configuration: + Verwende bestehende Konfiguration: + + + + &Configuration file: + &Konfigurationsdatei: + + + + &Browse... + &Durchsuchen... + + + + Configure interactively: + Interaktiv konfigurieren: + + + + &Configure Server... + Server &konfigurieren... + + + + Ready + Fertig + + + + Log + Log + + + + &Apply + &Anwenden + + + + IP addresses: + IP Adressen: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + &Über Synergy... + + + + &Quit + &Beenden + + + + Quit + Beenden + + + + Run + Start + + + + S&top + S&topp + + + + Stop + Stop + + + + S&how Status + S&tatus anzeigen + + + + &Hide + &Verstecken + + + + Hide + Verstecken + + + + &Show + &Zeigen + + + + Show + Anzeigen + + + + Save configuration &as... + Configuration speichern &unter ... + + + + Save the interactively generated server configuration to a file. + Speichere die interaktiv erstellte Konfiguration in eine Datei. + + + + Settings + Einstellungen + + + + Edit settings + Einstellungen bearbeiten + + + + Run Wizard + Assistent ausführen + + + + NewScreenWidget + + + Unnamed + Unbenannt + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Synergy einrichten + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy Konfigurationen (*.sgc);;Alle Dateien (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy Konfigurationen (*.conf);;Alle Dateien (*.*) + + + + System tray is unavailable, quitting. + Infobereich ist nicht verfügbar. Beende Programm. + + + + ScreenSettingsDialog + + + Screen name is empty + Der Anzeigename ist leer + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Der Bildschirmname darf nicht leer sein. Bitte trage einen Namen ein oder schließe das Fenster. + + + + Screen name matches alias + Der Anzeigename passt zum Alias + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Der Anzeigename kann nicht derselbe sein wie der Alias. Bitte entfernen sie den Alias oder ändern sie den Anzeigenamen. + + + + ScreenSettingsDialogBase + + + Screen Settings + Anzeigeeinstellungen + + + + Screen &name: + Anzeige&name: + + + + A&liases + A&liase + + + + &Add + &Hinzufügen + + + + &Remove + &Entfernen + + + + &Modifier keys + &Zusatztasten + + + + &Shift: + Um&schalt: + + + + + + + + Shift + Umschalt + + + + + + + + Ctrl + Strg + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Windows + + + + + + + + None + Keine + + + + &Ctrl: + &Strg: + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + S&uper: + + + + &Dead corners + "&Tote" Ecken + + + + Top-left + Oben-links + + + + Top-right + Oben-rechts + + + + Bottom-left + Unten-links + + + + Bottom-right + Unten-rechts + + + + Corner Si&ze: + &Größe: + + + + &Fixes + &Korrekturen + + + + Fix CAPS LOCK key + Korrektur für Feststelltaste + + + + Fix NUM LOCK key + Korrektur für Num Lock + + + + Fix SCROLL LOCK key + Korrektur für Scroll Lock + + + + Fix XTest for Xinerama + Korrektur für XTest mit Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <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 + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Server Konfiguration + + + + Screens and links + Anzeigen und Verbindungen + + + + Drag a screen from the grid to the trashcan to remove it. + Ziehen Sie eine Anzeige vom Raster in den Papierkorb um sie zu entfernen. + + + + Configure the layout of your synergy server configuration. + Konfigurieren Sie die Anordnung Ihrer Synergy Server Konfiguration. + + + + Drag this button to the grid to add a new screen. + Ziehen diese Symbol auf das Raster um eine neue Anzeige hinzuzufügen. + + + + 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. + 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. + + + + Hotkeys + Hotkeys + + + + &Hotkeys + &Hotkeys + + + + &New + &Neu + + + + &Edit + &Bearbeiten + + + + &Remove + &Entfernen + + + + A&ctions + &Befehle + + + + Ne&w + Ne&u + + + + E&dit + Än&dern + + + + Re&move + &Entfernen + + + + Advanced server settings + Erwiterte Servereinstellungen + + + + &Switch + Wech&sel + + + + Switch &after waiting + Wechsel n&ach Wartezeit + + + + + + ms + ms + + + + Switch on double &tap within + Wechsel nach doppel&ter Randberührung innerhalb von + + + + &Options + &Optionen + + + + &Check clients every + Prüfe auf Meldungen vom &Client aller + + + + Use &relative mouse moves + Ve&rwende relative Mausbewegungen + + + + S&ynchronize screen savers + Bildschirmschoner s&ynchronisieren + + + + Don't take &foreground window on Windows servers + Auf Windows Servern &Fenster im Vordergrund nicht aktivieren + + + + Ignore auto config clients + + + + + &Dead corners + "&Tote" Ecken + + + + To&p-left + O&ben-links + + + + Top-rig&ht + Oben-rec&hts + + + + &Bottom-left + &Unten-links + + + + Bottom-ri&ght + Unten-rec&hts + + + + Cor&ner Size: + &Größe: + + + + SettingsDialog + + + Save log file to... + Speicherort des Logfiles + + + + Elevate Synergy + Synergy Befördern + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Sind Sie sicher das Sie Synergy Erweiterte Benutzerrechte einräumen wollen? +Das erlaubt Synergy mit Prozessen die höhere Rechte haben und dem UAC-Dialog zu interagieren, kann aber bei normalen Prozessen Probleme verursachen. Erweiterte Rechte an Synergy bitte nur vergeben wenn es unbedingt nötig ist. + + + + SettingsDialogBase + + + Settings + Einstellungen + + + + Sc&reen name: + &Anzeigename: + + + + P&ort: + P&ort: + + + + &Interface: + Schn&ittstelle + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Protokollierung + + + + &Logging level: + &Umfang: + + + + Log to file: + In Datei: + + + + Browse... + Durchsuchen... + + + + Error + Fehler + + + + &Language: + Sprache: + + + + &Miscellaneous + &Sonstiges + + + + Warning + Warnung + + + + Note + Hinweis + + + + Info + Info + + + + Debug + Debug + + + + Debug1 + Debug1 + + + + Debug2 + Debug2 + + + + SetupWizard + + + Setup Synergy + Synergy einrichten + + + + Please select an option. + Bitte wählen Sie eine option aus. + + + + Please enter your email address and password. + Bitte geben Sie Ihre E-Mail Adresse und Ihr Passwort ein. + + + + SetupWizardBase + + + Setup Synergy + Synergy einrichten + + + + Welcome + Willkommen + + + + Thanks for installing Synergy! + Danke, dass du Synergy installiert hast! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Mit Synergy 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. Synergy funktioniert auf Windows, Mac OS X und Linux. + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Server oder Client? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Unbekannt + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Login fehlgeschlagen, falsche E-Mail Adresse oder Passwort. + + + + Login failed, an error occurred. + +%1 + Login fehlgeschlagen, ein Fehler ist aufgetreten. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Login fehlgeschlagen, ein Fehler ist aufgetreten. +Serverantwort: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_es.qm b/src/gui/res/lang/gui_es.qm new file mode 100644 index 0000000000000000000000000000000000000000..f9057ee7cc4ed64715efce54e5f6a489864a5a76 GIT binary patch literal 23608 zcmb_kd30RWdB2iJBU#pFV~hdYJPaO;7a2QX93czKvhjkv;E@*~3r{mo(xA~i@n*)h z9JWLAM?wjw?IAr0O`wnvIH4gVO&dZQ5-82ulAI(bTN4sONTCU#iF?Q?Noaq+`@MZO z8EPMUq?vc`{qDE^zVCi_`X9?K{`xB)djG$jyX1@4-S>r`Y*nh|TS~PKDK&H#Uf+S= zKZw^a;osv*t-e<2KRYj0YVC5R(ub8gXO~h}KY`buD^>n7p1)Q#Klo9lR=rO(f95Mn zZG1r`9==1VUQ;Drc|fUUUsf%NZz{FxTdJl1KBX>tUbXD_zEYPzs9FwfS8DwdyyCgt zkE@nD5}5ZE)pGB+QpQf*L?XYygsOo|LMP#N^Vk59`9A^ z?A_{DKNwKzvh&o*v*&1jzIsy{<0qTWF5~@0S2wM^X0B3QM$_iGzfr3Dm8Qbz_1M=f zO^<%^Vx<<`-t_nruVa5VG<|#7*OY4hbkpnSEL7?(w>O`0^a-W*Zf-v7nmd&`IMTfR zDAqguBhBwT2hXSGHe0{KdRvw^KXmM^pyQ$Dk3aSr+Lm z^k3&BK7e_jnALi`*7(Rc?raAlCUsCG)jq2IO+%oEw|( zQR>3ZIZshu9Xk@q$G!u({V8#9FLb5%?!?vQK0G%+k$)%V>v$n?)AzC8^Y2L9zUpbE zwtgyccm5Hj<~)&j=vAz9$qk8z{|0)nYaw3m$Lrz5qwUWq)!&kMx)1ZN?v&R{ew_Hl zt5~=5c;cmRwkx&cV~O9Me+^z=NWA(f@Tu(+i9ddQH}vVFEz7UMYwOD`Yjcq2?w4D> zu_X(AJ<{^yJjSiRw&j<1y&Ljaoa}DHbIbQ6yI20NQhWY9xvURzx?pv3WoJRDrmrL~ z?!~wb&nLHx%qX?aNDiNe{ax|b$#=CquhgYR^49x44!tsx@9WP%Uj~yO+Bl%pxf98I z?!-QOu1h|%4C^mzNj~!*cz^N1;M4-)o&Dy_YO$oyj~28~dl$+g@1)djG5S_9sDi^0n4~cozEIdQ0o?w%n{#`{uT# z&kuo5UuwJQiuXg0f8KWMQ>1^o?cNXL{h?&r=NFt*YEy69?;m@wQY(h%?t1o}N}c)W z+}&-U@5)tkCtp2JslG#Vk3NF=2G+Nqb{FJ4cw76@wU;P0@9*39-;enQ=eK8H{T%e{ zGwnBD0=aDYWcvd*-=NgUX#4lxjd2TKnV0w~KJU3-UeDVhuZOzknU6mLzP&i_#-IKO z{QvO0JFa*EcD7VrFU`!m=TFz*_sqOU+8+a7ADs8ID|cXDtsPt5^@LLMpX@kr=uYV8 zt@3(iNnX=8b{zOU=AFN)6+e9nW6zQRv4b9j|;F@?3gFXUjVNF#o0}nz=1aQ8sDgfXT+R3sb?OO>^i08W#%F3y zxkzop&>|+ZF^P@W9HzDXX<82!CJXklLd^-f)FHig5d%-EfB4$cxo> zmB*-Yy^FlwkqH7w0%pR_xJL({n)f< z*X$Y8?^dvINbht^FI>j-m=w#9vF^hD5IPNT^m57! zes;iGTQ6Yg9Zh4of-319VaNVbrw`kiNh4Esinhaj6f=%xX{J}-#!j^#vr=$5y&ZC@ zjG6gb!uuIe6KIHVl~3FFJc}_Lo57QTpu6@vR(L>imkCDb8Bz)8o!P3(e_+ z)fKe{(!PA9$K*xuF>Y_7#pG?+DJ&hC$U#-a>hP0mbyn6mHc?M&+p*#({#_r^yF}LY zF4eVd0XTa?n^jJ0RyJfbiM%yds?EYhpqV<)U6wEnbtJrtIri9C?a@6o$2Hq^46_#t zo`l|0y~N~60u8=cDL+*V9DrTO&lq%K6Be{z?7vu>ye_>tG2@94Pg<4Y9 z>?HJFg#M`02}|R2dSY=N26ck&#LCv*!R|Lj30+xU^EFJvq9_fnFR4QWrOavQwCFv9 z_>wHybeNpzY9TZaoSkT2kAyIjzs_d(2$naIOG9`hTuv;*(yzDt72|!|tCRxY{l|#!*3+hCSv%Tsj>bU*ft&V*R5r9T%8byKcMI)o3s4-SUv9D8mb;ywz zPH1Mi6wtS1KpSO3+(-ElzMUeyz68!0G7AN}WE^vHCCeqN?6{7k26cxtb%aTjzQ>zW zqyXb`(5<8DInWaQVB^>#xMi?DE7U^Wp+4JF}*PG&(?T1EXaTw22;aLf;>Peypwc; zJSDB7f=p6~>ge<;5?K{+@ACbU5`am0!e{0v?#8^(<=Tmn$>*#>iFOTxDF9^S$EtiC z(8(tql!F~{pTzNWYTThmd)Sbue3fwknTtK{m{Uf^ENJ)hIBuhDrR5k1VD6uhd3KSOwydFd_LuVw@*-ePUXLw8M zfKf7>a-onbj8|pw#)=ii2hVn`(?V<2Tc@{TonVEqYR31nFf_kb%vu}SHY=HNa}Kv=l-h41dn;p7Is^y0&z(_W_{#kfCDT;to~Q7$=Q>2a0>wIs zCx~t&%cpZ;9w>2xMovUSbis%;;J;RPgv3M~BT7rhH;%dKe(5^AXvP|Z&_mZ8Mm|IW zUd4xd2rPNblMQhBRIUKjk~PW&>p0LkendWqiot{d$6_7NmEh5`7SYX$^}YS0&H(?p zjNkhFFks@nb1cfECxLB&n zs?k%Txq*SaNvd6IYD{&L7vQRKIsyu-D9krhxNKRV2xqsOA~f^9JRlap+zUkX1L~? znXpj&&5ao|cG;L}5$|494`NWEHBi=Ty!-;>hNYZj?mLO{*Ol5TIl+67iU)&iqhn z6JfGA!$yvUN&HnX0vd)G$tZpc(o~t{)Ts)R{L6hzb_;TF(NvAbfXg8cjm&kzRZVJf z|0|xX*VtxjwLfMGY#$A>Ulyt)?G5LbaMs7r7f@LYS*2?`4UWfRPHwh%;xs|8Uc-=30Wzs|bLFu@QEq@bM}@jDIE zD!#h@mip zy>;%|Z0>*_tk( z2b>Or-9Ve>94HrR5f-aEyUIYg!m#Xn0DqJ1n9DevJ7GFHFRmsex{`=mW76#~6;6r3 zz@etP$;an$&>~sL7i2IAzG7jg}hdsz_L2hy3N2~jj)bk)$$E(>4t70qHn&2 zCF*(6F0EN~dr`egcxNZoc0QXTRkd+_>L4sYTwpyl4CgK4lLIcEeGuh(jp*Sbqll#@ zQy0STP?;hHRi8g-x}iw4C3o+&j)|BK=d$BgNuPbOJ0Ok;Bz#wG1%jN)(_X$#kJGb1 zUmoXa8vVt7b6nbsN>yf!I_5aMU#V6BQF)BJP+f+OFCveQe1rig;#A|~q(lbS* zT1Lq+XLvYPF8D`dYYZe=I_T>ZD#GW!n41wo<8DS$yppc>SDsBQ47naI?H^CLA9$`s zPN21T-{x|N`wo1ZEH2Kxk_4(I?Tl(HPl~dVI08kf2_lvA)$q(PVN)hLcA#%KMKX0L ztWDil-vD(Y!SEpi6E_c%3DbC*%hay2QsRXpRxYv#Ih3;(dZIjH4$icNeBi#Nn#q+o zf_g(f@E9bViKm%~7lR1F^qT1&${bo+y0mMItqr)!}Hdm`Bt+{VbWe+Yr>s0W*UDnM@6poV<>O^@p#46pC)M7p1^J zk#ZYU!x<2PV_>nJscpdD2)qv9leW_OtDJ>7nJaiztWb#a_nSlu$#H8IlP$+&1UWP! z&qY(rG%abu3<&K??Xk0HyMe8s!*UjrFNkSnDg?7zQwOxz83pU_w+keub(72($O^>L zno3XP#!9o0i?q$S*5dQ1Z7@Y`oDG-Sb*m<`g<$!X!F*~qizoHilE3Vn!Mtv}slVxE z80EGasQ&1Gh!rBoi;G(AVN|anm&x& ze@I=4pH`yO#ow;N&wKFs)#^uhB0zZaVN=G?;Qq8Ryl?1A+CXC}w$`O$FW~#0nl#9# z!TLR1fA7IPr?C8R-R0BR_yKHq7=LRqVjFBY4OR_@7;zd2Ne>;^H#~d_v}~-P<%sUb zV;m3H6%;^qjyXP{ib(6wViC;XT?g zTo3jsN$kPM#_M(gXL2j7dLqaM!}r<+T|TU@`OFDZ7%FE)0pYFbR2io#v!I-|xfeDW zN1OY>h)_oD6V~Zs$CRH?*QanLbSF}FgB->BYpu}juHePr#!OrY?whzF@*1Kk`yGh> zf{@grLqOwMSSNEi>F>5BO*S?j%gYshqikJg+%{rQ&(aewiA`GF7tiH{vvkC-qYZ%Y z*ekgXz-S|4R(%jpWkV#J6{F+4x>N_xPx?JPnLw<#ocx zg5_4whwB1$)utmA3*w8U#xI40SP%0W?M1!QWrnpB#7Au7iJqvF*%DBuuj@GZ(1*0r zUxsuQJuNzV)n6(a#NQ~Kt+xgtd!x?jdgC`>{0O%0VpVKi91!6)wYuJwp|+GXb8949 zZxQ0hz3?CUo{rDcL<*%Xx{rE8d*UwAAKsSQH_i6-hO5sOMb{^Ti49Sjd)3D$11MVG z>uI!+1>nJ;W@_aj3y`$FOVe;G{c&zUUV}KUqX*#iIGq^zGE9Tvp~F0%n5S;bHtw;mUk=sg6my1LWt^Z{_ny^2zA&cAST9JvK3S+`WOtOy<^(7qm4DmCn| zBNJEW6(Oakoo-W_3Ksll^Q#p^gW8i|?8OoC@)dyy3_hJ*M(ZgO#xM zS#mpAm9*6Y8C5xoHR?g5Nl?hJo~L<=*zFDpY|tz%Ul>N90O)HjI>@{=Nobm_|*x z5^X_F*c<5z+-F|^ z8`@|YC(Xh6F!UwQNth*T3qyyNlj1glT(_!9{f^e-AT`b*6hU=PDV1jy$KlMTK72H>pt z(Pli7*8(;R1@{|X;MOOIjrbb_cHkbn6L@q$UP|#GEVt9$yVfal3|W$K%*?ShrqL>E zqVQ46D98#aJNfDW%}AepOWd_!VOjAasggOZ+ro2&MoY3ZJ*d@AUs0`_LLpI31*vyE z4Iq1>vu@L{fhj~PQV4B#lkb$=N3J*NZVYA57tse@Iny&9+(=3$XUHgi<9Di z;mvp6@Z<{K$)`9CFS(=r29$UQ_q-4wjAhM;ae}VLb1aM+&w+Y5G4$R&2)!86SI2}_ zp*raNWlqgFEYt`UQWhaZB^|XX^uVacF`?5tw-YW_yW;ZpcKLFId>+?0y?2Q$yj~x<)Zq@x z;-0+Cj&WiOxJU-kgM&l(h6sM~%NhgWRd+RKOlmKlMa^ZZC{q;d!rIDddX4Q-ih#J$ zi|%%pJC@1L^n#_^r*&BF@@k2pqjotCt)ra2m37Bfqf@Fj zr`50kSc<>?ny2ahDPDGAHwbv^b)i<-2^(;C`3Awm*At-{_Po?Cmb%8wj2xvbh|b`j zYj$A{D!pV=K`FUCHH>4{G8$-fHM!PsRzG+}-2yRmRuY~M#I_nt+nqwoBKmX24T#c` zlhayrF9sgu2{-LI536M5pRTdpXBUngb48rP=goozCrAm^nrsmq&T;UFZib-SiE(~z zq+hw#EDQCKEuE6MpxBN6ZPsX6$IDvdr9VG5Uaj{xl+-h`d5$8HeF-DnNYB|y>>~%*;>r$0eX}R3ME*A9Wun^{*>*=X>hHro$_w_2zI~ zM-}bok*byCX~bA@EXu2O<)87* zL5~kE4|xGem;ehMPBg8VSb`B565vmxn0dM)K5X0tWU@)d`G^SLQ+?TSE`6SxdUSa>T{gn zQT`;ca|qf^n~)p6Z1oUi&6$V_(|8rs7p{L*?k-wGlaxXZ#<)(fo>Udd!LXz8sL{vM zK5bl=BR#HHav{7bt2VTFQZ3%mTbUu4T&E<+b#K0~6lF(ZR6L$1g4(X{Ks!lrAy7F<-`iW;L^W--Tmm=mUe zc9!&rqlvW9eKKmJ`x)(wrDF^cQ{{XqH_anWdkQzGQ4C?NTD!umRh(R-N99Tv6pbqo zQuJ^8rZFxJXPLp*&Fn6tu|k&&^%z+RUooaJy@l3o-rYtK(VrhP6{WjU3TP&pE73>U zYg~==f~Taweg&6!pmq+|Gvf?$T9b}OK(<8VO#$?1qh-;p1Rss>5|r=1zyVpWpM~Io zjAIvzYp0PEqclHdtmLzLqi#`tjj_kf82i%35xv9VT%mmYLhXR7c_18z-v_+n!92<0 zJQq(HF(+oWMV*c3x99rNXW0n46+s5?2<8g7)0s!9Xxt@v=H#%Xfm%K*crDZ8FsqlVQfeBP;p71iCkI zt5kR~FbUOO<1W*7x&tEbc79EP&!qE#$#BI|zNmxRXjlZJhMmFJM&debZ+rU+jfv+T zwnil!X)5p0#dc{tmBTa7i8B?Ukm5TKXBXZF>E?HX64CRd=p=rp3Da=H^d8WAr{gCN zD0<-vSK@r3(@5P-5#Ha%#`|-_EpCEM + + AboutDialogBase + + + About Synergy + Acerca de Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Desconocido + + + + Version: + Versión + + + + &Ok + &Ok + + + + ActionDialogBase + + + Configure Action + Configurar Acción + + + + Choose the action to perform + Elige la acción a realizar + + + + Press a hotkey + Presiona una tecla de acceso directo + + + + Release a hotkey + Al levantar ó liberar el accedo directo + + + + Press and release a hotkey + Al pulsar y liberar el acceso directo + + + + only on these screens + sólo en estas pantallas + + + + Switch to screen + Cambiar a pantalla + + + + Switch in direction + Cambiar dirección + + + + left + izquierda + + + + right + derecha + + + + up + arriba + + + + down + abajo + + + + Lock cursor to screen + Bloquear cursor en pantalla + + + + toggle + alternar + + + + on + activado + + + + off + desactivado + + + + This action is performed when + Esta acción se realiza cuando + + + + the hotkey is pressed + la tecla de acceso directo es presionada + + + + the hotkey is released + la tecla de acceso directo es soltada + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Tecla de acceso directo + + + + Enter the specification for the hotkey: + Ingresa la especificación para la tecla de acceso directo: + + + + MainWindow + + + &Start + &Iniciar + + + + &File + &Archivo + + + + &Edit + &Edición + + + + &Window + &Ventana + + + + &Help + &Ayuda + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Tú versión de Synergy es antigua. La versión <b>%1</b> esta ahora disponible para <a href="%2">descargar</a>.</p> + + + + Program can not be started + El programa no se puede iniciar + + + + 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. + El ejecutable<br><br>%1<br><br>no se pudo iniciar exitósamente, aunque sí existe. Por favor, revisa si tienes permisos suficientes para ejecutar este programa. + + + + Synergy client not found + No se encontró el cliente Synergy + + + + The executable for the synergy client does not exist. + El ejecutable para el cliente Synergy no existe. + + + + Hostname is empty + Nombre de host está vacío + + + + Please fill in a hostname for the synergy client to connect to. + Por favor, ingresa un nombre de host al que se conectará el cliente Synergy. + + + + Cannot write configuration file + No se puede escribir el archivo de configuración + + + + The temporary configuration file required to start synergy can not be written. + El archivo de configuración temporal necesario para iniciar Synergy no puede ser escrito. + + + + Configuration filename invalid + Nombre de archivo de configuración inválido + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + No has ingresado un archivo de configuración válido para el servidor Synergy. Queres buscar el archivo de configuración ahora? + + + + Synergy server not found + No se encontró el servidor Synergy + + + + The executable for the synergy server does not exist. + El ejecutable para el servidor Synergy no existe. + + + + Synergy terminated with an error + Synergy terminó con un error + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergu terminó inesperadamente con el código de salida %1.<br><br>Por favor, vea el registro de eventos para detalles. + + + + &Stop + &Detener + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy está iniciando. + + + + Synergy is running. + Synergy se está ejecutando. + + + + Synergy is not running. + Synergy no se está ejecutando. + + + + Unknown + Desconocido + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Buscar un archivo de configuración Synergy + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Guardar configuración como... + + + + Save failed + No se guardó + + + + Could not save configuration to file. + No se pudo guardar la configuración en el archivo. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Nombre en pantalla: + + + + &Server IP: + IP del servidor: + + + + + &Start + &Iniciar + + + + Use existing configuration: + Usar configuración existente: + + + + &Configuration file: + &Configuración: + + + + &Browse... + &Buscar... + + + + Configure interactively: + Configurar interactivamente: + + + + &Configure Server... + &Configurar Servidor... + + + + Ready + Listo + + + + Log + Registro + + + + &Apply + Aplicar + + + + IP addresses: + Direcciones IP: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + &Acerca de Synergy... + + + + &Quit + &Salir + + + + Quit + Salir + + + + Run + Ejecutar + + + + S&top + De&tener + + + + Stop + Detener + + + + S&how Status + &Mostrar Estado + + + + &Hide + &Ocultar + + + + Hide + Ocultar + + + + &Show + &Mostrar + + + + Show + Mostrar + + + + Save configuration &as... + Gu&ardar configuración como... + + + + Save the interactively generated server configuration to a file. + Guardar la configuración generada interactivamente en un archivo. + + + + Settings + Opciones + + + + Edit settings + Editar Opciones + + + + Run Wizard + Iniciar instalación + + + + NewScreenWidget + + + Unnamed + Sin nombre + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Configurar Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Configuraciones Synergy (*.sgc);;Todos los archivos (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Configuraciones Synergy (*.conf);;Todos los archivos (*.*) + + + + System tray is unavailable, quitting. + El área de notificación no esta disponible, cerrando. + + + + ScreenSettingsDialog + + + Screen name is empty + Nombre de pantalla está vacío + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + El nombre de la pantalla no puede estar vació. Por favor introduce un nombre o cancela este dialogo. + + + + Screen name matches alias + El nombre de la pantalla coincide con el alias + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + El nombre de la pantalla no puede ser el mismo que un alias. Elimina el alias o cambia el nombre de pantalla por favor. + + + + ScreenSettingsDialogBase + + + Screen Settings + Opciones de Pantalla + + + + Screen &name: + &Nombre de Pantalla + + + + A&liases + &Alias + + + + &Add + &Agregar + + + + &Remove + Elimina&r + + + + &Modifier keys + &Modificar teclas + + + + &Shift: + &Shift: + + + + + + + + Shift + Mayúsculas + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Ninguno + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + S&uper: + + + + &Dead corners + Esquinas &Desactivadas + + + + Top-left + Arriba-Izquierda + + + + Top-right + Arriba-Derecha + + + + Bottom-left + Abajo-Izquierda + + + + Bottom-right + Abajo-Derecha + + + + Corner Si&ze: + &Tamaño de Esquina: + + + + &Fixes + &Reparaciones + + + + Fix CAPS LOCK key + Reparar tecla CAPS LOCK (BLOQ MAYÚS) + + + + Fix NUM LOCK key + Reparar tecla NUM LOCK (BLOQ NUM) + + + + Fix SCROLL LOCK key + Reparar tecla SCROLL LOCK (BLOQ DESPL) + + + + Fix XTest for Xinerama + Reparar XTest para Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Pantalla: <b>%1</b></center><br>Haz doble clic para editar opciones<br>Arrastra la pantalla a la papelera para borrarla + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Configuración de Servidor + + + + Screens and links + Pantallas y enlaces + + + + Drag a screen from the grid to the trashcan to remove it. + Mueve una pantalla de la rejilla a la papelera para eliminarla. + + + + Configure the layout of your synergy server configuration. + Elige el diseño de rejilla para la configuración de tu servidor Synergy. + + + + Drag this button to the grid to add a new screen. + Mueve este botón a la rejilla para añadir una nueva pantalla. + + + + 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. + Arrastra nuevas pantallas hacia la rejilla o mueve las ya existentes. +Mueve una pantalla a la papelera para eliminarla. +Haz doble click sobre una pantalla para modificar sus ajustes. + + + + Hotkeys + Teclas de acceso directo + + + + &Hotkeys + &Teclas de acceso directo + + + + &New + &Nueva + + + + &Edit + &Edición + + + + &Remove + Elimina&r + + + + A&ctions + &Acciones + + + + Ne&w + &Nueva + + + + E&dit + &Editar + + + + Re&move + &Borrar + + + + Advanced server settings + Opciones Avanzadas de Servidor + + + + &Switch + &Cambiar + + + + Switch &after waiting + Cambiar &al esperar + + + + + + ms + ms + + + + Switch on double &tap within + Cambiar doble toque en + + + + &Options + Opciones + + + + &Check clients every + Revisar &clientes cada + + + + Use &relative mouse moves + &Sar movimientos &relativos del mouse + + + + S&ynchronize screen savers + &Sincronizar protectores de pantalla + + + + Don't take &foreground window on Windows servers + No tomar la ventana de primer plano en servidores Windows + + + + Ignore auto config clients + + + + + &Dead corners + Esquinas &Desactivadas + + + + To&p-left + &Arriba-Izquierda + + + + Top-rig&ht + &Arriba-Derec&ha + + + + &Bottom-left + &Bajo-Izquierda + + + + Bottom-ri&ght + &Abajo-Derecha + + + + Cor&ner Size: + &Tamaño de Esqui&na: + + + + SettingsDialog + + + Save log file to... + Guardar archivo de registro en... + + + + Elevate Synergy + Elevar a Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + ¿Estás seguro que quieres elevar a Synergy? +Esto permitirá que puedas interactuar con procesos elevados y el cuadro de diálogo de UAC, pero puede causar problemas con procesos no elevados. Eleva a Synergy solo si realmente lo necesitas. + + + + SettingsDialogBase + + + Settings + Opciones + + + + Sc&reen name: + &Nomb&re de Pantalla: + + + + P&ort: + Puert&o: + + + + &Interface: + &Interfaz: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Registro + + + + &Logging level: + Nive&l de Registro: + + + + Log to file: + Guardar registro en archivo: + + + + Browse... + Examinar... + + + + Error + Error + + + + &Language: + Idioma: + + + + &Miscellaneous + Misceláneos + + + + + Warning + Advertencia + + + + Note + Nota + + + + Info + Información + + + + Debug + Depuración + + + + Debug1 + Depuración1 + + + + Debug2 + Depuración2 + + + + SetupWizard + + + Setup Synergy + Configurar Synergy + + + + Please select an option. + Elige una opción, por favor. + + + + Please enter your email address and password. + Introduce tu dirección de correo electrónico y contraseña + + + + SetupWizardBase + + + Setup Synergy + Configurar Synergy + + + + Welcome + Bienvenido + + + + Thanks for installing Synergy! + ¡Gracias por instalar Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy te permite compartir fácilmente tu mouse y teclado entre múltiples computadores en tu escritorio, es Gratis y es de Código Abierto. Solo mueve tu mouse hacia los bordes de la pantalla de uno de los computadores hacia otro. Puedes incluso compartir tu portapapeles. Todo lo que necesitas es una conexión de red. Synergy es multiplataforma (funciona en Windows, Mac OS X y Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + ¿Servidor o Cliente? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Desconocido + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Inicio de sesión incorrecto, email o contraseña inválidos. + + + + Login failed, an error occurred. + +%1 + Inicio de sesión fallido, se encontró un error. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Ha fallado el inicio de la sesión, ocurrió un error. +Respuesta del servidor: %1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_et-EE.qm b/src/gui/res/lang/gui_et-EE.qm new file mode 100644 index 0000000000000000000000000000000000000000..2ff93987bb69c5e148c6bd30c6d9618f47a4d742 GIT binary patch literal 21523 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 + + AboutDialogBase + + + About Synergy + Synergy'st + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Tundmatu + + + + Version: + Versioon: + + + + &Ok + Ok + + + + ActionDialogBase + + + Configure Action + Tegevuse seadistamine + + + + Choose the action to perform + Vali teostatav tegevus + + + + Press a hotkey + Vajuta kiirklahv alla + + + + Release a hotkey + Vabasta kiirklahv + + + + Press and release a hotkey + Vajuta kiirklahv alla ja vabasta + + + + only on these screens + ainult nendel ekraanidel + + + + Switch to screen + Lülitu ekraanile + + + + Switch in direction + Lülitu suunas + + + + left + vasak + + + + right + parem + + + + up + üles + + + + down + alla + + + + Lock cursor to screen + Lukusta kursor ekraanile + + + + toggle + lülita + + + + on + sisse + + + + off + välja + + + + This action is performed when + See toiming teostatakse kui + + + + the hotkey is pressed + Kiirklahv on alla vajutatud + + + + the hotkey is released + kiirklahv on vabastatud + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Kiirklahv + + + + Enter the specification for the hotkey: + Sisesta kiirklahvi täpsemad seaded: + + + + MainWindow + + + &Start + Käivita + + + + &File + Fail + + + + &Edit + Redigeeri + + + + &Window + Aken + + + + &Help + Abi + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Teie Synergy versioon on aegunud . Uus versioon <b>%1</b> on saadaval <a href="%2">allalaadimiseks</a>.</p> + + + + Program can not be started + Rakendus ei suuda käivituda + + + + 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. + Käivitusfaili<br><br>%1<br><br>ei õnnestunud käivitada, või pole seda olemas. Palun kontrollige, kas Teil on piisavalt õiguseid selle toimingu teostamiseks.. + + + + Synergy client not found + Synergy klienti ei leitud + + + + The executable for the synergy client does not exist. + Synergy kliendi käivitusfaili ei leitud. + + + + Hostname is empty + Tugijaama nimi on tühi + + + + Please fill in a hostname for the synergy client to connect to. + Palun sisestage tugijaama nimi millega synergy klient peab ühenduma. + + + + Cannot write configuration file + Ei saa kirjutada seadete faili. + + + + The temporary configuration file required to start synergy can not be written. + Synergy käivitamiseks vajaliku ajutise seadete faili kirjutamine ebaõnnestus. + + + + Configuration filename invalid + Seadete faili nimi on vigane + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Te pole valinud korrektset seadete faili synergy serverile. Kas soovite valida seadete faili nüüd? + + + + Synergy server not found + Synergy serverit ei leitud + + + + The executable for the synergy server does not exist. + Synergy serveri käivitusfaili ei leitud. + + + + Synergy terminated with an error + Synergy katkestas töö veateatega + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy katkestas ootamatul töö veateatega %1.<br><br>Täpsema info saamiseks kontrollige väljundlogi. + + + + &Stop + Peata + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy käivitub. + + + + Synergy is running. + Synergy töötab + + + + Synergy is not running. + Synergy ei tööta. + + + + Unknown + Tundmatu + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Vali synergy seadete fail + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Salvesta seaded kui... + + + + Save failed + Salvestamine ebaõnnestus + + + + Could not save configuration to file. + Seadete salvestamine faili ebaõnnestus. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Ekraani nimi: + + + + &Server IP: + Serveri IP: + + + + + &Start + Käivita + + + + Use existing configuration: + Kasuta olemasolevat seadistust: + + + + &Configuration file: + Seadete fail: + + + + &Browse... + Vali + + + + Configure interactively: + Seadistage interaktiivselt: + + + + &Configure Server... + Serveri seadistamine... + + + + Ready + Valmis + + + + Log + Logi + + + + &Apply + Rakenda + + + + IP addresses: + IP aadressid: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Synergy'st... + + + + &Quit + Välju + + + + Quit + Välju + + + + Run + Käivita + + + + S&top + Peata + + + + Stop + Peata + + + + S&how Status + Näita olekut + + + + &Hide + Peida + + + + Hide + Peida + + + + &Show + Näita + + + + Show + Näita + + + + Save configuration &as... + Salvesta seaded kui... + + + + Save the interactively generated server configuration to a file. + Salvesta interakttivselt loodud serveri seaded faili. + + + + Settings + Seaded + + + + Edit settings + Seadete muutmine + + + + Run Wizard + Käivita nõustaja + + + + NewScreenWidget + + + Unnamed + Nimetu + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Synergy seadistamine + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy seaded (*.sgc);;kõik failid (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy seaded (*.conf);;Kõik failid (*.*) + + + + System tray is unavailable, quitting. + Süsteemisalv pole kättesaadav, loobun. + + + + ScreenSettingsDialog + + + Screen name is empty + Ekraani nimi on tühi + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Ekraani nimi peab olema määratud. Palun määrake nimi või katkestage dialoog. + + + + Screen name matches alias + Ekraani nimi ühildub aliasega + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Ekraani nimi peab olema erinev aliasest. Palun eemaldage alias või muutke ekraani nime. + + + + ScreenSettingsDialogBase + + + Screen Settings + Ekraani seaded + + + + Screen &name: + Ekraani nimi: + + + + A&liases + Aliased + + + + &Add + Lisa + + + + &Remove + Eemalda + + + + &Modifier keys + Muuteklahvid + + + + &Shift: + Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Puudub + + + + &Ctrl: + Ctrl: + + + + Al&t: + Alt: + + + + M&eta: + Meta: + + + + S&uper: + Super: + + + + &Dead corners + Surnud nurgad + + + + Top-left + Ülemine-vasak + + + + Top-right + Ülemine-parem + + + + Bottom-left + Alumine vasak + + + + Bottom-right + Alumine-parem + + + + Corner Si&ze: + Nurga suurus: + + + + &Fixes + Parandused + + + + Fix CAPS LOCK key + Kinnita CAPS LOCK klahv + + + + Fix NUM LOCK key + Kinnita NUM LOCK klahv + + + + Fix SCROLL LOCK key + Kinnita SCROLL LOCK klahv + + + + Fix XTest for Xinerama + Kinnita XTest Xineramale + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Ekraan: <b>%1</b></center><br>Topeltklõps seadete muutmiseks<br>Eemaldamiseks lohista ekraan prügikasti + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Serveri seaded + + + + Screens and links + Ekraanid ja seosed + + + + Drag a screen from the grid to the trashcan to remove it. + Eemaldamiseks lohista ekraan joonestikult prügikasti. + + + + Configure the layout of your synergy server configuration. + Seadista synergy serveri paigutuse seadeid. + + + + Drag this button to the grid to add a new screen. + Ekraani lisamiseks lohista see nupp joonestikule. + + + + 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. + Lohista uued ekraanid joonestikule või liiguta olemasolevaid. +Eemaldamiseks lohista ekraan prügikasti. +Ekraani seadete muutmiseks tee sellel topeltklõps. + + + + Hotkeys + Kiirklahvid + + + + &Hotkeys + Kiirklahvid + + + + &New + Uus + + + + &Edit + Redigeeri + + + + &Remove + Eemalda + + + + A&ctions + Toimingud + + + + Ne&w + Uus + + + + E&dit + Muuda + + + + Re&move + Eemalda + + + + Advanced server settings + Täpsemad serveri seaded + + + + &Switch + Lülitu + + + + Switch &after waiting + Lülitu peale ootamist + + + + + + ms + ms + + + + Switch on double &tap within + Lülitu peale topeltkoputust ajaga + + + + &Options + Valikud + + + + &Check clients every + Kontrolli klienti peale iga + + + + Use &relative mouse moves + Kasuta relatiivseid hiire liikumisi + + + + S&ynchronize screen savers + Sünkrooni ekraanisäästjad + + + + Don't take &foreground window on Windows servers + Ära võta esiplaani akent Windows serverites + + + + Ignore auto config clients + + + + + &Dead corners + Surnud nurgad + + + + To&p-left + Ülemine vasak + + + + Top-rig&ht + Ülemine-parem + + + + &Bottom-left + Alumine-vasak + + + + Bottom-ri&ght + Alumine-parem + + + + Cor&ner Size: + Nurga suurus + + + + SettingsDialog + + + Save log file to... + Salvesta logifail asukohta... + + + + Elevate Synergy + Synergy ülendamine + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Kas soovite kindlasti Synergy't ülendada? +See võimaldab Synergy'l toimetada ülendatud protsessidega ja UAC dialoogiga, kuid võib tekitada probleeme ülendamata protsessidega. Ülendage Synergy ainult kindlal vajadusel. + + + + SettingsDialogBase + + + Settings + Seaded + + + + Sc&reen name: + Ekraani nimi: + + + + P&ort: + Port: + + + + &Interface: + Seade: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Logimine + + + + &Logging level: + Logimise tase: + + + + Log to file: + Logi faili: + + + + Browse... + Vali... + + + + Error + Viga + + + + &Language: + Keel: + + + + &Miscellaneous + Mitmesugust + + + + Warning + Hoiatus + + + + Note + Märkus + + + + Info + Info + + + + Debug + Debug + + + + Debug1 + Debug1 + + + + Debug2 + Debug2 + + + + SetupWizard + + + Setup Synergy + Synergy seadistamine + + + + Please select an option. + Palun valida sobiv funktsioon. + + + + Please enter your email address and password. + Palun sisestage oma uus salasõna. + + + + SetupWizardBase + + + Setup Synergy + Synergy seadistamine + + + + Welcome + Tere tulemast + + + + Thanks for installing Synergy! + Täname, et installeerisid Sünergia! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy võimaldab lihtsalt jagada oma klaviatuuri ja hiirt mitme arvuti vahel, see on tasuta ja vabavaraline. Lihtsalt liiguta oma hiir üle ühe arvuti ekraaniserva teise arvuti ekraanile. Võite isegi jagada kõiki oma lõikepuhvreid. Vajad vaid võrgu ühendust. Synergy't saab kasutada erinevates operatsioonisüsteemides (Windows, Mac OS X ja Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Server või klient? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Tundmatu + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Logimine ebaõnnestus, vigane e-posti aadress või salasõna. + + + + Login failed, an error occurred. + +%1 + Logimine ebaõnnestus, tekkis viga. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Logimine ebaõnnestus, tekkis viga. +Server vastas: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_fi.qm b/src/gui/res/lang/gui_fi.qm new file mode 100644 index 0000000000000000000000000000000000000000..46f69c1a1089727a4698191219345e73ef901331 GIT binary patch literal 21784 zcmcIs3zQsHnZ7gA(=+MxJQ4yV0YVW-lZ2%6FrZF`A(Kf$LMEAz$&0uGHQhBcmFcM( ztGY881lFURJ?KHsS;aj*SQQoZfQ#(e2Z#q0mepNxQPD+RR~Fak>dMN3ZhV{-_xtXx zS9e!+59}^;LiMBWz5o56-~Zpgy8q$g(yzRD_xt|gqVvCS<2{dlf4dOvUl*cdNQf(c zg6s8o--YWJ@h>aHWp5JlzujAeSaXvQqeq1}|1X5N?lB=Q*eyimOG2c+CR#uB2_Y_R z6Rm&wWg#}dNu=(-Lx{ES6{#2R#r<1EJMIxf&x-c`dxTi`lxV;D+d}k>i1s5pg;<}$ z75DA9Q?%ca!u>xG?H`#CLfb0Z@4pe(l1Tscb67_g9hZFz*Y}9EpT~V2|EaExZbv`PtehQzz@o&Y||A9TN84%Ze z?ja$z|5^-xU<`DAR2=>u?pvXWV-I}}`&=TfdlBpAUoVb-=?Pq2aq4%!1fM=39zT^A zV(GKuXWtnR;)?a+7w5I%^KIhHEu$Fs{g(48_2$6k%%asd$E=2cvE!Nlx z?CZNN4}KPW?Y*z%k;h&UqV4xB&#d@+AzJ^W<&_JU2(h8B_1u$>332r|T9+TcQ;7W= zTX&wsdS`vS^@a;^|Hap~8b8B&eNVQ2diIS%EL+!l-^0I!90pqdtov_p{m0fvK7AMV zdz-qRcST$3{g}7wzP7EqZ-H2U)wcVS_&)#3wvo(Fg}CT0b=~zHb-nuSZEt@5T*&2E z+s&;X7Gl-oZBI~M3tLj@hrbEAeJ^!*{|6xFucof6^x?j)ROtrHxA2zKE#Jm|FFKui z*V-qcSF2JVEIokzO{PA52J39kk$N!mH2C+M)RTRf_tIO`bh>SsbsOYybGoM!_g(lnZKf5&y%4e1wt{6Xlq*^&A9>u}${c3k<= zAt8E}bWD-njbH4TD?Bd5@RvH?{^APEd!*xCkAv>?{*J$T4*H$`LdVP7ZWUs|#hn-Y za7c*N=Xc(+>wS>_A9cR%3DWO$e&kQ_`IRR+Kfm}FLcH$o&R;$JP9av_yK3)WvQMCKit10TbDTR)U3p7|W~ z?1jv&mqRXFw`T6W^({i|yD{_ZZ5X%srG=@#!}s0KtE+a8y6*q^Lj92kAg?V8Z~m8m z0{`E+@Qz(S0=={9y7_wxKm5Dnc>mDC2Qm+X&SeXq-+MLm^rh^!w>}1b{8#qikvpNE zx2o&8i`8}b_Uyr5Vcwp1XAiyOH1z9D*&~l`fxSJK{a_2$5szj+b@N)RdtdhcR>
r_rU24_}|+-Rq=EL+kWyKk5heT?!7k1o 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 + + AboutDialogBase + + + About Synergy + Tietoa Synergystä + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Tuntematon + + + + Version: + Versio: + + + + &Ok + OK + + + + ActionDialogBase + + + Configure Action + Määritä toiminto + + + + Choose the action to perform + Määritä suoritettava toiminto + + + + Press a hotkey + Paina pikanäppäin pohjaan + + + + Release a hotkey + Vapauta pikanäppäin + + + + Press and release a hotkey + Paina ja vapauta pikanäppäin + + + + only on these screens + vain näillä näytöillä + + + + Switch to screen + Vaihda näyttöön + + + + Switch in direction + Vaihda + + + + left + vasemmalle + + + + right + oikealle + + + + up + ylös + + + + down + alas + + + + Lock cursor to screen + Lukitse kursori näytölle + + + + toggle + kytke päälle/pois + + + + on + päälle + + + + off + pois päältä + + + + This action is performed when + Suorita toiminto + + + + the hotkey is pressed + kun pikanäppäintä painetaan + + + + the hotkey is released + kun pikanäppäin vapautetaan + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Pikanäppäin + + + + Enter the specification for the hotkey: + Määritä pikanäppäin: + + + + MainWindow + + + &Start + &Käynnistä + + + + &File + Tiedosto + + + + &Edit + &Muokkaa + + + + &Window + Ikkuna + + + + &Help + Ohje + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Synergy versiosi on vanhentunut. Versio <b>%1</b> on nyt saatavilla <a href="%2">ladattavaksi</a>.</p> + + + + Program can not be started + Ohjelmaa ei voida käynnistää + + + + 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. + Ajotiedoston<br><br>%1<br><br>käynnistys ei onnistunut, vaikka se on olemassa. Tarkista onko sinulla riittävät käyttöoikeudet ohjelman ajamiseen. + + + + Synergy client not found + Synergyn asiakasohjelmaa ei löydy + + + + The executable for the synergy client does not exist. + Ajotiedosto Synergyn asiakasohjelmalle puuttuu. + + + + Hostname is empty + Isäntänimi on tyhjä + + + + Please fill in a hostname for the synergy client to connect to. + Täytä isäntänimellä johon Synergy voi yhdistää. + + + + Cannot write configuration file + Asetustiedostoa ei voida luoda. + + + + The temporary configuration file required to start synergy can not be written. + Väliaikaista Synergyn vaatimaa asetustiedostoa ei voida luoda. + + + + Configuration filename invalid + Asetustiedoston tiedostonimi virheellinen + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Et ole määrittänyt kelvollista asetustiedostoa Synergy palvelimelle. Haluatko määrittää asetustiedoston sijainnin nyt? + + + + Synergy server not found + Synergy palvelinta ei löydy + + + + The executable for the synergy server does not exist. + Ajotiedosto Synergy palvelimelle puuttuu. + + + + Synergy terminated with an error + Synergy suljettiin virheen vuoksi + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy suljettiin odottamattomasti paluukoodilla %1.<br><br>Tarkista lokitiedosto saadaksesi lisätietoja. + + + + &Stop + &Pysäytä + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy käynnistyy. + + + + Synergy is running. + Synergy on käynnissä. + + + + Synergy is not running. + Synergy ei ole käynnissä. + + + + Unknown + Tuntematon + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Määritä Synergyn asetustiedosto + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Tallenna asetukset nimellä... + + + + Save failed + Tallennus epäonnistui + + + + Could not save configuration to file. + Ei voitu tallentaa asetustiedostoa. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Näytön nimi: + + + + &Server IP: + Palvelimen IP: + + + + + &Start + &Käynnistä + + + + Use existing configuration: + Käytä olemassa olevaa kokoonpanoa: + + + + &Configuration file: + Asetustiedosto: + + + + &Browse... + Selaa... + + + + Configure interactively: + Määritä interaktiivisesti: + + + + &Configure Server... + Määritä palvelin... + + + + Ready + Valmis + + + + Log + Loki + + + + &Apply + Käytä + + + + IP addresses: + IP-osoitteet: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Tietoa Synergystä + + + + &Quit + &Lopeta + + + + Quit + Lopeta + + + + Run + Suorita + + + + S&top + Pysäytä + + + + Stop + Pysäytä + + + + S&how Status + Näytä tila + + + + &Hide + Piilota + + + + Hide + Piilota + + + + &Show + Näytä + + + + Show + Näytä + + + + Save configuration &as... + Tallenna asetukset nimellä... + + + + Save the interactively generated server configuration to a file. + Tallenna interaktiivisesti määritetty palvelinkokoonpano tiedostoon. + + + + Settings + Asetukset + + + + Edit settings + Muokkaa asetuksia + + + + Run Wizard + Ohjattu asetusten määritys + + + + NewScreenWidget + + + Unnamed + Nimetön + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Määritä Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy Configuration (*.sgc);;Kaikki tiedostot (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy Configuration (*.conf);;Kaikki tiedostot (*.*) + + + + System tray is unavailable, quitting. + Ilmoitusalue ei ole käytettävissä, suljetaan. + + + + ScreenSettingsDialog + + + Screen name is empty + Näytön nimi puuttuu + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Nimimerkki puuttuu. Ole hyvä ja syötä nimi tai sulje dialogi. + + + + Screen name matches alias + Nimimerkki on sala kuin alias + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Nimimerkki ei voi olla sama kuin alias. Oleva hyvä ja poista alias tai muuta nimimerkki. + + + + ScreenSettingsDialogBase + + + Screen Settings + Näytön asetukset + + + + Screen &name: + Näytön nimi: + + + + A&liases + Aliakset + + + + &Add + Lisää + + + + &Remove + Poista + + + + &Modifier keys + Valintanäppäimet + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Ei mitään + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + S&uper: + + + + &Dead corners + Kuolleet kulmat + + + + Top-left + Ylävasen + + + + Top-right + Yläoikea + + + + Bottom-left + Alavasen + + + + Bottom-right + Alaoikea + + + + Corner Si&ze: + Kulman koko: + + + + &Fixes + Korjaukset + + + + Fix CAPS LOCK key + Korjaa CAPS LOCK näppäin + + + + Fix NUM LOCK key + Korjaa NUM LOCK näppäin + + + + Fix SCROLL LOCK key + Korjaa SCROLL LOCK näppäin + + + + Fix XTest for Xinerama + Korjaa XTest Xineramalle + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Näyttö: <b>%1</b></center><br>Kaksoisnapsauta muokataksesi asetuksia<br>Vedä näyttö roskakoriin poistaaksesi sen. + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Palvelimen asetukset + + + + Screens and links + Näytöt ja linkitys + + + + Drag a screen from the grid to the trashcan to remove it. + Vedä näyttö ruudukosta roskakoriin poistaaksesi sen. + + + + Configure the layout of your synergy server configuration. + Määritä Synergy-palvelimen näyttöasetukset + + + + Drag this button to the grid to add a new screen. + Vedä tämä kuvake ruudukkoon lisätäksesi uuden näytön. + + + + 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. + Lisää uusia näyttöjä ruudukkoon tai siirrä olemassa olevia vetämällä. +Vedä näyttö roskakoriin poistaaksesi sen. +Kaksoisnapsauta näyttöä muokataksesi sen asetuksia. + + + + Hotkeys + Pikanäppäimet + + + + &Hotkeys + Pikanäppäimet + + + + &New + &Uusi + + + + &Edit + &Muokkaa + + + + &Remove + Poista + + + + A&ctions + Toiminnot + + + + Ne&w + Uusi + + + + E&dit + Muokkaa + + + + Re&move + Poista + + + + Advanced server settings + Palvelimen lisäasetukset + + + + &Switch + Vaihda + + + + Switch &after waiting + Vaihtoviive + + + + + + ms + ms + + + + Switch on double &tap within + Vaihtoviive kaksoisnapautettaessa + + + + &Options + &Asetukset + + + + &Check clients every + Asiakkaiden tarkistusväli + + + + Use &relative mouse moves + Suhteutetut kursorin liikkeet + + + + S&ynchronize screen savers + Synkronoi näytönsäästäjät + + + + Don't take &foreground window on Windows servers + Älä siirrä päällimmäiseksi ikkunaksi Windows palvelimilla + + + + Ignore auto config clients + + + + + &Dead corners + Kuolleet kulmat + + + + To&p-left + Ylävasen + + + + Top-rig&ht + Yläoikea + + + + &Bottom-left + Alavasen + + + + Bottom-ri&ght + Alaoikea + + + + Cor&ner Size: + Kulman koko: + + + + SettingsDialog + + + Save log file to... + Lokitiedoston tallennuspaikka... + + + + Elevate Synergy + Korota Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Oletko varma, että haluat korottaa Synergyn? +Tämä mahdollistaa Synergyn käyttämisen korotetuissa prosesseissa ja UAC-dialogeissa, mutta voi aiheuttaa ongelma korottamattomissa prosesseissa. Korota Synergy vain jos se on välttämätöntä. + + + + SettingsDialogBase + + + Settings + Asetukset + + + + Sc&reen name: + Näytön nimi: + + + + P&ort: + Portti: + + + + &Interface: + Sovitin: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Loki + + + + &Logging level: + Lokitaso + + + + Log to file: + Lokitiedosto + + + + Browse... + Selaa... + + + + Error + Virhe + + + + &Language: + Kieli: + + + + &Miscellaneous + Sekalaiset + + + + Warning + Varoitus + + + + Note + Huomautus + + + + Info + Tiedot + + + + Debug + Debug + + + + Debug1 + Debug1 + + + + Debug2 + Debug2 + + + + SetupWizard + + + Setup Synergy + Määritä Synergy + + + + Please select an option. + Tee valinta. + + + + Please enter your email address and password. + Ole hyvä ja syötä sähköpostiosoitteesi ja salasanasi. + + + + SetupWizardBase + + + Setup Synergy + Määritä Synergy + + + + Welcome + Tervetuloa + + + + Thanks for installing Synergy! + Kiitos, että asensit Synergyn! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergyn avulla voit helposti jakaa hiiren ja näppäimistösi usean tietokoneen välillä, ja se on ilmainen ja avointa lähdekoodia. Liikuta hiiresi vain näytön reunan yli toiselle koneelle. Voit jopa jakaa leikepöytäsi. Tarvitset vain internet yhteyden. Synergy on cross-platform ( toimii Windows, Mac OS X ja Linuxissa). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Palvelin vai Asiakas? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Tuntematon + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Kirjautuminen epäonnistui, sähköposti tai salasana on väärä. + + + + Login failed, an error occurred. + +%1 + Kirjautuinen epäonnistui, tapahtui virhe. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Kirjautuinen epäonnistui, tapahtui virhe. +Palvelimen vaste: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_fr.qm b/src/gui/res/lang/gui_fr.qm new file mode 100644 index 0000000000000000000000000000000000000000..8251f4ca09f22b31a598cd0ea4a57ca63f9b8fbe GIT binary patch literal 23634 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 literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_fr.ts b/src/gui/res/lang/gui_fr.ts new file mode 100644 index 00000000..0b5ebecc --- /dev/null +++ b/src/gui/res/lang/gui_fr.ts @@ -0,0 +1,1411 @@ + + + AboutDialogBase + + + About Synergy + À propos de Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Inconnu + + + + Version: + Version: + + + + &Ok + &Ok + + + + ActionDialogBase + + + Configure Action + Configurer l'action + + + + Choose the action to perform + Choisissez l'action à effectuer + + + + Press a hotkey + Appuyez sur une touche + + + + Release a hotkey + Relâchez une touche + + + + Press and release a hotkey + Pressez et relâchez une touche + + + + only on these screens + uniquement sur ces écrans + + + + Switch to screen + Basculer vers l'écran + + + + Switch in direction + Basculer dans la direction + + + + left + gauche + + + + right + droite + + + + up + haut + + + + down + bas + + + + Lock cursor to screen + Limiter le curseur à l'écran + + + + toggle + activer + + + + on + activé + + + + off + inactif + + + + This action is performed when + Cette action est exécutée quand + + + + the hotkey is pressed + Le raccourci est utilisé + + + + the hotkey is released + La touche de raccourci est relachée. + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Raccourci clavier + + + + Enter the specification for the hotkey: + Saisir la touche de raccourci&nbsp;: + + + + MainWindow + + + &Start + &Démarrer + + + + &File + &Fichier + + + + &Edit + &Editer + + + + &Window + &Fenêtre + + + + &Help + &Aide + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Votre version de Synergy est périmée. La version <b>%1</b> est désormais disponible au <a href="%2">téléchargement</a>.</p> + + + + Program can not be started + Le programme ne peut pas démarrer + + + + 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. + L'exécutable<br><br>%1<br><br>n'a pas pu être correctement lancé, bien qu'il existe. Veuillez vérifier si vos permissions sont suffisantes pour lancer ce programme. + + + + Synergy client not found + Le client Synergy n'est pas détecté + + + + The executable for the synergy client does not exist. + L’exécutable du client Synergy n'existe pas + + + + Hostname is empty + Le nom d'hôte est vide + + + + Please fill in a hostname for the synergy client to connect to. + Veuillez renseigner un nom d'hôte auquel le client Synergy doit se connecter + + + + Cannot write configuration file + Impossible d'écrire le fichier de configuration. + + + + The temporary configuration file required to start synergy can not be written. + Impossible d'écrire le fichier temporaire de configuration, nécessaire au lancement de synergy. + + + + Configuration filename invalid + Le nom du fichier de configuration est incorrect. + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Le fichier de configuration du serveur synergy n'est pas correct. Voulez vous visualiser ce fichier ? + + + + Synergy server not found + Le serveur Synergy n'a pas été détecté + + + + The executable for the synergy server does not exist. + L'exécutable du serveur Synergy n'existe pas. + + + + Synergy terminated with an error + Synergy s'est arrêté suite à une erreur + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy s'est terminé de façon inattendue avec le code d'erreur %1.<br><br> Vous trouverez plus de détails dans le fichier journal. + + + + &Stop + &Stop + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy est en train de démarrer + + + + Synergy is running. + Synergy est en cours d'exécution + + + + Synergy is not running. + Synergy n'est pas en train de s'exécuter + + + + Unknown + Inconnu + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Parcourir pour rechercher un fichier de configuration synergys + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Sauvegarder la configuration sous... + + + + Save failed + Erreur lors de l'enregistrement + + + + Could not save configuration to file. + Impossible de sauvegarder la configuration + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Nom de l'écran: + + + + &Server IP: + &Serveur IP: + + + + + &Start + &Démarrer + + + + Use existing configuration: + Utiliser la configuration existante : + + + + &Configuration file: + Le fichier de &configuration + + + + &Browse... + Parcourir... + + + + Configure interactively: + Configurer interactivement : + + + + &Configure Server... + Configurer le serveur... + + + + Ready + Prêt + + + + Log + Journal + + + + &Apply + Appliquer + + + + IP addresses: + Adresses IP: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + À &propos de Synergy + + + + &Quit + Quitter + + + + Quit + Quitter + + + + Run + Exécuter + + + + S&top + Arrêt + + + + Stop + Arrêter + + + + S&how Status + Voir l'état + + + + &Hide + Cac&her + + + + Hide + Cacher + + + + &Show + &Montrer + + + + Show + Montrer + + + + Save configuration &as... + Sauvegarder la configuration &sous... + + + + Save the interactively generated server configuration to a file. + Sauvegarder la configuration générée du serveur dans un fichier. + + + + Settings + Paramètres + + + + Edit settings + Éditer les paramètres + + + + Run Wizard + Lancer l'Assistant + + + + NewScreenWidget + + + Unnamed + Sans nom + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Installer Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Configuration Synergy (*.sgc);; Tous les fichiers (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy Configurations (*.conf);;All files (*.*) + + + + System tray is unavailable, quitting. + La barre des tâches n'est pas disponible, fermeture. + + + + ScreenSettingsDialog + + + Screen name is empty + Le nom de l'écran est vide + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Le nom de l'écran ne peut pas être vide. Merci de compléter le nom ou d'annuler la boîte de dialogue. + + + + Screen name matches alias + Le nom affiché concorde à l'alias + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Le nom de l'écran ne peut pas être le même que l'alias. Merci de supprimer l'alias ou de changer le nom de l'écran. + + + + ScreenSettingsDialogBase + + + Screen Settings + Paramètres d'affichage + + + + Screen &name: + Nom de l'écran + + + + A&liases + A&lias + + + + &Add + &Ajouter + + + + &Remove + &Supprimer + + + + &Modifier keys + Touches de combinaison + + + + &Shift: + Maj&nbsp;: + + + + + + + + Shift + Maj + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Méta + + + + + + + + Super + Super + + + + + + + + None + Aucun + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + &eta: + + + + S&uper: + Super: + + + + &Dead corners + Coins morts + + + + Top-left + Haut-gauche + + + + Top-right + Haut-droit + + + + Bottom-left + Bas-gauche + + + + Bottom-right + Bas-droit + + + + Corner Si&ze: + Taille des &coins : + + + + &Fixes + Correctifs + + + + Fix CAPS LOCK key + Corrige la touche Verrouillage majuscule + + + + Fix NUM LOCK key + Corrige la touche Verrouillage numérique + + + + Fix SCROLL LOCK key + Corrige la touche Verrouillage défilement + + + + Fix XTest for Xinerama + Corrige XTest pour Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Écran: <b>%1</b></center><br>Double cliquer pour modifier les réglages<br>Faire glisser vers la corbeille pour le supprimer + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Configuration Serveur + + + + Screens and links + Écrans et liens + + + + Drag a screen from the grid to the trashcan to remove it. + Faire glisser un écran de la grille vers la corbeille pour le supprimer. + + + + Configure the layout of your synergy server configuration. + Configurer l'organisation de votre configuration serveur + + + + Drag this button to the grid to add a new screen. + Faire glisser ce bouton sur la grille pour ajouter un nouvel écran + + + + 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. + Faire glisser de nouveaux écrans vers la grille ou déplacer ceux existant. +Faire glisser un écran dans la corbeille pour le supprimer. +Double cliquer sur un écran pour modifier ses réglages. + + + + Hotkeys + Raccourcis clavier + + + + &Hotkeys + Raccourcis clavier + + + + &New + &Nouveau + + + + &Edit + &Editer + + + + &Remove + &Supprimer + + + + A&ctions + A&ctions + + + + Ne&w + Nou&veau + + + + E&dit + E&diter + + + + Re&move + Suppri&mer + + + + Advanced server settings + Configuration serveur avancé + + + + &Switch + Basculer + + + + Switch &after waiting + Changer d'écran après + + + + + + ms + ms + + + + Switch on double &tap within + Changer d'écran en double-cliquant dans les + + + + &Options + &Options + + + + &Check clients every + Vérifier les clients toutes les + + + + Use &relative mouse moves + Utiliser des mouvements souris &relatifs + + + + S&ynchronize screen savers + S&ynchroniser les écrans de veille + + + + Don't take &foreground window on Windows servers + Ne pas prendre la fenêtre au premier plan sur les serveurs Windows. + + + + Ignore auto config clients + + + + + &Dead corners + Coins morts + + + + To&p-left + Ha&ut-gauche + + + + Top-rig&ht + Haut-&droit + + + + &Bottom-left + &Bas-gauche + + + + Bottom-ri&ght + Bas-d&roit + + + + Cor&ner Size: + Taille des coi&ns : + + + + SettingsDialog + + + Save log file to... + Enregistrer le journal dans le fichier : + + + + Elevate Synergy + Élever Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Êtes-vous sûr de vouloir élever Synergy&nbsp;? +Ceci autorise Synergy à interagir avec les processus élevés et le dialogue UAC, mais peut poser des problèmes avec les processus non-élevés. N'élevez Synergy que si cela est nécessaire. + + + + SettingsDialogBase + + + Settings + Paramètres + + + + Sc&reen name: + Nom de l'éc&ran + + + + P&ort: + &Port : + + + + &Interface: + Interface : + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Journal + + + + &Logging level: + Niveau de journalisation : + + + + Log to file: + Enregistrer le journal dans le fichier&nbsp;: + + + + Browse... + Parcourir + + + + Error + Erreur + + + + &Language: + &Langage : + + + + &Miscellaneous + Divers + + + + Warning + Avertissement + + + + Note + Remarque + + + + Info + Infos + + + + Debug + Debug + + + + Debug1 + Debug1 + + + + Debug2 + Debug2 + + + + SetupWizard + + + Setup Synergy + Installer Synergy + + + + Please select an option. + Choisissez une option s'il vous plait. + + + + Please enter your email address and password. + Merci d'entrer votre e-mail et votre mot de passe. + + + + SetupWizardBase + + + Setup Synergy + Installer Synergy + + + + Welcome + Bienvenue + + + + Thanks for installing Synergy! + Merci d'avoir installé Synergy ! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy vous permet de partager facilement votre souris et votre clavier entre plusieurs ordinateurs. Il est libre et Open Source. Il suffit de déplacer la souris d'un ordinateur à l'autre en passant par leurs bords, comme pour passer d'un écran à l'autre en multi-écran. Vous pouvez même partager les presse-papiers (copier-coller). Tout ce qu'il faut est une connexion réseau. Synergy est multi-plateforme (fonctionne sur Windows, Mac OS X et Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Serveur ou client ? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Inconnu + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Connexion refusée, e-mail ou mot de passe invalide. + + + + Login failed, an error occurred. + +%1 + Connexion refusée, une erreur s'est produite. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Connexion refusée, une erreur s'est produite. +Réponse du serveur : +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_gl.qm b/src/gui/res/lang/gui_gl.qm new file mode 100644 index 0000000000000000000000000000000000000000..11d78e1d67cd554f137fc4b5a039e5c89cbf7b35 GIT binary patch literal 3447 zcmb7GU1%It6h517vdLzXY~x>$BG=IDgW|@f1)*-2CTY_KtCVcps4sf6dv|x}WM-Y2 z-6koDP#=8igI16t1r-Ga|6Zg;v|0p3lvWf3K|zp$Kc!R!YeDckcQ&(=IGd(~%$>b6 z=X~dU=R4<4?sRGBi_0&)@YS80&OZL~hd)dZ#qK3ad`#4_m#8pH)U%P|mtQ05evUfh z=ZSiWy59d0@4Z5ayT8Ty9o=gqyYFm+(bbMO zPhZ3HT^sJ-`y>%vh?|d{Ad24?|K)rV`)4~Zo_Gd$d%8{?{}lUQcK!D2Dd5Jse!qAU z>t~7Nt6Q;7C3ajnK-4*v_+#f&z2nt1c%V1_`5EjF`fJbE{@Qyfwe#plz`rLo zbLcp53;vpz_t)OHQZs+Q4ZAa`1IKvW7tbqza?(!rm> zu?Aor^;&zVLCVk+42o3Ma84+_&diiyDz;5NC=F}Yu#m4-*Hy})gn7tTKx5YcE2yEf zT$W3ui18L{(xabn$0B!OS;X%;Ru&9P06b9^&)N5CpE)F!rxDr${84=`P!L8B`!(RV zrghImn0OWzTu#4V1x*Sn*@5O8p)p+Z&4{=K9cYKIj3V(QtM8C;K&qXq8nUD{cWaSA~g3_i!ui~ zI01#Ey-><4=4dEkiMMP$iNb?%sEHtorlBkkb@D{nu3M2|=2wOpa_;H?TB`Ilx`5px z)Q+YGMcF`2w=IKeVR*u+Tb5x}vQY$Y`yb}oC>%)(>823US}0@JK`}rwE6LEAti-rE zgyDM9@!F-r^zmqHXxZ7gYd1Dn#w^n7)XY^5`f=@=-N?zfT4I|qE!TfkZ_KPXtFu{M z&;Hgd4NmJJ_}z_3R)c_<2CWWEomSnFnF+@};;J>AaOai4q%SV!Y5`K?aSMS2QtR7Y zGCbibkE`Ocz@h@`N17Fc!lNSGxADD3NuLN&MzQL<^;ANqLco8B*E zspKfvRj&Smi1L)C8F=8&2M#}cCT-YfSK0-=S#ucfFeZUdB%cI576KxYGj&VM8cWjA ztsNBxvk=8$cj3D9tr$81W_Wx>0j70Bu+W=xyJdOM;>oK+9e79`DHI*0a3q&1%F{=3 z3KE*sWSJqlyE2oWV``p)g&{U8QMfJV+Cemlez%9P%xqXO&sB=e5WO5O2Na uYb5B^8<`*d&7*&^s)~n|qYJg3qix_(<=91hofa_AjG~G?3o1HdvHt+TQ0LMB literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_gl.ts b/src/gui/res/lang/gui_gl.ts new file mode 100644 index 00000000..66036a03 --- /dev/null +++ b/src/gui/res/lang/gui_gl.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + Acerca de Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Descoñecido + + + + Version: + Versión: + + + + &Ok + + + + + ActionDialogBase + + + Configure Action + Configurar acción + + + + Choose the action to perform + Elixir a acción para realizar + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + esquerda + + + + right + dereita + + + + up + arriba + + + + down + abaixo + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + &Ficheiro + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>A súa versión de Synergy está desactualizada. A versión <b>%1</b> xa está dispoñible para <a href="%2">descargar</a>.</p> + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + Cliente de Synergy non atopado + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + Configuración do nome de ficheiro non válida + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + Servidor de Synergy non atopado + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy está a iniciarse. + + + + Synergy is running. + Synergy está a executarse. + + + + Synergy is not running. + Synergy non se está a executar. + + + + Unknown + Descoñecido + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + Erro ao gardar + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + &Explorar... + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + Rexistro + + + + &Apply + + + + + IP addresses: + Enderezos IP: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + &Acerca de Synergy + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + Agochar + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + Axustes + + + + Edit settings + Editar axustes + + + + Run Wizard + Executar asistente + + + + NewScreenWidget + + + Unnamed + Sen nome + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + Axustes + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + &Idioma: + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + Info + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + Benvido/a + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Descoñecido + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_grk.qm b/src/gui/res/lang/gui_grk.qm new file mode 100644 index 0000000000000000000000000000000000000000..9793d0d204a734884156589a1ed023c7a7e6173e GIT binary patch literal 4629 zcmb_gYiJzT6+Y74l~h|&mNaogYnR(V9Y=OVpeY!)DODb>n%Y&84YB(mWW9T}J7_ht z%*TGrpLq(n7rT!2x$tMX z`@q#NVE=pFKdt=;`akS0eFXd6PxpNP27ezp_@{4t4d0LSK3{=?{ z09;q>@4@xH_zSQTJJRR({}bPj_q{asKJ0#_|IyB$0N;Q^lvo3Dim6|#sUAE~7yi`I zkuk)K?i#w_6~iZ-RNl)zmI_PuNzQs%g?{S(WhrbyX!zNtz^=4EdC$ z$w*Cqs;V_rrc;r4&-2C)9M3(~R`Q$bidqGrB{ic~0L20- zs|tXXR0XRwbq!AoY91@s>c16vE5RltM0QP{<|507AJ2JSV04%>I+YHAL5H3$7=P6B z#~DpxNLE{7bW**-CJ>oT7`~})!=b$)&8rQVo{bDA9{1c)CtLK5wienOdqhnEdr8e9 za<^fUJ-jaO>{l6Y?3Im0RlNg96;+N5-FwDMkLh&L4?LfJ3(~$ZZhLE|)$4F=Ms%`E zGtkBsSAk(xB3a`?P}5u%oJVy-zSdxOO}&Mn$XaB-|7qU@flle17mgXJjooAV-4?@( zP_+Qn^N8>4#|G!qbvSND`zCKt^!tEzTD=Sq<&OehI+WaX_XS zoTO3?0iIT|$}XXr;Y1bhRa70<_&QcN?VIvciCjAJT+Trm*)xi#`WZDDJ(1h1o_m6E$RH9@-stFFGSf&M`@XVGrqkO4 z-^0Q>5JHeF>sW4?k%P#r%?GlPxstjOLAlp+^OKq>E@x2pmI;FP;0_4QtUzNk265lX z=Jp7}DfQ+KdSH~T)G;Idg_FE0=`W*#k@_Z1W@AeinlsG=VlwSg6u37+HYs}p9kD(y(qcmaDp5BTU8sa zAyyj^ng^bALj&GNK!buwJEKlIC0!2vO;&A~rST?)g`rzo-C>YJo$1BS4xW$fbXi$( zV^=kYq=A>X%;Cs2xU`1DJ|8KFAAK_8NL?K`n{wQ9j*C+&^GGikuqG8Vr>fibpLT4N zTle>?Um#esl411dZ4$#KFM)2ANTBoZnV*Kt27a4Xx{q2Q>{qMQaJ}l7$~NH<6WTHp z8p6cwnMadlA+{Pa)C>p+?6%lO;QRXxf7fw8|nf-S=6>bAiumJB_~@@^KpXo&I@ zMiEy-d8xVkk}?%FY_=SM{nzfHr138r-_CY-Xn7rUQReyr1MzX5+u?ES>+Yz>g?4uv z82b)a8wKjCwqkeA@Fr(4z*7$C#8QDh8ZHwnS zLv&M+%CBH$j;kH}8}pppBk+}D!2>MEV@XaBN>)%*B68!iWP2PB2zEwc$tqAW;tjFF z?>zEz$F^ONpIDbYmCX0x4$;M)p1>2YFo83&S8zo5jDnT%*1&lg-`TfYtV?a-%ar=P z94zdhLA+lUFX}fW?3!m!A;r37dcdBBw^gh+W5HkTz&;I`nhZz0!aglShs{T$huih- zG8~DrV0cX;APfVY9R2orVSJm=&rxl7xd~1D4)nO)rExkOD$oV;D1|#-h61tjrbLfh zkDWU>8{BqoN!&0WsJG#DV{}`F|2A`5*w0*O$3G?|&iIx{a|A{29regV)B^Uw2K4i_ zj@fg!I!W2(V~6 z4{P=K&>7iVq)YT54K{eAv6BhmkV4paP7I^ zrTh%|JeDV- z6@w7^FYd5}Ia4~i$z+Z8Mxn8(ADZm6C)1w?jUGkMRsgN(z`WWvOM{Q3H kPUy3#v>r+7^Wxzd$1PrZaF7}BE-+xRaL#!NL6fHRUo5!?cK`qY literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_grk.ts b/src/gui/res/lang/gui_grk.ts new file mode 100644 index 00000000..5d06431d --- /dev/null +++ b/src/gui/res/lang/gui_grk.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + Σχετικά με το Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + Έκδοση: + + + + &Ok + ΟΚ + + + + ActionDialogBase + + + Configure Action + Διαμόρφωσε την ενέργεια αυτή + + + + Choose the action to perform + Επιλέξτε την ενέργεια για να εκτελέστεί + + + + Press a hotkey + Πιέστε ένα πλήκτρο άμεσης πρόσβασης + + + + Release a hotkey + Άφηστε ένα πλήκτρο άμεσης πρόσβασης + + + + Press and release a hotkey + Πιέστε και αφήστε ένα πλήκτρο άμεσης πρόσβασης + + + + only on these screens + μόνο σε αυτές τις οθόνες + + + + Switch to screen + Άλλαγή στην οθόνη + + + + Switch in direction + Αλλαγή στην κατεύθυνση + + + + left + αριστερά + + + + right + δεξιά + + + + up + πάνω + + + + down + κάτω + + + + Lock cursor to screen + Κλείδωμα δείκτη στην οθόνη + + + + toggle + Εναλλαγή + + + + on + άνοιξε + + + + off + κλείσε + + + + This action is performed when + Η δράση αυτή πραγματοποιείται όταν + + + + the hotkey is pressed + Το άμεσο πλήκτρο έχει πατηθεί + + + + the hotkey is released + Το άμεσο πλήκτρο έχει αφεθεί + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Άμεση πρόσβαση + + + + Enter the specification for the hotkey: + Καθορισμός άμεσου πλήκτρου + + + + MainWindow + + + &Start + + + + + &File + Αρχείο + + + + &Edit + Επεξεργασία + + + + &Window + Παράθυρο + + + + &Help + Βοήθεια + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + Το πρόγραμμα δεν μπορεί να ξεκινήσει + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + Έτοιμο + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + Έξοδος + + + + Run + + + + + S&top + + + + + Stop + Διακοπή + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + Ιδιότητες + + + + Edit settings + Επεξεργασία Ιδιοτήτων + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + Alt + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + Επεξεργασία + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + Ιδιότητες + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + Πληροφορίες + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Το Synergy σας αφήνει με εύκολο τρόπο να μοιράσετε το ποντίκι και το πληκτρολόγιο ανάμεσα σε πολλαπλούς υπολογιστές στο γραφείο σας, είναι Δωρεάν και Ανοιχτού Κώδικα. Απλά μετακινείστε το ποντίκι στην άκρη της μιας οθόνης στην άλλη. Μπορείτε να μοιράσετε ακόμα και όλα τα clipboards. Το μόνο που χρειάζεται μία σύνδεση δικτύου. Το Synergy λειτουργεί σε πολλαπλές πλατφόρμες (δουλεύει σε Windows, Mac OS X και Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_he.qm b/src/gui/res/lang/gui_he.qm new file mode 100644 index 0000000000000000000000000000000000000000..2ceeae56dea0d08eb27f9d0e618446251cf6635e GIT binary patch literal 13575 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

IJ}N;X+2wRoC$Hcs5jyy6dN$%4 zq|1O7_aBM~?@;*6cvixdlKj;v0f3Yu>Q%6l$0d)Y%^jKkl%7US?^eGmx!_4`;2krPQ@8l zR)P$d+QfcUnbjsldtl11kcU*o&4wy%N7q|uDl$b4Zit9lbQ46n%O+2gmL!!yJ>6p( zI>h7fLAKB@6X{x|O_p(vyH^4*;DXums~LC}N~L)soZ$KdE~4Z#{phU5P#T`NF?a+w z2}dgzl_;|rXbbGiy@P@bAD{VH%CRrXKAd98+h(D2mqbZ*(};W^rBNqmwtd=t`wT-- zy~{w@i4@trAT`WYx^U5GnX?;oG-Kqcd9B!~KHlQjc$cM;97^LA^;^k-;#l5s5dV}y zB&~$4*h2*2iaD`V5%)DJA=?Cg6j$kIVZ@?V@UC5fH{;;cMNV{Kn0y0O>k6)2V7QC+ zZLg8XcT)aY6=)G8OpcsK5iVJ3c^8;b+dC_YHV`!h{U*Os+H`Y-7|?QSRM2xn0iTs~ zh}xonn(yXOB}qX8;)O_iiu;>$irSmypkr(YQqL}yXIW3i(hjvN&sDS>RJ;JiHhOSj z4!4nXyBfevC4ieM0mdMHx>;D%h~4SVg34_d1?TAsV_`}e`lQ}%RN81sk(dgNGJoY3 zhjge3P7Ms6CYRfPRS`1Z&Bg$kM;wt?B90t6wHOL27}{^xJmW7%0;OQ&FECd0W%}WR zieZZCu^ixB0Q$NLK46pyFeeqmd$&v|hog$tUwKgK^;1&=mq0yDi5y9pG^wt{q~%Z& zahJlqQYuEY)W`P^)tbG*W{&PTU;=9J?2t$AdRSY&Pc+c}AC0&fXqv%O(Uk>J{BUAQ zd8c>8c}`ryY_*eL#<-IX+vuamYq>0eI*2wN+)LHX!5~z%&BfrLjHdD;jTRXaxnFVh zl6p?U^@_~OfAe(|B+*?lbfvh@qx-uw8}}yP_{1;BIKo9-z^~-o$s3M2t+G)kL!)~- zL<6q3U=?+{_?#Q>D3crGb1-qOkS1McvF+oC0ju0;y{Qkflq^ksG*){SD_UcN5Rj`{Bq)I8vJN^`1h@o6Zo0&6r$ z?MdO=hUEF?&G9e?J{+#@e-*$DkL;$Dap473=?;`#qB5* zlkINfoff1`!?M=*A=SX$h+esc*7AdjdwN!zyf2lO4 lZE)_^^I~5$xwEQf7}EHFY8upyCx4@*)tWEB&D7S^{4Z%ExKscD literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_he.ts b/src/gui/res/lang/gui_he.ts new file mode 100644 index 00000000..b4e81210 --- /dev/null +++ b/src/gui/res/lang/gui_he.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + אודות Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + לא ידוע + + + + Version: + גירסא: + + + + &Ok + &אישור + + + + ActionDialogBase + + + Configure Action + הגדר פעולה + + + + Choose the action to perform + בחר פעולה לביצוע + + + + Press a hotkey + לחיצה על מקש כלשהו + + + + Release a hotkey + שחרור מקש כלשהו + + + + Press and release a hotkey + לחיצה ושחרור מקש כלשהו + + + + only on these screens + רק במסכים האלו + + + + Switch to screen + עבור למסך + + + + Switch in direction + החלף בכיוון + + + + left + שמאל + + + + right + ימין + + + + up + למעלה + + + + down + למטה + + + + Lock cursor to screen + נעל את סמן העכבר במסך + + + + toggle + הדלקה\כיבוי + + + + on + דלוק + + + + off + כיבוי + + + + This action is performed when + הפעולה מבוצעת כאשר + + + + the hotkey is pressed + המקש לחוץ + + + + the hotkey is released + המקש אינו לחוץ + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + מקש קיצור + + + + Enter the specification for the hotkey: + הכנס פירוט עבור מקש הקיצור: + + + + MainWindow + + + &Start + התחל + + + + &File + &קובץ + + + + &Edit + &עריכה + + + + &Window + &חלון + + + + &Help + ע&זרה + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + לא ניתן להפעיל את התוכנה + + + + 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. + היישום:<br><br>%1<br><br>קיים, אך לא ניתן להפעילו. בדוק אם מוגדרות עבורך ההראשות המתאימות להפעלתו. + + + + Synergy client not found + לקוח Synergy לא נמצא + + + + The executable for the synergy client does not exist. + תוכנת הלקוח של Synergy לא קיימת. + + + + Hostname is empty + לא צוין שם מחשב + + + + Please fill in a hostname for the synergy client to connect to. + אנא ציין שם מחשב שלקוח Synergy יתחבר אליו. + + + + Cannot write configuration file + לא ניתן לכתוב את קובץ ההגדרות + + + + The temporary configuration file required to start synergy can not be written. + לא ניתן לכתוב לקובץ ההגדרות הזמני. הדבר הכרחי על מנת להפעיל את Synergy. + + + + Configuration filename invalid + שם קובץ ההגדרות אינו חוקי + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + שרת ה-Synergy לא נמצא. + + + + The executable for the synergy server does not exist. + תוכנת השרת של Synergy לא נמצאה. + + + + Synergy terminated with an error + Synergy נסגרה עם שגיאה. + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy נסגרה באופן לא צפוי עם שגיאה מספר %1.<br><br>לפרטים נוספים, פנו לקובץ התיעוד (לוג). + + + + &Stop + עצור + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy מאתחל + + + + Synergy is running. + Synergy רץ ברקע + + + + Synergy is not running. + Synergy לא רץ + + + + Unknown + לא ידוע + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + מציאת קובץ הגדרות של Synergy + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + שמור הגדרות &בשם... + + + + Save failed + שמירה נכשלה + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + התחל + + + + Use existing configuration: + השתמש בהגדרות הקיימות + + + + &Configuration file: + + + + + &Browse... + חפש... + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + תיעוד פעילות (Log) + + + + &Apply + &שמור שינויים + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + &יציאה + + + + Quit + יציאה + + + + Run + הפעל + + + + S&top + ע&צור + + + + Stop + עצור + + + + S&how Status + הצג &מצב + + + + &Hide + + + + + Hide + הסתר + + + + &Show + + + + + Show + + + + + Save configuration &as... + שמור הגדרות קונפיגורציה כ... + + + + Save the interactively generated server configuration to a file. + שמור הגדרות השרת הנוכחיות לקובץ. + + + + Settings + הגדרות + + + + Edit settings + שנה הגדרות + + + + Run Wizard + הפעל אשף + + + + NewScreenWidget + + + Unnamed + ללא שם + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + הגדרת Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + קבצי הגדרות של Synergy (*.sgc);;All Files (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + קבצי הגדרות של Synergy (*.conf);;All Files (*.*) + + + + System tray is unavailable, quitting. + מגש המערכת לא זמין, יוצא. + + + + ScreenSettingsDialog + + + Screen name is empty + לא הוקלד שם מסך + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + הגדרות מסך + + + + Screen &name: + שם מסך: + + + + A&liases + שמות &נוספים: + + + + &Add + &הוסף + + + + &Remove + ה&סר + + + + &Modifier keys + + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + + + + + + + + + None + ללא + + + + &Ctrl: + &Ctrl + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + + + + + &Dead corners + &פינות מתות + + + + Top-left + עליון-שמאל + + + + Top-right + עליון-ימין + + + + Bottom-left + שמאלית-תחתונה + + + + Bottom-right + ימנית-תחתונה + + + + Corner Si&ze: + &גודל הפינה: + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + הגדרות שרת + + + + Screens and links + מסכים וחיבורים + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + גרור את כפתור זה לרשת להוספת מסך. + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + &חדש + + + + &Edit + &עריכה + + + + &Remove + ה&סר + + + + A&ctions + פ&עולות + + + + Ne&w + חדש + + + + E&dit + כריכה + + + + Re&move + הסרה + + + + Advanced server settings + הגדרות שרת &מתקדמות + + + + &Switch + ה&חלפה + + + + Switch &after waiting + החלף לאחר ה&מתנה של + + + + + + ms + אלפיות שניה + + + + Switch on double &tap within + החלף בלחיצה &כפולה בתוך + + + + &Options + א&פשרויות + + + + &Check clients every + בדוק את הלקוח &בכל + + + + Use &relative mouse moves + השתמש בהזזות עכבר &יחסיות + + + + S&ynchronize screen savers + סנכרן &שומרי מסך + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + &פינות מתות + + + + To&p-left + שמאלית-עליונה + + + + Top-rig&ht + ימנית-עליונה + + + + &Bottom-left + שמאלית-תחתונה + + + + Bottom-ri&ght + ימנית-תחתונה + + + + Cor&ner Size: + &גודל הפינה: + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + הגדרות + + + + Sc&reen name: + &שם מסך: + + + + P&ort: + &פורט: + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + תיעוד פעולה (Log) + + + + &Logging level: + &רמת תיעוד פעולה (Log) + + + + Log to file: + תיעוד לקובץ: + + + + Browse... + עיון... + + + + Error + שגיאה + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + שים לב + + + + Note + הערה + + + + Info + מידע + + + + Debug + Debug + + + + Debug1 + Debug1 + + + + Debug2 + Debug2 + + + + SetupWizard + + + Setup Synergy + הגדרת Synergy + + + + Please select an option. + אנא בחר אופציה. + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + הגדרת Synergy + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy מאפשרת לשתף בקלות את העכבר והמקלדת בין מספר מחשבים על השולחן, וזה חופשית וקוד פתוח. רק להזיז את העכבר מקצה מסך אחד של המחשב לאחר. אתה יכול גם לשתף את כל לוחות כתיבה שלך. כל מה שצריך הוא חיבור לרשת. סינרגיה היא חוצה פלטפורמות (עובד ב-Windows, Mac OS X ו-Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + שרת או לקוח? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + לא ידוע + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_hi.qm b/src/gui/res/lang/gui_hi.qm new file mode 100644 index 0000000000000000000000000000000000000000..9dad8dffceb9623e88f8b96d9cd0caf25574c6fa GIT binary patch literal 23 fcmcE7ks@*G{hX<16=n7(EZlpygMop8iIEWihQJ9+ literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_hi.ts b/src/gui/res/lang/gui_hi.ts new file mode 100644 index 00000000..ccc4872c --- /dev/null +++ b/src/gui/res/lang/gui_hi.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + + + + + &Ok + + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_hr-HR.qm b/src/gui/res/lang/gui_hr-HR.qm new file mode 100644 index 0000000000000000000000000000000000000000..6c3bd1987bbd3d29cbaf69107d4a0d26a643ad43 GIT binary patch literal 20485 zcmbtc3y@q@nLabq(=(a$Jn|q6A&(m%mpms4k_aJ8GMOYKVUmpL2?^O1z0-ZC=Q2I_ z&fe~xNk(BU*RoJi*DcsmM0_r~;-Xfmpp>j4<+BzoU1i-xmQrw6K`9msYb|y6`_8$~ zp4$%qYI1vS-*e7?{^$4q=fAV(!F>OBpTGOge_6NcpWpb=ul{Vm5bd`K(J?H(}rzBE;su5c0pnR|>KI=R#yp3vu!P3321YLae$=h{`wd{1Van$xjGzsUupy z@GT*>EfcBxZWrS6UXgnKAMpHbqCNF}A%<^$D@*Aw1W4mAVexCN}+G zJ$|1Qo1WW_>pfx<*S+Xov6=H-^n}>V`Bvt|X3n>$O+_WHJ8YmWwO6zwCU=hO>)=SbTfSwTpf$ME7f2?D3n0 z&{ns6?z7-)??+m`^6;OrubnMFT=N|vTHoLD=e5hh`-fXEoPAh`1Mh7;IE!_bexvmb zYw_GAQ?2H+Sm(80YW>vQ)mZO#ol-EEIhK8s#Vr62qe z_I)aK>i7pB*TbnBE4%Uim8s$zFi+Plsaqb${?=WRdgrD`p-09guOuq*ZSOZQ;DKcs&3{VpK}f17&Y zva^uO=G04{2VXi~O#Sh@N1-pN_Df!eYsZ_~w_1?j{-y2T+m{zY?{9yih;bVqYX9XO zZ-d+(OZRr-xiv4QdpAI5hku&h&}|FR^7ZtU19*P(#`M0i^VrW9(j%8*U)MgJepBZ! zpuZ#Ow|w-|;Oo!Rckdd+_)Pkq_h4V$f1iGA4c1%v!%cXj1o z`ZD+}x^CSGzF)Pm>nCr+^Gh#SoccEIcmGmd*FK}JM>j1tzH&e0Fu3^5|M~CW>z@|i ze&`v{`7?FhcIV=I{&W`hvv%?QT@Qk9KVJOQ_19s&t26uF^f31Qo6N}@-UEG`SJxHe z>U!k2nUlZAygl#AjQ!2i(7*R(Zushz;D?sEs|D+b2Qr_0^CqnO>CAntIqdtw%tI|D z_<=!n-T$G?qq#o|arGNBPagUNtbYD61D4zR8 zcmAhKgxK)jZfo6Ru*2uN-Jbu&Iy<}Pr+$j(*LA;R6#Ux%ME4{2nnE1;Z1+>=K+pEa zyZ`(3Hwn>qQO|`R!F6~|&yK%*AHLt%b8Rc+(7Ll{@aZlgc0AQHUa^I^W@~Te?_434 z+}6A8nfJi&?CpK+GZ$gq)xA@zA;(=W^iHk)xDW%6_TK-80gSu6_eU2D!v3%8{h!ag z6Z?3;65?pC4V3i=U7Qk{aD^%IqSA?5B8{Im{lruUuDwI!PNjUnGKx-Nzfm$J zBOKJyEi944;N8K{&Kpd(WI6Wknqzl^`aH&rOWG|gY)S?gxND1>MFqdj<9iKr&x={% zv@F3B{KgDcSv5TAI3-gnPnw#MD`P#a>}WHlJK?y~T)A&Z-mPNX8ZnCf<}qCflUFYs zPTx1|*b`Qv;+mS8r}mV)#aYlgC5ogR{4j9UBwMHOc^=EmN^zHsb|zROC`DU~C6iK8`^urRfQMY(}-$xEM)jTc|(EpF#E*DRXQ<|YW)4sCg5%k`aXdJ#?T z*2Inss5AFS7M8>`l@5#yjcZwU&MN07HOtoWmTO8StF0WDESQ&;maGJQ-pozN{|fK~ zT7`*R{Hv^nzm=pVc~*n_+z7Q0))r{M>aj@+3ZQHTpFEo}^V-~GJ)P^qERNLj&`eT! z&qpNdPzH}%l7leffPhrdoG903*>ZT6QpBEU`QhL;XJVrE*rjl#p(VygwmNkTY73S$ zAZ-T>QxbB(U<-F*vXXZ~R$k!P#q%0n&!h=mR#sc8O&(cD&lBBHyK5CD>#$>&u-Ci)HwK7xt@hvhAsleO36TAGNT{hvR!Pe4@nX@LW zoFU^6B9FYQm@UI!-(l%xtAfxz+e&7x#%_49q+^HY=p15+?2 zt!K-ITaz@#&?9C6uqI96yPdpISC%Li5g5Dk-&@2rU1my;rZ+m%$f!)@d8-K zz*9{N?+~yh(Xw{fux+QT&AC?D^hl_DruxlIh)BP#b@^V&R;{&E} zLED%%5hiDiq9x70S{TO@*gz&wbEYLRiUn0028k3&wU7n^1z11qREl|xyeJv7)vQ2t zrCbJ*)MGm+3OA3?3iwo!3@PG1SwoEOvp)()mmGFVWwqgwW=_wPC9+r?yl^KUPhFrknAN4* zNVH4t`peQ(qViuXC!a8&S&6#d6HnFxqBQqas}Qtx~g135w&)Vpyspjgslk0z=f5 z#;+GFtawEyyXD zG*nM!D%5&c%bR6bXem)OkJn&#Bersr%!3PHn;%H0A_&wk!)TE$1-o!v$4v@EXORQ3 z^5KGS3=!4gj(3^~4nEJR6)Hr87O-;+2-ZAj<|<`lyr?jY1hopq_#Pwgn98of@=`gG zb>pvq+GHd0gKUU$UM|(1Wi_U{rN1H7)%s7XsJ=&Qj0U?ZuLJ2Z9kZnMsi>r6>4!8q=~|pHKCn%D%vCibg43dj7owJR3@ga5^ISi0ui`>m1rSR7w?t)qhC}o zl1WIi{rH?`zClk~%~6h0Rmfxx#_ccET&7CZz=!iFpQ!9Pw8G=$aT$owaSiu;0&GX6 z?5`>)H05Pokf6xVGoomTpucR|i7aWh&RdN?egX`{ghaV{h6t8ysU}1rbnE;?lu0G8 zc2NmwQ^3$T>wIIcj;I4dYq?01uDpgQ+ zi5{!)dl4nW-RK*QFWKDQs6o?=$PgJ z#e1lTj-JsB4a}!l(rG4P)j5|H54jUPoJ25DjX~8D#1eSCru+?)BJm+ z5dE|))S0%E6}uLBgfD~}vi1l6-3^uyUJ#-%QcMMFcVQOov^8(IG8at}2@mUZ3=h;6 zyjJ;583CshOqI#%P+|@B#d4*le3yc8Iw)XHzo5vN)x9EP5*Y&#?)fmmpMyKqFmF=9 z;i80sgC0~Il2&?K)k?KYhM5LAtN0f2J3ZHpj<)(h2yMoZc=U6}D(GgwU zJWPO3PDirE_1W_!Br;mrHO}*-v0@vusJ5`Suth@(Bg3yuP-1+$qK-3&*3?J_%^<3b z%Ofs=O9q8^?+f1rsPi`|CLU-Vz&@xHA&g7uLwTvv{c6VezyM8i@Gw~5A}0xrEUgch z-J-Oo`ooE*k6|$3AZ?j_8dS{ac~`f705KV+>cYv&U{-%lAEGh5%hrWJrPKN$>zvud z6pUYVg)9IDIReO|!(lT?h@^V-V@@6io+w?Scch7_RdW-MEvR21gy_&un$ym#1kUyM zr-1h)NSOdZA=5kb?4&hOZi4H5P%s95g2ZVycLW^j9MX#xnoye9NS7GGCiEBy?L$Sq z83NLBYN8msjpE(IQj@i;rO&G{UVq+B-@pPXrD$DrxAg}O zNF<=lK$+Jt_&y4+tcejgzF~yYP^ZIwo+YpnZFp!jtBsr(zMgvBcrBIQMAtfwOypRD zmHN2S@l(fM#zI#t*i;r9If?Cz;Q#s?TgK(G!zWLSjJ&E9&!Ag@v7(Iih}AT4MoL^| za!4owNv+_DXU5EusKH~gUbhFX zL3uoegAnATjyrZ!z9|c`8JNh6h;Pd371S=9pnOd%`00|rNm#hs3v_w_hU*)H0$~wY z?8z>eJK$8WH?tq{8Z)g6Cgu6#V3v02jGG(l@hdWx%xXM#g}4q;gn4$dJM0{DW}5Vc z%Og`Q^n{BzQFCsvN+8C7SxzFa^U^@>C2IYa;9<(;`Gq3S6{-MGF`gdt+ z=s1Ks-% z0ivtS0KJ$+2?Ghm2m|ZI*Nk2jU{|P0n@SO?db+k_LItA2lN(=nWHS|n3}ZIM(}u}_ zDX2rrLlD(*0T7FmVHtz!E%(ZxWW5=QZG&oBKwQ{QR&Ok;)??U|M2pxaBjdu><4#>Q zvPrmAZ@Ml_cU&rA7+X?0l1<99-oOK{L3u9w9{K z(N5G5a{{-@{^3Sj=|PlNs5Rbb0?aBqcN=bDj|?qR60qo(Ssw~G)<2Y=HS8P?M!Z^2 zDNjavy{eWX% zj;=6c%G7k6iZSTD8EAK-6^GKn{$5Wy$=SY_|Wge5<^)21g0-(hSbu5 zuDIY6Km?G2i9TAZjAx^G1d1K#i;qpLGPPWtFE!E(VCPZDB(53i_c(8(d-h@3LOqGg zm@^Q9QGOwxcF4`j)`{^7N(K@nMb#X~RM=F=$cB5!AiD8nMjpKdE}{LP?lqs+b6sKg zJ2fvEDs(iB6pmxBI=C4@3dc>oAyVj(;aP`iR28O9nz~<@s<(*&$pH15iYhJftgAvo zBwG|p4@@dx(aNlT-p)h z%EK!cEqkh=2i_z#GoCfph@HVI%M~Wp`~WKJ=8eG3mN+)6D zQWtpdN9o1{atLkCuy~-`Xsta9)~a?qjBBKT`3;MNsuC(C7_7a@TN}2MSKdG`8#A&U z(Xtzn&@a94;JA)ge0S+ z?6e9Sgw#j)WWTc1N zV~{&FG>kVj`TF!04dG9A&E*X0D4s=~VY;NIupN8r!f6JygK>(0Y|-E7bu7B3!EQ&} zlF7ZT*9as0lQV+ic>C5e zdB)E+X`XF@uYM0y!Y=p*SysN{tUBJ!NXc`teuRac2_vV9{7d8GBPVD_K^b$FsmSOq zeZ;T}6&(1=nrW@U10diew!`5H7jo;$dT8Z*1%~>k%3EPQwpT|(4bGJd8boQTle$`K z@XdNM(SJ8R&aOqVX17{%T!uM#PO8$ZXsIo!LA?EdIbM-rtk!&N32Zo@*b!J)TF$tG zI`itLyrOE#E9y;|L6l?Jhdv=xrHF5eWY$HrZ9T9ENR%9R{H=(DVl{gcSJ>8|uT3tN=<^y%U<5yvFqBPuB?11jDtB;yAMS+~SEjE7HPp6UTdd}65b+Y5*{h?R(t_{}^m z1_v7qUZ|E}EbqGsFJsd1)$Hts3jY>@`i+XG-k@Q$z*|OmqIz!%x6s!!YvyiPl;c~l zq>y2hH45gr+#&ZcC4MJWkh3wAv9zj`j;=`YL0LWhAlFq&s_682;N`t|g6N5dJ?zV= zwpfL$)Cyd?77wD80zv@JMUrLAKEi=jeB*E5))k!y_(d8tiuFfNN~bj}>mj#hBQE{j`oj9LkQ7(?P+6RmhGU8CF; z%#WE$s+&?3e+<0wFlo92+KqtTJT(I@vOVH~XoJc(&ZK4}>7@aU4RA#266~VciUp(c zoa5r})~Gjxaj-HFAap#CbDdIY>kQIDl!vFa4SZH^)GG{c(T*88?L<~PBX>Ar*_Cq} zrDIO=Ovq6VQxm0?YJrZ?-7CLgLl}FGn?=Y}hWEtb&AyA% + + AboutDialogBase + + + About Synergy + O Synergyu + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Nepoznato + + + + Version: + Inačica: + + + + &Ok + &U redu + + + + ActionDialogBase + + + Configure Action + Podesite radnje + + + + Choose the action to perform + Odaberite radnju za izvođenje + + + + Press a hotkey + Pritisnite tipku prečaca + + + + Release a hotkey + Oslobodite tipku prečaca + + + + Press and release a hotkey + Pritisnite i oslobodite tipku prečaca + + + + only on these screens + samo na ovim zaslonima + + + + Switch to screen + Prebaci na zaslon + + + + Switch in direction + Prebaci u smjeru + + + + left + lijevo + + + + right + desno + + + + up + gore + + + + down + dolje + + + + Lock cursor to screen + Zaključaj pokazivač na zaslon + + + + toggle + uključi/isključi + + + + on + Uključeno + + + + off + Isključeno + + + + This action is performed when + Ova radnja se izvodi kada + + + + the hotkey is pressed + je tipka prečaca pritisnuta + + + + the hotkey is released + je tipka prečaca oslobođena + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Tipka prečaca + + + + Enter the specification for the hotkey: + Odredite tipku prečaca + + + + MainWindow + + + &Start + &Pokreni + + + + &File + &Datoteka + + + + &Edit + &Uredi + + + + &Window + &Prozor + + + + &Help + &Pomoć + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + Program ne može biti pokrenut + + + + 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. + Izvršna datoteka<br><br>%1<br><br>ne može se pokrenuti, kao da ne postoji. Provjerite imate li potrebne dozvole za pokretanje ovog programa. + + + + Synergy client not found + Synergy klijent nije pronađen + + + + The executable for the synergy client does not exist. + Izvršna datoteka synergy klijenta ne postoji. + + + + Hostname is empty + Naziv računala nedostaje + + + + Please fill in a hostname for the synergy client to connect to. + Upišite naziv računala synergy klijenta na koji se spajate. + + + + Cannot write configuration file + Nemoguće ispisivanje datoteke postavki + + + + The temporary configuration file required to start synergy can not be written. + Privremena datoteka postavki potrebna za pokretanje synergya ne može biti zapisana. + + + + Configuration filename invalid + Pogrešan naziv datoteke postavki + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Niste odabrali valjanu datoteku postavki za synergy poslužitelj. Želite li sada odabrati datoteku postavki? + + + + Synergy server not found + Synergy poslužitelj nije pronađen + + + + The executable for the synergy server does not exist. + Izvršna datoteka synergy poslužitelja ne postoji. + + + + Synergy terminated with an error + Synergy je prestao sa radom zbog greške + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy je neočekivano prestao sa radom, s izlaznim kodom of %1.<br><br>Pogledajte izlazni zapis za više pojedinosti. + + + + &Stop + &Zaustavi + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy se pokreće. + + + + Synergy is running. + Synergy je pokrenut. + + + + Synergy is not running. + Synergy nije pokrenut. + + + + Unknown + Nepoznato + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Odaberite synergy datoteku postavki + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Spremi postavke kao... + + + + Save failed + Neuspjelo spremanje + + + + Could not save configuration to file. + Nemoguće spremanje postavki u datoteku. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Naziv zaslona: + + + + &Server IP: + &IP poslužitelja: + + + + + &Start + &Pokreni + + + + Use existing configuration: + Koristi postojeće postavke: + + + + &Configuration file: + &Datoteka postavki: + + + + &Browse... + &Pregledaj... + + + + Configure interactively: + Podesite interaktivno: + + + + &Configure Server... + &Podesite poslužitelj... + + + + Ready + Spreman + + + + Log + Zapis + + + + &Apply + &Primijeni + + + + IP addresses: + IP adresa: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + &O Synergyu... + + + + &Quit + &Zatvori + + + + Quit + Zatvori + + + + Run + Pokreni + + + + S&top + Z&austavi + + + + Stop + Zaustavi + + + + S&how Status + P&rikaži status + + + + &Hide + &Sakrij + + + + Hide + Sakrij + + + + &Show + &Prikaži + + + + Show + Prikaži + + + + Save configuration &as... + Spremi postavke &kao... + + + + Save the interactively generated server configuration to a file. + Spremi interaktivno generirane postavke poslužitelja u datoteku... + + + + Settings + Postavke + + + + Edit settings + Uredi postavke + + + + Run Wizard + Pokeni čarobnjak + + + + NewScreenWidget + + + Unnamed + Neimenovan + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Podesite Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy postavke (*.sgc);;Sve datoteke (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy postavke (*.conf);;Sve datoteke (*.*) + + + + System tray is unavailable, quitting. + Obavijesna ikona je nedostupna, otkazujem. + + + + ScreenSettingsDialog + + + Screen name is empty + Naziv zaslona nije upisan + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + Postavke zaslona + + + + Screen &name: + Naziv &zaslona: + + + + A&liases + N&adimci + + + + &Add + &Dodaj + + + + &Remove + &Ukloni + + + + &Modifier keys + &Promijeni tipke + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Nijedan + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + S&uper: + + + + &Dead corners + &Mrtvi kutovi + + + + Top-left + Gore-lijevo + + + + Top-right + Gore-desno + + + + Bottom-left + Dolje-lijevo + + + + Bottom-right + Dolje-desno + + + + Corner Si&ze: + Veličina ku&ta: + + + + &Fixes + &Popraci + + + + Fix CAPS LOCK key + Popravi CAPS LOCK tipku + + + + Fix NUM LOCK key + Popravi NUM LOCK tipku + + + + Fix SCROLL LOCK key + Popravi SCROLL LOCK tipku + + + + Fix XTest for Xinerama + Popravi XTest za Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Zaslon: <b>%1</b></center><br>Dvostruko kliknite za uređivanje postavki<br>Za uklanjanje zaslona dovucite ga do ikone smeća i ispustite ga + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Postavke poslužitelja + + + + Screens and links + Zasloni i poveznice + + + + Drag a screen from the grid to the trashcan to remove it. + Za uklanjanje odvucite zaslon iz polja u ikonu smeća. + + + + Configure the layout of your synergy server configuration. + Podesite izlaz vašeg synergy poslužitelja. + + + + Drag this button to the grid to add a new screen. + Povucite ovu ikonu zaslona do odabranog polja ispod. + + + + 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. + Dovucite novi zaslon u odabrano polje ili premjestite iz trenutnog polja. +Za brisanje zaslona odvucite ga u ikonu smeća. +Za uređivanje postavki dvostruko kliknite na zaslon. + + + + Hotkeys + Tipke prečaca + + + + &Hotkeys + &Tipke prečaca + + + + &New + &Nova + + + + &Edit + &Uredi + + + + &Remove + &Ukloni + + + + A&ctions + R&adnje + + + + Ne&w + No&va + + + + E&dit + U&redi + + + + Re&move + Uk&loni + + + + Advanced server settings + Napredne postavke poslužitelja + + + + &Switch + &Uključi + + + + Switch &after waiting + Uključi &nakon čekanja + + + + + + ms + ms + + + + Switch on double &tap within + Uključi dvostrukim &dodirom za + + + + &Options + &Mogućnosti + + + + &Check clients every + &Provjeri klijent svakih + + + + Use &relative mouse moves + Koristi &relativne pokrete miša + + + + S&ynchronize screen savers + U&skladi čuvare zaslona + + + + Don't take &foreground window on Windows servers + Ne uzimaj &prozor u prednjem planu na Windows poslužiteljima + + + + Ignore auto config clients + + + + + &Dead corners + &Mrtvi kutovi + + + + To&p-left + Go&re-lijevo + + + + Top-rig&ht + Gore-des&no + + + + &Bottom-left + &Dolje-lijevo + + + + Bottom-ri&ght + Dolje-de&sno + + + + Cor&ner Size: + Vel&ičina kuta: + + + + SettingsDialog + + + Save log file to... + Spremi datoteku zapisa u... + + + + Elevate Synergy + UAC ovlasti Synergya + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Sigurno želite dati UAC ovlasti Synergyu? +To omogućuje Synergyu interakciju s ovlaštenim procesima i UAC dijalogom, ali može uzrokovati probleme s neovlaštenim procesima. Dajte ovlasti Synergyu samo ako je stvarno potrebno. + + + + SettingsDialogBase + + + Settings + Postavke + + + + Sc&reen name: + Na&ziv zaslona: + + + + P&ort: + U&laz: + + + + &Interface: + &Sučelje: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Prijavljivanje + + + + &Logging level: + &Razina prijavljivanja: + + + + Log to file: + Prijava u datoteku: + + + + Browse... + Odaberi... + + + + Error + Greška + + + + &Language: + Jezik: + + + + &Miscellaneous + + + + + Warning + Upozorenje + + + + Note + Napomena + + + + Info + Info + + + + Debug + Otklanjanje greške + + + + Debug1 + Otklanjanje greške1 + + + + Debug2 + Otklanjanje greške2 + + + + SetupWizard + + + Setup Synergy + Podesite Synergy + + + + Please select an option. + Molim, odaberite mogućnost. + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + Podesite Synergy + + + + Welcome + Dobrodošli + + + + Thanks for installing Synergy! + Hvala što ste instalirali Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy vam omogućuje lagano dijeljenje vašg miša i tipkovnice između više računala na vašoj radnoj površini. Synergy je besplatan i otvorenog kôda. Jednostavno pomaknite vaš miš preko ruba zaslona jednog računala na zaslon drugog računala. Čak možete dijeliti sve vaše međuspremnike. Sve što trebate je Internet veza. Synergy je više platformska aplikacija (radi na Windowsima, Mac OS X i Linuxu). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Poslužitelj ili klijent? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Nepoznato + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_hu-HU.qm b/src/gui/res/lang/gui_hu-HU.qm new file mode 100644 index 0000000000000000000000000000000000000000..88499fed06748a27892e39e113a81b7337d85b12 GIT binary patch literal 18573 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 Sy1|pCV}qFjeZ7@4JN^fZAredg literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_hu-HU.ts b/src/gui/res/lang/gui_hu-HU.ts new file mode 100644 index 00000000..f21be596 --- /dev/null +++ b/src/gui/res/lang/gui_hu-HU.ts @@ -0,0 +1,1407 @@ + + + AboutDialogBase + + + About Synergy + Synergy névjegy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Ismeretlen + + + + Version: + Verzió: + + + + &Ok + &Ok + + + + ActionDialogBase + + + Configure Action + Beállítás + + + + Choose the action to perform + Válasszon egy műveletet + + + + Press a hotkey + Nyomjon le egy gyorsbillentyűt + + + + Release a hotkey + Engedje fel a gyorsbillentyűt + + + + Press and release a hotkey + Nyomja le, majd engedje fel a gyorsbillentyűt + + + + only on these screens + csak ezeken a képernyőkön + + + + Switch to screen + Képernyőváltás + + + + Switch in direction + Irányváltás + + + + left + bal + + + + right + jobb + + + + up + fel + + + + down + le + + + + Lock cursor to screen + Kurzor zárolása a képernyőn + + + + toggle + váltó + + + + on + BE + + + + off + KI + + + + This action is performed when + Ez a művelet történik amikor + + + + the hotkey is pressed + a gyorsgomb lenyomva + + + + the hotkey is released + a gyorsgomb felengedve + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Gyorsgomb + + + + Enter the specification for the hotkey: + Adjon meg leírást a gyorsgombhoz: + + + + MainWindow + + + &Start + &Start + + + + &File + Fájl + + + + &Edit + Szerkeszt + + + + &Window + Ablak + + + + &Help + Súgó + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + A program nem tud elindulni + + + + 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. + A végrehajtandó<br><br>%1<br><br>nem indul, esetleg nem létezik. Kérjük ellenőrizze, hogy rendelkezik-e a szükséges engedélyekkel a futtatáshoz. + + + + Synergy client not found + Synergy kliens nem található + + + + The executable for the synergy client does not exist. + A Synergy kliens futtatható állománya nem található. + + + + Hostname is empty + A gépnév üres. + + + + Please fill in a hostname for the synergy client to connect to. + Kérjük adja meg a Synergy kliens gép nevét a csatlakozáshoz. + + + + Cannot write configuration file + A konfigurációs fájl nem írható. + + + + The temporary configuration file required to start synergy can not be written. + Az ideiglenes konfigurációs fájl, amely szükséges a Synergy indításához, nem jött létre. + + + + Configuration filename invalid + Konfigurációs fájlnév érvénytelen + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Nem adott meg érvényes konfigurációs fájlnevet a synergy szerveren. Meg akarja keresni a konfigurációs fájlt most? + + + + Synergy server not found + Synergy szerver nem elérhető + + + + The executable for the synergy server does not exist. + A Synergy szerver futtatható állománya nem található. + + + + Synergy terminated with an error + A Synergy hibát jelzett, ezért leállt + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + A Synergy a következő hibakóddal lépet ki: %1.<br><br>A részletekért tekintse meg a naplót. + + + + &Stop + Stop + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + A Synergy indul. + + + + Synergy is running. + A Synergy fut + + + + Synergy is not running. + A Synergy nem fut. + + + + Unknown + Ismeretlen + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + A Synergy konfigurációs fájl kijelölése + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Mentse másként a konfigurációt... + + + + Save failed + Mentés sikertelen + + + + Could not save configuration to file. + A konfigurációs fájlt nem lehet menteni. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + &Start + + + + Use existing configuration: + A létező konfiguráció használata: + + + + &Configuration file: + Konfigurációs fájl: + + + + &Browse... + Tallózás... + + + + Configure interactively: + Interaktív konfiguráció: + + + + &Configure Server... + Szerver konfiguráció... + + + + Ready + Kész + + + + Log + Napló + + + + &Apply + Alkalmaz + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Synergy névjegy... + + + + &Quit + Kilépés + + + + Quit + Kilépés + + + + Run + Fut :-) + + + + S&top + S&top + + + + Stop + Stop + + + + S&how Status + S&how Status + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + Konfig mentése mint... + + + + Save the interactively generated server configuration to a file. + Mentse az interaktívan létrehozott szerver konfigurációt fájlba. + + + + Settings + Beállítások + + + + Edit settings + Beállítások módosítása + + + + Run Wizard + Varázsló futtatása + + + + NewScreenWidget + + + Unnamed + Névtelen + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Synergy beállítás + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy konfiguráció (*.sgc);;Minden fájl (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy konfiguráció (*.conf);;Minden fájl (*.*) + + + + System tray is unavailable, quitting. + Rendszer tálca nem elérhető, kilépés. + + + + ScreenSettingsDialog + + + Screen name is empty + Képernyőnév üres. + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + Képernyő beállítások + + + + Screen &name: + Képernyőnév: + + + + A&liases + Álnevek + + + + &Add + Hozzáad + + + + &Remove + Eltávolít + + + + &Modifier keys + Módosító billentyűk + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + None + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + S&uper: + + + + &Dead corners + &Dead corners + + + + Top-left + Bal-felső + + + + Top-right + Jobb-felső + + + + Bottom-left + Bal-alsó + + + + Bottom-right + Jobb-alsó + + + + Corner Si&ze: + Sarokméret: + + + + &Fixes + Rögzít + + + + Fix CAPS LOCK key + Rögzíti a CAPS LOCK-ot + + + + Fix NUM LOCK key + Rögzíti a NUM LOCK-ot + + + + Fix SCROLL LOCK key + Rögzíti a SCROLL LOCK-ot + + + + Fix XTest for Xinerama + Fix XTest for Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Képernyő: <b>%1</b></center><br>Dupla klikk a módosításhoz<br>Húzd a szemetesre a törléshez + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Szerver konfiguráció + + + + Screens and links + Képernyők és kapcsolatok + + + + Drag a screen from the grid to the trashcan to remove it. + Húzd a képernyőt a listából a szemetesre, hogy eltávolítsd. + + + + Configure the layout of your synergy server configuration. + Configure the layout of your synergy server configuration. + + + + Drag this button to the grid to add a new screen. + Húzd ezt a gombot a listába, hogy új képernyőt adj hozzá. + + + + 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. + Húzza az új képernyőket a listába vagy mozgassa a meglévőket. +Húzza a képernyőt a szemetesre, hogy törlődjön. +Dupla kattintással szerkesztheti a beállításokat. + + + + Hotkeys + Gyorsgombok + + + + &Hotkeys + Gyorsgombok + + + + &New + Új + + + + &Edit + Szerkeszt + + + + &Remove + Eltávolít + + + + A&ctions + A&ctions + + + + Ne&w + Ne&w + + + + E&dit + E&dit + + + + Re&move + Re&move + + + + Advanced server settings + További szerver beállítások + + + + &Switch + &Switch + + + + Switch &after waiting + Váltás a várakozás után + + + + + + ms + ms + + + + Switch on double &tap within + Switch on double &tap within + + + + &Options + Beállítások + + + + &Check clients every + Kliensek ellenőrzése + + + + Use &relative mouse moves + Relatív egér mozgás használata + + + + S&ynchronize screen savers + Képernyővédők szinkronizálása + + + + Don't take &foreground window on Windows servers + Don't take &foreground window on Windows servers + + + + Ignore auto config clients + + + + + &Dead corners + &Dead corners + + + + To&p-left + Bal-felső + + + + Top-rig&ht + Jobb-felső + + + + &Bottom-left + Bal-alsó + + + + Bottom-ri&ght + Jobb-alsó + + + + Cor&ner Size: + Sarok méret + + + + SettingsDialog + + + Save log file to... + Napló mentése mint... + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + Beállítások + + + + Sc&reen name: + Képernyő neve: + + + + P&ort: + P&ort: + + + + &Interface: + &Interface: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Naplózás + + + + &Logging level: + Naplózási szint: + + + + Log to file: + Napló fájlba: + + + + Browse... + Tallózás... + + + + Error + Hiba + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + Figyelmeztetés + + + + Note + Jegyzet + + + + Info + Infó + + + + Debug + Debug + + + + Debug1 + Debug1 + + + + Debug2 + Debug2 + + + + SetupWizard + + + Setup Synergy + Synergy beállítás + + + + Please select an option. + Kérem válaszon egy opciót. + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + Synergy beállítás + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + A Synergy lehetővé teszi a billentyűzet és egér megosztását több számítógép között és ráadásul Ingyenes és nyílt forráskódú. Csak mozgassa az egeret a képernyő szélére, hogy átkerüljön a másik számítógépe monitorára. A számítógépek között a vágólap is megosztásra kerül. Nincs másra szüksége csak hálózati kapcsolatra a két számítógép között. A Synergy operációs rendszer független, így használhatja Windows, Mac OS X és Linux rendszerű számítógéppel. + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Szerver vagy kliens? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Ismeretlen + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_id.qm b/src/gui/res/lang/gui_id.qm new file mode 100644 index 0000000000000000000000000000000000000000..2394cf782422df5a3104452c3d4b1309da9e0a03 GIT binary patch literal 4680 zcmbVPO>A3L7CuSr#7&%}ib5$8Dwm3R159cbbX5T&Df9>0ro{cBFcQ7-yS88b{GNI5 zz64ig143c}tYCv+!EX^%vl?lN5FpJ40Rk2*kXiwo88n(1)CB@Gvp{_3Ui;ZGv6Ip& zzR%D1eCM3+oO92)cU*M0e{$ue7e2f3`VUXP^8VKgL_?>E{`4@Jf5nqT!~Y>V^#Rey zA`PE^ooMt%8vg4?L|b-K=E@uRy+PT`7eo_tl->Uo(fA3y*B#a?_Pu*=f}ohyB+J!u_vzVfc}}>(=M;OF#bw?|;l6d-5N^|0Vz85aj9o{Ch(&zCUf(2`~T6zSn{K*5qx^LhtD1$!O|- z*tcu?%WLieAE!K`t)GwJ%_uEWjZ_Ygcm@T|Vr>lT^!##|=zBcrhm{2xt0CUJgN~7+ zfHX;bR!C5hns`za;af8WnKZ(p*bG!uY4(NN1~>`rf?V?03P4HnQ<$;iK`jVZgT4TH zI$?Cj5Z{xE=}MYPb?~7&vuG42svwRTt`P7iz3!r29c$4PU+H%#Z`8*`Q^Z6d-I~ z>Q>e{;JJ#OnCdvu74+kfkyM2X4IpsfB?wCpbkLKcOy28yTEt4T{c%6Et$nS?3^HPt z<_(W^qgv2GI@%TS$%99QblphBv5HOD*K=fw4nev>VUOV>hr&ufb8|4)W2w~5?2?kM z$?5fUY^D3K+vZITPaS$jmJ*Z5>q$BAhHJ=&t}3K7ih(mvU=6Wyc_7DA8}db`8m@|> zmO2^0^nwAcnwTNMQ}Jxk(P5*X%X^H=br98ULK!AhS~2Hx6EH}byx?r`sKEbI4c8Ur ziV~$TD0`J8k{Z=092pl1rc~CWVAfF3FSl~V4b!Thvzg)mUuVq;6c}Fxh?b}inRt>)M~L5DTNw$D@vOhzXwz`L4*bsbx_iMiqy?JF0~4x=wY=noikBYh;;&W zQ5R`{C^loQ>Ox1d$tO$_$Q9}Na@kjN;?cx2g=GjFdth<-j4D|pcG3}RH-I_ung-UU zPHfVrl6o|2T@dURt5EfZHo4sTp-rOsxGWRK}Ti4Kv#<=33G8^cbhT zpoLSrb3l(edv)ZSI^9V40CYE?J5KeEIZLV@u9)L$u=Gq1F^EBmlACvY4{gm<&tRCG zIeK)L{n>fn(VH-TmKI?CD*mdp%OpY6RfQ7^q1Iu2m#@m2GiBeTybg)EV_{>H z3~~$U!1VIBg@HCnUe3fKq9k=HwS=^H_`p(uv@=TwKz)Mn6+^dHc+h=wUJjd7&`(gn*o9ck?xk9IT(~f2AF9lc2D%L zqQUin7;#OzNylxJ7f;W&OWStC^I2quP9A1?V&j#&0=Fl-hiAEp>EPV9xMkJ&fNkyN zp@Tbrr~9|}*eRX0adPqOC(!?S24J05!gd{=9XJK~y)Z|My)4+BYz?ytectP zZxyVzq_~;4J-6)e{e-y*QD7l3f7@->`pp@_n!BT9ZEF}`+Yz$3%u09XUW?V{%v#UB zaA&C+e72wU@KwVy!m-nMUK{Urrj(Em9{gB_7tE>KCC|vG@YcqwgUT%O#NW}#V``gA zJESUDVJAbrI-%30{4#3yMX@)=4eSoVJ!cW;Df3`0V2;|}SnfL4GWM18h2PuX+Bvug z8Jm-w-4pw`h~CHa$e!P52-G4xRTTIMSqi)NSzC1cNTinuBx#V;aJ50h948MvaR zn#-Y#T(PY5DyBqHPkik)e4c{qjYQ*0Dlh~aDObg{IV0uiKgMDorb_c|u>rXva7(Hn z?n`0~e2mdun!<8f=&BM5Bd7?=K(L<)Lu`!-;uK6T$v~(Tz+2;`@3Xi; zF8N-=m>w6zJl^A_2o!n+=0k}my&6U}p5+5foEYQ_?R!0MC`Dl$?`rr`m&2$oZsxtl zQF{}P=fq)I5{pIgpz-jK7bK6}VrJNBoRdl8q<0pirPJco+;FE_*ZjRzRjR3I=vPjG B8211G literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_id.ts b/src/gui/res/lang/gui_id.ts new file mode 100644 index 00000000..36219187 --- /dev/null +++ b/src/gui/res/lang/gui_id.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + Tentang Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Tak dikenal + + + + Version: + Versi: + + + + &Ok + Oke + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Memulai Synergy. + + + + Synergy is running. + + + + + Synergy is not running. + Synergy tidak berjalan. + + + + Unknown + Tak dikenal + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + Siap + + + + Log + Laporan + + + + &Apply + + + + + IP addresses: + Alamat IP: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + Jalankan + + + + S&top + Berhenti + + + + Stop + Berhenti + + + + S&how Status + Perlihatkan kondisi + + + + &Hide + &Sembunyi + + + + Hide + Sembunyi + + + + &Show + + + + + Show + + + + + Save configuration &as... + Simpan konfigurasi sebagai... + + + + Save the interactively generated server configuration to a file. + + + + + Settings + Pengaturan + + + + Edit settings + Ubah pengaturan + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + Tanpa nama + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + System tidak memungkinkan, keluar. + + + + ScreenSettingsDialog + + + Screen name is empty + Nama layar kosong + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + Pengaturan Layar + + + + Screen &name: + Nama Layar: + + + + A&liases + Nama lain + + + + &Add + Masukan + + + + &Remove + Hapus + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + Ctrl: + + + + Al&t: + Alt: + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + Atas-kiri + + + + Top-right + Atas-kanan + + + + Bottom-left + Bawah-kiri + + + + Bottom-right + Bawah-kanan + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Konfigurasi server + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + Baru + + + + &Edit + + + + + &Remove + Hapus + + + + A&ctions + + + + + Ne&w + Baru + + + + E&dit + Ubah + + + + Re&move + Hapus + + + + Advanced server settings + Pengaturan server lanjutan + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + Pengaturan + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + Informasi + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy akan mempermudah dalam membagi tetikus dan papan ketik diantara beberapa komputer yang berlainan, dan ini adalah software bebas dan bersumber terbuka. Hanya dengan menggeser tetikus ke pojok layar komputer maka akan berpindah ke layar komputer lainnya. Bahkan kamu dapat membagikan clipboard kamu. Yang kamu butuhkan hanya koneksi jaringan. Synerg adalah program yang dapat berjalan di beberapa Operating System yang berbeda. + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Tak dikenal + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_is-IS.qm b/src/gui/res/lang/gui_is-IS.qm new file mode 100644 index 00000000..be651eed --- /dev/null +++ b/src/gui/res/lang/gui_is-IS.qm @@ -0,0 +1 @@ + + + AboutDialogBase + + + About Synergy + + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + + + + + &Ok + + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_it.qm b/src/gui/res/lang/gui_it.qm new file mode 100644 index 0000000000000000000000000000000000000000..61535072fe30902b9fb9ff2584ae59f4c1aca4a3 GIT binary patch literal 21855 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 literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_it.ts b/src/gui/res/lang/gui_it.ts new file mode 100644 index 00000000..fb83ab6b --- /dev/null +++ b/src/gui/res/lang/gui_it.ts @@ -0,0 +1,1408 @@ + + + AboutDialogBase + + + About Synergy + Riguardo a Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Sconosciuto + + + + Version: + Versione: + + + + &Ok + Ok + + + + ActionDialogBase + + + Configure Action + Configura azione + + + + Choose the action to perform + Scegli l'azione da compiere + + + + Press a hotkey + Premi una hotkey + + + + Release a hotkey + Rilascia una hotkey + + + + Press and release a hotkey + Premi e rilascia una hotkey + + + + only on these screens + solo su questi schermi + + + + Switch to screen + Passa a schermo + + + + Switch in direction + Passa in direzione + + + + left + sinistra + + + + right + destra + + + + up + su + + + + down + giu' + + + + Lock cursor to screen + Blocca il cursore sullo schermo + + + + toggle + scambia + + + + on + attiva + + + + off + disattiva + + + + This action is performed when + Questa operazione viene eseguita quando + + + + the hotkey is pressed + la hotkey viene premuta + + + + the hotkey is released + la hotkey viene rilasciata + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Hotkey + + + + Enter the specification for the hotkey: + Specifica la hotkey da utilizzare: + + + + MainWindow + + + &Start + Avvia + + + + &File + File + + + + &Edit + Modifica + + + + &Window + Finestra + + + + &Help + Aiuto + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + Il programma non puo' essere avviato + + + + 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. + L'eseguibile <br><br>%1<br><br>non puo' essere correttamente avviato, anche se esiste. Controlla di avere i permessi necessari ad eseguire il programma (Super User o Administrator?). + + + + Synergy client not found + La componente client di Synergy non è stata individuata + + + + The executable for the synergy client does not exist. + L'eseguibile per il client di Synergy non esiste. + + + + Hostname is empty + Il nome macchina è vuoto + + + + Please fill in a hostname for the synergy client to connect to. + Si prega di completare il nome macchina per permettere al client Synergy di connettercisi. + + + + Cannot write configuration file + Non posso scrivere il file di configurazione + + + + The temporary configuration file required to start synergy can not be written. + Il file temporaneo di configurazione necessario ad avviare Synergy non puo' essere scritto. + + + + Configuration filename invalid + Il nome file di configurazione non è valido. + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Non hai specificato un nome di file di configurazione valido per la componente server di Synergy. Vuoi sfogliare il contenuto del tuo computer per il trovare il file di configurazione ora? + + + + Synergy server not found + La componente server di Synergy non è stata trovata + + + + The executable for the synergy server does not exist. + L'eseguibile per il server Synergy non esiste. + + + + Synergy terminated with an error + Synergy si è chiuso con un errore + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy si è chiuso inaspettatamente con un codice di uscita di %1.<br><br> Sei pregato di visualizzare il log per maggiori dettagli. + + + + &Stop + Ferma + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy si sta avviando. + + + + Synergy is running. + Synergy è in funzione. + + + + Synergy is not running. + Synergy non è in funzione. + + + + Unknown + Sconosciuto + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Sfoglia il contenuto del tuo computer per un file di configurazione di Synergy + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Salva la configurazione attuale come... + + + + Save failed + Salvataggio fallito + + + + Could not save configuration to file. + Impossibile salvare la configurazione attuale in un file. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Nome schermo: + + + + &Server IP: + Server IP: + + + + + &Start + Avvia + + + + Use existing configuration: + Utilizza una configurazione esistente: + + + + &Configuration file: + File di configurazione: + + + + &Browse... + Sfoglia... + + + + Configure interactively: + Configurazione interattiva: + + + + &Configure Server... + Configura il Server... + + + + Ready + Pronto + + + + Log + Eventi + + + + &Apply + Applica + + + + IP addresses: + Indirizzi IP: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Riguardo a Synergy... + + + + &Quit + Chiudi + + + + Quit + Chiudi + + + + Run + Esegui + + + + S&top + Ferma + + + + Stop + Ferma + + + + S&how Status + Visualizza stato + + + + &Hide + Nascondi + + + + Hide + Nascondi + + + + &Show + Mostra + + + + Show + Mostra + + + + Save configuration &as... + Salva configurazione come... + + + + Save the interactively generated server configuration to a file. + Salva la configurazione interattiva del server in un file. + + + + Settings + Impostazioni + + + + Edit settings + Modifica impostazioni + + + + Run Wizard + Esegui il Wizard + + + + NewScreenWidget + + + Unnamed + Senza nome + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Configura Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Configurazioni di Synergy (*.sgc);;Tutti i files (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Configurazioni di Synergy (*.conf);;Tutti i files (*.*) + + + + System tray is unavailable, quitting. + L'icona nella barra di sistema non è disponibile, sto chiudendo. + + + + ScreenSettingsDialog + + + Screen name is empty + Il nome dello schermo è vuoto + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + Impostazioni dello schermo + + + + Screen &name: + Nome dello schermo: + + + + A&liases + Soprannomi + + + + &Add + Aggiungi + + + + &Remove + Rimuovi + + + + &Modifier keys + Tasti speciali + + + + &Shift: + Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Nessuno + + + + &Ctrl: + Ctrl: + + + + Al&t: + Alt: + + + + M&eta: + Meta: + + + + S&uper: + Super: + + + + &Dead corners + Angoli morti + + + + Top-left + In alto a sinistra + + + + Top-right + In alto a destra + + + + Bottom-left + In basso a sinistra + + + + Bottom-right + In basso a destra + + + + Corner Si&ze: + Dimensione dell'angolo + + + + &Fixes + Punti fissi + + + + Fix CAPS LOCK key + Blocca il tasto CAPS LOCK + + + + Fix NUM LOCK key + Blocca il tasto NUM LOCK + + + + Fix SCROLL LOCK key + Blocca il tasto SCROLL LOCK + + + + Fix XTest for Xinerama + Blocca XTest per Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Schermo: <b>%1</b></center><br>Doppio click per modificare le impostazioni<br>Trascina lo schermo nel cestino per rimuoverlo + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Configurazione del Server + + + + Screens and links + Schermi e collegamenti + + + + Drag a screen from the grid to the trashcan to remove it. + Trascina uno schermo dalla griglia al cestino per rimuoverlo + + + + Configure the layout of your synergy server configuration. + Configura il layout del server Synergy + + + + Drag this button to the grid to add a new screen. + Trascina questo pulsante sulla griglia per aggiungere un nuovo schermo. + + + + 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. + Trascina nuovi schermi sulla griglia o muovi quelli esistenti. +Trascina uno schermo sul cestino per rimuoverlo. +Doppio click su uno schermo per modificarne le impostazioni. + + + + Hotkeys + Hotkeys + + + + &Hotkeys + Hotkeys + + + + &New + Nuovo + + + + &Edit + Modifica + + + + &Remove + Rimuovi + + + + A&ctions + Operazioni + + + + Ne&w + Nuovo + + + + E&dit + Modifica + + + + Re&move + Rimuovi + + + + Advanced server settings + Configurazioni avanzate del server + + + + &Switch + Scambia + + + + Switch &after waiting + Scambia al termine dell'attesa + + + + + + ms + millisecondi + + + + Switch on double &tap within + Scambia con doppio tocco + + + + &Options + Opzioni + + + + &Check clients every + Controlla il client ogni + + + + Use &relative mouse moves + Utilizza i movimenti del mouse relativi + + + + S&ynchronize screen savers + Sincronizza gli screen savers + + + + Don't take &foreground window on Windows servers + Non prendere la finestra in primo piano sui servers Windows + + + + Ignore auto config clients + + + + + &Dead corners + Angoli morti + + + + To&p-left + In alto a sinistra + + + + Top-rig&ht + In alto a destra + + + + &Bottom-left + In basso a sinistra + + + + Bottom-ri&ght + In basso a destra + + + + Cor&ner Size: + Dimensione dell'angolo: + + + + SettingsDialog + + + Save log file to... + Salva il file di log... + + + + Elevate Synergy + Eleva Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Sei sicuro di voler elevare Synergy? +Ciò consentirà a Synergy di interagire con molti processi e con il dialogo UAC,ma potrebbe casusare problemi con i processi non elevati.Eleva Synergy solo se ti serve davvero. + + + + SettingsDialogBase + + + Settings + Impostazioni + + + + Sc&reen name: + Nome dello schermo: + + + + P&ort: + Porta: + + + + &Interface: + Interfaccia: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Registro Eventi + + + + &Logging level: + Livello di registrazione eventi + + + + Log to file: + Registra gli eventi in un file + + + + Browse... + Sfoglia... + + + + Error + Errore + + + + &Language: + Lingua + + + + &Miscellaneous + + + + + Warning + Avviso + + + + Note + Nota + + + + Info + Informazioni + + + + Debug + Debug + + + + Debug1 + Debug1 + + + + Debug2 + Debug2 + + + + SetupWizard + + + Setup Synergy + Configura Synergy + + + + Please select an option. + Pregasi selezionare un'opzione + + + + Please enter your email address and password. + Inserisci il tuo indirizzo email e la password. + + + + SetupWizardBase + + + Setup Synergy + Configura Synergy + + + + Welcome + Ti diamo il benvenuto + + + + Thanks for installing Synergy! + Grazie per aver installato Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy ti permette facilmente di condividere il mouse e la tastiera tra piu' computers sulla tua scrivania, è un software Libero e Gratuito. Ti basta muovere il mouse oltre i bordi dello schermo per passare da un computer ad un altro. Puoi anche condividere la bacheca degli appunti (Copia e Incolla). Tutto cio' che serve è una connessione di rete (WiFi o LAN). Synergy è multi-piattaforma (Funziona correttamente su Windows, Mac OS X e Linux) + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Server o Client? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Sconosciuto + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Login non riuscito, email o password non valida. + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_ja-JP.qm b/src/gui/res/lang/gui_ja-JP.qm new file mode 100644 index 0000000000000000000000000000000000000000..6310eae00e4e90f40ec9a7147150de41852d6a9b GIT binary patch literal 17379 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 ISWqtdKe7DqtpET3 literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_ja-JP.ts b/src/gui/res/lang/gui_ja-JP.ts new file mode 100644 index 00000000..efb549c4 --- /dev/null +++ b/src/gui/res/lang/gui_ja-JP.ts @@ -0,0 +1,1411 @@ + + + AboutDialogBase + + + About Synergy + Synergyについて + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + 不明 + + + + Version: + バージョン: + + + + &Ok + OK + + + + ActionDialogBase + + + Configure Action + 動作を構成 + + + + Choose the action to perform + 実行する動作を選択 + + + + Press a hotkey + ホットキーを押す + + + + Release a hotkey + ホットキーを離す + + + + Press and release a hotkey + ホットキーを押して離す + + + + only on these screens + これらの画面だけ + + + + Switch to screen + 画面に切り替え + + + + Switch in direction + 切り替える方向 + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + カーソルを画面に限定 + + + + toggle + 切り替え + + + + on + オン + + + + off + オフ + + + + This action is performed when + この動作を実行する時: + + + + the hotkey is pressed + ホットキーを押したとき + + + + the hotkey is released + ホットキーを離したとき + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + ホットキー + + + + Enter the specification for the hotkey: + ホットキーの指定方法を入力してください: + + + + MainWindow + + + &Start + 開始 + + + + &File + ファイル + + + + &Edit + 編集 + + + + &Window + ウィンドウ + + + + &Help + ヘルプ + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + プログラムを開始できません + + + + 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. + 実行ファイル<br><br>%1<br><br>は存在しますが、開始できませんでした。このプログラムを動作させる十分な権限があるかどうか確認してください。 + + + + Synergy client not found + Synergyクライアントが見つかりません + + + + The executable for the synergy client does not exist. + Synergyクライアントの実行ファイルが存在しません。 + + + + Hostname is empty + ホスト名が入力されていません + + + + Please fill in a hostname for the synergy client to connect to. + Synergyクライアントで接続するホスト名を入力してください。 + + + + Cannot write configuration file + 構成ファイルに書き込めません + + + + The temporary configuration file required to start synergy can not be written. + Synergyの開始に必要な一時的な構成ファイルを書き込めません。 + + + + Configuration filename invalid + 構成ファイル名が正しくありません。 + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Synergyサーバーの正しい構成ファイルを書き込んでいません。今、構成ファイルを閲覧しますか? + + + + Synergy server not found + Synergyサーバーが見つかりません + + + + The executable for the synergy server does not exist. + Synergyサーバーの実行ファイルが存在しません。 + + + + Synergy terminated with an error + Synergyはエラーで終了しました + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergyは予期しない終了コード%1で終了しました。<br><br>詳細はログの出力を参照してください。 + + + + &Stop + 停止 + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergyを開始中です。 + + + + Synergy is running. + Synergyは動作中です。 + + + + Synergy is not running. + Synergyは動作していません。 + + + + Unknown + 不明 + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Synergyの設定ファイルを参照 + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + 設定に名前をつけて保存 + + + + Save failed + 保存できませんでした + + + + Could not save configuration to file. + 設定をファイルに保存できませんでした + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + 画面の名前: + + + + &Server IP: + サーバー IP: + + + + + &Start + 開始 + + + + Use existing configuration: + 既存の設定を使用 + + + + &Configuration file: + 設定ファイル: + + + + &Browse... + 参照 + + + + Configure interactively: + インタラクティブモードで設定: + + + + &Configure Server... + サーバーを設定 + + + + Ready + 準備完了 + + + + Log + ログ + + + + &Apply + 適用 + + + + IP addresses: + IPアドレス: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Synergyについて... + + + + &Quit + 終了 + + + + Quit + 終了 + + + + Run + 実行 + + + + S&top + 停止 + + + + Stop + 停止 + + + + S&how Status + 状態を表示 + + + + &Hide + 隠す + + + + Hide + 隠す + + + + &Show + 表示する + + + + Show + 表示する + + + + Save configuration &as... + 設定に名前をつけて保存 + + + + Save the interactively generated server configuration to a file. + インタラクティブモードで生成したサーバ設定をファイルに保存 + + + + Settings + 設定 + + + + Edit settings + 設定を編集 + + + + Run Wizard + ウィザードを実行する + + + + NewScreenWidget + + + Unnamed + 名前なし + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Synergyのセットアップ + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergyの構成(*.sgc);;すべてのファイル(*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergyの構成(*.conf);;すべてのファイル(*.*) + + + + System tray is unavailable, quitting. + タスクトレイを利用できません。終了します。 + + + + ScreenSettingsDialog + + + Screen name is empty + 画面の名前が空です。 + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + 画面の名前を空にすることはできません。名前を入力するかダイアログをキャンセルしてください。 + + + + Screen name matches alias + 画面の名前は別名と一致 + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + 画面の名前を別名と同じにすることは出来ません。別名を削除するか画面の名前を変更してください。 + + + + ScreenSettingsDialogBase + + + Screen Settings + 画面の設定 + + + + Screen &name: + 画面の名前 + + + + A&liases + 別名 + + + + &Add + 追加 + + + + &Remove + 削除 + + + + &Modifier keys + 修飾キー + + + + &Shift: + シフト + + + + + + + + Shift + シフト + + + + + + + + Ctrl + コントロール + + + + + + + + Alt + Alt + + + + + + + + Meta + メタ + + + + + + + + Super + スーパー + + + + + + + + None + なし + + + + &Ctrl: + &undefinedCtrl: + + + + Al&t: + &undefinedl&t: + + + + M&eta: + &undefined&eta: + + + + S&uper: + &undefined&uper: + + + + &Dead corners + 無効とする角 + + + + Top-left + 左上 + + + + Top-right + 右上 + + + + Bottom-left + 左下 + + + + Bottom-right + 右下 + + + + Corner Si&ze: + 角の大きさ + + + + &Fixes + 修正 + + + + Fix CAPS LOCK key + CAPSロックキーを固定 + + + + Fix NUM LOCK key + NUMロックキーを固定 + + + + Fix SCROLL LOCK key + SCROLLロックキーを固定 + + + + Fix XTest for Xinerama + Xinerama向けにXTestを修正 + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>画面: <b>%1</b></center><br>ダブルクリックで設定を編集<br>削除するときは画面をゴミ箱にドラッグします + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + サーバーの構成 + + + + Screens and links + 画面とリンク + + + + Drag a screen from the grid to the trashcan to remove it. + 削除する時はグリッド内の画面をゴミ箱にドラッグしてください。 + + + + Configure the layout of your synergy server configuration. + サーバ構成の配置を設定する + + + + Drag this button to the grid to add a new screen. + 新規画面の追加はこのボタンをグリッド内にドラッグします。 + + + + 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. + 新規画面をグリッド内にドラッグするか既存画面を移動してください。 +画面をゴミ箱にドラッグすると削除します。 +設定を編集する場合は画面上でダブルクリックしてください。 + + + + Hotkeys + ホットキー + + + + &Hotkeys + ホットキー + + + + &New + 新規 + + + + &Edit + 編集 + + + + &Remove + 削除 + + + + A&ctions + アクション + + + + Ne&w + 新規 + + + + E&dit + 編集 + + + + Re&move + 削除 + + + + Advanced server settings + サーバーの詳細な設定 + + + + &Switch + 切り替え + + + + Switch &after waiting + 次の時間の後切り替え + + + + + + ms + ミリ秒 + + + + Switch on double &tap within + 次の時間内のダブルタップで切り替え + + + + &Options + オプション + + + + &Check clients every + クライアント確認頻度 + + + + Use &relative mouse moves + マウスの相対的な動きを使用 + + + + S&ynchronize screen savers + スクリーンセーバーの同期 + + + + Don't take &foreground window on Windows servers + Windowsサーバでウィンドウを前面に表示しない + + + + Ignore auto config clients + + + + + &Dead corners + 無効とする角 + + + + To&p-left + 左上 + + + + Top-rig&ht + 右上 + + + + &Bottom-left + 左下 + + + + Bottom-ri&ght + 右下 + + + + Cor&ner Size: + 隅の大きさ: + + + + SettingsDialog + + + Save log file to... + ログファイルの保存先 + + + + Elevate Synergy + Synergyの権限昇格 + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + 本当に Synergy を昇格させてよろしいですか? +これにより昇格されたプロセスや UAC dialog と、Synergy とが互いに作用しあうことができるようになる反面、昇格されていないプロセスとの間で問題を生じることもあり得ます。確かに必要であると判断できる場合にのみ Synergy の昇格を行ってください。 + + + + SettingsDialogBase + + + Settings + 設定 + + + + Sc&reen name: + スクリーン名: + + + + P&ort: + ポート: + + + + &Interface: + インターフェース: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + ログ + + + + &Logging level: + ログレベル: + + + + Log to file: + ログ記録先ファイル: + + + + Browse... + 参照... + + + + Error + エラー + + + + &Language: + 言語 + + + + &Miscellaneous + その他 + + + + Warning + 警告 + + + + Note + 通知 + + + + Info + 情報 + + + + Debug + デバッグ情報 + + + + Debug1 + デバッグ情報1 + + + + Debug2 + デバッグ情報2 + + + + SetupWizard + + + Setup Synergy + Synergyのセットアップ + + + + Please select an option. + オプションを選択してください。 + + + + Please enter your email address and password. + メールアドレスとパスワードを入力してください。 + + + + SetupWizardBase + + + Setup Synergy + Synergyのセットアップ + + + + Welcome + ようこそ + + + + Thanks for installing Synergy! + Synergyをインストールしていただき、ありがとうございます! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergyは複数のコンピュータ間のマウスとキーボードを簡単に共有することができるフリーのオープンソースソフトウェアです。あるコンピュータの画面の端にマウスを移動すると別のコンピュータの画面に移ります。クリップボードを共有することもできます。必要なのは ネットワーク接続だけです。 SynergyはクロスプラットフォームでWindows, Mac OS X, Linux上で動作します。 + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + サーバーまたはクライアント + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + 不明 + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + ログインは失敗しました。メールアドレスまたはパスワードが無効です。 + + + + Login failed, an error occurred. + +%1 + エラーが発生し、ログインが失敗しました。 +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + エラーが発生し、ログインが失敗しました。 +サーバの応答: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_ko.qm b/src/gui/res/lang/gui_ko.qm new file mode 100644 index 0000000000000000000000000000000000000000..d29f4567477ae2137680afce47fbbdeb8589b9bc GIT binary patch literal 18395 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 P1&Iabyy$FRx03RI2MeV9 literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_ko.ts b/src/gui/res/lang/gui_ko.ts new file mode 100644 index 00000000..27a8275f --- /dev/null +++ b/src/gui/res/lang/gui_ko.ts @@ -0,0 +1,1411 @@ + + + AboutDialogBase + + + About Synergy + Synergy에 대하여 + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + 알수없음 + + + + Version: + 버전: + + + + &Ok + 확인(&O) + + + + ActionDialogBase + + + Configure Action + 동작 설정 + + + + Choose the action to perform + 수행할 동작을 선택하세요 + + + + Press a hotkey + 단축키를 누르세요 + + + + Release a hotkey + 단축키를 놓으세요 + + + + Press and release a hotkey + 단축키를 눌렀다 놓으세요 + + + + only on these screens + 이 화면에서만 + + + + Switch to screen + 이 화면으로 전환 + + + + Switch in direction + 이 방향으로 전환 + + + + left + 왼쪽 + + + + right + 오른쪽 + + + + up + + + + + down + 아래 + + + + Lock cursor to screen + 커서를 화면안에 고정 + + + + toggle + 토글 + + + + on + 켜짐 + + + + off + 꺼짐 + + + + This action is performed when + 이 동작이 수행 될 때: + + + + the hotkey is pressed + 단축키가 눌렸습니다. + + + + the hotkey is released + 단축키가 놓아졌습니다. + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + 단축키 + + + + Enter the specification for the hotkey: + 단축키로 설정할 키를 누르세요: + + + + MainWindow + + + &Start + 시작(&S) + + + + &File + 파일(&F) + + + + &Edit + 편집(&E) + + + + &Window + 창(&W) + + + + &Help + 도움말(&H) + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>사용 중인 시너지는 최신 버전이 아닙니다. 새 버전(<b>%1</b>)을 <a href="%2">다운로드</a> 받을 수 있습니다.</p> + + + + Program can not be started + 프로그램을 시작할 수 없습니다 + + + + 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. + 실행파일<br><br>%1<br><br>이(가) 존재하지만 성공적으로 실행되지 못했습니다. 이 프로그램을 실행시키기 위한 충분한 권한을 가지고 있는지 확인해주세요. + + + + Synergy client not found + Synergy 클라이언트를 찾을 수 없습니다. + + + + The executable for the synergy client does not exist. + Synergy 클라이언트 실행 파일이 존재하지 않습니다. + + + + Hostname is empty + 호스트명이 비어있습니다. + + + + Please fill in a hostname for the synergy client to connect to. + 클라이언트가 접속할 호스트명을 입력해주세요. + + + + Cannot write configuration file + 설정파일을 쓸 수 없습니다. + + + + The temporary configuration file required to start synergy can not be written. + Synergy를 구동하기 위해 필요한 임시 설정 파일을 작성할 수 없습니다. + + + + Configuration filename invalid + 설정 파일 이름이 올바르지 않습니다 + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Synergy 서버를 실행하기 위한 설정 파일이 제대로 작성되어 있지 않습니다. 지금 설정 파일을 찾아 보시겠습니까? + + + + Synergy server not found + Synergy 서버를 찾을 수 없습니다 + + + + The executable for the synergy server does not exist. + Synergy 서버 실행 파일이 존재하지 않습니다. + + + + Synergy terminated with an error + Synergy가 오류로 인해 종료되었습니다 + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy가 %1의 코드로 비 정상적으로 종료되었습니다.<br><br>자세한 사항은 로그 출력결과를 확인하세요 + + + + &Stop + 중지(&S) + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy가 실행 중 입니다. + + + + Synergy is running. + Synergy가 실행 중 입니다. + + + + Synergy is not running. + Synergy가 실행 중이지 않습니다. + + + + Unknown + 알수없음 + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + synergys 설정 파일 탐색 + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + 설정을 다른 이름으로 저장... + + + + Save failed + 저장에 실패했습니다 + + + + Could not save configuration to file. + 설정 사항을 파일에 저장할 수 없습니다. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + 화면 이름: + + + + &Server IP: + 서버 IP: + + + + + &Start + 시작(&S) + + + + Use existing configuration: + 기존 설정을 사용: + + + + &Configuration file: + 설정 파일(&C): + + + + &Browse... + 찾아 보기(&B)... + + + + Configure interactively: + 상호작용 설정: + + + + &Configure Server... + 서버 설정(&C) + + + + Ready + 준비 + + + + Log + 로그 + + + + &Apply + 적용(&A) + + + + IP addresses: + IP 주소: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Synergy에 관하여(&A)... + + + + &Quit + 종료(&Q) + + + + Quit + 종료 + + + + Run + 실행 + + + + S&top + 중지(&T) + + + + Stop + 중지 + + + + S&how Status + 상태 보기(&H) + + + + &Hide + 숨기기 + + + + Hide + 숨기기 + + + + &Show + 보이기 + + + + Show + 보이기 + + + + Save configuration &as... + 설정을 다른 이름으로 저장(&A)... + + + + Save the interactively generated server configuration to a file. + 상호작용으로 생성된 서버 설정을 파일로 저장하기. + + + + Settings + 설정 + + + + Edit settings + 설정 편집 + + + + Run Wizard + 마법사 실행 + + + + NewScreenWidget + + + Unnamed + 이름없음 + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + 시너지 설정 + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy 설정파일 (*.sgc);;모든 파일 (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy 설정파일 (*.conf);;모든 파일 (*.*) + + + + System tray is unavailable, quitting. + 시스템 트레이를 사용할 수 없어 종료합니다. + + + + ScreenSettingsDialog + + + Screen name is empty + 스크린 이름이 비었습니다 + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + 스크린 명은 비워둘 수 없습니다. 이름을 입력하거나 대화창을 취소하세요. + + + + Screen name matches alias + 별명과 일치하는 화면 이름 + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + 화면 이름은 별명과 동일할 수 없습니다. 별명을 제거하거나 화면 이름을 바꿔주세요. + + + + ScreenSettingsDialogBase + + + Screen Settings + 화면 설정 + + + + Screen &name: + 화면 이름(&N): + + + + A&liases + 별칭(&L) + + + + &Add + 추가(&A) + + + + &Remove + 삭제(&R) + + + + &Modifier keys + 보조 키(&M) + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + 메타 + + + + + + + + Super + 슈퍼 + + + + + + + + None + 없음 + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + 메타(&M): + + + + S&uper: + 슈퍼(&U): + + + + &Dead corners + 사용하지 않는 모서리(&D) + + + + Top-left + 상단 왼쪽 + + + + Top-right + 상단 오른쪽 + + + + Bottom-left + 하단 왼쪽 + + + + Bottom-right + 하단 오른쪽 + + + + Corner Si&ze: + 모서리 크기(&Z) + + + + &Fixes + 고정(&F) + + + + Fix CAPS LOCK key + CAPS LOCK 키 고정 + + + + Fix NUM LOCK key + NUM LOCK 키 고정 + + + + Fix SCROLL LOCK key + SCROLL LOCK 키 고정 + + + + Fix XTest for Xinerama + Xinerama를 위한 XTest 고정 + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>화면: <b>%1</b></center><br>설정을 편집하려면 더블클릭<br>삭제하려면 휴지통으로 드래그 하세요 + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + 서버 설정 + + + + Screens and links + 화면과 링크 + + + + Drag a screen from the grid to the trashcan to remove it. + 삭제하려면 화면을 휴지통으로 드래그 하세요. + + + + Configure the layout of your synergy server configuration. + Synergy 서버 구성과 레이아웃을 설정하세요. + + + + Drag this button to the grid to add a new screen. + 새로운 화면을 추가하려면 이 버튼을 격자 안으로 드래그 하세요. + + + + 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. + 새로운 화면을 추가하려면 상단의 화면을 격자 안으로 드래그 하세요. +화면을 삭제하려면 휴지통으로 드래그 하세요. +화면 설정을 편집하려면 더블클릭 하세요. + + + + Hotkeys + 단축키 + + + + &Hotkeys + 단축키(&H) + + + + &New + 생성(&N) + + + + &Edit + 편집(&E) + + + + &Remove + 삭제(&R) + + + + A&ctions + 행동(&C) + + + + Ne&w + 생성(&W) + + + + E&dit + 편집(&D) + + + + Re&move + 삭제(&M) + + + + Advanced server settings + 고급 설정 + + + + &Switch + 전환(&S) + + + + Switch &after waiting + 대기 후 전환(&A) + + + + + + ms + ms + + + + Switch on double &tap within + 지정시간 안에 더블 탭으로 전환(&T) + + + + &Options + 옵션(&O) + + + + &Check clients every + 지정 시간마다 클라이언트 확인(&C) + + + + Use &relative mouse moves + 상대적인 마우스 이동 사용(&R) + + + + S&ynchronize screen savers + 스크린세이버 동기화(&Y) + + + + Don't take &foreground window on Windows servers + 클라이언트로 전환시해도 서버의 포커스 방지 (전체화면 작업중 클라이언트로 전환해도 전체화면이 유지되며, 서버에서 전체화면 중 최소화 후 클라이언트 전환시 전체화면을 방지) + + + + Ignore auto config clients + + + + + &Dead corners + 사용하지 않는 모서리(&D) + + + + To&p-left + 상단 왼쪽(&P) + + + + Top-rig&ht + 상단 오른쪽(&H) + + + + &Bottom-left + 하단 왼쪽(&B) + + + + Bottom-ri&ght + 하단 오른쪽(&G) + + + + Cor&ner Size: + 모서리 크기(&N): + + + + SettingsDialog + + + Save log file to... + 로그 파일 저장하기... + + + + Elevate Synergy + Synergy 승급 + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Synergy의 권한을 승급 하시겠습니까? +이것을 허용하게 되면 Synergy와 승급된 프로세스, UAC 대화상자와 상호작용 할 수 있지만, 승급되지 않은 프로세스들과 문제가 생길 수 있습니다. Synergy 권한 승급은 반드시 필요한 경우에만 사용하세요. + + + + SettingsDialogBase + + + Settings + 설정 + + + + Sc&reen name: + 화면 이름(&R): + + + + P&ort: + 포트(&O): + + + + &Interface: + 인터페이스(&I): + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + 로그 기록 + + + + &Logging level: + 기록 수준(&L): + + + + Log to file: + 파일로 저장: + + + + Browse... + 찾아보기... + + + + Error + 오류 + + + + &Language: + 언어:(&l) + + + + &Miscellaneous + 기타 + + + + Warning + 경고 + + + + Note + 알림 + + + + Info + 정보 + + + + Debug + 디버그 + + + + Debug1 + 디버그1 + + + + Debug2 + 디버그2 + + + + SetupWizard + + + Setup Synergy + 시너지 설정 + + + + Please select an option. + 옵션을 선택하세요. + + + + Please enter your email address and password. + 이메일 주소 및 암호를 입력하세요. + + + + SetupWizardBase + + + Setup Synergy + 시너지 설정 + + + + Welcome + 환영합니다. + + + + Thanks for installing Synergy! + 시너지를 설치하여 주셔서 감사합니다. + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy는 마우스와 키보드를 여러 컴퓨터에 쉽게 공유하여 사용할 수 있게 해주는 무료 오픈 소스 프로그램입니다. 마우스를 한쪽 컴퓨터의 화면 끝으로 옮기기만 하면 다른 컴퓨터의 화면으로 이동할 수 있으며 클립보드의 내용까지도 공유할 수 있습니다. 필요한 것은 단지 네트워크 연결 뿐이며 Synergy는 여러 플랫폼(Windows와 Mac OS X, Linux)에서 사용할 수 있습니다. + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + 서버 또는 클라이언트? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + 알수없음 + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + 로그인에 실패했습니다. 전자메일 또는 암호가 잘못되었습니다. + + + + Login failed, an error occurred. + +%1 + 로그인에 실패했습니다. 오류가 발생했습니다. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + 로그인에 실패했습니다. 오류가 발생했습니다. +서버 응답은 다음과 같습니다: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_lt.qm b/src/gui/res/lang/gui_lt.qm new file mode 100644 index 0000000000000000000000000000000000000000..10a7a05ab2090bd4a8d43bf877e081f32b21775b GIT binary patch literal 2228 zcmb7FO>7%Q6n^W(NtHTjC=zKU4#Oo-lA51m)l156AZa3uNDC6`dUxzhyq;Oj%sMeg zPUQ{~MM$VOMDGZY_&ISvLI~6=9Jx@bLgE^g@6F=a35f-kJiqUI@B7}onZ5i)dhUn& zAAj)UV~>7&!Bip{1~Ym6q<@!2B+)-D(2&EbZ<8h51xvq4y2ue^kEu^nJ{4 zmwn~kse8YF1ixR_?*H-``ct#-Z7#s>jsl@SClFzVULr}BVp69tr78R;7B@Q6=+CS) zP2rzcac0_AVkaX8)L@!Z9LgqmO`QsKXJ+MhinoCR_ew$ULn^ z3@J!coBT+u3DatwjGF^y=NMGQjNwavtD7QDQ!Aa5?tc=VY>eSsqgQcwT$<_V0lr|Zv8?fILwc`t z+a0+BOjzSa8_?|npM*jkxk9VDWyU!;8`YsOM;+_{$}WaQH@y{Gji6)jm76%?J}B@p zw=oisA>qkk#5blJMi7N{1v^w*xfgZFMQoMBK0|zg9gDUT62X@sCJ!rqMnot*3tQed z@S0=4z$(X8!B2_i5>>F$Xl1bFF^_m%17pC8Js!5-2s|{_8?Y$gH36!Q`Rl=xLu;V0 z?GTe|x@0waMqKYID2izr`~8E=bKdw=Sc^k$1~1`1 z^%8t@-VWEn0H45*0nX7y_&T>F0|F{z`T3Pzo$boCXZzAjBmBM-W?;VPS zkBjizQpmI|g=xX#&_6u61g{D;Xy-^sXS13b+LkV zR;r~;g>oXs$nP54feNi<_%XzdZBs-?WMBIsgCw literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_lt.ts b/src/gui/res/lang/gui_lt.ts new file mode 100644 index 00000000..af48b53f --- /dev/null +++ b/src/gui/res/lang/gui_lt.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + + + + + &Ok + Gerai + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + kairė + + + + right + dešinė + + + + up + viršus + + + + down + apačia + + + + Lock cursor to screen + + + + + toggle + + + + + on + ijungta + + + + off + Išiungta + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + Pradėti + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + Pagalba + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + Stabdyti + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + Serverio IP: + + + + + &Start + Pradėti + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + IP adresas: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + Rodyti + + + + Show + Rodyti + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + Klaida + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + Įspėjimas + + + + Note + + + + + Info + Informacija + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy leis jums dalintis jūsų pelė ir klaviatūra tarp kompiuterių ir tai nieko nekainuoja ir tai Open Source. Tiesiog perkelkite pelę iš vieno kompiuterio ekrano krašto į kitą. Netgi galite dalintis Clipbourdų. Viskas ko jums reikia, yra tinklo sujungimas. Synergy yra cross-platform dirba ant Windows, Mac OS X ir Linux. + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_lv.qm b/src/gui/res/lang/gui_lv.qm new file mode 100644 index 0000000000000000000000000000000000000000..908d8c44c17d8df1a7b6369e771003e9fcb221d1 GIT binary patch literal 1234 zcmaJ>J8l#~5Unu=j0pHx0s?{}0?TGk;KY`NWMt%EC2WXj&-AX_Guu7t?wR#EAm#!@ z5Wp=+fE)>N0XPFEK=7*DD`NtJp6So4SFc|6%=(Aw&X=EWUw^%K_w$SQAAf8T(RI4G z_ziDbxZQukYr_yNzPW(eE!rkaBXZ$FN#>F}*>OjI2vD@R_gH+?R!J9EoXabDIxx-)zSoMfuYJtnB z4(CiYR&r+Wj75zcg6gp{cY=c$Oi&KYfrHdGd?$Zlv2$jloND@r_`2gsQf z)nE~}j1k7ZSOzAeC70w8l^*jko(h#nEd%U61)qlM8r;4Rg}HJMcA3}U_23t)r3#DL z+#8#C&#I6t8WB=sK9elsMb>wMb7@ulZ(NsjZGdGJ_>j;Z>c!z2s}4@;q(MOwoPfj9 z52>_Go}H`gbjN^6oSeHg@3P#17R)*+({MoC$=K|41VirVyyw|5huhL6toZoPeM+8t zbV*Qu*AKUfm++^;m>>?Ck=vtV(yt?A7Nrqux!6GPGQFcc>{@U-nx1OgMMkE5jNJE~ zgy`s)2J_FLcs`t2?Z-22bPPOm9cvX#Gvjcmyp|2m6W0aJ%2r(K*@08O;sYJ0T3eoU zO*Czzxpb4Zi`oZvHb+%D)N3iq#QT9Cd7U|STf_~)Tj~Kn?m`5Ae=d_7jW`}^*40?E z8-ekRA55VHm6bfvf!_h@2mB1uOJ!O2ILqQy(@1!#p=?Z>q=x}-U|%Y=T32iWE6n25 z`5IMNtIKGd9q`;307~ydc-S^7j+~$H1Hq<3_l&LFG_3IxRr2nT_fx$)#&*Xm1NpgJ b!_TE__sj`QOMjME*j&0%{93vC`wIO5<&PnN literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_lv.ts b/src/gui/res/lang/gui_lv.ts new file mode 100644 index 00000000..11216486 --- /dev/null +++ b/src/gui/res/lang/gui_lv.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + + + + + &Ok + + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + Informācija + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy ļauj tev viegli izmantot savu peli un klaviatūru vairākos datoros vienlaicīgi, un tā ir bezmakas un atvērtā koda programma. Vienkārši virzi kursoru no viena datora ekrāna malas uz cita datora ekrānu. Arī starpliktuve var būt kopīga. Vienīgais, kas tev nepieciešams, ir tīkla savienojums. Synergy darbojas uz dažādām operētājsistēmām – Windows, OS X un Linux. + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_mr.qm b/src/gui/res/lang/gui_mr.qm new file mode 100644 index 0000000000000000000000000000000000000000..6b0c47dfdd2b10ba4d372c393139b7326922cdc9 GIT binary patch literal 3637 zcma)9U2GIp6u!INzgt>pq}!5G;a1k|(w6N~Y~3QXv8B)*c6_~1|CgU0XN*`3{O*#;80ckZ71 zopZkPa}S3;&F}d3_jlj^ZlM3m7vH<~>nvk|F2hb;gFDW9m=k8^+px zV&Tv&#$sbEa`iU89Tpw_5$pSG=<^U`k+-}xdW{Wz|1iFxk--+lax1l%u`j+2L%|U)g$GK~dK;MmyD}i5t zceyisf$%==w733)@6pc7OF!d#XXlL%Bx4;nx9)%bO{|Bv9uB?=+=|XvC$Yg|EXf5w z!s9V~un7LPCC@BHv2L5WXjRwL=ql>Ex_3}A-<7=5bcD%EFzl)cCi7yov|03Hya%{r{D_}Fp}e)aNxH;{cBr4LUod3BZB0=G`4r?y zU%bsK6k1Eic%QOo)|U@jn^=cQ9;xh=_IKo+P!-L06SE8SRET=4UdO^==s+ppVs#A|b)up>ms9v?Mqqf(H^Noyn zlFHC~UZNL?9+f%`;pDNrt}>u~LDS9ix`}#G&rv&MhmpLoCh6n4$Ju&mLQVrY;Tsc9 zo{)wjZM|#64) zFa>#PK4~8xecCG8+Oo)LrZ6p6Tm<*7X1iW`u2;DkRXvN+UXk`u%Pi={b#Wo*_Cfih zP4R9|p4QA_MJq}b(gzl$>*{9FS$`QElHJqvYWtRlPMQUaXlZdRcy7bwkmZx0BLRZa zsf3o1yD%RAIUdI@i+ZN?Bty)^J&y1- zfn6V^o3f~Ric5p%Va1n+PgbYlE7?jcX0c`<@zRr|!ZxOgTnHKXE#|8dMlO{a7s!_^(Q3|U7#5z8ZyvI;I zjusFtbXq$to`LC9{&EHIp7EMt&~;@^&d|%sbSEulaE?P^N(>z|i(u!jS~g};%QU?~ zDqS1INg!uijNo2IhfhHg+PpVu#g zH2;4C^T> + + AboutDialogBase + + + About Synergy + सिनर्जी बद्दल + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + आवृत्ती: + + + + &Ok + &ठीक + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + कृती निवडा + + + + Press a hotkey + हॉटकी दाबा + + + + Release a hotkey + हॉटकी सो़डा + + + + Press and release a hotkey + हॉटकी दाबून सोडा + + + + only on these screens + केवळ या पडद्यांवरच + + + + Switch to screen + पडद्याकडे वळा + + + + Switch in direction + दिशेला वळा + + + + left + डावे + + + + right + उजवे + + + + up + वर + + + + down + खाली + + + + Lock cursor to screen + कर्सर पडद्याशी बद्ध करा + + + + toggle + टॉगल + + + + on + चालू + + + + off + बंद + + + + This action is performed when + ही कृती केली जाते जेव्हा + + + + the hotkey is pressed + हॉटकी दाबली गेली आहे + + + + the hotkey is released + हॉटकी सोडण्यात आली आहे + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + हॉटकी + + + + Enter the specification for the hotkey: + हॉटकीचे तपशील पुरवा: + + + + MainWindow + + + &Start + + + + + &File + &फाईल + + + + &Edit + &बदल + + + + &Window + &खिडकी + + + + &Help + &मदत + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + कार्यक्रम सुरू होऊ शकला नाही. + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + &बदल + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + &भाषा: + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + माहिती + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + स्वागतम् + + + + Thanks for installing Synergy! + सिनर्जी इन्स्टॉल केल्याबद्दल धन्यवाद. + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + सिनर्जी सह तुम्ही तुमचा कीबोर्ड आणि माऊस अनेक संगणकांसमवेत वापरू शकता. एका पडद्याच्या कडेतून माऊस दुसऱ्या पडद्यावर नेऊ शकता, सामाईक क्लिपबोर्ड वारू शकता. आवश्यकता आहे ती केवळ एका नेटवर्क कनेक्शनची. सिनर्जी मोफत आहे, मुक्त स्रोत आहे आणि अनेक प्रणाल्यांवर चालू शकते. (विंडोज, मॅक ओ-एस एक्स आणि लिनक्स) + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_nl-NL.qm b/src/gui/res/lang/gui_nl-NL.qm new file mode 100644 index 0000000000000000000000000000000000000000..b467c66f0f132789e2a7034ada4cb63d5b2d2d3f GIT binary patch literal 22477 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 La`GaVaa#Tt_she3 literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_nl-NL.ts b/src/gui/res/lang/gui_nl-NL.ts new file mode 100644 index 00000000..79b2b40b --- /dev/null +++ b/src/gui/res/lang/gui_nl-NL.ts @@ -0,0 +1,1410 @@ + + + AboutDialogBase + + + About Synergy + Over Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Onbekend + + + + Version: + Versie: + + + + &Ok + &Ok + + + + ActionDialogBase + + + Configure Action + Configureer Actie + + + + Choose the action to perform + Kies de uit te voeren actie + + + + Press a hotkey + Druk op een sneltoets + + + + Release a hotkey + Laat een sneltoets los + + + + Press and release a hotkey + Druk op een sneltoets en laat los + + + + only on these screens + alleen op deze schermen + + + + Switch to screen + Naar scherm gaan + + + + Switch in direction + Verander in een bepaalde richting + + + + left + links + + + + right + rechts + + + + up + omhoog + + + + down + omlaag + + + + Lock cursor to screen + Vergrendel muis op scherm + + + + toggle + wissel + + + + on + aan + + + + off + uit + + + + This action is performed when + Deze actie wordt uitgevoerd wanneer + + + + the hotkey is pressed + de sneltoets is ingedrukt + + + + the hotkey is released + de sneltoets is losgelaten + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Sneltoets + + + + Enter the specification for the hotkey: + Voer de specificatie voor de sneltoets in: + + + + MainWindow + + + &Start + &Start + + + + &File + &Bestand + + + + &Edit + &Bewerken + + + + &Window + &Venster + + + + &Help + &Help + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p> Uw versie van Synergy is verouderd. Versie <b>%1</b> is nu beschikbaar om te <a href="%2">downloaden</a>.</p> + + + + Program can not be started + Het programma kan niet worden gestart + + + + 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. + De uitvoering van <br><br>%1<br><br>kon niet succesvol worden uitgevoerd, hoewel het bestaat. Verifieer eerst of u de nodige rechten heeft om het programma uit te voeren. + + + + Synergy client not found + De Synergy client is niet gevonden + + + + The executable for the synergy client does not exist. + De executable voor de Synergy client bestaat niet. + + + + Hostname is empty + Hostnaam is leeg + + + + Please fill in a hostname for the synergy client to connect to. + Vul a.u.b. een hostnaam in voor de Synergy client om mee te verbinden. + + + + Cannot write configuration file + Kan configuratiebestand niet aanmaken + + + + The temporary configuration file required to start synergy can not be written. + Het tijdelijke configuratiebestand om Synergy te starten kan niet geschreven worden. + + + + Configuration filename invalid + De bestandsnaam van de configuratie is ongeldig + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + U heeft een ongeldig configuratiebestand ingegeven voor de Synergy server. Wilt u nu een configuratiebestand opgeven? + + + + Synergy server not found + Synergy server is niet gevonden + + + + The executable for the synergy server does not exist. + De executable voor de Synergy client bestaat niet. + + + + Synergy terminated with an error + Synergy werd afgesloten met een error + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy werd onverwachts afgesloten met de volgende exit code: %1.<br><br>. Raadpleeg de log voor meer details. + + + + &Stop + &Stop + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy wordt gestart. + + + + Synergy is running. + Synergy is actief. + + + + Synergy is not running. + Synergy is niet actief. + + + + Unknown + Onbekend + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Open een Synergy configuratiebestand + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Sla configuratie op als... + + + + Save failed + Opslaan is mislukt + + + + Could not save configuration to file. + Kon configuratie niet opslaan naar bestand. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Schermnaam: + + + + &Server IP: + Server IP: + + + + + &Start + &Start + + + + Use existing configuration: + Gebruik bestaande configuratie: + + + + &Configuration file: + &Configuratiebestand: + + + + &Browse... + &Bladeren... + + + + Configure interactively: + Configureer grafisch: + + + + &Configure Server... + &Configureer Server... + + + + Ready + Klaar + + + + Log + Log + + + + &Apply + Toep&assen + + + + IP addresses: + IP adres: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + &Over Synergy... + + + + &Quit + &Sluiten + + + + Quit + Sluit + + + + Run + Start + + + + S&top + S&top + + + + Stop + Stop + + + + S&how Status + T&oon Status + + + + &Hide + &Verberg + + + + Hide + Verberg + + + + &Show + &Toon + + + + Show + Toon + + + + Save configuration &as... + Configuratie opslaan &als... + + + + Save the interactively generated server configuration to a file. + Sla de grafisch gemaakte serverconfiguratie naar een bestand op. + + + + Settings + Instellingen + + + + Edit settings + Wijzig instellingen + + + + Run Wizard + Start Wizard + + + + NewScreenWidget + + + Unnamed + Naamloos + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Synergy configureren + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy Configuratie (*.sgc);;Alle bestanden (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy configuratie (*.conf);;Alle bestanden (*.*) + + + + System tray is unavailable, quitting. + Taakbalk is niet beschikbaar, Synergy wordt afgesloten. + + + + ScreenSettingsDialog + + + Screen name is empty + Schermnaam is leeg + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + De schermnaam kan niet leeg zijn. Geef een naam in of annuleer het venster. + + + + Screen name matches alias + Schermnaam komt overeen met alias + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + De schermnaam kan niet hetzelfde zijn als een alias. Verwijder of de alias of verander de schermnaam. + + + + ScreenSettingsDialogBase + + + Screen Settings + Scherm Instellingen + + + + Screen &name: + Scherm &naam: + + + + A&liases + A&liassen + + + + &Add + &Nieuw + + + + &Remove + &Verwijderen + + + + &Modifier keys + &Prefixtoetsen + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Geen + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + S&uper: + + + + &Dead corners + &Dode hoeken + + + + Top-left + Linksboven + + + + Top-right + Rechtsboven + + + + Bottom-left + Linksonder + + + + Bottom-right + Rechtsonder + + + + Corner Si&ze: + &Grootte: + + + + &Fixes + &Fixes + + + + Fix CAPS LOCK key + Fix CAPS LOCK toets + + + + Fix NUM LOCK key + Fix NUM LOCK toets + + + + Fix SCROLL LOCK key + Fix SCROLL LOCK toets + + + + Fix XTest for Xinerama + Fix XTest voor Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Scherm: <b>%1</b></center><br>Dubbelklik om instellingen te wijzigen<br>Sleep een scherm naar de prullenbak om het te verwijderen + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Server configuratie + + + + Screens and links + Schermen en links + + + + Drag a screen from the grid to the trashcan to remove it. + Sleep een scherm naar de prullenbak om het te verwijderen. + + + + Configure the layout of your synergy server configuration. + Configureer de layout voor de server configuratie. + + + + Drag this button to the grid to add a new screen. + Sleep dit icoon naar het raster om een nieuw scherm toe te voegen. + + + + 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. + Sleep nieuwe schermen naar het raster of verplaats bestaande schermen. +Sleep een scherm naar de prullenbak om het te verwijderen. +Dubbelklik op een scherm om zijn instellingen aan te passen. + + + + Hotkeys + Sneltoetsen + + + + &Hotkeys + &Sneltoetsen + + + + &New + &Nieuw + + + + &Edit + &Bewerken + + + + &Remove + &Verwijderen + + + + A&ctions + A&cties + + + + Ne&w + Nieu&w + + + + E&dit + Aanpa&ssen + + + + Re&move + Verwijderen + + + + Advanced server settings + Geavanceerde server instellingen + + + + &Switch + Wissel + + + + Switch &after waiting + Verander na wachten + + + + + + ms + ms + + + + Switch on double &tap within + Verander na een dubbele klik in + + + + &Options + &Opties + + + + &Check clients every + &Controleer clients elke + + + + Use &relative mouse moves + Gebruik &relatieve muis bewegingen + + + + S&ynchronize screen savers + S&ynchronizeer schermbeveiliging + + + + Don't take &foreground window on Windows servers + Wordt geen actief venster op Windows Servers + + + + Ignore auto config clients + + + + + &Dead corners + &Dode hoeken + + + + To&p-left + Linksboven + + + + Top-rig&ht + Rechtsboven + + + + &Bottom-left + Linksonder + + + + Bottom-ri&ght + Rechtsonder + + + + Cor&ner Size: + Hoek Grootte: + + + + SettingsDialog + + + Save log file to... + Schrijf logbestand naar... + + + + Elevate Synergy + Verhoog Synergy's Privileges + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Weet je zeker dat je Synergy's privileges wil verhogen? Dit staat interactie toe met verhoogde processen en het UAC venster, maar kan problemen veroorzaken met niet-verhoogde processen. Verhoog Synergy alleen als het noodzakelijk is. + + + + SettingsDialogBase + + + Settings + Instellingen + + + + Sc&reen name: + Scherm naam: + + + + P&ort: + Poort: + + + + &Interface: + &Interface: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Loggen + + + + &Logging level: + Log niveau: + + + + Log to file: + Log naar bestand: + + + + Browse... + &Bladeren... + + + + Error + Fout + + + + &Language: + Taal: + + + + &Miscellaneous + Overige + + + + Warning + Waarschuwing + + + + Note + Opmerking + + + + Info + Info + + + + Debug + Debug + + + + Debug1 + Debug1 + + + + Debug2 + Debug2 + + + + SetupWizard + + + Setup Synergy + Synergy configureren + + + + Please select an option. + Selecteer alstublieft een optie. + + + + Please enter your email address and password. + Vul uw e-mailadres en wachtwoord in. + + + + SetupWizardBase + + + Setup Synergy + Synergy configureren + + + + Welcome + Welkom + + + + Thanks for installing Synergy! + Bedankt voor het installeren van Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Met Synergy kunt u eenvoudig uw muis en toetsenbord delen tussen meerdere computers op uw bureau. Bovendien is het gratis en Open Source. Beweeg uw muis over de rand van het scherm van de ene computer naar de andere. U kunt zelfs al uw klemborden delen. Het enige wat u nodig hebt is een netwerkverbinding. Synergy is cross-platform (werkt op Windows, Mac OS X en Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Server of Client? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Onbekend + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Inloggen mislukt, ongeldige gebruikersnaam of wachtwoord. + + + + Login failed, an error occurred. + +%1 + Inloggen mislukt, er is een fout opgetreden. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Inloggen mislukt, er is een fout opgetreden. +Foutmelding: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_no.qm b/src/gui/res/lang/gui_no.qm new file mode 100644 index 0000000000000000000000000000000000000000..6ebf434c3e7dee3e6ce7eadffb25be373f53c95f GIT binary patch literal 21716 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 LS1{n_rl$V`S7l}? literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_no.ts b/src/gui/res/lang/gui_no.ts new file mode 100644 index 00000000..15f672e4 --- /dev/null +++ b/src/gui/res/lang/gui_no.ts @@ -0,0 +1,1412 @@ + + + AboutDialogBase + + + About Synergy + Om Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Ukjent + + + + Version: + Versjon: + + + + &Ok + &Ok + + + + ActionDialogBase + + + Configure Action + Konfigurer handlingen + + + + Choose the action to perform + Velg handling å utføre + + + + Press a hotkey + Trykk en hurtigtast + + + + Release a hotkey + Slipp en hurtigtast + + + + Press and release a hotkey + Trykk og slipp en hurtigtast + + + + only on these screens + kun på disse skjermene + + + + Switch to screen + Bytt til skjerm + + + + Switch in direction + Bytt i retning + + + + left + venstre + + + + right + høyre + + + + up + opp + + + + down + ned + + + + Lock cursor to screen + Lås peker til skjerm + + + + toggle + veksle + + + + on + + + + + off + av + + + + This action is performed when + Denne handlingen blir utført når + + + + the hotkey is pressed + hurtigtasten trykkes + + + + the hotkey is released + hurtigtasten slippes + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Hurtigtast + + + + Enter the specification for the hotkey: + Angi spesifikasjon for hurtigtast: + + + + MainWindow + + + &Start + &Start + + + + &File + &Fil + + + + &Edit + &Rediger + + + + &Window + &Vindu + + + + &Help + &Hjelp + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Din Synergy-versjon er utdatert. Versjon <b>%1</b> er nå tilgjengelig for <a href="%2">nedlasting</a>.</p> + + + + Program can not be started + Programmet kan ikke starte + + + + 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. + Programfilen <br><br>%1<br><br> kunne ikke startes riktig, selv om den finnes. Sjekk at du har tilstrekkelige rettigheter til å kjøre dette programmet. + + + + Synergy client not found + Finner ikke Synergy klient + + + + The executable for the synergy client does not exist. + Programfilen for Synergy-klienten finnes ikke + + + + Hostname is empty + Vertsnavn er tomt + + + + Please fill in a hostname for the synergy client to connect to. + Vennligst fyll inn et vertsnavn for Synergy-klienten å koble til. + + + + Cannot write configuration file + Kan ikke skrive konfigurasjonsfil + + + + The temporary configuration file required to start synergy can not be written. + Den midlertidige oppsettsfilen, som er nødvendig for å starte Synergy, kan ikke opprettes. + + + + Configuration filename invalid + Konfigurasjons-filnavn ugyldig + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Du har ikke lagt inn en gyldig oppsettsfil for synergy-tjeneren. Vil du velge oppsettsfilen nå? + + + + Synergy server not found + Finner ikke Synergy server + + + + The executable for the synergy server does not exist. + Programfilen for synergy-tjeneren finnes ikke. + + + + Synergy terminated with an error + Synergy stoppet med en feil + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy stoppet uventet med kode %1.<br><br>Se i loggen for detaljer. + + + + &Stop + &Stopp + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy starter + + + + Synergy is running. + Synergy kjører + + + + Synergy is not running. + Synergy kjører ikke + + + + Unknown + Ukjent + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Velg en oppsettsfil for synergys. + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Lagre oppsettet som ... + + + + Save failed + Kunne ikke lagre + + + + Could not save configuration to file. + Kunne ikke lagre oppsettsfilen. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Skjermnavn: + + + + &Server IP: + &Tjener-IP: + + + + + &Start + &Start + + + + Use existing configuration: + Bruk eksisterende oppsett: + + + + &Configuration file: + &Oppsettsfil: + + + + &Browse... + &Velg... + + + + Configure interactively: + Sett opp interaktivt: + + + + &Configure Server... + &Sett opp tjener... + + + + Ready + Klar + + + + Log + Logg + + + + &Apply + &Bruk + + + + IP addresses: + IP-adresser: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + &Om Synergy + + + + &Quit + &Avslutt + + + + Quit + Avslutt + + + + Run + Kjør + + + + S&top + S&topp + + + + Stop + Stopp + + + + S&how Status + &Vis Status + + + + &Hide + &Skjul + + + + Hide + Skjul + + + + &Show + &Vis + + + + Show + Vis + + + + Save configuration &as... + L&agre oppsettet som ... + + + + Save the interactively generated server configuration to a file. + Lagre det interaktivt opprettede tjener-oppsettet til en fil. + + + + Settings + Innstillinger + + + + Edit settings + Endre innstillinger + + + + Run Wizard + Kjør Veiledning + + + + NewScreenWidget + + + Unnamed + Uten navn + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Konfigurer Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy-oppsett (*.sgc);;Alle filer (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy-oppsett (*.conf);;Alle filer (*.*) + + + + System tray is unavailable, quitting. + Systemstatusfeltet er utilgjengelig - avslutter. + + + + ScreenSettingsDialog + + + Screen name is empty + Skjermnavnet er tomt + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Skjermnavnet kan ikke stå tomt. Vennligst fyll inn et navn eller lukk dialogen. + + + + Screen name matches alias + Skjermnavn er likt alias + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Skjermnavnet kan ikke være likt som et alias. Vennligst fjern aliaset eller endre skjermnavnet. + + + + ScreenSettingsDialogBase + + + Screen Settings + Skjerminnstillinger + + + + Screen &name: + Skjerm&navn: + + + + A&liases + A&liaser + + + + &Add + &Legg til + + + + &Remove + &Fjern + + + + &Modifier keys + &Spesialtaster + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Ingen + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + S&uper: + + + + &Dead corners + &Døde hjørner + + + + Top-left + Øverst til venstre + + + + Top-right + Øverst til høyre + + + + Bottom-left + Nederst til venstre + + + + Bottom-right + Nederst til høyre + + + + Corner Si&ze: + Hj&ørnestørrelse + + + + &Fixes + &Rettelser + + + + Fix CAPS LOCK key + Fiksér CAPS LOCK tast + + + + Fix NUM LOCK key + Fiksér NUM LOCK tast + + + + Fix SCROLL LOCK key + Fiksér SCROLL LOCK tast + + + + Fix XTest for Xinerama + Fiksér XTest for Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Skjerm: <b>%1</b></center><br>Dobbeltklikk for å endre innstillinger<br>Dra skjermen til søppelbøtta for å fjerne den + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Tjener-konfigurasjon + + + + Screens and links + Skjermer og koblinger + + + + Drag a screen from the grid to the trashcan to remove it. + Dra en skjerm fra oppsettet til søppelbøtta for å fjerne den. + + + + Configure the layout of your synergy server configuration. + Konfigurer oppsettet for din Synergy tjener-konfigurasjon. + + + + Drag this button to the grid to add a new screen. + Dra denne knappen til oppsettet for å legge til en ny skjerm. + + + + 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. + Dra nye skjermer til oppsettet eller flytt rundt på de eksisterende. +Dra en skjerm til søppelbøtta for å fjerne den. +Dobbeltklikk en skjerm for å endre dens innstillinger. + + + + Hotkeys + Hurtigtaster + + + + &Hotkeys + &Hurtigtaster + + + + &New + &Ny + + + + &Edit + &Rediger + + + + &Remove + &Fjern + + + + A&ctions + &Handlinger + + + + Ne&w + N&y + + + + E&dit + En&dre + + + + Re&move + &Fjern + + + + Advanced server settings + Avanserte tjener-innstillinger + + + + &Switch + Bytt + + + + Switch &after waiting + Bytt etter å ha ventet + + + + + + ms + ms + + + + Switch on double &tap within + Bytt ved dobbel berøring innen + + + + &Options + Alternativer + + + + &Check clients every + Kontroller klienter hvert + + + + Use &relative mouse moves + Bruk relative musebevegelser + + + + S&ynchronize screen savers + Synkroniser skjermsparere + + + + Don't take &foreground window on Windows servers + Ikke overta som forgrunnsvindu på Windowstjenere + + + + Ignore auto config clients + + + + + &Dead corners + &Døde hjørner + + + + To&p-left + Øverst til venstre + + + + Top-rig&ht + Øverst til høyre + + + + &Bottom-left + Nederst til venstre + + + + Bottom-ri&ght + Nederst til høyre + + + + Cor&ner Size: + Hjørnestørrelse: + + + + SettingsDialog + + + Save log file to... + Lagre loggfil til... + + + + Elevate Synergy + Hev Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Er du sikker på at du vil gi Synergy forhøyede rettigheter? +Dette tillater Synergy å kommunisere med forhøyede prosesser og UAC dialoger. Dette kan føre til problemer med normale prosesser. Bruk dette kun om du må. + + + + SettingsDialogBase + + + Settings + Innstillinger + + + + Sc&reen name: + Skjermnavn + + + + P&ort: + Port: + + + + &Interface: + Grensesnitt: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Logging + + + + &Logging level: + Loggingnivå: + + + + Log to file: + Logg til fil + + + + Browse... + Velg... + + + + Error + Feil + + + + &Language: + Språk: + + + + &Miscellaneous + &Diverse + + + + Warning + Advarsel + + + + Note + Merknad + + + + Info + Info + + + + Debug + Feilsøk + + + + Debug1 + Feilsøk1 + + + + Debug2 + Feilsøk2 + + + + SetupWizard + + + Setup Synergy + Konfigurer Synergy + + + + Please select an option. + Vennligst velg et alternativ. + + + + Please enter your email address and password. + Vennligst fyll inn e-postadresse og passord. + + + + SetupWizardBase + + + Setup Synergy + Konfigurer Synergy + + + + Welcome + Velkommen + + + + Thanks for installing Synergy! + Takk for at du installerte Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy kan du enkelt dele dine mus og tastatur mellom flere datamaskiner på skrivebordet, og det er gratis og Open Source. Bare flytte musen utenfor kanten av en datamaskin skjerm til en annen. Du kan også dele alle dine oppslagstavler. Alt du trenger er en nettverksforbindelse. Synergy er cross-platform (fungerer på Windows, Mac OS X og Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Tjener eller Klient? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Ukjent + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Innlogging feilet, ugyldig e-post eller passord. + + + + Login failed, an error occurred. + +%1 + Innlogging mislykket, en feil oppsto. + +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Innlogging mislykket, en feil oppsto. +Svar fra tjener: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_pes-IR.qm b/src/gui/res/lang/gui_pes-IR.qm new file mode 100644 index 0000000000000000000000000000000000000000..b900f311df851cc0c9ed3b0ddf1ee8d1f0972b8c GIT binary patch literal 1070 zcma))KZp}S6vn?~ci%1{=0uw-t~jemJO#NFM-X9imvD`Wu75ZXxp=!t1~$8ro#m{q z5yT>`&0!;22-k}s{;4cv?F8XKEBkBgMDWc9$Kyz%gk^X$-|x-$zRZPJ{`|*-Cyzg! zT6nkl^v%~MfJcCRhu4hP_dww+uwDm>&w-7%Tz>)54}880b8p1^`>;kP@4tYxx5@QI z(93Up-hh4PGp_?|9PnzK#Qk4Cxc+IEo-MQfcKP~)@2nq`cMJQxkMiq6!nHMCjVpqo zk--NQTBnT8QYis`-Sein4L8P%~!HEPoe=hfmSHQnM^%NKGn38WNJFHzkpmpUT4 zB_a+}r|obWYPu!OnO9Shdz~z=(vq4_%Z+Pkp2Z|}Wr{V&`=_fKduo!auQ5Ft=aEdh zr_A|f97J3Fu^O>&L{VoD_-gdI%fYs{H4Flt-|q!7e`y34A*2QjH_Qj0A1nWuJo4Ba otU_XlP;=(09ER$a*1J@1N;Q#;t literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_pes-IR.ts b/src/gui/res/lang/gui_pes-IR.ts new file mode 100644 index 00000000..65d570a7 --- /dev/null +++ b/src/gui/res/lang/gui_pes-IR.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + ویراست: + + + + &Ok + + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + چپ + + + + right + راست + + + + up + بالا + + + + down + پایین + + + + Lock cursor to screen + + + + + toggle + + + + + on + روشن + + + + off + خاموش + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + خروج + + + + Run + اجرا + + + + S&top + + + + + Stop + توقف + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + تنظیمات + + + + Edit settings + ویرایش تنظیمات + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + بی نام + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + تنظیمات + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_pl-PL.qm b/src/gui/res/lang/gui_pl-PL.qm new file mode 100644 index 0000000000000000000000000000000000000000..4b024ad0514643ac8d08e51dcf7c268bac2d8ca3 GIT binary patch literal 22465 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 YQjHAea%rIFsDmUOUFhUMKI + + AboutDialogBase + + + About Synergy + O Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Nieznane + + + + Version: + Wersja: + + + + &Ok + &Ok + + + + ActionDialogBase + + + Configure Action + Konfiguruj akcje + + + + Choose the action to perform + Wybierz akcję do wykonania + + + + Press a hotkey + Wciśnij klawisz + + + + Release a hotkey + Zwolnij klawisz + + + + Press and release a hotkey + Wciśnij i zwolnij klawisz + + + + only on these screens + tylko na tych ekranach + + + + Switch to screen + Przejdź do ekranu + + + + Switch in direction + Przełącz w kierunku + + + + left + w lewo + + + + right + w prawo + + + + up + w górę + + + + down + w dół + + + + Lock cursor to screen + Zablokuj kursor myszki dla danego ekranu + + + + toggle + przełącz + + + + on + wł. + + + + off + wył. + + + + This action is performed when + Ta akcja jest wykonywana gdy + + + + the hotkey is pressed + klawisz skrótu jest wciśnięty + + + + the hotkey is released + klawisz skrótu jest zwolniony + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Klawisz skrótu + + + + Enter the specification for the hotkey: + Wprowadź opis dla skrótu klawiszowego: + + + + MainWindow + + + &Start + Start + + + + &File + Plik + + + + &Edit + Edytuj + + + + &Window + Okno + + + + &Help + &Pomoc + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Dostępna jest wersja %1, <a href="%2">odwiedź stronę internetową</a>.</p> + + + + Program can not be started + Nie można uruchomić programu + + + + 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. + Plik wykonawczy<br><br>%1<br><br>nie został poprawnie uruchomiony, mimo, że istnieje. Proszę sprawdzić czy dane konto posiada odpowiednie uprawnienia do uruchomienia wskazanej aplikacji. + + + + Synergy client not found + Klient Synergy nie został odnaleziony + + + + The executable for the synergy client does not exist. + Plik wykonywalny klienta synergy nie istnieje + + + + Hostname is empty + Pole "Nazwa hosta" jest puste + + + + Please fill in a hostname for the synergy client to connect to. + Wypełnij nazwę hosta do której ma się podłączyć klient synergy. + + + + Cannot write configuration file + Nie można zapisać pliku konfiguracyjnego + + + + The temporary configuration file required to start synergy can not be written. + Nie można zapisać tymczasowego pliku konfiguracyjnego wymaganego do uruchomienia synergy. + + + + Configuration filename invalid + Niewłaściwa nazwa pliku konfiguracyjnego + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Nie podałeś poprawnego pliku konfiguracji potrzebnego do uruchomienia serwera synergy. Czy chcesz wskazać ten plik teraz? + + + + Synergy server not found + Nie znaleziono serwera Synergy + + + + The executable for the synergy server does not exist. + Plik wykonywalny serwera synergy nie istnieje + + + + Synergy terminated with an error + Synergy zostało zatrzymane z błędem + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy zakończył działanie w sposób nieoczekiwany, kod wyjścia %1 (exit code). <br><br>Więcej szczegółów w pliku logów wyjściowych. + + + + &Stop + Stop + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy jest uruchamiane. + + + + Synergy is running. + Synergy uruchomione. + + + + Synergy is not running. + Synergy nie uruchomione. + + + + Unknown + Nieznane + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Wskaż plik konfiguracyjny synergy + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Zachowaj konfigurację jako… + + + + Save failed + Błąd zapisu + + + + Could not save configuration to file. + Nie można zapisać konfiguracji do pliku. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Nazwa ekranu: + + + + &Server IP: + IP &serwera + + + + + &Start + Start + + + + Use existing configuration: + Użyj istniejącej konfiguracji: + + + + &Configuration file: + &Plik konfiguracyjny: + + + + &Browse... + Wyszukaj... + + + + Configure interactively: + Konfiguruj interaktywnie: + + + + &Configure Server... + Konfiguruj Serwer... + + + + Ready + Gotowe + + + + Log + Log + + + + &Apply + &Zastosuj + + + + IP addresses: + Adresy IP: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + O Synergy... + + + + &Quit + Zakończ + + + + Quit + Zakończ + + + + Run + Uruchom + + + + S&top + Zatrzymaj + + + + Stop + Zatrzymaj + + + + S&how Status + Pokaż status + + + + &Hide + &Ukryj + + + + Hide + Ukryj + + + + &Show + &Pokaż + + + + Show + Pokaż + + + + Save configuration &as... + Zapisz konfigurację jako... + + + + Save the interactively generated server configuration to a file. + Zapisz interaktywnie wygenerowaną konfigurację serwera do pliku. + + + + Settings + Ustawienia + + + + Edit settings + Edytuj ustawienia + + + + Run Wizard + Uruchom Kreatora + + + + NewScreenWidget + + + Unnamed + Nienazwany + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Konfiguracja Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Konfiguracje Synergy (*.sgc);;Wszystkie pliki (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Konfiguracje Synergy (*.conf);;Wszystkie pliki (*.*) + + + + System tray is unavailable, quitting. + Tacka systemowa niedostępna, zamykanie… + + + + ScreenSettingsDialog + + + Screen name is empty + Nazwa ekranu jest pusta + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Nazwa ekranu nie może być pusta. Wprowadź nazwę lub anuluj to okno dialogowe. + + + + Screen name matches alias + Nazwa ekranu odpowiada aliasowi + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Nazwa ekranu nie może być taka sama jak alias. Usuń alias lub zmień nazwę ekranu. + + + + ScreenSettingsDialogBase + + + Screen Settings + Ustawienia ekranu + + + + Screen &name: + Nazwa ekranu: + + + + A&liases + Aliasy + + + + &Add + Dodaj + + + + &Remove + Usuń + + + + &Modifier keys + Klawisze &modyfikujące + + + + &Shift: + Shift + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Żaden + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + S&uper: + + + + &Dead corners + Narożniki nieczynne + + + + Top-left + Lewy-górny + + + + Top-right + Prawy-górny + + + + Bottom-left + Lewy-dół + + + + Bottom-right + Prawy-dół + + + + Corner Si&ze: + Wielkość narożników: + + + + &Fixes + Poprawki + + + + Fix CAPS LOCK key + Napraw przycisk CAPS LOCK + + + + Fix NUM LOCK key + Napraw przycisk NUM LOCK + + + + Fix SCROLL LOCK key + Napraw przycisk SCROLL LOCK + + + + Fix XTest for Xinerama + Napraw XTest w Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Ekran: <b>%1</b></center><br>Kliknij dwukrotnie, aby edytować ustawienia<br>Przeciągnij ekran do kosza, aby go usunąć + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Konfiguracja serwera + + + + Screens and links + Ekrany i połączenia + + + + Drag a screen from the grid to the trashcan to remove it. + Przeciągnij ekran z siatki do kosza, aby go usunąć. + + + + Configure the layout of your synergy server configuration. + Konfiguracja układu serwera synergy. + + + + Drag this button to the grid to add a new screen. + Żeby dodać nowy ekran, przesuń ten przycisk na siatkę. + + + + 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. + Przeciągnij nowe ekrany na siatkę lub przenoś istniejące. +Przeciągnij ekran do kosza, aby go usunąć. +Kliknij dwukrotnie w ekran, aby edytować jego ustawienia. + + + + Hotkeys + Skróty klawiszowe + + + + &Hotkeys + &Skróty klawiszowe + + + + &New + &Nowy + + + + &Edit + Edytuj + + + + &Remove + Usuń + + + + A&ctions + A&kcje + + + + Ne&w + No&wy + + + + E&dit + E&dytuj + + + + Re&move + U&suń + + + + Advanced server settings + Zaawansowane ustawienia serwera + + + + &Switch + &Przełącz + + + + Switch &after waiting + Przełącz &po odczekaniu + + + + + + ms + ms + + + + Switch on double &tap within + Przełącz po &podwójnym stuknięciu w + + + + &Options + &Opcje + + + + &Check clients every + &Sprawdź klientów co każde + + + + Use &relative mouse moves + Użyj &względnych ruchów myszki + + + + S&ynchronize screen savers + S&ynchronizuj wygaszacze ekranu + + + + Don't take &foreground window on Windows servers + Nie zmieniaj statusu okna na &wierzch w systemie Windows. + + + + Ignore auto config clients + + + + + &Dead corners + Narożniki nieczynne + + + + To&p-left + Górny-lewy + + + + Top-rig&ht + Górny-prawy + + + + &Bottom-left + Dolny-lewy + + + + Bottom-ri&ght + Dolny-prawy + + + + Cor&ner Size: + Wielkość narożnika: + + + + SettingsDialog + + + Save log file to... + Zapisz logi do... + + + + Elevate Synergy + Zwiększ uprawnienia Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Czy jesteś pewien, żeby podnieść uprawnienia Synergy? +Pozwoli to Synergy współpracować z innymi aplikacjami o podniesionych uprawnieniach oraz systemem UAC, ale może stwarzać problemy z aplikacjami bez podniesionych uprawnień. Podnoś uprawnienia tylko w sytuacji, gdy naprawdę tego potrzebujesz. + + + + SettingsDialogBase + + + Settings + Ustawienia + + + + Sc&reen name: + Nazwa ekranu: + + + + P&ort: + Port: + + + + &Interface: + Interfejs: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Logowanie + + + + &Logging level: + Poziom logowania: + + + + Log to file: + Zapisuj logi do pliku: + + + + Browse... + Przeglądaj... + + + + Error + Błąd + + + + &Language: + Język + + + + &Miscellaneous + &Różności + + + + Warning + Ostrzeżenie + + + + Note + Uwaga + + + + Info + Info + + + + Debug + Debug + + + + Debug1 + Debug1 + + + + Debug2 + Debug2 + + + + SetupWizard + + + Setup Synergy + Konfiguracja Synergy + + + + Please select an option. + Proszę wybrać opcję, + + + + Please enter your email address and password. + Proszę wprowadzić swój adres e-mail i hasło. + + + + SetupWizardBase + + + Setup Synergy + Konfiguracja Synergy + + + + Welcome + Witaj! + + + + Thanks for installing Synergy! + Dziękujemy za zainstalowanie Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy pozwala w łatwy sposób dzielić się myszką i klawiaturą pomiędzy wieloma komputerami na Twoim biurku, jest darmowe i Open Source. Wystarczy przesunąć kursor myszy poza krawędź jednego monitora aby przejść na monitor innego komputera. Możesz nawet dzielić wszystkie swoje schowki. Potrzebujesz do tego tylko połączenia z siecią. Synergy jest wieloplatformowe (działa na Windows, Mac OS X i Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Klient czy Serwer? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Nieznane + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Logowanie nie powiodło się - błędny email lub hasło. + + + + Login failed, an error occurred. + +%1 + Logowanie nie powiodło się, wystąpił błąd. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Logowanie nie powiodło się, wystąpił błąd. +Odpowiedź serwera: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_pt-BR.qm b/src/gui/res/lang/gui_pt-BR.qm new file mode 100644 index 0000000000000000000000000000000000000000..d335d9ed04bfeb5d7df4bb8fa7e92b59116941cb GIT binary patch literal 22443 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 literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_pt-BR.ts b/src/gui/res/lang/gui_pt-BR.ts new file mode 100644 index 00000000..93c62975 --- /dev/null +++ b/src/gui/res/lang/gui_pt-BR.ts @@ -0,0 +1,1411 @@ + + + AboutDialogBase + + + About Synergy + Sobre o Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Desconhecido + + + + Version: + Versão: + + + + &Ok + Ok + + + + ActionDialogBase + + + Configure Action + Configurar Ação + + + + Choose the action to perform + Escolha a ação a ser executada + + + + Press a hotkey + Pressione a tecla de atalho + + + + Release a hotkey + Solte a tecla de atalho + + + + Press and release a hotkey + Pressione e solte a tecla de atalho + + + + only on these screens + somente nessas telas + + + + Switch to screen + Mude para tela + + + + Switch in direction + Mude de direção + + + + left + esquerda + + + + right + direita + + + + up + acima + + + + down + abaixo + + + + Lock cursor to screen + Travar cursor na tela + + + + toggle + alternar + + + + on + ligar + + + + off + desligar + + + + This action is performed when + Essa ação é executada quando + + + + the hotkey is pressed + a tecla de atalho é pressionada + + + + the hotkey is released + a tecla de atalho é solta + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Tecla de atalho + + + + Enter the specification for the hotkey: + Entre com a descrição da tecla de atalho: + + + + MainWindow + + + &Start + Início + + + + &File + Arquivo + + + + &Edit + Editar + + + + &Window + Janela + + + + &Help + Ajuda + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>A sua versão do Synergy está desatualizada. Versão <b>%1</b> está disponível para <a href="%2">download</a>.</p> + + + + Program can not be started + Programa não pode ser iniciado + + + + 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. + O executável <br><br>%1<br><br>não pôde ser iniciado com êxito. Por favor, verifique se você tem permissões suficientes para executar este programa. + + + + Synergy client not found + Cliente Synergy não foi encontrado. + + + + The executable for the synergy client does not exist. + O executável para o cliente do synergy não existe. + + + + Hostname is empty + Nome do servidor: + + + + Please fill in a hostname for the synergy client to connect to. + Por favor, preencha um nome do servidor para o cliente Synergy se conectar. + + + + Cannot write configuration file + Não foi possível gravar as configuração + + + + The temporary configuration file required to start synergy can not be written. + O arquivo temporário de configuração, necessário para iniciar o Synergy, não pode ser gravado. + + + + Configuration filename invalid + Nome do arquivo de configuração inválido + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Você não preencheu um arquivo de configuração válido para o servidor do Synergy. Você quer procurá-lo agora? + + + + Synergy server not found + Servidor do Synergy não foi encontrado + + + + The executable for the synergy server does not exist. + O executável para o servidor do synergy não existe. + + + + Synergy terminated with an error + Synergy terminou com um erro + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy fechou inesperadamente retornando o código %1.<br><br>Por favor veja o log para detalhes. + + + + &Stop + Parar + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy foi iniciado. + + + + Synergy is running. + Synergy esta rodando. + + + + Synergy is not running. + Synergy não esta rodando. + + + + Unknown + Desconhecido + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Selecionar um arquivo de configuração synergys + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Gravar a configuração como... + + + + Save failed + Gravação falhou + + + + Could not save configuration to file. + Não foi possível salvar a configuração no arquivo. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Nome da tela: + + + + &Server IP: + IP do servidor + + + + + &Start + Início + + + + Use existing configuration: + Usar a configuração existente:Use a configuração e + + + + &Configuration file: + Arquivo de configuração: + + + + &Browse... + Navegar... + + + + Configure interactively: + Configurar interativamente: + + + + &Configure Server... + Configurar servidor + + + + Ready + Pronto + + + + Log + Registro + + + + &Apply + Aplicar + + + + IP addresses: + Endereço ip: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Sobre o Synergy... + + + + &Quit + Sair + + + + Quit + Sair + + + + Run + Rodar + + + + S&top + Parar + + + + Stop + Parar + + + + S&how Status + Mostrar Status + + + + &Hide + &Ocultar + + + + Hide + Ocultar + + + + &Show + &Exibir + + + + Show + Exibir + + + + Save configuration &as... + Gravar a configuração como... + + + + Save the interactively generated server configuration to a file. + Salvar a configuração do servidor gerada dinamicamente para um arquivo. + + + + Settings + Configurações + + + + Edit settings + Editar configurações + + + + Run Wizard + Executar o assistente + + + + NewScreenWidget + + + Unnamed + Sem nome + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Configurar Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Configurações do Synergy (*.sgc);;Todos os arquivos (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Configurações do Synergy (*.conf);;Todos os arquivos (*.*) + + + + System tray is unavailable, quitting. + A área de notificação não está disponível, saindo. + + + + ScreenSettingsDialog + + + Screen name is empty + O nome de exibição está vazio. + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + O nome de exibição não pode ser vazio. Por favor preencha o nome ou cancele. + + + + Screen name matches alias + Nome de exibição corresponde o apelido + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + Configurações da tela + + + + Screen &name: + Nome da tela: + + + + A&liases + Apelidos + + + + &Add + Adicionar + + + + &Remove + Remover + + + + &Modifier keys + Teclas modificadoras + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Nenhuma + + + + &Ctrl: + Ctrl: + + + + Al&t: + Alt: + + + + M&eta: + Meta: + + + + S&uper: + Super: + + + + &Dead corners + Cantos + + + + Top-left + Superior-esquerdo + + + + Top-right + Superior-direito + + + + Bottom-left + Inferior-esquerdo + + + + Bottom-right + Inferior-direito + + + + Corner Si&ze: + Tamanho do Canto: + + + + &Fixes + Correções + + + + Fix CAPS LOCK key + Trava a tecla CAPS LOCK + + + + Fix NUM LOCK key + Trava a tecla CAPS LOCK + + + + Fix SCROLL LOCK key + Trava a tecla SCROLL LOCK + + + + Fix XTest for Xinerama + Corrigir XTest para o Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Tela: <b>%1</b></center><br>Clique duplo para editar configurações<br>Arraste a tela para a lixeira para remove-la. + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Configuração do servidor + + + + Screens and links + Telas e links + + + + Drag a screen from the grid to the trashcan to remove it. + Arraste uma tela para a lixeira para remove-la. + + + + Configure the layout of your synergy server configuration. + Configure a disposição na sua configuração do servidor synergy. + + + + Drag this button to the grid to add a new screen. + Arraste este botão para o grid para adicionar uma nova tela. + + + + 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. + Arrste novas telas para o grid ou mova as existentes. +Arraste uma tela para a lixeira para remove-la. +Clique duplo numa tela para editar as suas configurações. + + + + Hotkeys + Teclas de Atalho + + + + &Hotkeys + Teclas de Atalho + + + + &New + Novo + + + + &Edit + Editar + + + + &Remove + Remover + + + + A&ctions + Ações + + + + Ne&w + Novo + + + + E&dit + Editar + + + + Re&move + Remover + + + + Advanced server settings + Configurações avançadas de servidor + + + + &Switch + Trocar + + + + Switch &after waiting + Trocar após aguardar + + + + + + ms + ms + + + + Switch on double &tap within + Ligar em toque duplo dentro + + + + &Options + Opções + + + + &Check clients every + Verificar os clientes a cada + + + + Use &relative mouse moves + Usar movimentos relativo do mouse + + + + S&ynchronize screen savers + Sincronize proteções de tela + + + + Don't take &foreground window on Windows servers + Não tome janela de primeiro plano em servidores Windows + + + + Ignore auto config clients + + + + + &Dead corners + Cantos + + + + To&p-left + Superior-esquerdo + + + + Top-rig&ht + Superior-direito + + + + &Bottom-left + Inferior-esquerdo + + + + Bottom-ri&ght + Inferior-direito + + + + Cor&ner Size: + Tamanho do Canto: + + + + SettingsDialog + + + Save log file to... + Salvar o arquivo de log em... + + + + Elevate Synergy + Elevar privilégios de execução do Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Você quer elevar os privilegios de execução do Synergy? +Isso permite ao Synergy interagir com processos privilegiados e com o UAC, mas pode causar problemas com processos sem privilégios. Eleve os privilégios de execução somente se você realmente precisar. + + + + SettingsDialogBase + + + Settings + Configurações + + + + Sc&reen name: + Nome de Exibição: + + + + P&ort: + Porta: + + + + &Interface: + Interface + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Registrando + + + + &Logging level: + Nível do log: + + + + Log to file: + Salvar log em: + + + + Browse... + Navegar... + + + + Error + Erro + + + + &Language: + &Idioma: + + + + &Miscellaneous + Diversos + + + + Warning + Aviso + + + + Note + Nota + + + + Info + Info + + + + Debug + Depurar + + + + Debug1 + Depurar1 + + + + Debug2 + Depurar2 + + + + SetupWizard + + + Setup Synergy + Configurar Synergy + + + + Please select an option. + Por favor, selecione uma opção + + + + Please enter your email address and password. + Por favor informe o seu endereço de e-mail e senha. + + + + SetupWizardBase + + + Setup Synergy + Configurar Synergy + + + + Welcome + Bem-vindo + + + + Thanks for installing Synergy! + Obrigado por instalar o Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy permite que você compartilhe seu mouse e teclado facilmente entre vários computadores na sua área de trabalho, além de ser gratuito e de código aberto. Basta mover o mouse para fora da borda da tela de um computador para outro. Você pode até mesmo compartilhar todas as suas áreas de transferência. Tudo que você precisa é de uma conexão de rede. Synergy é multiplataforma (funciona em Windows, Mac OS X e Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Servidor ou Cliente? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Desconhecido + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Falha no login, e-mail ou senha inválidos. + + + + Login failed, an error occurred. + +%1 + Falha no login, ocorreu um erro: +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Erro no login, ocorreu um erro. +Resposta do servidor: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_pt-PT.qm b/src/gui/res/lang/gui_pt-PT.qm new file mode 100644 index 0000000000000000000000000000000000000000..cda99e106ec507c25f41d4d2ed6870305ddb7d68 GIT binary patch literal 21258 zcmb_k3v^s%o&S6ba(L_?J6ujSy6P)Srz37E3%4ugk5!Y-3JTu5?`#a;`(Cu_xrxNkD1(g zRD_e>dED>&zn|a#PXB$WmEU~fgYWzHg{vNX<6U3=&pkpkzgLKsAt81@i|h4xZ{qq7 z_?r}BU z^(W%mf5&~=X>sfeUj#lU#dR+L?v`(f<6nD7h^;N++<&ik?W>AwyL zart}1OXoM?^Y@FFZ%$zS=7#eN_&cY5Tg5?4Y{csg}7*2!)HGO zzAjnc@TCV{0bRol-&ykwAsX*!c;$knLTqboTru~65c?i!9G(N5WtTSIZ~^XHcYmY# zQ^47Eu<`EsD}*?Ir16vY{Z@$eyBj~<^;KM-Z2Z#Qw}Z}@x~_glQ|$fNuX{<;mHTgo zIDgl)|Ks?6>&KhM+nxs=KUUX~e^l3fZqpl{SOIz6*YptO)Ba#Ae&2UNzZtuB>;sVN z-q>}8o%sF@vFr`lry~=)`3Ioy;(^$$y$=g<)l0E6*?Wa(x;=LH%h-SWuVVN7HRL`t zjq8VT{oB}Q+a49-iW_1N@5H|A->R;cPRE{p`3~&&Z0z~R+Jx9M6#M1H$8o(i_VV9> zFRd5Fe*evb(3h3XYp=nz9>gI3lPC<@OH2+5y>-xUk{Os*-hunS??{39? zYun@9>!GvzmdDq3=7ebYdVEJ8?%z5T-#vK>^n5-(dJ*UvToHeB>r>F*+vB&~^-1vc z;rIt%Ga$r;>*IIa2D-X`AAfWW;H`cz{^)b~e8m^y&mRQ7d!CN}^e4EU|JL}=o;?G7 z|6EJkM=r&+w`JEaCxz%a-ExBXZNIJM&t6yqy|}mK)~^7+_}wj^dmMV(a&F6uyWawN zeW-QyQ$s>*=xx1u{C;K8fyZwU z;@tg<4z`jH?^tx=<%@)P?L&*^?!|srnr-LY4ml2-X7Td99>M25BkH>LH|l!ml6K=u_kurG`%VA#Z_tD8_IHgu z13cfYt~>sv{f<8z$NPV7zqjo^;J2dviL3X49;;*bn;#Hjai-(&k=vkmx2Ws6ZR$Gu zOvmA0W8a?NbWFbOY3SjnJC1yL2l%qJ<4gnKh_7~h;-+4}{awdBjY;hLx{muBT*z}$ zU5CHd@o@4L=v!;Y<0Bu1uNvui;X9DqYSGzzJ@#$-Mdy}xgI~Spbncja827!WGxfv8 zLTvs}r*+|@LUf(i>2&=Da5i_IKJi1`zp?Y36X4g#iq3~VZVEB_;m#*c0-x8c?)>o^ zu7{m|rfbFD;5stiwe9tPf$vv!?P`P^8n<)}JlzJqr@B7&BIwnB+1>G%4*0pWd&@JR zd)1ci*FJMDz^v;&u^Mvhzq$Lw1s{Q)#k=qQZ6Ef3TlaUD4S-MI=zj52w}Os)EFliP zu?d*Pg)YX$iB`PCYoMr)pJ>6gdvMAw1iW&|Xtju&3CJX={P2y3}%<(-%KfAzDgn7M;9#fgW zMtRdAn5oM6zNT)tfnNy2TV4vUX!TV9_5fg366#1H1U^5Ww=8N=X@e6BVY zW-H%5DTZKxS^O!bRPjgY8ojmUTU21MHHF}VzGOI;H{sjCZgA6q!zoMZT-zbT${n?Guwa>R zEWwHqFd!*21L|vF=FR$urKC{4sspPA#f{2``sg+5`^~HrL;3wZxc>lzOgI+A9ul>l z$Qw>1Y6LRDn@binV}TtBgv1}jy)C${6?0oBpU;mcbfhg{$D&~hwHZ)LKqL`91OiYrJGyFCK zu9Ih8M5Ht{@GdG}zHpCY&%<-mEDg<7X|t;(WeTXJE2#R7VyvhMX+X8GJLRIXGinMY zLv5fRF^jt6<$`C4zb~5$hKyX!&TI3Il{bqB7M!9}setF6ax(^AiW`-=#pHNSJSnv{ z9BbEjX>kBDXUv#Lf#!^?C0%;CA&i)G&H3Xz(Sfg4O&%k<*@@bhMjSY87*n#r2MB4ff-Fynp4j1ezEVY z6p(1l;IEJW`wUr`Sg2%%+t(LKsRpBDP(W!0&`Kh76B$s%Tr-HZ?Q+{R+-WrOU8Nz& zN2euJ{+AQHU-G$@26$Ze+? hMv5XP1rH4EJE{SO`}WOg3hxK}>p~Z}3HPcT%#v>3%h|a{iSgjQa@lm38N3TZ1|14bOx?j` zm_|sP14~YOl0o)9W95+Pq_jfLJc%40FH!5E?w{7+TFjGH9zHE)G9y~It*?K|8Q@>h zHM*wiPN9#-v}qQZ6J2A<%)^@9NM+q#2a`P}lEvYy+|SZNX#1Etj_pK+y5rIn1a_83 z)c3L%FYJ{D3iWAu-Wyo(Ny%U6hVP0ln?wa)Wqs&)f2Ze`K5b!ND~!gsVG7r{#{Yu=PvGQHm&=}r%pW3k@Yy;NT5_kpyq~gT zQb`#DVk?Lq*{d4qhux5UmrAK5N`+)JMj7RitJ;p? zoQfzq(8qmK0S(X;St!Ng)llL5izQ3m%tf;F>`o%evYCcPUm#={T|SRURL4$rrx#WU zwOJf0f5664R@LWZXl~cQK*Pd|Q^H)WMm|ocvs&RN#mP{|!OU|&0 zS#(#>qw){N*g+bEd>EuC_izVkaCSB;3#_PxE3t4G{*p_ThlOY2|2{L@bk!KB0)0ot z;#vnb%#|0K?@k}UQhi}PExUnH`1S$cp#@tq5ll!G3sS>UDgq#;mXLW~6?)k989DDhhcH5ruwFMLEZ+iTOM% zD=G$*<2lK2O^Pv~uk*l!W~5T`T*0kE)M4!47raHHm@P1uA^#vupQxr$J5x!7tqT+{ zR!#3ZpmQudBnTfs^I_9SRdg2QR`@tA(5|M#gUNIbYzaY?F&54#O} zXh*Hnh9m3cC~>WUa_eFB2ES;itYE^0ct=8qvTKRFkuOw~eT4>kLN7MZqYxN4%O;8P ze+%0r=SH+ibiYp$1^Je!(WNrY8exg z7P3q%76zr!5owVTG#jHxJP#>M(8!}REFKAmyhcYt4hU%M9#%A}r6to1<({E6QNt;8 zRdAuPY96!=_Cy^I``nm!786BnJuR!Kbps)D@`es71zAnD2#FSZ5c~`L)A`q;*)OXE zILOjWrXpi|WRztkRBXBW#)}~tibPs&_n0}a#B|h3Wz4)hNxL{AP^hpSbr{hJ85L%| zTArSzXChn3@NAC$VZz9$fuMZEu3q?2C3<;hXuaq~dgC!{gSZm^PeSb&eOa`rf6Mbw zexp|QiVZ%|TfG*E7s}*;fUB+V?W68*xbn(Dw1wGVm!I`+AR#T+j8EN&9*X3O^GD+E zLa<5k>agEZ8GARAtONPe@?7vqXqO4i@=|qb2BW=VVQ}{3)#)q(*k9rO3kjd~b%dHZ=s~&s!+#u|3f~JDk zKcp^snMOF!EDgCMg7*(IieGrHMxAI&k>4hJA+6a=}uNE9+$GxuY4HAhoDdn za>Ky6#r2`Qla+p~`ttR1xtd&4rcWI+z%O#$73z2ndg|lVsqaOO1c&J$+{xskI)vrY z#C0G@S#f+y_Kp1g;us@1Y1Xk3QJs`qaKeNhNvQ|3ixetsep-4!(4`-;Qy92_v@qpX z2MCq{hXI0H${w?iWs82;oU!L*;ZvPn&KV@+kzX2O2}IJOC#J1*z7Cn_ejY#~*_+m} z6Vn+=MpY8wthjYh&srFvtAoHcSwnEU0I}x5tX>aVaaDi#ENL3d%E654?C68|J@ry~ z7|l_&xM_3`rW#P_RH=TPwF+Q#6k+%ySJi>&NUJQ! zLZywR6Ci9lsA?r(Z0C@)5iMcqr&Y36eg9U^kbM@%XvGYg)feuNCPo9}$O9==j*d#> zjSUS!dJ|Ag4MUXUxc_P&$YR)^HZ(Yq&_>6HuBN5bhPb^Bh+|094n@H0A-u6`51j?L z%j*D_z&(dS+9>{CNaQ&Lnix7fK05j;;U1Gth%r3e5IhF9Go~;B4iBC!C){I`rmIeU zj#;b`W{lb#?vSOP2{7TLHGW9PxltWHq!r8MVqeU$Ls(f4+%YWVBsh}mVDXrptIPK# zU>^nKG~`5J2`ve|fG&F-c(20xF?e6v7#(~#EeZDPET$d0Uj|h-kY1@jjx-r>E#n%mRn3y{DbI0;6&qA%@(c+t7h00@N@Q|F%pee0ZhJQ3|g36*!@Y2#+c54 zQn{VMBwhcO;x{}B+iMp%ONT)koMoY%V1_$<@&?DqcquHtXNv-Lfji9s7`%6627?na zs#K4kRTgHEC7D^7oU@(j1u}MK>D20r*ByFUz+SGpwW>5Mn`qsEt&d0_5!6X!Y3VSE z%6|B%tlfRPKrdS!=c$PzS2HoSAY)cFkbjCqx7z--XKSmiUJHgq<+f1|Z?x)axL2lo z)iz}_p1u^LV?OU6l`02ttHBXb{T!N<;CqX zc3_2yv?VPmALpH36R9{ZW8kP>4jJR>_-DyctyNiOS0hj*?onwwy`3&&jvY!@n7Hdm z)R4Is6ZdMnJ20}Rq_1abCOe=YmHME=ck&#Xui1PoZ9Pzvf?l+0DbnSYvyBy!CXPy9 z%!Ft@RE%%kYv(S(B&Bh})O4KTni+@lc9>1#2tOZ3QN!(SQS)jleHIo|9_Um#6-K5$GzcP2Wsr=2A0XZ$I4Tu)#+v}Ef6cFIR`Tiy)@?-GxeG|M~`g0vAMFK^>*0Qz1CYbVs@kaQW+~9m1?T!Qg=mwx9Z^i#Ryv}5Ps|2?PVVroqFJF6kV^H}94m3Ik7=gX6+#VP@Z zdB9(1t=x&4zPZ}0fvS|tLWdt)m#SP`^FpjVr>T`b^@UVRCSc%~4t~yxmn82vc@%nL z!w0sk_}r>)q*2po^M=I{gj&#cM?h0gEKpu70VqehJmsdSVkV9PlpIl2`S4d2;lsXC z%8TfEV^)sqTDe+ilomkriaH3cr(ua=R}aeRYC2My)h#Thb&wg=u52ro)4F;-v>J#} z^xl|_Fsyhspe)OhtrdnU6~Ne-XBZDPmL;DVl$gte`=#gd$W+Ipo6sM4`5C)__cYC# zsv85;;0U2{rse|L5q}wgsWt^qbV{a;eQ|dWXU#bryN3@;yS%1N=-lb`3kC=nlIIdtoQ-|$F-QZ_V#E?2vLfL(#K zkyPE|C8c}#M?lUJhYa8?jqdGGSL~mnE_uuQ-@kNvs`^DpNXYZw+lZT-!{1_Ouk0r5du!WwTV;m zRWMjZ=N71Hd_uP!b;4C?X+5JiXgb69nYm#0rqXU_F@IBO3sw-E<;1Ut_zY+{YB+qr zsTvapzysCwr9bf=8f0Ej{yQtdPj=YwWva3da@Cdo(<@m%s)q)mEn7b_C2fZzD$J@; zlt0OE%YqHp!`Uq@kQb?haw<`^#55iW9YI z_|RSi}@oaUP~>AwtU6?#_?B@^5DI~o3iI{#%AEJGB+AO0G(o?g>1=gH=}k5?336 zkCpGnXR$7U=3f%OF>tVe6I9t-2tmSczR2E#i77iie1~p>zdv?z)u^PZvklDhU~H#P zyAIDr@IVAvORk8#fhjdCmpkK7VOFB<_Gz46!-uHI`TPVbHN48t+YWxPNj<`hUU;9E zck+g$W4rF=S>(s)#m#8zd9Nh2*oE7q9Ws*IctSfSDIB$Og_9ekOO5g=$alu&>1pe5{$AHc(~Crw^?h9?{97>dbiPU&yEuiN#7-FulTN z>5Vz|Z9~h9&>UdPQ8Np<%HUjKi@n&Q-X9t3D*m8^JmoPR8DZ*~7VSQ6IyNMeW+ + + AboutDialogBase + + + About Synergy + Acerca de Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Desconhecido + + + + Version: + Versão + + + + &Ok + &Ok + + + + ActionDialogBase + + + Configure Action + Definir a ação + + + + Choose the action to perform + Seleccionar a ação a executar + + + + Press a hotkey + Pressionar uma tecla de atalho + + + + Release a hotkey + Largar uma tecla de atalho + + + + Press and release a hotkey + Pressionar e largar uma tecla de atalho + + + + only on these screens + apenas nestes ecrãs + + + + Switch to screen + Mudar para o ecrã + + + + Switch in direction + Mudar na direcção + + + + left + esquerda + + + + right + direita + + + + up + cima + + + + down + baixo + + + + Lock cursor to screen + Manter o cursor no ecrã + + + + toggle + alternar + + + + on + ligado + + + + off + desligado + + + + This action is performed when + Esta ação é executada quando + + + + the hotkey is pressed + a tecla de atalho é pressionada + + + + the hotkey is released + a tecla de atalho é largada + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Tecla de atalho + + + + Enter the specification for the hotkey: + Coloque a descrição para a tecla de atalho + + + + MainWindow + + + &Start + &Iniciar + + + + &File + &Ficheiro + + + + &Edit + &Editar + + + + &Window + &Janela + + + + &Help + &Ajuda + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>A tua versão do Synergy está desatualizada. Versão<b>%1</b> está agora disponivel <a href="%2">para download</a>.</p> + + + + Program can not be started + O programa não consegue iniciar + + + + 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. + O programa<br><br>%1<br><br>, embora exista, não teve êxito a iniciar. Por favor, verifique se tem permissões suficientes para o executar. + + + + Synergy client not found + O cliente Synergy não foi encontrado + + + + The executable for the synergy client does not exist. + O executável de cliente de Synergy não existe + + + + Hostname is empty + O nome de computador não está preenchido + + + + Please fill in a hostname for the synergy client to connect to. + Por favor coloque o nome de computador ao qual o cliente Synergy vai ligar-se + + + + Cannot write configuration file + Não foi possivel escrever no ficheiro de configuração + + + + The temporary configuration file required to start synergy can not be written. + Não foi possível escrever no ficheiro temporário de configuração de synergy, o qual é indispensável para o iniciar. + + + + Configuration filename invalid + Ficheiro de configuração inválido + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Não colocaste um ficheiro de configuração válido para o servidor de synergy. Queres seleccionar o ficheiro de configuração agora? + + + + Synergy server not found + O servidor de synergy não foi encontrado + + + + The executable for the synergy server does not exist. + O executável de servidor de synergy não existe. + + + + Synergy terminated with an error + Synergy terminou com erro + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy terminou inesperadamente com o erro %1.<br><br>Por favor, verifique o registo de log para mais detalhes. + + + + &Stop + &Parar + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy está a iniciar + + + + Synergy is running. + Synergy está em execução + + + + Synergy is not running. + Synergy não está em execução + + + + Unknown + Desconhecido + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Seleccionar um ficheiro de configuração de synergy + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Guardar a configuração como... + + + + Save failed + Falhou o registo + + + + Could not save configuration to file. + Não foi possível guardar a configuração para o ficheiro. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Nome do ecrã: + + + + &Server IP: + &IP do servidor: + + + + + &Start + &Iniciar + + + + Use existing configuration: + Usar uma configuração guardada: + + + + &Configuration file: + Ficheiro de &configuração: + + + + &Browse... + &Explorar... + + + + Configure interactively: + Configuração interativa: + + + + &Configure Server... + &Configurar Servidor... + + + + Ready + Pronto + + + + Log + Registo de eventos + + + + &Apply + &Aplicar + + + + IP addresses: + Endereços IP: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + &Acerca de Synergy... + + + + &Quit + &Sair + + + + Quit + Sair + + + + Run + Executar + + + + S&top + &Parar + + + + Stop + Parar + + + + S&how Status + M&ostrar Estado + + + + &Hide + &Esconder + + + + Hide + Esconder + + + + &Show + &Mostrar + + + + Show + Mostrar + + + + Save configuration &as... + Guardar a configuração &como... + + + + Save the interactively generated server configuration to a file. + Guardar a configuração gerada interactivamente para um ficheiro. + + + + Settings + Definições + + + + Edit settings + Alterar definições + + + + Run Wizard + Usar assistente + + + + NewScreenWidget + + + Unnamed + Sem nome + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Configurar Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Configuração de synergy (*.sgc);;Todos os ficheiros (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Configuração de synergy (*.conf);;Todos os ficheiros (*.*) + + + + System tray is unavailable, quitting. + A área de notificação não está disponivel disponivel, saindo. + + + + ScreenSettingsDialog + + + Screen name is empty + O nome do ecrã não foi definido + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + O nome do ecrã não pode estar vazio. Preenche a nome ou fecha a janela. + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + Configurações de ecrã + + + + Screen &name: + &Nome do ecrã: + + + + A&liases + Nomes al&ternativos + + + + &Add + &Adicionar + + + + &Remove + &Remover + + + + &Modifier keys + &Teclas de modulação + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Nenhum + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + S&uper: + + + + &Dead corners + &Cantos inacessíveis + + + + Top-left + Canto superior esquerdo + + + + Top-right + Canto superior direito + + + + Bottom-left + Canto inferior esquerdo + + + + Bottom-right + Canto inferior direito + + + + Corner Si&ze: + Di&mensão do canto: + + + + &Fixes + Co&rrecções + + + + Fix CAPS LOCK key + Corrigir a tecla CAPS LOCK + + + + Fix NUM LOCK key + Corrigir a tecla NUM LOCK + + + + Fix SCROLL LOCK key + Corrigir a tecla SCROLL LOCK + + + + Fix XTest for Xinerama + Corrigir XTest para Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Ecrã: <b>%1</b></center><br>duplo clique para alterar as definições<br>Arrastar o ecrã para o lixo para o remover + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Configuração do servidor + + + + Screens and links + Ecrãs e ligações + + + + Drag a screen from the grid to the trashcan to remove it. + Arrastar um ecrã da grelha para o lixo para o remover. + + + + Configure the layout of your synergy server configuration. + Configurar a disposição na configuração do servidor de synergy + + + + Drag this button to the grid to add a new screen. + Arrastar este botão para a grelha para adicionar um novo ecrã. + + + + 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. + Arrastar novos ecrãs para a grelha ou mover os existentes. +Arrastar um ecrã para o lixo para o remover. +Faça duplo clique num ecrã para alterar as suas definições. + + + + Hotkeys + Teclas de atalho + + + + &Hotkeys + &Teclas de atalho + + + + &New + &Novo + + + + &Edit + &Editar + + + + &Remove + &Remover + + + + A&ctions + &Ações + + + + Ne&w + No&vo + + + + E&dit + &Alterar + + + + Re&move + Re&mover + + + + Advanced server settings + Definições avançadas do servidor + + + + &Switch + &Alternar + + + + Switch &after waiting + Alternar &após aguardar + + + + + + ms + ms + + + + Switch on double &tap within + Alternar ao tocar duas &vezes em + + + + &Options + &Opções + + + + &Check clients every + &Verificar clientes a cada + + + + Use &relative mouse moves + Utilizar movimentos &relativos do rato + + + + S&ynchronize screen savers + S&incronizar protectores de ecrã + + + + Don't take &foreground window on Windows servers + Não tirar o &foco da janela activa nos servidores Windows + + + + Ignore auto config clients + + + + + &Dead corners + &Cantos inacessíveis + + + + To&p-left + Canto su&perior esquerdo + + + + Top-rig&ht + Canto superior &direito + + + + &Bottom-left + Canto &inferior esquerdo + + + + Bottom-ri&ght + Canto inferior direit&o + + + + Cor&ner Size: + Dimensão do Ca&nto: + + + + SettingsDialog + + + Save log file to... + Guardar ficheiro de registo de eventos para... + + + + Elevate Synergy + Elevar o Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + Definições + + + + Sc&reen name: + Nome do ecrã: + + + + P&ort: + P&orto: + + + + &Interface: + &Interface: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Registo de eventos + + + + &Logging level: + &Nivel de registo: + + + + Log to file: + Ficheiro de registo: + + + + Browse... + Explorar... + + + + Error + Erro + + + + &Language: + &Linguagem: + + + + &Miscellaneous + + + + + Warning + Aviso + + + + Note + Notificação + + + + Info + Informação + + + + Debug + Depuração + + + + Debug1 + Depuração1 + + + + Debug2 + Depuração2 + + + + SetupWizard + + + Setup Synergy + Configurar Synergy + + + + Please select an option. + Por favor selecciona uma opção. + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + Configurar Synergy + + + + Welcome + Bem-vindo(a) + + + + Thanks for installing Synergy! + Obrigado por instalares o Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy permite que uses o teu rato e teclado para controlar vários computadores na tua secretária em simultâneo, é gratuito e Open Source. Basta mover o rato para um lado ou para outro para mudar de ecrã. Podes até copiar e colar de um ecrã para o outro. Precisas apenas de uma ligação de rede. O Synergy é cross-platform (funciona em Windows, Mac OS X e Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Servidor ou Cliente? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Desconhecido + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_ro.qm b/src/gui/res/lang/gui_ro.qm new file mode 100644 index 0000000000000000000000000000000000000000..3e71663754c2dc93cafe8f04899797e3e6f0bf23 GIT binary patch literal 19806 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 VSQ#_%CM;Z#Nc=t_o?n+({J-#OCBOgx literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_ro.ts b/src/gui/res/lang/gui_ro.ts new file mode 100644 index 00000000..eb69251b --- /dev/null +++ b/src/gui/res/lang/gui_ro.ts @@ -0,0 +1,1407 @@ + + + AboutDialogBase + + + About Synergy + Sobre o Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Necunoscut + + + + Version: + Versiune: + + + + &Ok + Ok + + + + ActionDialogBase + + + Configure Action + Confirmă Acțiunea + + + + Choose the action to perform + Alege acțiunea pentru a o efectua + + + + Press a hotkey + Apasă o tastă rapidă + + + + Release a hotkey + Eliberează o tastă rapidă + + + + Press and release a hotkey + Apăsaţi şi eliberaţi o tastă rapidă + + + + only on these screens + doar pe aceste ecrane + + + + Switch to screen + Comută la ecran + + + + Switch in direction + Comută în direcția + + + + left + stânga + + + + right + dreapta + + + + up + sus + + + + down + jos + + + + Lock cursor to screen + Blochează cursorul la ecran + + + + toggle + comută + + + + on + Ligado + + + + off + Desligado + + + + This action is performed when + Această acțiune este executată când + + + + the hotkey is pressed + o tastă rapidă este apăsată + + + + the hotkey is released + o tastă rapidă este eliberată + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Tastă rapidă + + + + Enter the specification for the hotkey: + Introdu specificație pentru tasta rapidă: + + + + MainWindow + + + &Start + &Start + + + + &File + &Fișier + + + + &Edit + &Editează + + + + &Window + &Fereastră + + + + &Help + &Ajutor + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + Programul nu poate fi pornit + + + + 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. + Executabilul<br><br>%1<br><br>nu a putut fi pornit cu succes, deși există. Te rog verifică dacă ai suficiente permisiuni pentru a rula acest program. + + + + Synergy client not found + Clientul Synergy nu poate fi găsit + + + + The executable for the synergy client does not exist. + Executabilul pentru clientul synergy nu există. + + + + Hostname is empty + Numele gazdă este gol + + + + Please fill in a hostname for the synergy client to connect to. + Te rog să complectezi numele de gazda pentru clientul synergy la care să te conectezi. + + + + Cannot write configuration file + Fișierul de configurare nu poate fi scris + + + + The temporary configuration file required to start synergy can not be written. + Fișierul de configurare temporar necesar pentru a porni Synergy nu poate fi scris + + + + Configuration filename invalid + Arquivo de configuração inválido. + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Nu ati completat un fişier de configurare valabil pentru serverul synergy. Doriţi să răsfoiţi pentru un fişierul de configurare acum? + + + + Synergy server not found + Clientul Synergy nu poate fi găsit + + + + The executable for the synergy server does not exist. + Executabilul pentru clientul synergy nu există. + + + + Synergy terminated with an error + Synergy terminou com um erro + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy a terminat în mod neaşteptat cu un cod %1.<br><br>Vă rugăm să consultaţi jurnalul pentru detalii. + + + + &Stop + &Stop + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy pornește. + + + + Synergy is running. + Synergy rulează. + + + + Synergy is not running. + Synergy nu rulează. + + + + Unknown + Necunoscut + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Răsfoiţi pentru un fişierul de configurare synergy + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Salvează configurația ca... + + + + Save failed + Salvare eșuată + + + + Could not save configuration to file. + Nu sa putut salva configurația în fișier. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Nume de utilizator: + + + + &Server IP: + IP-ul Server-ului: + + + + + &Start + &Start + + + + Use existing configuration: + Folosește configurație existentă: + + + + &Configuration file: + Fișier de configurare: + + + + &Browse... + Răsfoiește... + + + + Configure interactively: + Configurare interactivă: + + + + &Configure Server... + Configurează Server... + + + + Ready + Gata + + + + Log + Log + + + + &Apply + Aplică + + + + IP addresses: + Adrese IP: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Despre Synergy... + + + + &Quit + &Ieșire + + + + Quit + Ieșire + + + + Run + Pornește + + + + S&top + Stop + + + + Stop + Stop + + + + S&how Status + Arată Statutul + + + + &Hide + Ascunde + + + + Hide + Ascunde + + + + &Show + Afişează + + + + Show + Afişează + + + + Save configuration &as... + Salvează configurația ca... + + + + Save the interactively generated server configuration to a file. + Salvaţi configuraţia generată interactiv a serverului într-un fişier. + + + + Settings + Setări + + + + Edit settings + Editează setările + + + + Run Wizard + Pornește Expertul + + + + NewScreenWidget + + + Unnamed + Anonim + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Configurare Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Configurații Synergy (*.sgc);;Toate Fișierele (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Configurații Synergy (*.conf);;Toate Fișierele (*.*) + + + + System tray is unavailable, quitting. + Bara de sistem nu este disponibilă, renunțați. + + + + ScreenSettingsDialog + + + Screen name is empty + Numele de ecran este gol. + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + Setări de ecran + + + + Screen &name: + Nume de ecran. + + + + A&liases + Aliasuri + + + + &Add + &Adaugă + + + + &Remove + &Elimină + + + + &Modifier keys + Modificator de taste + + + + &Shift: + Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Nici unul + + + + &Ctrl: + &Ctrl: + + + + Al&t: + &Alt: + + + + M&eta: + Meta: + + + + S&uper: + Super: + + + + &Dead corners + Colțuri moarte + + + + Top-left + Stânga-sus + + + + Top-right + Dreapta-sus + + + + Bottom-left + Stânga-jos + + + + Bottom-right + Dreapta-jos + + + + Corner Si&ze: + Mărimea colțurilor: + + + + &Fixes + Corecții + + + + Fix CAPS LOCK key + Corectrează tasta CAPS LOCK + + + + Fix NUM LOCK key + Corectrează tasta NUM LOCK + + + + Fix SCROLL LOCK key + Corectrează tasta SCROLL LOCK + + + + Fix XTest for Xinerama + Corectează XTest pentru Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Ecran: <b>%1</b></center><br>Dublu click pentru editare de setări<br>Glisați ecranul către coșul de gunoi pentru al elimina + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Configurările Serverului + + + + Screens and links + Ecrane și legături + + + + Drag a screen from the grid to the trashcan to remove it. + Glisați un ecran de pe grilă către coșul de gunoi pentru al elimina. + + + + Configure the layout of your synergy server configuration. + Configurați aspectul serverului vostru synergy. + + + + Drag this button to the grid to add a new screen. + Glisați acest buton pe grilă pentru a adăuga un nou ecran. + + + + 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. + Glisați ecrane noi pe grilă sau mută cele existente. +Glisați un ecran către coșul de gunoi pentru al elimina. +Click dublu pe un ecran pentru ai edita setările. + + + + Hotkeys + Taste rapide + + + + &Hotkeys + &Taste rapide + + + + &New + Nou + + + + &Edit + &Editează + + + + &Remove + &Elimină + + + + A&ctions + Acțiuni + + + + Ne&w + Nou + + + + E&dit + Editează + + + + Re&move + Elimină + + + + Advanced server settings + Setari avansate server + + + + &Switch + Comută + + + + Switch &after waiting + Comută după o așteptare de + + + + + + ms + ms + + + + Switch on double &tap within + Schimbă la atingere dubla în interiorul + + + + &Options + Opțiuni + + + + &Check clients every + Verifică clienți fiecare + + + + Use &relative mouse moves + Folosește mișcări relative ale mouse-ului + + + + S&ynchronize screen savers + Sincronizare protector de ecran + + + + Don't take &foreground window on Windows servers + Nu luaţi fereastre de prim-plan pe servere Windows + + + + Ignore auto config clients + + + + + &Dead corners + Colțuri moarte + + + + To&p-left + Stânga-sus + + + + Top-rig&ht + Dreapta-sus + + + + &Bottom-left + Stânga-jos + + + + Bottom-ri&ght + Dreapta-jos + + + + Cor&ner Size: + Mărime colțuri + + + + SettingsDialog + + + Save log file to... + Salvează fișier jurnal pentru ... + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + Setări + + + + Sc&reen name: + Nume ecran: + + + + P&ort: + Port: + + + + &Interface: + Interfață: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Logging + + + + &Logging level: + Nivel logging + + + + Log to file: + Log în fișier + + + + Browse... + Răsfoiește: + + + + Error + Eroare + + + + &Language: + Limba: + + + + &Miscellaneous + + + + + Warning + Avertisment + + + + Note + Notă + + + + Info + Informação + + + + Debug + Depanare + + + + Debug1 + Depanare1 + + + + Debug2 + Depanare2 + + + + SetupWizard + + + Setup Synergy + Configurare Synergy + + + + Please select an option. + Te rog selectează o opțiune. + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + Configurare Synergy + + + + Welcome + Bine aţi venit + + + + Thanks for installing Synergy! + Va multumim ca a-ti instalat Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy vă permite să partajaţi cu uşurinţă mouse-ul şi tastatura între mai multe computere de pe birou, si este gratuit şi open source. Doar mutaţi mouse-ul de pe marginea ecranului pe un calculator pe altul. Puteţi chiar partaja toate clipboarduri tale. Tot ce trebuie este o conexiune la reţea. Sinergia este cross-platform (funcţionează pe Windows, Mac OS X şi Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Server sau Client? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Necunoscut + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_ru.qm b/src/gui/res/lang/gui_ru.qm new file mode 100644 index 0000000000000000000000000000000000000000..8ab5f1a60e574911198f3d5fbf04e4cd5ec9ca10 GIT binary patch literal 22329 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 qr-a&}y5hy1b$@87)Lz^bUi*LKc~D#c literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_ru.ts b/src/gui/res/lang/gui_ru.ts new file mode 100644 index 00000000..24213570 --- /dev/null +++ b/src/gui/res/lang/gui_ru.ts @@ -0,0 +1,1414 @@ + + + AboutDialogBase + + + About Synergy + О программе + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Неизвестно + + + + Version: + Версия: + + + + &Ok + Ок + + + + ActionDialogBase + + + Configure Action + Конфигурация действия + + + + Choose the action to perform + Выберите действие для выполнения + + + + Press a hotkey + Нажмите горячую клавишу + + + + Release a hotkey + Отпустите горячую клавишу + + + + Press and release a hotkey + Нажмите и отпустите горячую клавишу + + + + only on these screens + Только на этих экранах + + + + Switch to screen + Переключиться на экран + + + + Switch in direction + Переключиться в направлении + + + + left + влево + + + + right + вправо + + + + up + Вверх + + + + down + Вниз + + + + Lock cursor to screen + Закрепить курсор на экран + + + + toggle + Переключить + + + + on + Включить + + + + off + выкл. + + + + This action is performed when + Это действие выполняется когда + + + + the hotkey is pressed + горячая клавиша нажата + + + + the hotkey is released + Отпущена горячая клавиша + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Горячая клавиша + + + + Enter the specification for the hotkey: + Введите описание горячей клавиши + + + + MainWindow + + + &Start + Старт + + + + &File + &Файл + + + + &Edit + &Редактировать + + + + &Window + &Окно + + + + &Help + &Помощь + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p> Ваша версия Synergy устарела. Версия <b>%1</b> доступна для <a href="%2">скачивания</a>.</p> + + + + Program can not be started + Программа не может быть запущена + + + + 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. + Программа/файл <br><br>%1<br><br> Не может быть запущена, но она исправна. Проверьте - достаточно ли у вас прав для запуска. + + + + Synergy client not found + Клиент Synergy не найден + + + + The executable for the synergy client does not exist. + Исполняемый файл для клиента Synergy не найден + + + + Hostname is empty + Имя хоста пусто + + + + Please fill in a hostname for the synergy client to connect to. + Пожалуйста заполните имя хоста в клиенте Synergy для соединения. + + + + Cannot write configuration file + Невозможно изменить конфигурационный файл + + + + The temporary configuration file required to start synergy can not be written. + Временный файл конфигурации, использующийся для запуска Synergy, заблокирован для записи. + + + + Configuration filename invalid + Имя файла конфигурации неправильное + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Вы не указали правильный файл конфигурации сервера Synergy. Желаете указать его сейчас? + + + + Synergy server not found + Сервер Synergy не найден + + + + The executable for the synergy server does not exist. + Не найден выполняемый файл для сервера Synergy. + + + + Synergy terminated with an error + Synergy завершилась с ошибкой + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy завершилась неожиданно с кодом выхода %1.<br><br>Пожалуйста просмотрите log-файл для деталей. + + + + &Stop + Стоп + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy запускается. + + + + Synergy is running. + Synergy работает. + + + + Synergy is not running. + Synergy остановлена. + + + + Unknown + Неизвестно + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Указать файл конфигурации Synergy + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Сохранить конфигурацию как... + + + + Save failed + Сохранение невозможно + + + + Could not save configuration to file. + Не возможно сохранить файл конфигурации. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Имя экрана: + + + + &Server IP: + IP сервера: + + + + + &Start + Старт + + + + Use existing configuration: + Использовать существующую конфигурацию: + + + + &Configuration file: + Файл конфигурации: + + + + &Browse... + Обзор... + + + + Configure interactively: + Автоматическая конфигурация: + + + + &Configure Server... + Настроить сервер... + + + + Ready + Готово + + + + Log + Журнал + + + + &Apply + &Применить + + + + IP addresses: + IP адреса: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + О Synergy + + + + &Quit + &Выход + + + + Quit + Выход + + + + Run + Запустить + + + + S&top + Остановить + + + + Stop + Остановить + + + + S&how Status + Показать статус + + + + &Hide + Скрыть + + + + Hide + Скрыть + + + + &Show + Показать + + + + Show + Показать + + + + Save configuration &as... + Сохранить конфигурацию как.. + + + + Save the interactively generated server configuration to a file. + Сохранить автоматически генерированную конфигурацию в файл. + + + + Settings + Настройки + + + + Edit settings + Изменить настройки + + + + Run Wizard + Запустить Мастер + + + + NewScreenWidget + + + Unnamed + Без названия + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Настроить Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Конфигурация Synergy (*.sgc);;Все файлы (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Конфигурация Synergy (*.conf);;Все файлы (*.*) + + + + System tray is unavailable, quitting. + Системный трэй не доступен, завершение программы. + + + + ScreenSettingsDialog + + + Screen name is empty + Имя экрана пустое + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Название не может быть пустым. Пожалуйста, либо заполнить имя или отменить диалог. + + + + Screen name matches alias + Имя экрана: + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Название экрана не может быть похожим, на Псевдоним. Пожалуйста удалите Псевдоним или поменяйте Имя экрана + + + + ScreenSettingsDialogBase + + + Screen Settings + Настройки экрана + + + + Screen &name: + Имя экрана: + + + + A&liases + Псевдонимы + + + + &Add + Добавить + + + + &Remove + Удалить + + + + &Modifier keys + Клавиши-модификаторы + + + + &Shift: + Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Нет + + + + &Ctrl: + Ctrl: + + + + Al&t: + Alt: + + + + M&eta: + Meta: + + + + S&uper: + Super: + + + + &Dead corners + Мертвые углы + + + + Top-left + Верхний левый + + + + Top-right + Верхний правый + + + + Bottom-left + Нижний левый + + + + Bottom-right + Нижний правий + + + + Corner Si&ze: + Размер угла: + + + + &Fixes + Фиксирование + + + + Fix CAPS LOCK key + Фиксировать CAPS LOCK + + + + Fix NUM LOCK key + Фиксировать NUM LOCK + + + + Fix SCROLL LOCK key + Фиксировать SCROLL LOCK + + + + Fix XTest for Xinerama + Фиксировать XTest для Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Экран: <b>%1</b></center><br>Двойной щелчок для редактирования конфигурации<br>Перетяните экран в корзину для удаления + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Конфигурация сервера + + + + Screens and links + Экраны и связи + + + + Drag a screen from the grid to the trashcan to remove it. + Перетяните экран с сетки в корзину чтобы удалить его. + + + + Configure the layout of your synergy server configuration. + Настроить расположение конфигурации Вашего сервера Synergy. + + + + Drag this button to the grid to add a new screen. + Перетяните эту кнопку на сетку для добавления нового экрана. + + + + 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. + Перетяните новый экран на сетку или передвиньте существующие. +Перетяните экран в корзину чтобы удалить его. +Двойной щелчок на экране для его конфигурации. + + + + Hotkeys + Горячие клавиши + + + + &Hotkeys + &Горячие клавиши + + + + &New + &Новый + + + + &Edit + &Редактировать + + + + &Remove + Удалить + + + + A&ctions + Де&йствия + + + + Ne&w + Но&вый + + + + E&dit + Ре&дактировать + + + + Re&move + Уда&лить + + + + Advanced server settings + Дополнительные настройки сервера + + + + &Switch + Переключится + + + + Switch &after waiting + Переключится после ожидания + + + + + + ms + мсек + + + + Switch on double &tap within + Переключится по двойному нажатию в течении + + + + &Options + &Опции + + + + &Check clients every + Проверять клиентов ка&ждые + + + + Use &relative mouse moves + Использовать &родные настройки курсора + + + + S&ynchronize screen savers + С&инхронизировать заставки + + + + Don't take &foreground window on Windows servers + Не держать окно сервера поверх всех (для Windows) + + + + Ignore auto config clients + + + + + &Dead corners + Мертвые углы + + + + To&p-left + Верхний &левый + + + + Top-rig&ht + Верхний &правый + + + + &Bottom-left + &Нижний левый + + + + Bottom-ri&ght + Нижний правы&й + + + + Cor&ner Size: + Раз&мер угла: + + + + SettingsDialog + + + Save log file to... + Сохранить log-файл в... + + + + Elevate Synergy + Повысить привилегии приложения (для UAC) + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Вы уверены что хотите повышать Synergy? +Это позволит Synergy взаимодействовать с повышающим процессом и UAC диалогом, но может вызвать проблемы с неповышенными процессами. Повышайте Synregy только если это действительно необходимо. + + + + SettingsDialogBase + + + Settings + Настройки + + + + Sc&reen name: + Имя эк&рана: + + + + P&ort: + П&орт: + + + + &Interface: + Интер&фейс: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Журнал + + + + &Logging level: + Уровень записи в журна?л: + + + + Log to file: + Записывать журнал в файл: + + + + Browse... + Обзор... + + + + Error + Ошибка + + + + &Language: + Язык: + + + + &Miscellaneous + &Разное + + + + Warning + Предупреждение + + + + Note + Заметка + + + + Info + Информация + + + + Debug + Отладка + + + + Debug1 + Отладка1 + + + + Debug2 + Отладка2 + + + + SetupWizard + + + Setup Synergy + Настроить Synergy + + + + Please select an option. + Пожалуйста, выберите опцию. + + + + Please enter your email address and password. + Пожалуйста введите ваш адрес электронной почты и пароль + + + + SetupWizardBase + + + Setup Synergy + Настроить Synergy + + + + Welcome + Добро пожаловать + + + + Thanks for installing Synergy! + Спасибо за установку Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy позволяет вам просто и легко работать с одним набором клавиатуры и мышки между несколькими компьютерами. Это бесплатное приложение с открытым исходным кодом. Просто подведите курсор за край экрана. Вы также можете объединять буферы обмена. Все что вам нужно это сетевое подключение. Synergy это кросс-платформенное приложение, которое работает на Windows, Mac OS X и Linux. + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Сервер или Клиент? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Неизвестно + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Неудачная попытка, email или пароль введены с ошибкой + + + + Login failed, an error occurred. + +%1 + Войти не удалось, произошла ошибка. + +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Войти не удалось, произошла ошибка. + +Ответ сервера: + +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_si.qm b/src/gui/res/lang/gui_si.qm new file mode 100644 index 0000000000000000000000000000000000000000..17ba794e3974bda49c2552c5e84c0090b42d8707 GIT binary patch literal 677 zcmaJ;O-lk%6us)G5nTKk_b~cw~Qm<8SH&C1~OaWhmiIJJB{) z@sd(iC|wz!32owmXEw6v*ruar)wIr4ZVPplsX3uLf*Ep1|GaMTWs6gocE%W<<0IKL zXpB7R$~-GYTeAyN6zPh*%ZU@cMVpWW@6e_Gphp@`ajs`OBcltfprswgXs%&0(Vja* z4?=Q^P?zh|`G9VZLA0Y#H710`&753gxPyH`-yR^+`_w&7${f$wQXcz7xI?(#=lcY; C_^77< literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_si.ts b/src/gui/res/lang/gui_si.ts new file mode 100644 index 00000000..cad8e119 --- /dev/null +++ b/src/gui/res/lang/gui_si.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + Synergy ගැන විස්තර + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + + + + + &Ok + + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + වම + + + + right + + + + + up + උඩ + + + + down + යට + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + වැඩසටහන ඇරඹිය නොහැක + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + පෙන්වන්න + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + නිර්නාමික + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + තිර සැකසුම + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + විස්තර + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_sk-SK.qm b/src/gui/res/lang/gui_sk-SK.qm new file mode 100644 index 0000000000000000000000000000000000000000..b2abe68da1a6d9b5bce61e9ad5a2bf1270489550 GIT binary patch literal 1187 zcmZ8hJ#W-N5S3eMIt5l3lNA1Aq6G6;v_Cmv1iX+HumjW-t}F41^$?7_#wah_4m8C-|pZ0^7{R!A3H>J zldi6Q$4V=Ark}AqwnVG#73^-)E;$;Jr=$w85g9t90%Mrwlu*wDq`r9y@YIWHQe{X0I}cYi_>Ztx z1v#)MNJGyqDpw5)-JXUCqr6k#Rd+h+tb?gUUPzEs**^V2$^uu~lc#AOy;*W}IqNBq z+FLB&l}XPGM;R2=$lfIeWqxti>oq+jyHpIkrZ9wa^`n!|)76Bm`buZ|4pmoyE2MqI zUD+>xH;Z?Z0qxNlXd4_QJjAn)QV6e zyO;VJI;KtPo_^+?SN+yWJ#M*_7`XKfiwU-DIUJf=v{3WJH$m9AoC|4(-qbk{CC)?~ zPnt5?sua%rq-vtnfxTOxatXy&LfQBr@UvPL9K8y-K6o?f^7AG{@J}yH@}m*QLt)9s z!hQtCbAB*|3{+0%L=S$C*1F3tAw4sWWs0+fcvF@NPad+;R!Ms3@)Ok6sT0ZB1~%Bm znXe1Da89ylz3cL6FlfkXAHsH3nmF?Hgg3M|868-c`&roHeUovo&j-oxo^{RfW>-c#z)xgdXTKaSR2P?ZD*#H0l literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_sk-SK.ts b/src/gui/res/lang/gui_sk-SK.ts new file mode 100644 index 00000000..aa3fe7a2 --- /dev/null +++ b/src/gui/res/lang/gui_sk-SK.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + + + + + &Ok + + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + Informácie + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy 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. Synergy je cross-platformové (práca na Windows, Mac OS X a Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_sl-SI.qm b/src/gui/res/lang/gui_sl-SI.qm new file mode 100644 index 0000000000000000000000000000000000000000..4c5ae7914d5dc5073898df9d23324b91ca5f0e08 GIT binary patch literal 1709 zcma)6J&zPe5UqvtfzaJq0?QB(G(xgLJ~n_1IRT##U+0xrafd$wdS`0)nwjYyb@%MD z8~7(Ub7GqSQUX#EXLs?TJ47&3)74e4UcKt+FJIpG22-i`uAycMhi z*BWn+m_hPY&`VQ+J`_k;yd!K4kE1cxqNMCqc<0GtEU07PF<1i$6&plqXfN?a^2=HQ zK?7alBzlIYi|^YBagZ3!P^(NBoT|4R{?A*Oi`dVTVh2r2lqfOdAEfIvX~EdRWMxLuy@!KL92$P;aa^DcHR zx^Xl?)FwRJ2}2a=WAy+}JJY+#HuRV-Qg`u-biSS6B&y^X)YLVKbui^rg+1+A99~tf z39PiuRl(DN(>_-NjuU39s-}#lE?H%+s+)-0K{?xIO=>8hfv>D-++3it>Q8ETJpLqB|Y_! zm8MSALswmcUplqSxiUd%e8q|L1-h`7vxpn6ySQQ{AoDJSOLeK^(D_PTkl55{dx?cj uwXHMN>#GN;-@C>(k1ux99f_N(sdvo`qAl + + AboutDialogBase + + + About Synergy + O Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Neznano + + + + Version: + Različica: + + + + &Ok + V redu + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + Neznano + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + Informacije + + + + Debug + + + + + Debug1 + + + + + Debug2 + Debug2 + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy omogoča preprosto souporabo miške in tipkovnice med mnogimi računalniki na vaši mizi. Je brezplačen in prostokodni program. Miškin kazalec lahko preprosto premaknemo preko roba ekrana enega računalnika na ekran drugega. Omogoča tudi souporabo odložišča. Vse kar potrebujete je mrežna povezava. Synergy podpira mnogo operacijskih sistemov (npr. Windows, Mac OS X in Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Neznano + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_sq-AL.qm b/src/gui/res/lang/gui_sq-AL.qm new file mode 100644 index 0000000000000000000000000000000000000000..2de4bb7437fa1cd98e84e62a8dbbf256544734a3 GIT binary patch literal 20251 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
<*cPRB`w{I$W>-^~>; z_Ndj9ha*^ze0(17H2~By8I!9fg|G&cyn;R^$}q?YB@n_l2O%lSqAa}>VHi(p6p&J2 zu{uAYj1^a01B)i)uGV_OGS{nQ2RTbi+P{-uYEeCNs5H6`GNTJ&_hm^i(X-hr%3iB9!^81%u=H)(`GGqVuKu2@UC@@eekIA)3GUxOQVpRu?CET zWt>pUYLOhHDB*8mNLXm0AC6UD)Q|l6F_Wtr8dVL&!~+I-%Na0k0Yc@$6wpVh!aRVV zUo^(S&y-}{9WdB?MnEeuAv&2@ckyOy2Y;?cJ$Q@riUA+U;)aZ4yY9v* + + AboutDialogBase + + + About Synergy + Rreth Sunergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + E Panjohur + + + + Version: + Versioni: + + + + &Ok + &Ok + + + + ActionDialogBase + + + Configure Action + Veprim Konfigurimi + + + + Choose the action to perform + Zgjidh veprimin qe do te kryesh + + + + Press a hotkey + Shtypni nje tast shpejtesie + + + + Release a hotkey + Leshojeni tastin e shpejtesise + + + + Press and release a hotkey + Shtypni dhe leshojeni tastin e shpejtesise + + + + only on these screens + Vetem ne keto ekrane + + + + Switch to screen + Kalo ne ekran + + + + Switch in direction + Kalo ne adrese + + + + left + majtas + + + + right + djathtas + + + + up + lart + + + + down + poshte + + + + Lock cursor to screen + Blloko kursorin ne ekran + + + + toggle + ndrysho gjendje + + + + on + aktiv + + + + off + jo aktiv + + + + This action is performed when + Ky veprim merret kur + + + + the hotkey is pressed + tasti i shpejtesise eshte i shtypur + + + + the hotkey is released + tasti i shpejtesise eshte leshuar + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Tast shpejtesie + + + + Enter the specification for the hotkey: + Vendos specifikimin per tastin e shpejtesise: + + + + MainWindow + + + &Start + &Fillo + + + + &File + &Skedar + + + + &Edit + &Ndrysho + + + + &Window + &Dritare + + + + &Help + &Ndihme + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + Programi nuk mund te filloje + + + + 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. + Skedari i ekzekutueshem <br><br>%1<br><br>nuk startoi ne menyre te suksesshme, meqe ai nuk egziston. Kontrolloni nese keni te drejta te mjaftueshme per te ekzekutuar kete program. + + + + Synergy client not found + Klienti nuk u gjet + + + + The executable for the synergy client does not exist. + Skedari i ekzekutueshem per serverin e synergy nuk egziston. + + + + Hostname is empty + Emri i hostit eshte bosh + + + + Please fill in a hostname for the synergy client to connect to. + Ju lutem vendosni nje host te klientit qe deshironi te lidheni. + + + + Cannot write configuration file + Nuk mund te shkruaje skedarin e konfiguracionit + + + + The temporary configuration file required to start synergy can not be written. + Skedari i perkohshem qe eshte i nevojshem per te startuar Synergy nuk mund te shkruhet. + + + + Configuration filename invalid + Emri i skedarit te konfiguracionit i pa sakte + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Nuk keni krijuar nje skedar konfiguracioni per serverin synergu. Deshironi te kerkoni per nje skedar konfiguracioni tani? + + + + Synergy server not found + Serveri Synergy nuk u gjet + + + + The executable for the synergy server does not exist. + Skedari i ekzekutueshem per serverin e synergy nuk egziston. + + + + Synergy terminated with an error + Synergy ndaloi nga nje gabim + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy ndaloi papritur me nje kod gabimi %1.<br><br> Ju lutem shikoni detajet e te dhenave. + + + + &Stop + &Ndalo + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy po fillon. + + + + Synergy is running. + + + + + Synergy is not running. + Synergy nuk po ekzekutohet. + + + + Unknown + E Panjohur + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Kerko per nje skedarin e konfigurimit te Synergy + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Ruaj konfiguracionin si... + + + + Save failed + Ruajtja deshtoi + + + + Could not save configuration to file. + Nuk mund te ruaje skedarin e konfiguracionit. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Emri i ekranit: + + + + &Server IP: + &IP e Serverit: + + + + + &Start + &Fillo + + + + Use existing configuration: + Perdorni konfiguracionin aktual: + + + + &Configuration file: + Skedari i konfiguracionit: + + + + &Browse... + Shfleto... + + + + Configure interactively: + Konfiguracion Interaktiv: + + + + &Configure Server... + Konfiguro Serverin... + + + + Ready + Gati + + + + Log + Te dhena + + + + &Apply + &Apliko + + + + IP addresses: + IP adresa: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Rreth Synergy... + + + + &Quit + &Dil + + + + Quit + Dil + + + + Run + Ekzekuto + + + + S&top + Ndalo + + + + Stop + Ndalo + + + + S&how Status + Shfaq Statusin + + + + &Hide + &Fshih + + + + Hide + Fshih + + + + &Show + &Shfaq + + + + Show + Shfaq + + + + Save configuration &as... + Rruaj konfiguracionin si... + + + + Save the interactively generated server configuration to a file. + Ruaj konfiguracionit interaktiv te serverit ne nje skedar. + + + + Settings + Konfigurime + + + + Edit settings + Ndrysho konfigurimet + + + + Run Wizard + Ekzekuto Magjistarin + + + + NewScreenWidget + + + Unnamed + Paemer + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Vendos Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Konfiguracioni i Synergy (*.sgc);;Te gjithe (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Konfiguracioni i Synergy (*.conf);;Te gjithe (*.*) + + + + System tray is unavailable, quitting. + Ikona e sistemin nuk eshte aktive, duke e mbyllur. + + + + ScreenSettingsDialog + + + Screen name is empty + Emri i ekranit eshte bosh + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + Konfigurimet e Ekranit + + + + Screen &name: + Emri i ekranit: + + + + A&liases + Emertimet + + + + &Add + Shto + + + + &Remove + Hiq + + + + &Modifier keys + Celesat modifikues + + + + &Shift: + Shift + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Mbi + + + + + + + + Super + Superior + + + + + + + + None + Asnje + + + + &Ctrl: + Ctrl: + + + + Al&t: + Alt: + + + + M&eta: + Mbi: + + + + S&uper: + Superior: + + + + &Dead corners + Kende te vdekura + + + + Top-left + Lart-Majtas + + + + Top-right + Lart-Djathtas + + + + Bottom-left + Majtas-poshte + + + + Bottom-right + Djtathtas-poshte + + + + Corner Si&ze: + Madhesia e kendit: + + + + &Fixes + Rregullime + + + + Fix CAPS LOCK key + Rregullo tastin CAPS LOCK + + + + Fix NUM LOCK key + Rregullo tastin NUM LOCK + + + + Fix SCROLL LOCK key + Rregullo tastin SCROLL LOCK + + + + Fix XTest for Xinerama + Rregullo XTest per Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Ekran: <b>%1</b></center><br>Dopjo klik per te ndryshuar konfigurimet<br>Zhvendos ekranit ne kosh per ta fshire + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Konfiguracioni i Serverit + + + + Screens and links + Ekranet dhe lidhjet + + + + Drag a screen from the grid to the trashcan to remove it. + Kalo ekranit nga rrjeta ne kosh per ta fshire + + + + Configure the layout of your synergy server configuration. + Konfiguroni paraqitjen e konfiguraciont te serverit. + + + + Drag this button to the grid to add a new screen. + Kaloni kete buton ne rrjet per te shtuar nje ekran te ri. + + + + 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. + Kaloni ekranet e reja ne rrjet ose levizni ato egzistuesit rreth tij. +Zhvendos ekranit ne kosh per ta fshire +Dopjo klik mbi nje ekran per te ndryshuar konfigurimet e tij. + + + + Hotkeys + Tastet e shpejtesise + + + + &Hotkeys + Tastet e shpejtesise + + + + &New + I Ri + + + + &Edit + &Ndrysho + + + + &Remove + Hiq + + + + A&ctions + Veprim + + + + Ne&w + I ri + + + + E&dit + Modifiko + + + + Re&move + &Hiq + + + + Advanced server settings + Konfigurime te avancuara te serverit + + + + &Switch + &Ndrysho + + + + Switch &after waiting + Ndrysho pasi te presesh + + + + + + ms + ms + + + + Switch on double &tap within + Kaloni ne lidhje te dyfishte + + + + &Options + &Mundesi + + + + &Check clients every + &Kontrollo klientet cdo + + + + Use &relative mouse moves + Beni levizjet perkatese te mausit + + + + S&ynchronize screen savers + Sinkronizo mbrojtesit e ekranit + + + + Don't take &foreground window on Windows servers + Mos i jepni prioritet dritareve ne serverat me SO Windows + + + + Ignore auto config clients + + + + + &Dead corners + Kende te vdekura + + + + To&p-left + Lart-majtas + + + + Top-rig&ht + Lart-djathtas + + + + &Bottom-left + Majtas-poshte + + + + Bottom-ri&ght + Djathtas-poshte + + + + Cor&ner Size: + Madhesia e Kendit: + + + + SettingsDialog + + + Save log file to... + Rruaj dokumentin e te dhenave ne... + + + + Elevate Synergy + Permireso Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Jeni te sigurte qe doni te permiresoni Synergy? +Kjo i jep mundesi Synergy te bashkeveproje me procese te larta dhe UAC, por ju mund te shkaktoni probleme me proceset e uleta. Permiresoni Synergy vetem nese ju nevojitet. + + + + SettingsDialogBase + + + Settings + Konfigurime + + + + Sc&reen name: + Emri i ekranit: + + + + P&ort: + Porta: + + + + &Interface: + &Nderfaqja + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Duke hyre + + + + &Logging level: + &Niveli i hyrjes + + + + Log to file: + Hyr ne dokument: + + + + Browse... + Shfleto... + + + + Error + Gabim + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + Lajmerim + + + + Note + Shenim + + + + Info + Informacion + + + + Debug + Rregullo + + + + Debug1 + Rregullo1 + + + + Debug2 + Rregullo2 + + + + SetupWizard + + + Setup Synergy + Vendos Synergy + + + + Please select an option. + Ju lutem zgjidhni nje opsion. + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + Vendos Synergy + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Sunergy ju mundeson lehtesisht te ndani mausin dhe tastieren me disa komopjutera te tjere ne tavolinen tuaj, eshte FALAS dhe me KOD TE HAPUR. Vetem levizni mausin nga kompjuteri juaj ne nje kompjuter tjeter. Madje mund te beni ndani te gjitha ekranet. Ju duhet vem nje lidhje interneti. Sunergy eshte nje platformi e gjere (punon ne Windows, MAC OS X dhe Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Server apo Klient? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + E Panjohur + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_sr.qm b/src/gui/res/lang/gui_sr.qm new file mode 100644 index 0000000000000000000000000000000000000000..ab1fce3d1b71c60df9dbb07ea358c33ec8fe1ba9 GIT binary patch literal 117 zcmcE7ks@*G{hX<16=n7(EZlq7iGhKEgMpRhJdkF{1Y$>KAR)#g!D7qe!eYnbz+%H< zz~aVY!4kn@$^lZu2E;6$d1?9VK!#9oYDr0EUV5=hW@1i$x>I6tDq{ywoL7+XuO|0@ L5hj+uI$Xj4SQr{< literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_sr.ts b/src/gui/res/lang/gui_sr.ts new file mode 100644 index 00000000..8cb55ed3 --- /dev/null +++ b/src/gui/res/lang/gui_sr.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + + + + + &Ok + + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + Информације + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_sv.qm b/src/gui/res/lang/gui_sv.qm new file mode 100644 index 0000000000000000000000000000000000000000..c5fb93b295a534daa03f22478f8a7cb994de72f4 GIT binary patch literal 22156 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 Tdc(<;QqF4m3n+hUOUwTODxC&` literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_sv.ts b/src/gui/res/lang/gui_sv.ts new file mode 100644 index 00000000..eccf78cb --- /dev/null +++ b/src/gui/res/lang/gui_sv.ts @@ -0,0 +1,1411 @@ + + + AboutDialogBase + + + About Synergy + Om Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Okänd + + + + Version: + Version: + + + + &Ok + &Ok + + + + ActionDialogBase + + + Configure Action + Konfigurera + + + + Choose the action to perform + Välj funktion som skall utföras + + + + Press a hotkey + Tryck ned en snabbtangent + + + + Release a hotkey + Släpp en snabbtangent + + + + Press and release a hotkey + Tryck ned och släpp en snabbtangent + + + + only on these screens + endast på dessa skärmar + + + + Switch to screen + Växla till skärm + + + + Switch in direction + Växla i riktning + + + + left + vänster + + + + right + höger + + + + up + upp + + + + down + ner + + + + Lock cursor to screen + Lås muspekaren till skärm + + + + toggle + skifta + + + + on + + + + + off + Av + + + + This action is performed when + Detta utförs när + + + + the hotkey is pressed + snabbtangenten trycks in + + + + the hotkey is released + snabbtangenten släpps + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Snabbtangent + + + + Enter the specification for the hotkey: + Beskriv snabbtangenten: + + + + MainWindow + + + &Start + Start + + + + &File + Arkiv + + + + &Edit + &Redigera + + + + &Window + Fönster + + + + &Help + Hjälp + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Du kör inte den senaste versionen av Synergy. Version <b>%1</b> finns tillgänglig för <a href="%2">nedladdning</a>.</p> + + + + Program can not be started + Programmet kan inte startas + + + + 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. + Programmet<br><br>%1<br><br>kunde inte startas, men det finns. Var vänlig och kontrollera att du har tillräckliga rättigheter för att köra detta program. + + + + Synergy client not found + Synergyklienten hittades inte + + + + The executable for the synergy client does not exist. + Den exekverbara filen för Synergyklienten existerar inte. + + + + Hostname is empty + Värddatornamnet är inte satt + + + + Please fill in a hostname for the synergy client to connect to. + Fyll i det värddatornamn som Synergyklienten skall ansluta till. + + + + Cannot write configuration file + Kan inte spara konfigurationsfilen + + + + The temporary configuration file required to start synergy can not be written. + Den tillfälliga konfigurationsfilen som krävs för att kunna starta Synergy kan inte skapas. + + + + Configuration filename invalid + Namnet på konfigurationsfilen är inte giltigt + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Du har inte fyllt i en giltig konfigurationsfil för Synergyservern. Vill du bläddra efter konfigurationsfilen nu? + + + + Synergy server not found + Synergyservern hittades inte + + + + The executable for the synergy server does not exist. + Den körbara filen för Synergyservern existerar inte. + + + + Synergy terminated with an error + Synergy avslutades med ett fel + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergyterminalen avslutades oväntat med avbrottskoden %1.<br><br>Kontrollera loggdatan för detaljer. + + + + &Stop + Stopp + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy startas. + + + + Synergy is running. + Synergy körs. + + + + Synergy is not running. + Synergy körs inte. + + + + Unknown + Okänd + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Bläddra efter Synergys konfigurationsfil. + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Spara konfiguration som... + + + + Save failed + Sparades inte + + + + Could not save configuration to file. + Kunde inte spara konfiguration till fil. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Skärmnamn: + + + + &Server IP: + Serverns IP: + + + + + &Start + Start + + + + Use existing configuration: + Använd befintlig konfiguration: + + + + &Configuration file: + Konfigurationsfil: + + + + &Browse... + Bläddra... + + + + Configure interactively: + Konfigurera interaktivt: + + + + &Configure Server... + Konfigurera server... + + + + Ready + Klar + + + + Log + Logg + + + + &Apply + Verkställ + + + + IP addresses: + IP-adresser: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Om Synergy... + + + + &Quit + Avsluta + + + + Quit + Avsluta + + + + Run + Kör + + + + S&top + S&topp + + + + Stop + Stopp + + + + S&how Status + Visa Status + + + + &Hide + Dölj + + + + Hide + Dölj + + + + &Show + Visa + + + + Show + Visa + + + + Save configuration &as... + Spara konfiguration som... + + + + Save the interactively generated server configuration to a file. + Spara den interaktivt genererade serverkonfigurationen till en fil. + + + + Settings + Inställningar + + + + Edit settings + Ändra inställningar + + + + Run Wizard + Kör guiden + + + + NewScreenWidget + + + Unnamed + Namnlös + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Ställ in Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy-konfigurationer (*.sgc);;Alla filer (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy-konfigurationer (*.conf);;Alla filer (*.*) + + + + System tray is unavailable, quitting. + Systemfältet otillgängligt, avslutar. + + + + ScreenSettingsDialog + + + Screen name is empty + Skärmnamnet är tomt + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Skärmnamnet kan inte vara tomt. Fyll i ett namn eller avbryt dialogrutan. + + + + Screen name matches alias + Skärmnamn matchar alias + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Skärmnamnet kan inte vara samma som en alias. Var vänlig att antingen ta bort alias eller ändra skärmnamnet. + + + + ScreenSettingsDialogBase + + + Screen Settings + Skärminställningar + + + + Screen &name: + Skärmnamn: + + + + A&liases + Alias + + + + &Add + Lägg till + + + + &Remove + Ta bort + + + + &Modifier keys + Modifieringstangenter + + + + &Shift: + Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Ingen + + + + &Ctrl: + &Ctrl: + + + + Al&t: + Alt: + + + + M&eta: + Meta: + + + + S&uper: + Super: + + + + &Dead corners + Döda hörn + + + + Top-left + Över vänster + + + + Top-right + Över höger + + + + Bottom-left + Nedre vänstra hörnet + + + + Bottom-right + Nedre höger + + + + Corner Si&ze: + Hörnets storlek: + + + + &Fixes + Korrigeringar + + + + Fix CAPS LOCK key + Korrigera CAPS LOCK + + + + Fix NUM LOCK key + Korrigera NUM LOCK + + + + Fix SCROLL LOCK key + Korrigera SCROLL LOCK + + + + Fix XTest for Xinerama + Korrigera XTest för Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Skärm:<b>%1</b></center><br>Dubbelklicka för att ändra inställningar<br>Dra skärmen till papperskorgen för att ta bort den + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Serverkonfiguration + + + + Screens and links + Skärmar och länkar + + + + Drag a screen from the grid to the trashcan to remove it. + Dra en skärm från rutnätet till papperskorgen för att ta bort den. + + + + Configure the layout of your synergy server configuration. + Konfigurera layouten på din Synergy-konfiguration. + + + + Drag this button to the grid to add a new screen. + Dra den här knappen till rutnätet för att lägga till en ny skärm. + + + + 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. + Dra nya skärmar till rutnätet eller flytta runt existerande. +Dra en skärm till papperskorgen för att ta bort den. +Dubbelklicka på en skärm för att ändra dess inställningar. + + + + Hotkeys + Snabbtangenter + + + + &Hotkeys + Snabbtangenter + + + + &New + Ny + + + + &Edit + &Redigera + + + + &Remove + Ta bort + + + + A&ctions + Åtgärder + + + + Ne&w + Ny + + + + E&dit + Ändra + + + + Re&move + Ta bort + + + + Advanced server settings + Avancerade serverinställningar + + + + &Switch + Växla + + + + Switch &after waiting + Växla efter väntan + + + + + + ms + ms + + + + Switch on double &tap within + Växla eller dubbelklicka inuti + + + + &Options + Alternativ + + + + &Check clients every + Kontrollera klienter varje + + + + Use &relative mouse moves + Använd relativa musrörelser + + + + S&ynchronize screen savers + Synkronisera skärmsläckare + + + + Don't take &foreground window on Windows servers + Använd inte förgrundsfönster på Windowsservrar + + + + Ignore auto config clients + + + + + &Dead corners + Döda hörn + + + + To&p-left + Övre vänstra hörnet + + + + Top-rig&ht + Övre högra hörnet + + + + &Bottom-left + Nedre vänstra hörnet + + + + Bottom-ri&ght + Nedre högra hörnet + + + + Cor&ner Size: + Hörnstorlek: + + + + SettingsDialog + + + Save log file to... + Spara loggfil till... + + + + Elevate Synergy + Förhöj Synergys behörighet + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Är du säker på att du vill förhöja Synergys behörighet? +Detta låter Synergy interagera med förhöjda processer och UAC-dialogen, men kan skapa program med processer som inte är förhöjda. Förhöj Synergys behörighet enbart om du verkligen måste. + + + + SettingsDialogBase + + + Settings + Inställningar + + + + Sc&reen name: + Skärmnamn: + + + + P&ort: + Port: + + + + &Interface: + Gränssnitt: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Loggning + + + + &Logging level: + Loggningsnivå: + + + + Log to file: + Logga till fil: + + + + Browse... + Bläddra: + + + + Error + Fel + + + + &Language: + Språk: + + + + &Miscellaneous + &Övrigt + + + + Warning + Varning + + + + Note + Notering + + + + Info + Info + + + + Debug + Felsök + + + + Debug1 + Felsök1 + + + + Debug2 + Felsök2 + + + + SetupWizard + + + Setup Synergy + Ställ in Synergy + + + + Please select an option. + Välj ett alternativ. + + + + Please enter your email address and password. + Var vänlig skriv din e-postaddress och lösenord. + + + + SetupWizardBase + + + Setup Synergy + Ställ in Synergy + + + + Welcome + Välkommen + + + + Thanks for installing Synergy! + Tack för att du installerar Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Med Synergy kan du enkelt dela din mus och ditt tangentbord med flera datorer på ditt skrivbord, och det är Fri och Öppen mjukvara. För bara muspekaren över kanten på en datorskärm för att den skall dyka upp på nästa. Du kan till och med dela utklipp. Allt du behöver är en nätverksanslutning. Synergy är multiplattform (fungerar på både Windows, Mac OS X och Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Server eller klient? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Okänd + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Inloggning misslyckades, ogiltig e-postaddress eller lösenord. + + + + Login failed, an error occurred. + +%1 + Inloggning misslyckades, ett problem inträffade. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Inloggning misslyckades, ett problem inträffade. +Server svar: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_th-TH.qm b/src/gui/res/lang/gui_th-TH.qm new file mode 100644 index 0000000000000000000000000000000000000000..3762d16156dc41ba5d8a3429823f2dcb3fbd49f0 GIT binary patch literal 3721 zcmb7HU1(cX9RDY|`Jf+XqqghX$voX?+BHkpcApL(nznB3)>&NCZVI~F?^5*5BKU4o^y&rB zM=18;PvGyNcd^w+3;4jz)eT!}$u0NV$>s?38$_K$5qxT+BX{IQ6&85fKE_R4@2jmgEP-sq_0J^pG;Z~-{SQufM2!ux+qqy9{ zm;~sL!2Z5~BU~;ux26N>k^#7LY=(scmT2NW&%2)Q+hpboO5EM3JnD@*-EY<5Ey{ ztST5$klRg_$UKv=?opYxRWb3T?{g!kBn0iCPgh|aP0kv51p(UvEGV%AIMVnIRk{9n z*$220z0{ClBdCBai{Qtyy)Nx(#Bra1HDcYp75~jr>p>5gV{yOy0+TysN^n>kJX{9wF0?|?M8;p zfn@+n2JvYq@HKi?=y}!I8X?wIsbJZTfYU@(B1F!XRcmR)$B<@?kWFOo32J>dXswbV zfl8|_0mH8dO5r5LM^i`3UxNmz*tY>qM5aXFc&d60*tBFOuXuL)3>7!)nzLjcL>|;uNIZE~tlDd;rdspIC_^TBf!avMRNbL9 zSAwR=!(cN5K5g1_OzC24#{SwUs!=6dNTLd`ZN9_2;_lk|g&2s{&EEk6zsP2BGa~zFCwwg)xKEmcz)sLwLgZZMecL2ZV)uNHY%#zE8 z?1HjG$lM+RZx3#JK_h1wRs_6gxT|sjZ9n8pf##IIs^A5^0T`u~9BG&AG-GIVCox0! zqSVwKo7MuAuxD9n=d!7c#LVH&RaG5^o;WDwIy4D>Ut6^&)f&`pp>+0dYOV}9WM~s_ zYQ2#3M-*bdT#1;ka|Rgt%_0rkL$J?B+kb10dGBW5OF>e%ZxuYvp==HKy+k(Y@HkH{ zBv$!?TPkvnn)gK21y(@{ni@y1^l;e`e3ZCZy1`|)xH{^W2jAXhn^gO*C1=M`<4 zF4DeAy@a0L+@!fFJeP0SWiE8rFgLintYf*wgTq(tvMac5<@t)(Sh95|&zFR^jyB9! z%cf_POu=*ZYN_mD!REH*bLEA*vR`o--jK^rplz$$LJ53X$jymSeyZ$xkiS-=2`eo3 zmIW8+@!T#z;+A|!a@7QodORBvZIC*n{5(w0=@u7j5bqnWo2Fz}KIBZJq)c~5c?R#& zQ%i_EH(ajcleca=EAYaygxcpvEB|6hf}CT!Zn|XZUcq)&`LLu_j{1w5yPu!Yb9^Do b&nXY*4Xb={->8~c=tAYvqVYUHQ!Ckj%r3$g literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_th-TH.ts b/src/gui/res/lang/gui_th-TH.ts new file mode 100644 index 00000000..d81d707c --- /dev/null +++ b/src/gui/res/lang/gui_th-TH.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + เกี่ยวกับเรา Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + รุ่น: + + + + &Ok + &ตกลง + + + + ActionDialogBase + + + Configure Action + กำหนดค่าการกระทำ + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + ซ้าย + + + + right + ขวา + + + + up + ขึ้น + + + + down + ลง + + + + Lock cursor to screen + + + + + toggle + + + + + on + เปิด + + + + off + ปิด + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + &เริ่มต้น + + + + &File + &ไฟล์ + + + + &Edit + &แก้ไข + + + + &Window + &หน้าต่าง + + + + &Help + &ช่วยเหลือ + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + &หยุด + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + &เริ่มต้น + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + พร้อมแล้ว + + + + Log + บันทึกการเปลี่ยนแปลง + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + &ออก + + + + Quit + ออก + + + + Run + เปิดทำงาน + + + + S&top + + + + + Stop + หยุด + + + + S&how Status + + + + + &Hide + &ซ่อน + + + + Hide + ซ๋อน + + + + &Show + &แสดง + + + + Show + แสดง + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + ตั้งค่า + + + + Edit settings + แก้ไขการตั้งค่า + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + ยังไม่มีชื่อ + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + ตั้งค่าหน้าจอ + + + + Screen &name: + + + + + A&liases + + + + + &Add + &เพิ่ม + + + + &Remove + &ลบออก + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + &แก้ไข + + + + &Remove + &ลบออก + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + ตั้งค่า + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + ข้อมูล + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy ช่วยให้คุณสามารถแบ่งปันเมาส์และแป้นพิมพ์ระหว่างคอมพิวเตอร์หลายเครื่องบนโต๊ะทำงานของคุณและก็ฟรีและ Open Source เพียงแค่เลื่อนเมาส์ของคุณปิดขอบของหน้าจอคอมพิวเตอร์เครื่องหนึ่งของเมื่อไปยังอีก คุณยังสามารถแบ่งปันทั้งหมดของ clipboards ของคุณ ทั้งหมดที่คุณต้องมีการเชื่อมต่อเครือข่าย Synergy เป็นข้ามแพลตฟอร์ม (เมื่อใช้งานบน Windows, Mac OS X และ Linux) + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_tr-TR.qm b/src/gui/res/lang/gui_tr-TR.qm new file mode 100644 index 0000000000000000000000000000000000000000..55ef0f88e1db68e79b8ec8a9a5f5edd4cf4e6ab9 GIT binary patch literal 20445 zcmcIsdvqLUb^j!-R`Oa8J8>M_N$jz)H;!ztALMCd#j^Zy1&U{<>$X`I|RQ|ih)m8yJ2sl@kH^Cv#4)XJr* z`7=){wSJRIJam^*S3jr{FMSNp7gcNG8%k|Cp;~)CtkgA+s@7fqsMHO2sn%mV@b@op z#dCcJ?f<|K_*|)O`DZ+L)hTu2vyXtE6YAtkn0L)Wb?PgR<9bA$`OPmOrw7!R&SaEY zv{b$LPkly1tC-bIp%F_&%)nl)f%; zS`znwZfBURHFG-g`~}Q6_uj+{-$*I- znzto>zVZ~Vf0MZImyl1}A0{q7wHJDGd+UnV;@Z~Ky3WEr_Pwt4>s#~K&#$$9uYhqq zJ*_`^-`lZ&UrctlE=|5aGe z=65G=Z~qbWcr5wW4}TJJ{b}-p*Y{yR|08+d-B?%WPm)hB#e7TtEcx_#+`lZBd|@y6 z?Ol+3@u#>h`b6?)Ke-ore}7x*Bd^AFY1@{cA62SrsBMh=t@}{hRPIYk?YhwR`!6j8 z-9Ko%^Go0}xuNZ^o`oJK-`n=`);q9oFSTFwqXDH>UDN*No$rUfe!2avkCX4S?e~8O z_iuWp{d1T6La7Z?bM`!YTB(H(%-P#cIlO1i*o9XqwdvM56X!tZ`rg!4>#oDT?MNMd z0ON0bK9#@lh*Hbnk-FnL$oz%{i?1`i{>vm0>??^|kN29nbFkDD<$qy?^!L)YbhitEi6x;FmayOrAc{jM#|?|{8t*VXrY3i9skntBHE zyZKPp$6mℑ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 + + AboutDialogBase + + + About Synergy + Synergy hakkında + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Bilinmeyen + + + + Version: + Sürüm: + + + + &Ok + &Tamam + + + + ActionDialogBase + + + Configure Action + Eylemi yapılandır + + + + Choose the action to perform + Gerçekleştirilecek eylemi seçin + + + + Press a hotkey + Kısayol tuşuna basın + + + + Release a hotkey + Kısayol tuşunu bırakın + + + + Press and release a hotkey + Kısayol tuşuna basıp bırakın + + + + only on these screens + Sadece bu ekranlarda + + + + Switch to screen + Ekranı değiştir + + + + Switch in direction + Yönü değiştir + + + + left + sol + + + + right + sağ + + + + up + yukarı + + + + down + aşağı + + + + Lock cursor to screen + İmleci ekrana sabitle + + + + toggle + Değiştir + + + + on + açık + + + + off + kapalı + + + + This action is performed when + İşlem gerçekleştiğinde + + + + the hotkey is pressed + Kısayol tuşu aktif + + + + the hotkey is released + Kısayol tuşu serbest + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Kısayol + + + + Enter the specification for the hotkey: + Kısayol tuşu için tanımlama gir + + + + MainWindow + + + &Start + &Başlat + + + + &File + &Dosya + + + + &Edit + &Düzenle + + + + &Window + &Pencere + + + + &Help + &Yardım + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Synergy versiyonunuz eski. Versiyon <b>%1</b> hazır. İndirmek için <a href="%2">tıklayın</a>.</p> + + + + Program can not be started + Program başlatılamadı + + + + 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. + Çalıştırılabilir<br><br>%1<br><br>mevcut olmasına rağmen başarılı olarak başlatılamadı. Lütfen bu programı çalıştırabilmek için yeterli yetkiye sahip olup olmadığınızı kontrol edin. + + + + Synergy client not found + Synergy alıcıyı bulamadı + + + + The executable for the synergy client does not exist. + Synergy için çalışan kullanıcı makine yok. + + + + Hostname is empty + Anabilgisayar boş + + + + Please fill in a hostname for the synergy client to connect to. + Lütfen Synergy'nin bağlanması için bir bilgisayar adı girin + + + + Cannot write configuration file + Ayar dosyası yazılamadı + + + + The temporary configuration file required to start synergy can not be written. + Geçici ayar dosyası Synergy'nin başlaması için gerekli, üzerine kaydedilemez + + + + Configuration filename invalid + Geçersiz ayar dosyası adı + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Synergy sunucusu için geçerli bir ayar dosyası oluşturmadınız. Bu ayar dosyasına şimdi göz atmak ister misiniz? + + + + Synergy server not found + Synergy sunucusu bulunamadı + + + + The executable for the synergy server does not exist. + Synergy için çalışan sunucu makine yok. + + + + Synergy terminated with an error + Synergy bir hata yüzünden sonlandırıldı. + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy %1 hata kod ile sonlandırıldı.<br><br>Detaylar için hata günlüğüne bakınız. + + + + &Stop + &Dur + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy başlıyor + + + + Synergy is running. + Synergy çalışıyor + + + + Synergy is not running. + Synergy çalışmıyor + + + + Unknown + Bilinmeyen + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Synergy ayar dosyasına göz at + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Ayarları kaydet + + + + Save failed + Kaydetme hatası + + + + Could not save configuration to file. + Ayarlar kaydedilemedi + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Ekran adı: + + + + &Server IP: + &Sunucu IP: + + + + + &Start + &Başlat + + + + Use existing configuration: + Varolan ayarları kullan + + + + &Configuration file: + &Ayar dosyası: + + + + &Browse... + &Araştır... + + + + Configure interactively: + İnteraktif olarak yapılandır: + + + + &Configure Server... + &Sunucu ayarla + + + + Ready + Hazır + + + + Log + Kayıt kütüğü + + + + &Apply + Uygula + + + + IP addresses: + IP adresleri: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Synergy hakkında + + + + &Quit + &Çıkış + + + + Quit + Çıkış + + + + Run + Çalıştır + + + + S&top + Dur + + + + Stop + Dur + + + + S&how Status + Durumu Göster + + + + &Hide + &Gizle + + + + Hide + Gizle + + + + &Show + &Göster + + + + Show + Göster + + + + Save configuration &as... + Ayarları farklı kaydet + + + + Save the interactively generated server configuration to a file. + İnteraktif olarak oluşturulmuş olan sununu yapılandırmasını dosyaya kaydet. + + + + Settings + Ayarlar + + + + Edit settings + Ayarları düzenle + + + + Run Wizard + Sihirbazı Çalıştır + + + + NewScreenWidget + + + Unnamed + İsimsiz + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Synergy Kurulum + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + Bildirim alanı kullanılamıyor, kapatılıyor. + + + + ScreenSettingsDialog + + + Screen name is empty + Ekran ismi boş + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Ekran ismi boş bırakılamaz. Lütfen bir ad girin yada iptal edin. + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Ekran ismiyle takma ad aynı olamaz. Lütfen takma adı silin yada ekran adını değiştirin. + + + + ScreenSettingsDialogBase + + + Screen Settings + Ekran Ayarları + + + + Screen &name: + Görünen isim: + + + + A&liases + Takma adlar + + + + &Add + Ekle + + + + &Remove + Kaldır + + + + &Modifier keys + &Değiştirici tuşlar + + + + &Shift: + &Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Süper + + + + + + + + None + Yok + + + + &Ctrl: + Ctrl + + + + Al&t: + Al&t: + + + + M&eta: + M&eta: + + + + S&uper: + Süper: + + + + &Dead corners + &Kör nokta + + + + Top-left + Sol-üst + + + + Top-right + Sağ-üst + + + + Bottom-left + Sol-alt + + + + Bottom-right + Sağ-alt + + + + Corner Si&ze: + Köşe boyutu: + + + + &Fixes + Düzeltmeler + + + + Fix CAPS LOCK key + BÜYÜK YAZMAYI kapat + + + + Fix NUM LOCK key + NUM LOCK kapat + + + + Fix SCROLL LOCK key + SCROLL LOCK kapat + + + + Fix XTest for Xinerama + XTest için Xinerama yı onar. + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Ekran: <b>%1</b></center><br>Çift tıklayarak ayarları düzenleyin <br>Çöp kutusundan silmek için ekranda sürükleyin + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Sunucu Yapılandırması + + + + Screens and links + Ekranlar ve Bağlantıları + + + + Drag a screen from the grid to the trashcan to remove it. + Izgaradan çıkartmak için çöp kutusuna sürükleyin ve silin. + + + + Configure the layout of your synergy server configuration. + Lütfen sinerji sunucu yapılandırma düzeninizi yapılandırın. + + + + Drag this button to the grid to add a new screen. + Yeni bir ekran eklemek için bu butonu ızgaraya sürükleyin. + + + + 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. + 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. + + + + Hotkeys + Kısayollar + + + + &Hotkeys + Kısayollar + + + + &New + &Yeni + + + + &Edit + &Düzenle + + + + &Remove + Kaldır + + + + A&ctions + Eylemler + + + + Ne&w + Yeni + + + + E&dit + Düzen + + + + Re&move + Kaldır + + + + Advanced server settings + Gelişmiş sunucu ayarları + + + + &Switch + &Değiştir + + + + Switch &after waiting + + + + + + + ms + ms + + + + Switch on double &tap within + + + + + &Options + &Seçenekler + + + + &Check clients every + Her zaman kullanıcıları denetle + + + + Use &relative mouse moves + &İlişkili mouse harekelerini kullanın + + + + S&ynchronize screen savers + Ekran koruyucuları eşitle + + + + Don't take &foreground window on Windows servers + Lütfen önplan penceresini Windows sunucularına almayın. + + + + Ignore auto config clients + + + + + &Dead corners + &Kör nokta + + + + To&p-left + Üst-sol + + + + Top-rig&ht + Üst-Sağ + + + + &Bottom-left + Alt-sol + + + + Bottom-ri&ght + Alt-Sağ + + + + Cor&ner Size: + Köşe Boyutu: + + + + SettingsDialog + + + Save log file to... + Log dosyası kaydet... + + + + Elevate Synergy + Synergyi Yükselt + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + Ayarlar + + + + Sc&reen name: + Ekran adı: + + + + P&ort: + Port: + + + + &Interface: + Arayüz: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Log kayıtları + + + + &Logging level: + Kayıt Seviyesi : + + + + Log to file: + Dosyaya kaydet : + + + + Browse... + Araştır... + + + + Error + Hata + + + + &Language: + &Dil + + + + &Miscellaneous + + + + + Warning + Uyarı + + + + Note + Not + + + + Info + Bilgi + + + + Debug + Hata Ayıkla + + + + Debug1 + Hata Ayıkla1 + + + + Debug2 + Hata Ayıkla2 + + + + SetupWizard + + + Setup Synergy + Synergy Kurulum + + + + Please select an option. + Lütfen seçiminizi yapınız. + + + + Please enter your email address and password. + Lütfen e-posta adresinizi ve şifrenizi girin. + + + + SetupWizardBase + + + Setup Synergy + Synergy Kurulum + + + + Welcome + Hoş Geldiniz + + + + Thanks for installing Synergy! + Sinerji yüklediğiniz için teşekkür ederiz ! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy, aynı mouse ve klavye ile birden çok bilgisayarı kontrol etmenizi sağlayan Özgür ve Açık Kaynak Kodlu bir uygulamadır. Yapmanız gereken mouse imlecinizi bilgisayar ekranından diğerine sürüklemek. Synergy aynı zamanda ortak bir panoya da izin vermektedir yani bilgisayarlar arası kopyala/yapıştır yapmanıza da olanak tanır. Tek gereken bilgisayarlarınız arasında kuruluş olan network bağlantısı. Synergy, çoklu platform desteği de vemektedir (Windows, Linux ve Mac OS X işletimde sistemlerinde çalışır). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Sunucu veya Kullanıcı? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Bilinmeyen + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Giriş başarısız, e-posta yada şifre yanlış. + + + + Login failed, an error occurred. + +%1 + Giriş başarısız, bir hata meydana geldi. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Giriş başarısız, bir hata meydana geldi. +Sunucu yanıtı: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_uk.qm b/src/gui/res/lang/gui_uk.qm new file mode 100644 index 0000000000000000000000000000000000000000..275a454b4b92e413824b4a974ad0c002b74838c0 GIT binary patch literal 22693 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 K)?VHkUHbnpdX7>6 literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_uk.ts b/src/gui/res/lang/gui_uk.ts new file mode 100644 index 00000000..07b0b8f9 --- /dev/null +++ b/src/gui/res/lang/gui_uk.ts @@ -0,0 +1,1411 @@ + + + AboutDialogBase + + + About Synergy + Про Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Невідомо + + + + Version: + Версія: + + + + &Ok + OK + + + + ActionDialogBase + + + Configure Action + Налаштування дій + + + + Choose the action to perform + Виберіть дію, що виконується + + + + Press a hotkey + Натисніть гарячу клавішу + + + + Release a hotkey + Відпустіть гарячу клавішу + + + + Press and release a hotkey + Натисніть та відпустіть гарячу клавішу + + + + only on these screens + тільки на цих екранах + + + + Switch to screen + Перехід на екран + + + + Switch in direction + Перехід в напрямку + + + + left + вліво + + + + right + вправо + + + + up + вверх + + + + down + вниз + + + + Lock cursor to screen + Закріпити курсор за екраном + + + + toggle + переключити + + + + on + ввімк. + + + + off + вимк. + + + + This action is performed when + Ця дія виконується коли + + + + the hotkey is pressed + гаряча клавіша натиснута + + + + the hotkey is released + гаряча клавіша відпущена + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + Гаряча клавіша + + + + Enter the specification for the hotkey: + Вкажіть специфікацію гарячої клавіші: + + + + MainWindow + + + &Start + Старт + + + + &File + Файл + + + + &Edit + Редагування + + + + &Window + Вікно + + + + &Help + Допомога + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Ваша версія Synergy застаріла. Зараз доступна версія <b>%1</b> для <a href="%2">завантаження</a>.</p> + + + + Program can not be started + Програма не може бути запущена + + + + 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. + Виконуваний фал <br><br>%1<br><br>не може запуститись, хоча він існує. Будь ласка, перевірте чи у Вас достатньо прав для запуску цієї програми. + + + + Synergy client not found + Не знайдено жодного клієнта Synergy + + + + The executable for the synergy client does not exist. + Виконуваної програми для клієнта Synergy не існує. + + + + Hostname is empty + Ім'я хосту не вказане + + + + Please fill in a hostname for the synergy client to connect to. + Будь ласка вкажіть ім'я хосту до якого повинен приєднатися клієнт Synergy. + + + + Cannot write configuration file + Неможливо здійснити запис у файл конфігурації + + + + The temporary configuration file required to start synergy can not be written. + Тимчасовий файл конфігурації, який необхідний для запуску Synergy заблокований для запису. + + + + Configuration filename invalid + Неправильне ім'я файлу конфігурації + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + Ви не заповнили правильний файл конфігурації для сервера Synergy . Бажаєте зробити це зараз? + + + + Synergy server not found + Неможливо знайти сервер Synergy + + + + The executable for the synergy server does not exist. + Виконуваної програми для серверу Synergy не існує. + + + + Synergy terminated with an error + Synergy завершена з помилками + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy завершилась неочікувано з кодом of %1.<br><br>Будь ласка перегляньте log-записи для деталей. + + + + &Stop + Стоп + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy запущено. + + + + Synergy is running. + Synergy працює. + + + + Synergy is not running. + Synergy зупинено. + + + + Unknown + Невідомо + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + Вкажіть файл конфігурації Synergy + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + Зберегти конфігурацію як... + + + + Save failed + Посилка збереження + + + + Could not save configuration to file. + Неможливо зберегти файл конфігурації. + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + Ім'я екрану: + + + + &Server IP: + IP серверу: + + + + + &Start + Старт + + + + Use existing configuration: + Використати існуючу конфігурацію: + + + + &Configuration file: + Файл конфігурації: + + + + &Browse... + Перегляд... + + + + Configure interactively: + Налаштувати інтерактивно: + + + + &Configure Server... + Налаштувати сервер... + + + + Ready + Готово + + + + Log + Лог + + + + &Apply + Застосувати + + + + IP addresses: + IP адреси: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + Про Synergy + + + + &Quit + Закрити + + + + Quit + Закрити + + + + Run + Запустити + + + + S&top + Зупинити + + + + Stop + Зупинити + + + + S&how Status + Показати статус + + + + &Hide + Приховати + + + + Hide + Приховати + + + + &Show + Показати + + + + Show + Показати + + + + Save configuration &as... + Зберегти конфігурацію як... + + + + Save the interactively generated server configuration to a file. + Зберегти інтерактивно згенеровану конфігурацію сервера у файл. + + + + Settings + Налаштування + + + + Edit settings + Редагувати налаштування + + + + Run Wizard + Запустити Помічника + + + + NewScreenWidget + + + Unnamed + Без назви + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + Встановлення Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Конфігурація Synergy (*.sgc);;Всі файли (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Конфігурація Synergy (*.conf);;Всі файли (*.*) + + + + System tray is unavailable, quitting. + Системний трей недоступний, здійснюється вихід. + + + + ScreenSettingsDialog + + + Screen name is empty + Ім'я екрану порожнє + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Ім'я екрану не може бути порожнім. Будь ласка вкажіть ім'я або скасуйте діалог. + + + + Screen name matches alias + Ім'я екрану співпадає з псевдонімом + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Ім'я екрану не може бути таким самим як псевдонім. Будь ласка видаліть псевдонім або змініть ім'я екрану + + + + ScreenSettingsDialogBase + + + Screen Settings + Налаштування екрану + + + + Screen &name: + Ім'я екрану: + + + + A&liases + Псевдоніми + + + + &Add + Додати + + + + &Remove + Видалити + + + + &Modifier keys + Клавіші-модифікатори + + + + &Shift: + Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + Жодна + + + + &Ctrl: + Ctrl: + + + + Al&t: + Alt: + + + + M&eta: + Meta: + + + + S&uper: + Super: + + + + &Dead corners + Мертві кути + + + + Top-left + Верхній лівий + + + + Top-right + Верхній правий + + + + Bottom-left + Нижній лівий + + + + Bottom-right + Нижній правий + + + + Corner Si&ze: + Розмір кута: + + + + &Fixes + Фіксація + + + + Fix CAPS LOCK key + Фіксувати CAPS LOCK + + + + Fix NUM LOCK key + Фіксувати NUM LOCK + + + + Fix SCROLL LOCK key + Фіксувати SCROLL LOCK + + + + Fix XTest for Xinerama + Фіксувати XTest для Xinerama + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>Екран: <b>%1</b></center><br>Подвійний клік для редагування налаштувань<br>Перетягніть екран у кошик для видалення + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + Конфігурація сервера + + + + Screens and links + Екрани і зв'язки + + + + Drag a screen from the grid to the trashcan to remove it. + Перетягніть екран у кошик для видалення + + + + Configure the layout of your synergy server configuration. + Налаштувати розташування конфігурації сервера Synergy . + + + + Drag this button to the grid to add a new screen. + Перетягніть цю кнопку на сітку, щоб додати новий екран. + + + + 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. + Перетягуйте нові екрани на сітку або пересувайте існуючі місцями. +Перетягніть екран в кошик, щоб видалити його. +Подвійний клік на екрані для його налаштування. + + + + Hotkeys + Гарячі клавіші + + + + &Hotkeys + Гарячі клавіші + + + + &New + Новий + + + + &Edit + Редагування + + + + &Remove + Видалити + + + + A&ctions + Дії + + + + Ne&w + Новий + + + + E&dit + Редагувати + + + + Re&move + Видалити + + + + Advanced server settings + Додаткові налаштування сервера + + + + &Switch + Перехід + + + + Switch &after waiting + Перехід після очікування + + + + + + ms + мсек + + + + Switch on double &tap within + Перехід після подвійного натискання протягом + + + + &Options + Опції + + + + &Check clients every + Перевіряти клієнтів кожні + + + + Use &relative mouse moves + Використовувати рідні налаштування курсору + + + + S&ynchronize screen savers + Синхронізувати заставки + + + + Don't take &foreground window on Windows servers + Не залишати вікно сервера зверху (у Windows) + + + + Ignore auto config clients + + + + + &Dead corners + Мертві кути + + + + To&p-left + Верхній лівий + + + + Top-rig&ht + Верхній правий + + + + &Bottom-left + Нижній лівий + + + + Bottom-ri&ght + Нижній правий + + + + Cor&ner Size: + Розмір кута: + + + + SettingsDialog + + + Save log file to... + Зберегти log-файл в... + + + + Elevate Synergy + Підвищіть рівень доступу Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + Дійсно бажаєте підвищить рівень доступу Synergy? +Ця дія дозволить Synergy бути у взаємодії з процесами, які мають підвищеній рівень доступу, та діалогу UAC (контроль облікових записів користувачів). Але це може викликати проблеми з процесами, які мають звичайний рівень доступу. Підвищуйте рівень доступу Synergy тільки в тому випадку, коли це дійсно потрібно. + + + + SettingsDialogBase + + + Settings + Налаштування + + + + Sc&reen name: + Ім'я екрану: + + + + P&ort: + Порт: + + + + &Interface: + Інтерфейс: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + Запис + + + + &Logging level: + Рівень запису: + + + + Log to file: + Записувати у фал: + + + + Browse... + Перегляд... + + + + Error + Помилка + + + + &Language: + Мова: + + + + &Miscellaneous + &Додатково + + + + Warning + Попередження + + + + Note + Примітка + + + + Info + Інформація + + + + Debug + Налагодження + + + + Debug1 + Налагодження1 + + + + Debug2 + Налагодження2 + + + + SetupWizard + + + Setup Synergy + Встановлення Synergy + + + + Please select an option. + Будь ласка, оберіть опцію. + + + + Please enter your email address and password. + Будь ласка вкажіть адресу вашої електронної пошти та пароль. + + + + SetupWizardBase + + + Setup Synergy + Встановлення Synergy + + + + Welcome + Вітаемо + + + + Thanks for installing Synergy! + Дякуємо за встановлення Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy дозволить Вам легко використовувати мишку та клавіатуру між декількома комп'ютерами за вашим столом, і це зовсім безкоштовний та відкритий продукт. Тільки підведіть курсор мишки до краю одного з комп'ютерів і він автоматично переміститься на інший. Також можна використовувати один буфер обміну між декількома комп'ютерами. Все що необхідно, це мережеве з'єднання. Synergy являється міжплатформовим продуктом (працює з Windows, Mac OS X та Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + Сервер чи клієнт? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Невідомо + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Вхід скасовано, неправильна адреса або пароль. + + + + Login failed, an error occurred. + +%1 + Вхід скасовано, виникла помилка. +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + Вхід скасовано, виникла помилка. +Відповідь сервера: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_ur.qm b/src/gui/res/lang/gui_ur.qm new file mode 100644 index 0000000000000000000000000000000000000000..c5466131ea8bd7f4078b76433b3b1b46668ca706 GIT binary patch literal 1316 zcmZuxJ#Q015M3u>p+JCWpr9BK;v6g3at@FprAcI40fADuNTA|!UYk?SyVmVp!cnBo zAE2Y5bVZAh2y%;zkfOBw1`7TFZ}x1Q4-{p0c0S&`dAq*V&z;-fe}8!Y-NS-HYV68{TNb=O>makH(`G}1lW zh=SPk)&r|bD4bsvZIKHtlt@Gm7Rh_^0P9e0INJwYOO9dt@))Zp4{-KiaieWC^qqG@ z*0B%eSeD_d%R`q@0jZj-xkwY0W5jYqmz{_47{4NqV0o}PpK%*5UPmX+0jkR!p}HX} zu$w^gCmrjkVm>2zEKe>>)0Atj!eds*;vEw>Jm$&li%OD@ab9ydV>!e=M4x}0o!^JA zj^129oN$90@D;Q0T0;kLbDo1qPu7fMJllQOv*FH5I6na17l&RjETj4a=i(kJuBM6e z88)XB96}Smv6=235SjmJCI#D>+7;y2kjF}w<&jeuv*E-uRvfz#Gjm+Va^xaqtgOKF zUU;SkvUoqQ9$t;)_rxj}YPL}OXrdk8=o3UZ$~QW>ga6#$>Cde6 zs-0_<^m2+-YAH7vslY~YPWDZZD0U>&H^f0qwMaItBO+3QY%pf#^wNZZQzEgO3yNz0)OvJC)4dx`bLrJ^c0yc5NG&6 zvLT=}_el-#4N{XTy#)0z(4_VdE64|N%;j!|FpdU}x~ + + AboutDialogBase + + + About Synergy + + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + + + + + Version: + + + + + &Ok + + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + + + + + toggle + + + + + on + + + + + off + + + + + This action is performed when + + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + + + + + Program can not be started + + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + + + + + Synergy is running. + + + + + Synergy is not running. + + + + + Unknown + + + + + + + Synergy + + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + + + + + Run + + + + + S&top + + + + + Stop + + + + + S&how Status + + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + + + + + Edit settings + + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + + + + + &Remove + + + + + &Modifier keys + + + + + &Shift: + + + + + + + + + Shift + + + + + + + + + Ctrl + + + + + + + + + Alt + + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + + + + + &Ctrl: + + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + معلومات + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy آپ کو آسانی سے اپنا ما٘وس اور کیبورڈ متعدد کمپیوٹرز کے ساتھ استعمال کرنے کی سہولت میسر کرتا ہے۔Synergy مفت اور اوپن سورس ہے۔ صرف ایک کمپیوٹر اسکرین کے کنارے سے دوسرے پر اپنے ماؤس لے جائیں اور بس۔ آپ تمام کمپیوٹرز کے کلپ بورڈ ایک دوسرے کے ساتھ تبدیل بھی کر سکتے ہیں۔ یہ سب کرنے کے لیے صرف ایک نیٹ ورک کنکشن کی ضرورت ہے۔ Synergy متعدد آپریٹنگ سسٹمز (ونڈوز، میک OS X اور لینکس) کے ساتھ استعمال کیا جا سکتا ہے + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_vi.qm b/src/gui/res/lang/gui_vi.qm new file mode 100644 index 0000000000000000000000000000000000000000..12ce570f92e234cf7cd104d575a104b72614f9d1 GIT binary patch literal 5101 zcma)AYm6IL6+Yhet{tzln=FB@A{bpFVzx@^w1poia;e-g*uDC3^kg3ikJ> z&OZtHqxsY`&;1Yd!$Y?%L67`nL)%Y&hG^^2p>I9?CiGYydgdFS2i=#WH8VY&{^B;G z^nvvC%Q@(ED3g2ieUS69%)jq_1n1ryOaByd)0d)k(`d9#ZXY}Sz~8~|+tE5UHTJc) zPU8L5{Jo!m+>s;sg`<#5pN`hiSEF_7RDR*VPk`SW`7fpZi2aNCXH!1(e<51Oezn;f ze*@oljj#L$^7ES~@}Ko!*C!`le0v#u&sjv1m0_Gn(>yI^@j#>aKU|n!%wV0Esk&is zpQYPwW1sHJ6d#?Y!(`HHkCC;z+NtvM%Fo z^r0@sRkF0_DM*-PjyQ{syX*`gKLm1%UQzl~wMVh;O~|uHrRQ6&vv*zk573J-SL(hrpKgfQ{=8kd4 z*Xbd5fcjZ#kqLKqbQ$rihB;6fo5PgoJ`}dr*JYgcvF02N?JR`}(P*I(=$?|2JE&XE zG0TC^RElQlKJ6c?+&O~7t`gFF_D58L{$*O5JU!`*B&caGla95jodI_!MA!Ih%Az9H zejJ+GOGrrp8CA&GNq6CCk9tn1=|9S}i|Q0}HxXG$b-IUkfZ}famJvMo7kgZ0%t6Pu zqI!bviA&s4t9-%@J+TxeyKw96s^fe_E%O&c4`flq^&m>s^3JPBggUM`mQw8|W`UVrYRSu#`SQ|zG#AUygfp1G{J zU^>8IYHTyUX@6zg5Z*s1nqp$l_CucA@bspr=?-)YL{$o(gD#DJqQ}?4pG+6>^r~A} zP1B=f4a%JX5_D9$E#?(@D-d4jIF{2W_S5G*y}XeydhC|9oZr^Pc@Wp)0Iq|axvh)8 za^iYwmsa6$fao>hmH@8!I)ftKuBw$ycp2~gL4T?(&X*q2QH8JWhECte-MN}cQd&r% zsE{FM35p1^wcm5HBq@^QcObo{6tsY zD72r&W#DT!kOu$`x)LY;g)Xe!e7|7@!k0mS0QszbKaM%ogqLXd%URRaK`)s@;HN{`bW=F z$k}Og`AWeA<^aiqa9vybzg8Q-6b>4*4|p>TnCgAgVPVX&IYW_b*xQD zN0gzr7CXqt@2Dtbn{}PK)#wTABt3}k$Gwh+$%b~bE5NzJobEJ2y&;vOC)df1$+dHK zqJH{=PTghg*CXCg39Lta07ZOFK|IP9b6`sqv8pK5!d*363k)eu;F!hX1Ug^AZuLmVDiq;~BG7)v{>77tL7f#vS0WcHW>UJYzQofS8QLX$H=t-l!6z*R z#J=`yOc`PZVFMy_s_JaS>xSxr4WQdiMZ<_@VHyi@y4?{2x&huwFJyUq5s7)Mo*j25 zG8~@&;6mj-aJ&Q#ZHa9?nrhButwZfawco_d#4~5qR(LW!tG*lDP?QfsT8VL(?QGk% zT8k)9mt&f%%D1(|x9zjd*a9=b@n-C$wRZD_$9!0~eTq{wIXtes$C}(w`mxR2A1=n) zcE=&WoWU`uAbVC#w*V3X~sk$f~ z%*??uI*@3Fc3`zI*4Nx-D?}CILf}MHhV&PAD=I5^uP+`z$5LF~OVCD+*ju)I=|rz&=u5w{0d@xKOjL zmQvj>iWz)oOC5>1jxX1E3IGv{km5K}-KLAl42T0Y&-MK~TDBhW)mu#SS!HN+J@j{r zgL+NOSHy8;;hg1!r*2nxGtq@N$>6r}NpU>BP|cdMwkSPy4}B!H1#6Ti-B8MtH0K>> zr=>C>K#g$*a{cs!SN?iIrRO3bb?%5(O{V@22B@GL literal 0 HcmV?d00001 diff --git a/src/gui/res/lang/gui_vi.ts b/src/gui/res/lang/gui_vi.ts new file mode 100644 index 00000000..9d63796d --- /dev/null +++ b/src/gui/res/lang/gui_vi.ts @@ -0,0 +1,1405 @@ + + + AboutDialogBase + + + About Synergy + Thông tin về Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + Không biết + + + + Version: + Phiên bản: + + + + &Ok + Ok + + + + ActionDialogBase + + + Configure Action + + + + + Choose the action to perform + + + + + Press a hotkey + + + + + Release a hotkey + + + + + Press and release a hotkey + + + + + only on these screens + + + + + Switch to screen + + + + + Switch in direction + + + + + left + trái + + + + right + phải + + + + up + lên + + + + down + xuống + + + + Lock cursor to screen + + + + + toggle + + + + + on + bật + + + + off + tắt + + + + This action is performed when + Lệnh này được thực hiện khi + + + + the hotkey is pressed + + + + + the hotkey is released + + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + + + + + Enter the specification for the hotkey: + + + + + MainWindow + + + &Start + Bắt đầu + + + + &File + + + + + &Edit + + + + + &Window + + + + + &Help + + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>Phiên bản Synergy của bạn đã cũ. Phiên bản mới <b>%1</b> đã có để <a href="%2">tải về</a>.</p> + + + + Program can not be started + Chương trình không thể khởi động. + + + + 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. + + + + + Synergy client not found + + + + + The executable for the synergy client does not exist. + + + + + Hostname is empty + + + + + Please fill in a hostname for the synergy client to connect to. + + + + + Cannot write configuration file + + + + + The temporary configuration file required to start synergy can not be written. + + + + + Configuration filename invalid + + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + + + + + Synergy server not found + Không tìm thấy máy chủ Synergy + + + + The executable for the synergy server does not exist. + + + + + Synergy terminated with an error + Synergy đã ngừng vì lỗi + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + + + + + &Stop + Dừng + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy đang khởi động. + + + + Synergy is running. + Synergy đang chạy. + + + + Synergy is not running. + Synergy không chạy. + + + + Unknown + Không biết + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + + + + + Save failed + + + + + Could not save configuration to file. + + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + + + + + &Server IP: + + + + + + &Start + Bắt đầu + + + + Use existing configuration: + + + + + &Configuration file: + + + + + &Browse... + + + + + Configure interactively: + + + + + &Configure Server... + + + + + Ready + Sẵn sàng + + + + Log + + + + + &Apply + + + + + IP addresses: + + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + + + + + &Quit + + + + + Quit + Thoát + + + + Run + Chạy + + + + S&top + Dừng + + + + Stop + + + + + S&how Status + Hiển thị tình trạng + + + + &Hide + + + + + Hide + + + + + &Show + + + + + Show + + + + + Save configuration &as... + + + + + Save the interactively generated server configuration to a file. + + + + + Settings + Cài đặt + + + + Edit settings + Chỉnh sửa cài đặt + + + + Run Wizard + + + + + NewScreenWidget + + + Unnamed + + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + + + + + Synergy Configurations (*.conf);;All files (*.*) + + + + + System tray is unavailable, quitting. + + + + + ScreenSettingsDialog + + + Screen name is empty + + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + + + + + Screen name matches alias + + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + + + + + ScreenSettingsDialogBase + + + Screen Settings + + + + + Screen &name: + + + + + A&liases + + + + + &Add + Thêm + + + + &Remove + Xóa + + + + &Modifier keys + + + + + &Shift: + Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + + + + + + + + + Super + + + + + + + + + None + Không + + + + &Ctrl: + Ctrl: + + + + Al&t: + + + + + M&eta: + + + + + S&uper: + + + + + &Dead corners + + + + + Top-left + + + + + Top-right + + + + + Bottom-left + + + + + Bottom-right + + + + + Corner Si&ze: + + + + + &Fixes + + + + + Fix CAPS LOCK key + + + + + Fix NUM LOCK key + + + + + Fix SCROLL LOCK key + + + + + Fix XTest for Xinerama + + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + + + + + Screens and links + + + + + Drag a screen from the grid to the trashcan to remove it. + + + + + Configure the layout of your synergy server configuration. + + + + + Drag this button to the grid to add a new screen. + + + + + 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. + + + + + Hotkeys + + + + + &Hotkeys + + + + + &New + + + + + &Edit + + + + + &Remove + Xóa + + + + A&ctions + + + + + Ne&w + + + + + E&dit + + + + + Re&move + + + + + Advanced server settings + + + + + &Switch + + + + + Switch &after waiting + + + + + + + ms + + + + + Switch on double &tap within + + + + + &Options + + + + + &Check clients every + + + + + Use &relative mouse moves + + + + + S&ynchronize screen savers + + + + + Don't take &foreground window on Windows servers + + + + + Ignore auto config clients + + + + + &Dead corners + + + + + To&p-left + + + + + Top-rig&ht + + + + + &Bottom-left + + + + + Bottom-ri&ght + + + + + Cor&ner Size: + + + + + SettingsDialog + + + Save log file to... + + + + + Elevate Synergy + + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + + + + + SettingsDialogBase + + + Settings + Cài đặt + + + + Sc&reen name: + + + + + P&ort: + + + + + &Interface: + + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + + + + + &Logging level: + + + + + Log to file: + + + + + Browse... + + + + + Error + + + + + &Language: + Ngôn ngữ: + + + + &Miscellaneous + + + + + Warning + + + + + Note + + + + + Info + Thông tin + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + SetupWizard + + + Setup Synergy + + + + + Please select an option. + + + + + Please enter your email address and password. + Hãy nhập tài khoản email và mật khẩu. + + + + SetupWizardBase + + + Setup Synergy + + + + + Welcome + + + + + Thanks for installing Synergy! + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Sức mạnh tổng hợp cho phép bạn dễ dàng chia sẻ chuột và bàn phím giữa nhiều máy tính trên bàn của bạn, và nó là miễn phí và mã nguồn mở. Chỉ cần di chuyển chuột của bạn khỏi các cạnh của màn hình một máy tính khác. Bạn thậm chí có thể chia sẻ tất cả các clipboards của bạn. Tất cả bạn cần là một kết nối mạng. Synergy là nền tảng chéo (hoạt động trên Windows, Mac OS X và Linux). + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + Không biết + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + Đăng nhập thất bại, tài khoản email hoặc mật khẩu không hợp lệ. + + + + Login failed, an error occurred. + +%1 + + + + + Login failed, an error occurred. + +Server response: + +%1 + + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_zh-CN.qm b/src/gui/res/lang/gui_zh-CN.qm new file mode 100644 index 0000000000000000000000000000000000000000..ab5415e1264c7d465089eb37bc2b2e5042d3055d GIT binary patch literal 16197 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 + + AboutDialogBase + + + About Synergy + 关于Synergy + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + 未知 + + + + Version: + 版本: + + + + &Ok + 确定 + + + + ActionDialogBase + + + Configure Action + 行为配置 + + + + Choose the action to perform + 选择要执行的行为 + + + + Press a hotkey + 按下热键 + + + + Release a hotkey + 松开热键 + + + + Press and release a hotkey + 按下一个键然后松开 + + + + only on these screens + 仅仅在这些屏幕上 + + + + Switch to screen + 切换到屏幕 + + + + Switch in direction + 方向切换 + + + + left + + + + + right + 右侧 + + + + up + 上方 + + + + down + 下方 + + + + Lock cursor to screen + 锁定指针于屏幕 + + + + toggle + 切换 + + + + on + 启用 + + + + off + 禁用 + + + + This action is performed when + 当……时启用此行为 + + + + the hotkey is pressed + 热键被按下 + + + + the hotkey is released + 热键被松开 + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + 热键 + + + + Enter the specification for the hotkey: + 输入热键的说明: + + + + MainWindow + + + &Start + 开始 + + + + &File + 文件 + + + + &Edit + 编辑 + + + + &Window + 窗口 + + + + &Help + 帮助 + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>您正在使用的Synergy版本有些过时了,有新版 <b>%1</b> 可以 <a href="%2">下载</a>。</p> + + + + Program can not be started + 程序无法启动 + + + + 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. + 可执行程序<br><br>%1<br><br>没有成功运行,虽然程序本身存在。请检查你是否有运行此程序的权限。 + + + + Synergy client not found + 未找到Synergy客户端 + + + + The executable for the synergy client does not exist. + Synergy客户端的可执行程序不存在。 + + + + Hostname is empty + 主机名为空 + + + + Please fill in a hostname for the synergy client to connect to. + 请为Synergy客户端设置一个用于连接的主机名 + + + + Cannot write configuration file + 不能写入配置文件 + + + + The temporary configuration file required to start synergy can not be written. + 启动Synergy所需的临时配置文件不可写。 + + + + Configuration filename invalid + 配置文件名非法 + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + 你没有为Synergy服务端设置一个可用的配置文件。需要现在浏览配置文件吗? + + + + Synergy server not found + 未找到Synergy服务端 + + + + The executable for the synergy server does not exist. + Synergy服务端可执行程序不存在。 + + + + Synergy terminated with an error + Synergy因错终止运行 + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy意外终止运行,退出代码 %1。<br><br>请查看输出日志了解详情。 + + + + &Stop + 停止 + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy正在启动 + + + + Synergy is running. + Synergy正在运行 + + + + Synergy is not running. + Synergy没有运行 + + + + Unknown + 未知 + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + 浏览Synergy配置文件 + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + 保存配置到文件 + + + + Save failed + 保存失败 + + + + Could not save configuration to file. + 不能保存配置到文件 + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + 屏幕名: + + + + &Server IP: + 服务端IP + + + + + &Start + 开始 + + + + Use existing configuration: + 使用已有的配置: + + + + &Configuration file: + 配置文件: + + + + &Browse... + 浏览… + + + + Configure interactively: + 交互配置: + + + + &Configure Server... + 设置服务端… + + + + Ready + 准备完毕 + + + + Log + 日志 + + + + &Apply + 应用 + + + + IP addresses: + IP地址 + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + 关于Synergy… + + + + &Quit + 退出 + + + + Quit + 退出 + + + + Run + 运行 + + + + S&top + 停止 + + + + Stop + 停止 + + + + S&how Status + 显示状态 + + + + &Hide + 隐藏 + + + + Hide + 隐藏 + + + + &Show + 显示 + + + + Show + 显示 + + + + Save configuration &as... + 保存配置到… + + + + Save the interactively generated server configuration to a file. + 保存通过交互配置生成的配置到文件。 + + + + Settings + 设置 + + + + Edit settings + 编辑设置 + + + + Run Wizard + 运行向导 + + + + NewScreenWidget + + + Unnamed + 未命名 + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + 设置Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy配置文件(*.sgc);;所有文件 (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy配置文件(*.conf);;所有文件 (*.*) + + + + System tray is unavailable, quitting. + 系统托盘不可用,程序退出。 + + + + ScreenSettingsDialog + + + Screen name is empty + 屏幕名为空 + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + 屏幕名不能为空。请填入一个名字或者关闭对话框。 + + + + Screen name matches alias + 屏幕名对应别名 + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + 屏幕名不能与别名相同,请取消或者更改别名。 + + + + ScreenSettingsDialogBase + + + Screen Settings + 屏幕设置 + + + + Screen &name: + 屏幕名: + + + + A&liases + 别名 + + + + &Add + 添加 + + + + &Remove + 删除 + + + + &Modifier keys + 修改按键 + + + + &Shift: + Shift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + 超级 + + + + + + + + None + + + + + &Ctrl: + Ctrl: + + + + Al&t: + Alt: + + + + M&eta: + Meta: + + + + S&uper: + Super: + + + + &Dead corners + 死角 + + + + Top-left + 左上角 + + + + Top-right + 右上角 + + + + Bottom-left + 左下角 + + + + Bottom-right + 右下角 + + + + Corner Si&ze: + 死角大小 + + + + &Fixes + 修改 + + + + Fix CAPS LOCK key + 修复caps lock键 + + + + Fix NUM LOCK key + 修复num lock键 + + + + Fix SCROLL LOCK key + 修复scroll lock键 + + + + Fix XTest for Xinerama + 修复Xinerama的XTest + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>屏幕设置: <b>%1</b></center><br>双击以修改设置<br>将屏幕拖到废纸篓来移除 + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + 服务端配置 + + + + Screens and links + 屏幕和联接 + + + + Drag a screen from the grid to the trashcan to remove it. + 从格子中拖动屏幕到垃圾桶进行删除。 + + + + Configure the layout of your synergy server configuration. + 设置Synergy服务端配置的屏幕布局。 + + + + Drag this button to the grid to add a new screen. + 拖动此按钮到格子中进行添加屏幕。 + + + + 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. + 拖动屏幕(图标)到网格中或者移动已经在网格中的屏幕的位置。 +拖动屏幕到垃圾桶进行删除。 +双击屏幕编辑其设置。 + + + + Hotkeys + 热键 + + + + &Hotkeys + 热键 + + + + &New + 新建 + + + + &Edit + 编辑 + + + + &Remove + 删除 + + + + A&ctions + 行为 + + + + Ne&w + 新建 + + + + E&dit + 编辑 + + + + Re&move + 删除 + + + + Advanced server settings + 服务端高级设置 + + + + &Switch + 切换 + + + + Switch &after waiting + 等待后切换 + + + + + + ms + 毫秒 + + + + Switch on double &tap within + 双击tap切换 + + + + &Options + 选项 + + + + &Check clients every + 客户端检查周期 + + + + Use &relative mouse moves + 使用相关的鼠标动作 + + + + S&ynchronize screen savers + 同步屏幕保护 + + + + Don't take &foreground window on Windows servers + 不要移动前台窗口在Windows服务器上 + + + + Ignore auto config clients + + + + + &Dead corners + 死角 + + + + To&p-left + 左上角 + + + + Top-rig&ht + 右上角 + + + + &Bottom-left + 左下角 + + + + Bottom-ri&ght + 右下角 + + + + Cor&ner Size: + 死角大小 + + + + SettingsDialog + + + Save log file to... + 保存日志文件… + + + + Elevate Synergy + 评价Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + 您确定要elevate Synergy吗? +这会允许Synergy和elevated进程交互和UAC对话框,但是可能引起一切和非elevated进程交互的问题。只有在你需要的时候才Elevate Synergy。 + + + + SettingsDialogBase + + + Settings + 设置 + + + + Sc&reen name: + 屏幕名称: + + + + P&ort: + 端口: + + + + &Interface: + 界面 + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + 日志记录 + + + + &Logging level: + 日志等级 + + + + Log to file: + 记录到文件 + + + + Browse... + 浏览… + + + + Error + 错误 + + + + &Language: + 语言: + + + + &Miscellaneous + 其他 + + + + Warning + 警告 + + + + Note + 注意 + + + + Info + 信息 + + + + Debug + 调试 + + + + Debug1 + 调试1 + + + + Debug2 + 调试2 + + + + SetupWizard + + + Setup Synergy + 设置Synergy + + + + Please select an option. + 请选择一个选项 + + + + Please enter your email address and password. + 请输入您的邮箱地址和密码。 + + + + SetupWizardBase + + + Setup Synergy + 设置Synergy + + + + Welcome + 欢迎 + + + + Thanks for installing Synergy! + 感谢您安装Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy允许你轻松地在你办公桌上多台计算机之间共享你的鼠标和键盘,它免费并且开放源代码。你只要将鼠标(指针)从一台计算机的屏幕边缘移出到另一个屏幕就行了。甚至可以共享你的剪贴板。你所需要的仅仅是一个网络连接。Synergy是跨平台的(可以运行于Windows,Mac OS X和Linux)。 + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + (此计算机作为)服务端还是客户端? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + 未知 + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + 登录失败,邮箱地址或密码错误。 + + + + Login failed, an error occurred. + +%1 + 登录失败,出错了。 +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + 登录失败,出错了。 +服务器回应: +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/lang/gui_zh-TW.qm b/src/gui/res/lang/gui_zh-TW.qm new file mode 100644 index 0000000000000000000000000000000000000000..92e5e3a5dd4399a2455d18540d88d1c5ca072749 GIT binary patch literal 16331 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 + + AboutDialogBase + + + About Synergy + 關於Synergy... + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + + + Unknown + 未知 + + + + Version: + 版本: + + + + &Ok + 確定 + + + + ActionDialogBase + + + Configure Action + 設定動作 + + + + Choose the action to perform + 選擇要執行的動作 + + + + Press a hotkey + 按下快捷鍵 + + + + Release a hotkey + 放開快捷鍵 + + + + Press and release a hotkey + 按下後放開快捷鍵 + + + + only on these screens + 只在下列螢幕顯示 + + + + Switch to screen + 切換至 + + + + Switch in direction + 切換方向 + + + + left + + + + + right + + + + + up + + + + + down + + + + + Lock cursor to screen + 鎖定至 + + + + toggle + 轉換 + + + + on + 開啟 + + + + off + 關閉 + + + + This action is performed when + 執行此動作,當 + + + + the hotkey is pressed + 已按下快捷鍵 + + + + the hotkey is released + 已放開快捷鍵 + + + + AddClientDialog + + + Dialog + + + + + TextLabel + + + + + Ignore auto connect clients + + + + + HotkeyDialogBase + + + Hotkey + 快捷鍵 + + + + Enter the specification for the hotkey: + 輸入快捷鍵設定: + + + + MainWindow + + + &Start + 啟動 + + + + &File + 檔案 + + + + &Edit + 編輯 + + + + &Window + 視窗 + + + + &Help + 幫助 + + + + <p>Your version of Synergy is out of date. Version <b>%1</b> is now available to <a href="%2">download</a>.</p> + <p>Version %1 is now available, <a href="%2">visit website</a>.</p> + <p>你的Synergy版本已經太舊, 版本 <b>%1</b>已經可以至 <a href="%2">下載</a>。</p> + + + + Program can not be started + 未能啟動程序 + + + + 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. + 未能成功啟動執行檔<br><br>%1<br><br>,儘管該檔案存在,請檢查執行程序權限設定。 + + + + Synergy client not found + 找不到Synergy客戶端 + + + + The executable for the synergy client does not exist. + Synergy客戶端執行檔不存在。 + + + + Hostname is empty + 電腦名稱不能空白 + + + + Please fill in a hostname for the synergy client to connect to. + 請輸入synergy客戶端要連接的電腦名稱。 + + + + Cannot write configuration file + 無法寫入設定檔 + + + + The temporary configuration file required to start synergy can not be written. + 無法寫入用以啟動synergy的暫存設定檔 + + + + Configuration filename invalid + 設定檔檔案名稱無效 + + + + You have not filled in a valid configuration file for the synergy server. Do you want to browse for the configuration file now? + 你沒有輸入有效的synergy伺服器設定檔,你需要現在瀏覽設定檔嗎? + + + + Synergy server not found + 找不到Synergy伺服器 + + + + The executable for the synergy server does not exist. + Synergy伺服器執行檔不存在。 + + + + Synergy terminated with an error + Synergy遇到錯誤,停止運作 + + + + Synergy terminated unexpectedly with an exit code of %1.<br><br>Please see the log output for details. + Synergy遇到錯誤,停止運作,錯誤碼 %1<br><br>詳細情況可參考記錄日誌。 + + + + &Stop + 停止 + + + + Please add the server (%1) to the grid. + + + + + Please drag the new client screen (%1) to the desired position on the grid. + + + + + Failed to detect system architecture. + + + + + Cancel + + + + + Failed to download Bonjour installer to location: %1 + + + + + Do you want to enable auto config and install Bonjour? + +This feature helps you establish the connection. + + + + + Auto config feature requires Bonjour. + +Do you want to install Bonjour? + + + + + Synergy is starting. + Synergy正在啟動中。 + + + + Synergy is running. + Synergy正在運作中。 + + + + Synergy is not running. + Synergy不在運作中。 + + + + Unknown + 未知 + + + + + + Synergy + Synergy + + + + Browse for a synergys config file + 瀏覽以選擇設定檔 + + + + Synergy is now connected, You can close the config window. Synergy will remain connected in the background. + + + + + Security question + + + + + 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). + +To automatically trust this fingerprint for future connections, click Yes. To reject this fingerprint and disconnect from the server, click No. + + + + + Save configuration as... + 儲存設定至... + + + + Save failed + 儲存失敗 + + + + Could not save configuration to file. + 無法儲存設定至檔案。 + + + + MainWindowBase + + + Synergy + Synergy + + + + Ser&ver (share this computer's mouse and keyboard): + + + + + Screen name: + 顯示名稱: + + + + &Server IP: + 伺服器(&S) IP: + + + + + &Start + 啟動 + + + + Use existing configuration: + 使用舊有設定檔: + + + + &Configuration file: + 設定檔: + + + + &Browse... + 瀏覽... + + + + Configure interactively: + 互動地設定: + + + + &Configure Server... + 設定伺服器... + + + + Ready + 準備 + + + + Log + 記錄 + + + + &Apply + 應用 + + + + IP addresses: + IP地址: + + + + Fingerprint: + + + + + &Client (use another computer's mouse and keyboard): + + + + + Auto config + + + + + &About Synergy... + 關於Synergy... + + + + &Quit + 離開 + + + + Quit + 離開 + + + + Run + 執行 + + + + S&top + 停止 + + + + Stop + 停止 + + + + S&how Status + 顯示狀態 + + + + &Hide + 隱藏 + + + + Hide + 隱藏 + + + + &Show + 顯示(&S) + + + + Show + 顯示 + + + + Save configuration &as... + 儲存設定至... + + + + Save the interactively generated server configuration to a file. + 儲存動態生成的設定至檔案。 + + + + Settings + 設定 + + + + Edit settings + 編輯 + + + + Run Wizard + 執行設定精靈 + + + + NewScreenWidget + + + Unnamed + 未命名 + + + + PluginManager + + + Failed to get plugin directory. + + + + + Failed to get profile directory. + + + + + Failed to download plugin '%1' to: %2 +%3 + + + + + Could not get Windows architecture type. + + + + + Could not get Linux architecture type. + + + + + PluginWizardPage + + + Setup Synergy + 設定Synergy + + + + Please wait... + + + + + Error: %1 + + + + + + Setup complete. + + + + + Downloading '%1' plugin (%2/%3)... + + + + + Plugins installed successfully. + + + + + Generating SSL certificate... + + + + + Downloading plugin: %1 (1/%2) + + + + + Getting plugin list... + + + + + QObject + + + Synergy Configurations (*.sgc);;All files (*.*) + Synergy 設定檔 (*.sgc);;所有檔案 (*.*) + + + + Synergy Configurations (*.conf);;All files (*.*) + Synergy 設定檔 (*.conf);;所有檔案 (*.*) + + + + System tray is unavailable, quitting. + 未能取得系統工具欄,正在離開。 + + + + ScreenSettingsDialog + + + Screen name is empty + 顯示名稱不能空白 + + + + The screen name cannot be empty. Please either fill in a name or cancel the dialog. + Screen name必填,請填入screen name或取消。 + + + + Screen name matches alias + 顯示名稱相同於別名 + + + + The screen name cannot be the same as an alias. Please either remove the alias or change the screen name. + Screen name不能與別名相同,請刪除別名或修改screen name。 + + + + ScreenSettingsDialogBase + + + Screen Settings + 顯示設定 + + + + Screen &name: + 顯示名稱: + + + + A&liases + 別名 + + + + &Add + 添加 + + + + &Remove + 移除 + + + + &Modifier keys + 功能鍵 + + + + &Shift: + &undefinedShift: + + + + + + + + Shift + Shift + + + + + + + + Ctrl + Ctrl + + + + + + + + Alt + Alt + + + + + + + + Meta + Meta + + + + + + + + Super + Super + + + + + + + + None + None + + + + &Ctrl: + &undefinedCtrl: + + + + Al&t: + &undefinedl&t: + + + + M&eta: + &undefined&eta: + + + + S&uper: + &undefined&uper: + + + + &Dead corners + 死角 + + + + Top-left + 左上 + + + + Top-right + 右上 + + + + Bottom-left + 左下 + + + + Bottom-right + 右下 + + + + Corner Si&ze: + 角落大小: + + + + &Fixes + 修正 + + + + Fix CAPS LOCK key + 修正CAPS LOCK鍵 + + + + Fix NUM LOCK key + 修正NUM LOCK鍵 + + + + Fix SCROLL LOCK key + 修正SCROLL LOCK鍵 + + + + Fix XTest for Xinerama + 修正Xinerama的XTest + + + + ScreenSetupModel + + + <center>Screen: <b>%1</b></center><br>Double click to edit settings<br>Drag screen to the trashcan to remove it + <center>螢幕: <b>%1</b></center><br>雙擊以編輯設定<br>拖動螢幕至垃圾筒以移除 + + + + ServerConfigDialog + + + Configure server + + + + + ServerConfigDialogBase + + + Server Configuration + 伺服器設定 + + + + Screens and links + 螢幕和連結 + + + + Drag a screen from the grid to the trashcan to remove it. + 從網格上拖動螢幕至垃圾筒以移除 + + + + Configure the layout of your synergy server configuration. + 設定synergy伺服器設定佈局 + + + + Drag this button to the grid to add a new screen. + 拖動此按鈕至網格以添加新螢幕 + + + + 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. + 拖動新螢幕至網格或在網格上拖動螢幕以改變佈局位置。 +拖動螢幕至垃圾筒以移除。 +雙擊螢幕以編輯設定。 + + + + Hotkeys + 快捷鍵 + + + + &Hotkeys + 快捷鍵 + + + + &New + 新建 + + + + &Edit + 編輯 + + + + &Remove + 移除 + + + + A&ctions + 動作 + + + + Ne&w + 新建 + + + + E&dit + 編輯 + + + + Re&move + 移除 + + + + Advanced server settings + 伺服器進階設定 + + + + &Switch + 切換 + + + + Switch &after waiting + 切換前稍後 + + + + + + ms + 微秒 + + + + Switch on double &tap within + 於多少時間內雙擊滑鼠進行切換 + + + + &Options + 選項 + + + + &Check clients every + 每隔多少時間檢查各客戶端 + + + + Use &relative mouse moves + 使用滑鼠相對移動方式 + + + + S&ynchronize screen savers + 同步螢幕保護程式 + + + + Don't take &foreground window on Windows servers + 在Windows伺服器上中不獲取前景視窗 + + + + Ignore auto config clients + + + + + &Dead corners + 死角 + + + + To&p-left + 左上方 + + + + Top-rig&ht + 右上方 + + + + &Bottom-left + 左下方 + + + + Bottom-ri&ght + 右下方 + + + + Cor&ner Size: + 角落大小: + + + + SettingsDialog + + + Save log file to... + 儲存記錄至檔案... + + + + Elevate Synergy + 以管理員身份使用 Synergy + + + + Are you sure you want to elevate Synergy? + +This allows Synergy to interact with elevated processes and the UAC dialog, but can cause problems with non-elevated processes. Elevate Synergy only if you really need to. + 你是否肯定以管理員身份使用 Synergy ? +這將會容許 Synergy 接觸系統程序及 UAC 使用者帳戶控制,但可能會與非管理員身份執行的程式發生問題。請認真考慮。 + + + + SettingsDialogBase + + + Settings + 設定 + + + + Sc&reen name: + 顯示名稱: + + + + P&ort: + 端口 + + + + &Interface: + 網絡界面: + + + + Elevate mode + + + + + &Hide on startup + + + + + &Network Security + + + + + Use &SSL encryption (unique certificate) + + + + + Logging + 記錄日誌 + + + + &Logging level: + 記錄等級: + + + + Log to file: + 記錄至檔案: + + + + Browse... + 瀏覽... + + + + Error + 錯誤 + + + + &Language: + 語言 + + + + &Miscellaneous + &雜項 + + + + Warning + 警告 + + + + Note + 通知 + + + + Info + 訊息 + + + + Debug + 偵錯 + + + + Debug1 + 偵錯1 + + + + Debug2 + 偵錯2 + + + + SetupWizard + + + Setup Synergy + 設定Synergy + + + + Please select an option. + 請挑選一選項。 + + + + Please enter your email address and password. + 請輸入你的email和密碼 + + + + SetupWizardBase + + + Setup Synergy + 設定Synergy + + + + Welcome + 歡迎 + + + + Thanks for installing Synergy! + 感謝您安裝Synergy! + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + Synergy是能讓您於多台電腦之間共享一組鍵盤與滑鼠的自由、開源軟體。您只須將滑鼠移出電腦螢幕邊緣就能遊走於不同電腦之間,甚至能共用每台電腦的系統剪貼簿。這些功能僅需依靠一條網路線連結,而且Synergy是跨平台的(可於Windows、Mac OS X及Linux上執行)。 + + + + Activate + + + + + &Activate now... + + + + + Email: + + + + + Password: + + + + + <a href="https://symless.com/account/reset/">Forgot password</a> + + + + + &Skip activation + + + + + &Server (share this computer's mouse and keyboard) + + + + + <!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> + + + + + &Client (use another computer's mouse and keyboard) + + + + + <!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> + + + + + Server or Client? + 伺服器端或客戶端? + + + + SslCertificate + + + Failed to get profile directory. + + + + + SSL certificate generated. + + + + + SSL fingerprint generated. + + + + + Failed to find SSL fingerprint. + + + + + VersionChecker + + + Unknown + 未知 + + + + WebClient + + + An error occurred while trying to sign in. Please contact the helpdesk, and provide the following details. + +%1 + + + + + Login failed, invalid email or password. + 登入失敗,無效的email或密碼 + + + + Login failed, an error occurred. + +%1 + 登入失敗,錯誤。 + +%1 + + + + Login failed, an error occurred. + +Server response: + +%1 + 登入失敗,錯誤。 + +伺服器: + +%1 + + + + An error occurred while trying to query the plugin list. Please contact the help desk, and provide the following details. + +%1 + + + + + Get plugin list failed, invalid user email or password. + + + + + Get plugin list failed, an error occurred. + +%1 + + + + + Get plugin list failed, an error occurred. + +Server response: + +%1 + + + + + ZeroconfService + + + zeroconf server detected: %1 + + + + + zeroconf client detected: %1 + + + + + + Zero configuration service + + + + + Error code: %1. + + + + + Unable to start the zeroconf: %1. + + + + + Synergy + Synergy + + + + Failed to get local IP address. Please manually type in server address on your clients + + + + + + %1 + + + + \ No newline at end of file diff --git a/src/gui/res/mac/Info.plist b/src/gui/res/mac/Info.plist new file mode 100644 index 00000000..b2d87e09 --- /dev/null +++ b/src/gui/res/mac/Info.plist @@ -0,0 +1,28 @@ + + + + CFBundleDevelopmentRegion + English + CFBundleDisplayName + Synergy + CFBundleExecutable + Synergy + CFBundleIconFile + Synergy.icns + CFBundleIdentifier + synergy + + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + Synergy + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.8.8 + CFBundleVersion + 1.8.8 + NSHumanReadableCopyright + © 2012-2016, Symless Ltd + + diff --git a/src/gui/res/mac/QSynergy.icns b/src/gui/res/mac/QSynergy.icns new file mode 100644 index 0000000000000000000000000000000000000000..0d87c5a551aa3e814751d3f6cd8d2702eca558e2 GIT binary patch literal 124558 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
KH%S((rguNnk`QgM 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. + */ + +#include "AboutDialog.h" + +#include +#include + +AboutDialog::AboutDialog(QWidget* parent, const QString& synergyApp) : + QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), + Ui::AboutDialogBase() +{ + setupUi(this); + + m_versionChecker.setApp(synergyApp); + m_pLabelSynergyVersion->setText(SYNERGY_VERSION_STRING); + + QString buildDateString = QString::fromLocal8Bit(__DATE__).simplified(); + QDate buildDate = QLocale("en_US").toDate(buildDateString, "MMM d yyyy"); + m_pLabelBuildDate->setText(buildDate.toString(Qt::SystemLocaleLongDate)); + + // change default size based on os +#if defined(Q_OS_MAC) + QSize size(600, 380); + setMaximumSize(size); + setMinimumSize(size); + resize(size); +#elif defined(Q_OS_LINUX) + QSize size(600, 330); + setMaximumSize(size); + setMinimumSize(size); + resize(size); +#endif +} diff --git a/src/gui/src/AboutDialog.h b/src/gui/src/AboutDialog.h new file mode 100644 index 00000000..bb53125b --- /dev/null +++ b/src/gui/src/AboutDialog.h @@ -0,0 +1,43 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(ABOUTDIALOG__H) + +#define ABOUTDIALOG__H + +#include +#include "VersionChecker.h" + +#include "ui_AboutDialogBase.h" + +class QWidget; +class QString; + +class AboutDialog : public QDialog, public Ui::AboutDialogBase +{ + Q_OBJECT + + public: + AboutDialog(QWidget* parent, const QString& synergyApp = QString()); + + private: + VersionChecker m_versionChecker; +}; + +#endif + diff --git a/src/gui/src/AboutDialogBase.ui b/src/gui/src/AboutDialogBase.ui new file mode 100644 index 00000000..b20e3a50 --- /dev/null +++ b/src/gui/src/AboutDialogBase.ui @@ -0,0 +1,223 @@ + + + AboutDialogBase + + + Qt::ApplicationModal + + + true + + + + 0 + 0 + 450 + 300 + + + + + 0 + 0 + + + + + 450 + 300 + + + + + 450 + 300 + + + + About Synergy + + + true + + + + + + + 0 + 0 + + + + <p> +Keyboard and mouse sharing application. Cross platform and open source.<br /><br /> +Copyright © 2012-2016 Symless Ltd.<br /> +Copyright © 2002-2012 Chris Schoeneman, Nick Bolton, Volker Lanz.<br /><br /> +Synergy is released under the GNU General Public License (GPLv2).<br /><br /> +Synergy is based on CosmoSynergy by Richard Lee and Adam Feder.<br /> +The Synergy GUI is based on QSynergy by Volker Lanz.<br /><br /> +Visit our website for help and info (symless.com). +</p> + + + 1 + + + + + + + Qt::Vertical + + + QSizePolicy::Preferred + + + + 20 + 100 + + + + + + + + + + + :/res/image/about.png + + + 0 + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 5 + + + + + + + + + + + 0 + 0 + + + + Version: + + + 1 + + + + + + + + 0 + 0 + + + + Unknown + + + 1 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + Build Date: + + + + + + + Unknown + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + &Ok + + + + + + + + + + + + + buttonOk + clicked() + AboutDialogBase + accept() + + + 315 + 374 + + + 301 + 3 + + + + + diff --git a/src/gui/src/Action.cpp b/src/gui/src/Action.cpp new file mode 100644 index 00000000..5d3792ef --- /dev/null +++ b/src/gui/src/Action.cpp @@ -0,0 +1,150 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "Action.h" + +#include +#include + +const char* Action::m_ActionTypeNames[] = +{ + "keyDown", "keyUp", "keystroke", + "switchToScreen", "switchInDirection", "lockCursorToScreen", + "mouseDown", "mouseUp", "mousebutton" +}; + +const char* Action::m_SwitchDirectionNames[] = { "left", "right", "up", "down" }; +const char* Action::m_LockCursorModeNames[] = { "toggle", "on", "off" }; + +Action::Action() : + m_KeySequence(), + m_Type(keystroke), + m_TypeScreenNames(), + m_SwitchScreenName(), + m_SwitchDirection(switchLeft), + m_LockCursorMode(lockCursorToggle), + m_ActiveOnRelease(false), + m_HasScreens(false) +{ +} + +QString Action::text() const +{ + QString text = QString(m_ActionTypeNames[keySequence().isMouseButton() ? type() + 6 : type() ]) + "("; + + switch (type()) + { + case keyDown: + case keyUp: + case keystroke: + { + text += keySequence().toString(); + + if (!keySequence().isMouseButton()) + { + const QStringList& screens = typeScreenNames(); + if (haveScreens() && !screens.isEmpty()) + { + text += ","; + + for (int i = 0; i < screens.size(); i++) + { + text += screens[i]; + if (i != screens.size() - 1) + text += ":"; + } + } + else + text += ",*"; + } + } + break; + + case switchToScreen: + text += switchScreenName(); + break; + + case switchInDirection: + text += m_SwitchDirectionNames[m_SwitchDirection]; + break; + + case lockCursorToScreen: + text += m_LockCursorModeNames[m_LockCursorMode]; + break; + + default: + Q_ASSERT(0); + break; + } + + text += ")"; + + return text; +} + +void Action::loadSettings(QSettings& settings) +{ + keySequence().loadSettings(settings); + setType(settings.value("type", keyDown).toInt()); + + typeScreenNames().clear(); + int numTypeScreens = settings.beginReadArray("typeScreenNames"); + for (int i = 0; i < numTypeScreens; i++) + { + settings.setArrayIndex(i); + typeScreenNames().append(settings.value("typeScreenName").toString()); + } + settings.endArray(); + + setSwitchScreenName(settings.value("switchScreenName").toString()); + setSwitchDirection(settings.value("switchInDirection", switchLeft).toInt()); + setLockCursorMode(settings.value("lockCursorToScreen", lockCursorToggle).toInt()); + setActiveOnRelease(settings.value("activeOnRelease", false).toBool()); + setHaveScreens(settings.value("hasScreens", false).toBool()); +} + +void Action::saveSettings(QSettings& settings) const +{ + keySequence().saveSettings(settings); + settings.setValue("type", type()); + + settings.beginWriteArray("typeScreenNames"); + for (int i = 0; i < typeScreenNames().size(); i++) + { + settings.setArrayIndex(i); + settings.setValue("typeScreenName", typeScreenNames()[i]); + } + settings.endArray(); + + settings.setValue("switchScreenName", switchScreenName()); + settings.setValue("switchInDirection", switchDirection()); + settings.setValue("lockCursorToScreen", lockCursorMode()); + settings.setValue("activeOnRelease", activeOnRelease()); + settings.setValue("hasScreens", haveScreens()); +} + +QTextStream& operator<<(QTextStream& outStream, const Action& action) +{ + if (action.activeOnRelease()) + outStream << ";"; + + outStream << action.text(); + + return outStream; +} + diff --git a/src/gui/src/Action.h b/src/gui/src/Action.h new file mode 100644 index 00000000..dea98df6 --- /dev/null +++ b/src/gui/src/Action.h @@ -0,0 +1,89 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(ACTION_H) + +#define ACTION_H + +#include "KeySequence.h" + +#include +#include +#include + +class ActionDialog; +class QSettings; +class QTextStream; + +class Action +{ + friend class ActionDialog; + friend QTextStream& operator<<(QTextStream& outStream, const Action& action); + + public: + enum ActionType { keyDown, keyUp, keystroke, switchToScreen, switchInDirection, lockCursorToScreen, mouseDown, mouseUp, mousebutton }; + enum SwitchDirection { switchLeft, switchRight, switchUp, switchDown }; + enum LockCursorMode { lockCursorToggle, lockCursonOn, lockCursorOff }; + + public: + Action(); + + public: + QString text() const; + const KeySequence& keySequence() const { return m_KeySequence; } + void loadSettings(QSettings& settings); + void saveSettings(QSettings& settings) const; + int type() const { return m_Type; } + 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; } + + 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; } + void setSwitchScreenName(const QString& n) { m_SwitchScreenName = n; } + void setSwitchDirection(int d) { m_SwitchDirection = d; } + void setLockCursorMode(int m) { m_LockCursorMode = m; } + void setActiveOnRelease(bool b) { m_ActiveOnRelease = b; } + void setHaveScreens(bool b) { m_HasScreens = b; } + + private: + KeySequence m_KeySequence; + int m_Type; + QStringList m_TypeScreenNames; + QString m_SwitchScreenName; + int m_SwitchDirection; + int m_LockCursorMode; + bool m_ActiveOnRelease; + bool m_HasScreens; + + static const char* m_ActionTypeNames[]; + static const char* m_SwitchDirectionNames[]; + static const char* m_LockCursorModeNames[]; +}; + +typedef QList ActionList; + +QTextStream& operator<<(QTextStream& outStream, const Action& action); + +#endif diff --git a/src/gui/src/ActionDialog.cpp b/src/gui/src/ActionDialog.cpp new file mode 100644 index 00000000..94950338 --- /dev/null +++ b/src/gui/src/ActionDialog.cpp @@ -0,0 +1,109 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "ActionDialog.h" + +#include "Hotkey.h" +#include "Action.h" +#include "ServerConfig.h" +#include "KeySequence.h" + +#include +#include + +ActionDialog::ActionDialog(QWidget* parent, ServerConfig& config, Hotkey& hotkey, Action& action) : + QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), + Ui::ActionDialogBase(), + m_ServerConfig(config), + m_Hotkey(hotkey), + m_Action(action), + m_pButtonGroupType(new QButtonGroup(this)) +{ + setupUi(this); + + // work around Qt Designer's lack of a QButtonGroup; we need it to get + // at the button id of the checked radio button + QRadioButton* const typeButtons[] = { m_pRadioPress, m_pRadioRelease, m_pRadioPressAndRelease, m_pRadioSwitchToScreen, m_pRadioSwitchInDirection, m_pRadioLockCursorToScreen }; + + for (unsigned int i = 0; i < sizeof(typeButtons) / sizeof(typeButtons[0]); i++) + m_pButtonGroupType->addButton(typeButtons[i], i); + + m_pKeySequenceWidgetHotkey->setText(m_Action.keySequence().toString()); + m_pKeySequenceWidgetHotkey->setKeySequence(m_Action.keySequence()); + m_pButtonGroupType->button(m_Action.type())->setChecked(true); + m_pComboSwitchInDirection->setCurrentIndex(m_Action.switchDirection()); + m_pComboLockCursorToScreen->setCurrentIndex(m_Action.lockCursorMode()); + + if (m_Action.activeOnRelease()) + m_pRadioHotkeyReleased->setChecked(true); + else + m_pRadioHotkeyPressed->setChecked(true); + + m_pGroupBoxScreens->setChecked(m_Action.haveScreens()); + + int idx = 0; + foreach(const Screen& screen, serverConfig().screens()) + if (!screen.isNull()) + { + QListWidgetItem *pListItem = new QListWidgetItem(screen.name()); + m_pListScreens->addItem(pListItem); + if (m_Action.typeScreenNames().indexOf(screen.name()) != -1) + m_pListScreens->setCurrentItem(pListItem); + + m_pComboSwitchToScreen->addItem(screen.name()); + if (screen.name() == m_Action.switchScreenName()) + m_pComboSwitchToScreen->setCurrentIndex(idx); + + idx++; + } +} + +void ActionDialog::accept() +{ + if (!sequenceWidget()->valid() && m_pButtonGroupType->checkedId() >= 0 && m_pButtonGroupType->checkedId() < 3) + return; + + m_Action.setKeySequence(sequenceWidget()->keySequence()); + 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.setSwitchScreenName(m_pComboSwitchToScreen->currentText()); + m_Action.setSwitchDirection(m_pComboSwitchInDirection->currentIndex()); + m_Action.setLockCursorMode(m_pComboLockCursorToScreen->currentIndex()); + m_Action.setActiveOnRelease(m_pRadioHotkeyReleased->isChecked()); + + QDialog::accept(); +} + +void ActionDialog::on_m_pKeySequenceWidgetHotkey_keySequenceChanged() +{ + if (sequenceWidget()->keySequence().isMouseButton()) + { + m_pGroupBoxScreens->setEnabled(false); + m_pListScreens->setEnabled(false); + } + else + { + m_pGroupBoxScreens->setEnabled(true); + m_pListScreens->setEnabled(true); + } +} diff --git a/src/gui/src/ActionDialog.h b/src/gui/src/ActionDialog.h new file mode 100644 index 00000000..34e4e856 --- /dev/null +++ b/src/gui/src/ActionDialog.h @@ -0,0 +1,56 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(ACTIONDIALOG_H) + +#define ACTIONDIALOG_H + +#include + +#include "ui_ActionDialogBase.h" + +class Hotkey; +class Action; +class QRadioButton; +class QButtonGroup; +class ServerConfig; + +class ActionDialog : public QDialog, public Ui::ActionDialogBase +{ + Q_OBJECT + + public: + ActionDialog(QWidget* parent, ServerConfig& config, Hotkey& hotkey, Action& action); + + protected slots: + void accept(); + void on_m_pKeySequenceWidgetHotkey_keySequenceChanged(); + + protected: + const KeySequenceWidget* sequenceWidget() const { return m_pKeySequenceWidgetHotkey; } + const ServerConfig& serverConfig() const { return m_ServerConfig; } + + private: + const ServerConfig& m_ServerConfig; + Hotkey& m_Hotkey; + Action& m_Action; + + QButtonGroup* m_pButtonGroupType; +}; + +#endif diff --git a/src/gui/src/ActionDialogBase.ui b/src/gui/src/ActionDialogBase.ui new file mode 100644 index 00000000..f6dff784 --- /dev/null +++ b/src/gui/src/ActionDialogBase.ui @@ -0,0 +1,581 @@ + + + ActionDialogBase + + + + 0 + 0 + 372 + 484 + + + + Configure Action + + + + + + Choose the action to perform + + + + + + Press a hotkey + + + true + + + + + + + Release a hotkey + + + + + + + Press and release a hotkey + + + + + + + + 1 + 0 + + + + + 256 + 0 + + + + + + + + + + + only on these screens + + + true + + + true + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 128 + 64 + + + + QAbstractItemView::ExtendedSelection + + + + + + + + + + Qt::Horizontal + + + + + + + + + Switch to screen + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + + + + + + + + + Switch in direction + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + + left + + + + + right + + + + + up + + + + + down + + + + + + + + + + + + Lock cursor to screen + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + + toggle + + + + + on + + + + + off + + + + + + + + + + + + + This action is performed when + + + + + + the hotkey is pressed + + + true + + + + + + + the hotkey is released + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KeySequenceWidget + QLineEdit +

KeySequenceWidget.h
+ + + + + + buttonBox + accepted() + ActionDialogBase + accept() + + + 245 + 474 + + + 157 + 274 + + + + + buttonBox + rejected() + ActionDialogBase + reject() + + + 313 + 474 + + + 286 + 274 + + + + + m_pGroupType + toggled(bool) + m_pKeySequenceWidgetHotkey + setDisabled(bool) + + + 104 + 194 + + + 110 + 132 + + + + + m_pRadioSwitchInDirection + toggled(bool) + m_pKeySequenceWidgetHotkey + setDisabled(bool) + + + 118 + 322 + + + 81 + 129 + + + + + m_pRadioLockCursorToScreen + toggled(bool) + m_pKeySequenceWidgetHotkey + setDisabled(bool) + + + 101 + 353 + + + 68 + 126 + + + + + m_pRadioPress + toggled(bool) + m_pKeySequenceWidgetHotkey + setEnabled(bool) + + + 48 + 48 + + + 45 + 129 + + + + + m_pRadioRelease + toggled(bool) + m_pKeySequenceWidgetHotkey + setEnabled(bool) + + + 135 + 70 + + + 148 + 125 + + + + + m_pRadioPressAndRelease + toggled(bool) + m_pKeySequenceWidgetHotkey + setEnabled(bool) + + + 194 + 100 + + + 201 + 125 + + + + + m_pRadioSwitchToScreen + toggled(bool) + m_pComboSwitchToScreen + setEnabled(bool) + + + 148 + 291 + + + 350 + 290 + + + + + m_pRadioSwitchInDirection + toggled(bool) + m_pComboSwitchInDirection + setEnabled(bool) + + + 158 + 322 + + + 350 + 321 + + + + + m_pRadioLockCursorToScreen + toggled(bool) + m_pComboLockCursorToScreen + setEnabled(bool) + + + 180 + 353 + + + 350 + 352 + + + + + m_pRadioPress + toggled(bool) + m_pGroupBoxScreens + setEnabled(bool) + + + 25 + 47 + + + 33 + 155 + + + + + m_pRadioSwitchToScreen + toggled(bool) + m_pGroupBoxScreens + setDisabled(bool) + + + 48 + 278 + + + 98 + 153 + + + + + m_pRadioRelease + toggled(bool) + m_pGroupBoxScreens + setEnabled(bool) + + + 264 + 67 + + + 241 + 158 + + + + + m_pRadioPressAndRelease + toggled(bool) + m_pGroupBoxScreens + setEnabled(bool) + + + 286 + 98 + + + 290 + 156 + + + + + m_pRadioSwitchInDirection + toggled(bool) + m_pGroupBoxScreens + setDisabled(bool) + + + 38 + 313 + + + 64 + 195 + + + + + m_pRadioLockCursorToScreen + toggled(bool) + m_pGroupBoxScreens + setDisabled(bool) + + + 48 + 339 + + + 79 + 234 + + + + + m_pRadioSwitchToScreen + toggled(bool) + m_pKeySequenceWidgetHotkey + setDisabled(bool) + + + 84 + 280 + + + 185 + 123 + + + + + diff --git a/src/gui/src/ActivationDialog.cpp b/src/gui/src/ActivationDialog.cpp new file mode 100644 index 00000000..eb6593b5 --- /dev/null +++ b/src/gui/src/ActivationDialog.cpp @@ -0,0 +1,123 @@ +#include "ActivationDialog.h" +#include "ui_ActivationDialog.h" +#include "CancelActivationDialog.h" +#include "AppConfig.h" +#include "WebClient.h" +#include +#include "ActivationNotifier.h" +#include "MainWindow.h" +#include "QUtility.h" +#include "LicenseManager.h" +#include "FailedLoginDialog.h" + +#include +#include +#include + +ActivationDialog::ActivationDialog(QWidget* parent, AppConfig& appConfig, + LicenseManager& licenseManager) : + QDialog(parent), + ui(new Ui::ActivationDialog), + m_appConfig(&appConfig), + m_LicenseManager (&licenseManager) +{ + ui->setupUi(this); + refreshSerialKey(); + time_t currentTime = ::time(0); + if (!m_LicenseManager->serialKey().isExpired(currentTime)) { + ui->m_trialWidget->hide(); + } +} + +void ActivationDialog::refreshSerialKey() +{ + ui->m_pTextEditSerialKey->setText(m_appConfig->serialKey()); + ui->m_pTextEditSerialKey->setFocus(); + ui->m_pTextEditSerialKey->moveCursor(QTextCursor::End); + ui->m_trialLabel->setText(tr("

Your trial has " + "expired. Buy now!" + "

") + .arg (m_appConfig->serialKey())); +} + +ActivationDialog::~ActivationDialog() +{ + delete ui; +} + +void ActivationDialog::reject() +{ + if (m_LicenseManager->activeEdition() == kUnregistered) { + CancelActivationDialog cancelActivationDialog(this); + if (QDialog::Accepted == cancelActivationDialog.exec()) { + m_LicenseManager->skipActivation(); + m_appConfig->activationHasRun(true); + m_appConfig->saveSettings(); + } else { + return; + } + } + QDialog::reject(); +} + +void ActivationDialog::accept() +{ + QMessageBox message; + m_appConfig->activationHasRun(true); + m_appConfig->saveSettings(); + + std::pair result; + try { + SerialKey serialKey (ui->m_pTextEditSerialKey->toPlainText(). + trimmed().toStdString()); + result = m_LicenseManager->setSerialKey(serialKey); + } + catch (std::exception& e) { + message.critical(this, "Unknown Error", + tr("An error occurred while trying to activate Synergy. " + "Please contact the helpdesk, and provide the " + "following information:\n\n%1").arg(e.what())); + refreshSerialKey(); + return; + } + + if (!result.first) { + message.critical(this, "Activation failed", + tr("%1").arg(result.second)); + refreshSerialKey(); + return; + } + + m_LicenseManager->notifyActivation("serial:" + m_appConfig->serialKey()); + Edition edition = m_LicenseManager->activeEdition(); + time_t daysLeft = m_LicenseManager->serialKey().daysLeft(::time(0)); + if (edition != kUnregistered) { + QString thanksMessage = tr("Thanks for trying %1! %5\n\n%2 day%3 of " + "your trial remain%4"). + arg (m_LicenseManager->getEditionName(edition)). + arg (daysLeft). + arg ((daysLeft == 1) ? "" : "s"). + arg ((daysLeft == 1) ? "s" : ""); + + if (edition == kPro) { + thanksMessage = thanksMessage.arg("If you're using SSL, " + "remember to activate all of your devices."); + } else { + thanksMessage = thanksMessage.arg(""); + } + + if (m_LicenseManager->serialKey().isTrial()) { + message.information(this, "Thanks!", thanksMessage); + } + else { + message.information(this, "Activated!", + tr("Thanks for activating %1!").arg + (m_LicenseManager->getEditionName(edition))); + } + } + + QDialog::accept(); +} diff --git a/src/gui/src/ActivationDialog.h b/src/gui/src/ActivationDialog.h new file mode 100644 index 00000000..0644bfc9 --- /dev/null +++ b/src/gui/src/ActivationDialog.h @@ -0,0 +1,35 @@ +#ifndef ACTIVATIONDIALOG_H +#define ACTIVATIONDIALOG_H + +#include +#include + +namespace Ui { +class ActivationDialog; +} + +class AppConfig; + +class ActivationDialog : public QDialog +{ + Q_OBJECT + +public: + ActivationDialog(QWidget *parent, AppConfig& appConfig, + LicenseManager& licenseManager); + ~ActivationDialog(); + +public slots: + void reject(); + void accept(); + +protected: + void refreshSerialKey(); + +private: + Ui::ActivationDialog *ui; + AppConfig* m_appConfig; + LicenseManager* m_LicenseManager; +}; + +#endif // ACTIVATIONDIALOG_H diff --git a/src/gui/src/ActivationDialog.ui b/src/gui/src/ActivationDialog.ui new file mode 100644 index 00000000..86fea30d --- /dev/null +++ b/src/gui/src/ActivationDialog.ui @@ -0,0 +1,163 @@ + + + ActivationDialog + + + + 0 + 0 + 410 + 211 + + + + Activate Synergy + + + + + + + 75 + true + + + + Serial key + + + + + + + <html><head/><body><p>This can be found on your <a href="https://symless.com/account/?source=gui"><span style=" text-decoration: underline; color:#0000ff;">account</span></a> page.</p></body></html> + + + true + + + + + + + true + + + true + + + <!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:'Sans'; font-size:10pt; font-weight:400; font-style:normal;"> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p></body></html> + + + false + + + + + + + + 2 + + + 0 + + + 0 + + + 8 + + + + + + + + :/res/icons/16x16/money.png + + + + + + + <html><head/><body><p>Your trial has expired. <a href="http://symless.com/pricing?src=gui"><span style=" text-decoration: underline; color:#0000ff;">Buy now!</span></a></p></body></html> + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + m_pTextEditSerialKey + + + + + + + buttonBox + accepted() + ActivationDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + ActivationDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/gui/src/ActivationNotifier.cpp b/src/gui/src/ActivationNotifier.cpp new file mode 100644 index 00000000..cfe99810 --- /dev/null +++ b/src/gui/src/ActivationNotifier.cpp @@ -0,0 +1,60 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2015 Synergy Seamless Inc. + * + * 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 . + */ + +#include "ActivationNotifier.h" + +#include "CoreInterface.h" + +ActivationNotifier::ActivationNotifier(QObject *parent) : + QObject(parent) +{ +} + +void ActivationNotifier::setIdentity(QString identity) +{ + m_Identity = identity; +} + +void ActivationNotifier::setUpdateInfo(QString const& fromVersion, + QString const& toVersion, + QString const& serialKey) +{ + m_fromVersion = fromVersion; + m_toVersion = toVersion; + m_serialKey = serialKey; +} + +void ActivationNotifier::notify() +{ + CoreInterface coreInterface; + try { + coreInterface.notifyActivation(m_Identity); + } + catch (...) { + // catch all exceptions and fails silently + } +} + +void ActivationNotifier::notifyUpdate() +{ + try { + CoreInterface coreInterface; + coreInterface.notifyUpdate(m_fromVersion, m_toVersion, + m_serialKey); + } catch (...) { + } +} diff --git a/src/gui/src/ActivationNotifier.h b/src/gui/src/ActivationNotifier.h new file mode 100644 index 00000000..36ac76f4 --- /dev/null +++ b/src/gui/src/ActivationNotifier.h @@ -0,0 +1,47 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2015 Synergy Seamless Inc. + * + * 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 . + */ + +#ifndef ACTIVATIONNOTIFIER_H +#define ACTIVATIONNOTIFIER_H + +#include + +class ActivationNotifier : public QObject +{ +Q_OBJECT +public: + explicit ActivationNotifier(QObject *parent = 0); + + void setIdentity(QString identity); + void setUpdateInfo(QString const& fromVersion, + QString const& toVersion, QString const& serialKey); + +public slots: + void notify(); + void notifyUpdate(); + +signals: + void finished(); + +private: + QString m_Identity; + QString m_fromVersion; + QString m_toVersion; + QString m_serialKey; +}; + +#endif // ACTIVATIONNOTIFIER_H diff --git a/src/gui/src/AddClientDialog.cpp b/src/gui/src/AddClientDialog.cpp new file mode 100644 index 00000000..fd2f1d10 --- /dev/null +++ b/src/gui/src/AddClientDialog.cpp @@ -0,0 +1,129 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#include "AddClientDialog.h" +#include "ui_AddClientDialogBase.h" + +#include +#include + +AddClientDialog::AddClientDialog(const QString& clientName, QWidget* parent) : + QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), + Ui::AddClientDialog(), + m_AddResult(kAddClientIgnore), + m_IgnoreAutoConfigClient(false) +{ + setupUi(this); + + m_pLabelHead->setText("A client wants to connect. " + "Please choose a location for " + clientName + "."); + + QIcon icon(":res/icons/64x64/video-display.png"); + QSize IconSize(32,32); + + m_pButtonLeft = new QPushButton(this); + m_pButtonLeft->setIcon(icon); + m_pButtonLeft->setIconSize(IconSize); + gridLayout->addWidget(m_pButtonLeft, 2, 0, 1, 1, Qt::AlignCenter); + connect(m_pButtonLeft, SIGNAL(clicked()), this, SLOT(handleButtonLeft())); + + m_pButtonUp = new QPushButton(this); + m_pButtonUp->setIcon(icon); + m_pButtonUp->setIconSize(IconSize); + gridLayout->addWidget(m_pButtonUp, 1, 1, 1, 1, Qt::AlignCenter); + connect(m_pButtonUp, SIGNAL(clicked()), this, SLOT(handleButtonUp())); + + m_pButtonRight = new QPushButton(this); + m_pButtonRight->setIcon(icon); + m_pButtonRight->setIconSize(IconSize); + gridLayout->addWidget(m_pButtonRight, 2, 2, 1, 1, Qt::AlignCenter); + connect(m_pButtonRight, SIGNAL(clicked()), this, SLOT(handleButtonRight())); + + m_pButtonDown = new QPushButton(this); + m_pButtonDown->setIcon(icon); + m_pButtonDown->setIconSize(IconSize); + gridLayout->addWidget(m_pButtonDown, 3, 1, 1, 1, Qt::AlignCenter); + connect(m_pButtonDown, SIGNAL(clicked()), this, SLOT(handleButtonDown())); + + m_pLabelCenter = new QLabel(this); + m_pLabelCenter->setPixmap(QPixmap(":res/icons/64x64/video-display.png")); + gridLayout->addWidget(m_pLabelCenter, 2, 1, 1, 1, Qt::AlignCenter); + +#if defined(Q_OS_MAC) + m_pDialogButtonBox->setLayoutDirection(Qt::RightToLeft); +#endif + + QPushButton* advanced = m_pDialogButtonBox->addButton("Advanced", + QDialogButtonBox::HelpRole); + connect(advanced, SIGNAL(clicked()), this, SLOT(handleButtonAdvanced())); +} + +AddClientDialog::~AddClientDialog() +{ + delete m_pButtonUp; + delete m_pButtonDown; + delete m_pButtonLeft; + delete m_pButtonRight; + delete m_pLabelCenter; +} + +void AddClientDialog::changeEvent(QEvent *e) +{ + QDialog::changeEvent(e); + switch (e->type()) { + case QEvent::LanguageChange: + retranslateUi(this); + break; + default: + break; + } +} + +void AddClientDialog::handleButtonLeft() +{ + m_AddResult = kAddClientLeft; + close(); +} + +void AddClientDialog::handleButtonUp() +{ + m_AddResult = kAddClientUp; + close(); +} + +void AddClientDialog::handleButtonRight() +{ + m_AddResult = kAddClientRight; + close(); +} + +void AddClientDialog::handleButtonDown() +{ + m_AddResult = kAddClientDown; + close(); +} + +void AddClientDialog::handleButtonAdvanced() +{ + m_AddResult = kAddClientOther; + close(); +} + +void AddClientDialog::on_m_pCheckBoxIgnoreClient_toggled(bool checked) +{ + m_IgnoreAutoConfigClient = checked; +} diff --git a/src/gui/src/AddClientDialog.h b/src/gui/src/AddClientDialog.h new file mode 100644 index 00000000..0563ddc7 --- /dev/null +++ b/src/gui/src/AddClientDialog.h @@ -0,0 +1,68 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#ifndef ADDCLIENTDIALOG_H +#define ADDCLIENTDIALOG_H + +#include "ui_AddClientDialogBase.h" + +#include + +class QPushButton; +class QLabel; + +enum { + kAddClientRight, + kAddClientLeft, + kAddClientUp, + kAddClientDown, + kAddClientOther, + kAddClientIgnore +}; + +class AddClientDialog : public QDialog, public Ui::AddClientDialog +{ + Q_OBJECT +public: + AddClientDialog(const QString& clientName, QWidget* parent = 0); + ~AddClientDialog(); + + int addResult() { return m_AddResult; } + bool ignoreAutoConfigClient() { return m_IgnoreAutoConfigClient; } + +protected: + void changeEvent(QEvent *e); + +private slots: + void on_m_pCheckBoxIgnoreClient_toggled(bool checked); + void handleButtonLeft(); + void handleButtonUp(); + void handleButtonRight(); + void handleButtonDown(); + void handleButtonAdvanced(); + +private: + QPushButton* m_pButtonLeft; + QPushButton* m_pButtonUp; + QPushButton* m_pButtonRight; + QPushButton* m_pButtonDown; + QLabel* m_pLabelCenter; + int m_AddResult; + bool m_IgnoreAutoConfigClient; +}; + +#endif // ADDCLIENTDIALOG_H diff --git a/src/gui/src/AddClientDialogBase.ui b/src/gui/src/AddClientDialogBase.ui new file mode 100644 index 00000000..24397b4c --- /dev/null +++ b/src/gui/src/AddClientDialogBase.ui @@ -0,0 +1,144 @@ + + + AddClientDialog + + + + 0 + 0 + 400 + 350 + + + + + 0 + 0 + + + + Dialog + + + + + 10 + 10 + 381 + 301 + + + + + + + TextLabel + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + 10 + 320 + 381 + 31 + + + + + + + Ignore auto connect clients + + + + + + + + 0 + 0 + + + + Qt::Horizontal + + + QDialogButtonBox::Ignore + + + false + + + + + + + + + + m_pDialogButtonBox + accepted() + AddClientDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + m_pDialogButtonBox + rejected() + AddClientDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/gui/src/AppConfig.cpp b/src/gui/src/AppConfig.cpp new file mode 100644 index 00000000..3fac02a9 --- /dev/null +++ b/src/gui/src/AppConfig.cpp @@ -0,0 +1,293 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "AppConfig.h" +#include "QUtility.h" + +#include +#include + +#if defined(Q_OS_WIN) +const char AppConfig::m_SynergysName[] = "synergys.exe"; +const char AppConfig::m_SynergycName[] = "synergyc.exe"; +const char AppConfig::m_SynergyLogDir[] = "log/"; +#define DEFAULT_PROCESS_MODE Service +#else +const char AppConfig::m_SynergysName[] = "synergys"; +const char AppConfig::m_SynergycName[] = "synergyc"; +const char AppConfig::m_SynergyLogDir[] = "/var/log/"; +#define DEFAULT_PROCESS_MODE Desktop +#endif + +const ElevateMode defaultElevateMode = ElevateAsNeeded; + +static const char* logLevelNames[] = +{ + "ERROR", + "WARNING", + "NOTE", + "INFO", + "DEBUG", + "DEBUG1", + "DEBUG2" +}; + +AppConfig::AppConfig(QSettings* settings) : + m_pSettings(settings), + m_ScreenName(), + m_Port(24800), + m_Interface(), + m_LogLevel(0), + m_WizardLastRun(0), + m_ProcessMode(DEFAULT_PROCESS_MODE), + m_AutoConfig(true), + m_ElevateMode(defaultElevateMode), + m_AutoConfigPrompted(false), + m_CryptoEnabled(false), + m_AutoHide(false), + m_LastExpiringWarningTime(0) +{ + Q_ASSERT(m_pSettings); + + loadSettings(); +} + +AppConfig::~AppConfig() +{ + saveSettings(); +} + +const QString &AppConfig::screenName() const { return m_ScreenName; } + +int AppConfig::port() const { return m_Port; } + +const QString &AppConfig::networkInterface() const { return m_Interface; } + +int AppConfig::logLevel() const { return m_LogLevel; } + +bool AppConfig::logToFile() const { return m_LogToFile; } + +const QString &AppConfig::logFilename() const { return m_LogFilename; } + +QString AppConfig::synergyLogDir() const +{ +#if defined(Q_OS_WIN) + // on windows, we want to log to program files + return synergyProgramDir() + "log/"; +#else + // on unix, we'll log to the standard log dir + return "/var/log/"; +#endif +} + +QString AppConfig::synergyProgramDir() const +{ + // synergy binaries should be in the same dir. + return QCoreApplication::applicationDirPath() + "/"; +} + +void AppConfig::persistLogDir() +{ + QDir dir = synergyLogDir(); + + // persist the log directory + if (!dir.exists()) + { + dir.mkpath(dir.path()); + } +} + +const QString AppConfig::logFilenameCmd() const +{ + QString filename = m_LogFilename; +#if defined(Q_OS_WIN) + // wrap in quotes in case username contains spaces. + filename = QString("\"%1\"").arg(filename); +#endif + return filename; +} + +QString AppConfig::logLevelText() const +{ + return logLevelNames[logLevel()]; +} + +ProcessMode AppConfig::processMode() const { return m_ProcessMode; } + +bool AppConfig::wizardShouldRun() const { return m_WizardLastRun < kWizardVersion; } + +const QString &AppConfig::language() const { return m_Language; } + +bool AppConfig::startedBefore() const { return m_StartedBefore; } + +bool AppConfig::autoConfig() const { return m_AutoConfig; } + +void AppConfig::loadSettings() +{ + m_ScreenName = settings().value("screenName", QHostInfo::localHostName()).toString(); + m_Port = settings().value("port", 24800).toInt(); + m_Interface = settings().value("interface").toString(); + m_LogLevel = settings().value("logLevel", 3).toInt(); // level 3: INFO + m_LogToFile = settings().value("logToFile", false).toBool(); + m_LogFilename = settings().value("logFilename", synergyLogDir() + "synergy.log").toString(); + m_WizardLastRun = settings().value("wizardLastRun", 0).toInt(); + m_Language = settings().value("language", QLocale::system().name()).toString(); + m_StartedBefore = settings().value("startedBefore", false).toBool(); + m_AutoConfig = settings().value("autoConfig", true).toBool(); + QVariant elevateMode = settings().value("elevateModeEnum"); + if (!elevateMode.isValid()) { + elevateMode = settings().value ("elevateMode", + QVariant(static_cast(defaultElevateMode))); + } + m_ElevateMode = static_cast(elevateMode.toInt()); + m_AutoConfigPrompted = settings().value("autoConfigPrompted", false).toBool(); + m_Edition = static_cast(settings().value("edition", kUnregistered).toInt()); + m_ActivateEmail = settings().value("activateEmail", "").toString(); + m_CryptoEnabled = settings().value("cryptoEnabled", true).toBool(); + m_AutoHide = settings().value("autoHide", false).toBool(); + m_Serialkey = settings().value("serialKey", "").toString().trimmed(); + m_lastVersion = settings().value("lastVersion", "Unknown").toString(); + m_LastExpiringWarningTime = settings().value("lastExpiringWarningTime", 0).toInt(); + m_ActivationHasRun = settings().value("activationHasRun", false).toBool(); +} + +void AppConfig::saveSettings() +{ + settings().setValue("screenName", m_ScreenName); + settings().setValue("port", m_Port); + settings().setValue("interface", m_Interface); + settings().setValue("logLevel", m_LogLevel); + settings().setValue("logToFile", m_LogToFile); + settings().setValue("logFilename", m_LogFilename); + settings().setValue("wizardLastRun", kWizardVersion); + settings().setValue("language", m_Language); + settings().setValue("startedBefore", m_StartedBefore); + settings().setValue("autoConfig", m_AutoConfig); + // Refer to enum ElevateMode declaration for insight in to why this + // flag is mapped this way + settings().setValue("elevateMode", m_ElevateMode == ElevateAlways); + settings().setValue("elevateModeEnum", static_cast(m_ElevateMode)); + settings().setValue("autoConfigPrompted", m_AutoConfigPrompted); + settings().setValue("edition", m_Edition); + settings().setValue("cryptoEnabled", m_CryptoEnabled); + settings().setValue("autoHide", m_AutoHide); + settings().setValue("serialKey", m_Serialkey); + settings().setValue("lastVersion", m_lastVersion); + settings().setValue("lastExpiringWarningTime", m_LastExpiringWarningTime); + settings().setValue("activationHasRun", m_ActivationHasRun); + settings().sync(); +} + +bool AppConfig::activationHasRun() const +{ + return m_ActivationHasRun; +} + +AppConfig& AppConfig::activationHasRun(bool value) +{ + m_ActivationHasRun = value; + return *this; +} + +QString AppConfig::lastVersion() const +{ + return m_lastVersion; +} + +void AppConfig::setLastVersion(QString version) { + m_lastVersion = version; +} + +QSettings &AppConfig::settings() { return *m_pSettings; } + +void AppConfig::setScreenName(const QString &s) { m_ScreenName = s; } + +void AppConfig::setPort(int i) { m_Port = i; } + +void AppConfig::setNetworkInterface(const QString &s) { m_Interface = s; } + +void AppConfig::setLogLevel(int i) { m_LogLevel = i; } + +void AppConfig::setLogToFile(bool b) { m_LogToFile = b; } + +void AppConfig::setLogFilename(const QString &s) { m_LogFilename = s; } + +void AppConfig::setWizardHasRun() { m_WizardLastRun = kWizardVersion; } + +void AppConfig::setLanguage(const QString language) { m_Language = language; } + +void AppConfig::setStartedBefore(bool b) { m_StartedBefore = b; } + +void AppConfig::setElevateMode(ElevateMode em) { m_ElevateMode = em; } + +void AppConfig::setAutoConfig(bool autoConfig) +{ + m_AutoConfig = autoConfig; +} + +bool AppConfig::autoConfigPrompted() { return m_AutoConfigPrompted; } + +void AppConfig::setAutoConfigPrompted(bool prompted) +{ + m_AutoConfigPrompted = prompted; +} + +void AppConfig::setEdition(Edition e) { + m_Edition = e; +} + +Edition AppConfig::edition() const { return m_Edition; } + +QString AppConfig::setSerialKey(QString serial) { + using std::swap; + swap (serial, m_Serialkey); + return serial; +} + +void AppConfig::clearSerialKey() +{ + m_Serialkey.clear(); +} + +QString AppConfig::serialKey() { return m_Serialkey; } + +int AppConfig::lastExpiringWarningTime() const { return m_LastExpiringWarningTime; } + +void AppConfig::setLastExpiringWarningTime(int t) { m_LastExpiringWarningTime = t; } + +QString AppConfig::synergysName() const { return m_SynergysName; } + +QString AppConfig::synergycName() const { return m_SynergycName; } + +ElevateMode AppConfig::elevateMode() +{ + return m_ElevateMode; +} + +void AppConfig::setCryptoEnabled(bool e) { + m_CryptoEnabled = e; + emit sslToggled(e); +} + +bool AppConfig::getCryptoEnabled() const { + return (edition() == kPro) && m_CryptoEnabled; +} + +void AppConfig::setAutoHide(bool b) { m_AutoHide = b; } + +bool AppConfig::getAutoHide() { return m_AutoHide; } diff --git a/src/gui/src/AppConfig.h b/src/gui/src/AppConfig.h new file mode 100644 index 00000000..fb4b37ed --- /dev/null +++ b/src/gui/src/AppConfig.h @@ -0,0 +1,159 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(APPCONFIG_H) + +#define APPCONFIG_H + +#include +#include +#include "ElevateMode.h" +#include + +// this should be incremented each time a new page is added. this is +// saved to settings when the user finishes running the wizard. if +// the saved wizard version is lower than this number, the wizard +// will be displayed. each version incrememnt should be described +// here... +// +// 1: first version +// 2: added language page +// 3: added premium page and removed +// 4: ssl plugin 'ns' v1.0 +// 5: ssl plugin 'ns' v1.1 +// 6: ssl plugin 'ns' v1.2 +// 7: serial key activation +// 8: Visual Studio 2015 support +// +const int kWizardVersion = 8; + +class QSettings; +class SettingsDialog; + +enum ProcessMode { + Service, + Desktop +}; + +class AppConfig: public QObject +{ + Q_OBJECT + + friend class SettingsDialog; + friend class MainWindow; + friend class SetupWizard; + + public: + AppConfig(QSettings* settings); + ~AppConfig(); + + public: + const QString& screenName() const; + int port() const; + const QString& networkInterface() const; + int logLevel() const; + bool logToFile() const; + const QString& logFilename() const; + const QString logFilenameCmd() const; + QString logLevelText() const; + ProcessMode processMode() const; + bool wizardShouldRun() const; + const QString& language() const; + bool startedBefore() const; + bool autoConfig() const; + void setAutoConfig(bool autoConfig); + bool autoConfigPrompted(); + void setAutoConfigPrompted(bool prompted); + void setEdition(Edition); + Edition edition() const; + QString setSerialKey(QString serial); + void clearSerialKey(); + QString serialKey(); + int lastExpiringWarningTime() const; + void setLastExpiringWarningTime(int t); + + QString synergysName() const; + QString synergycName() const; + QString synergyProgramDir() const; + QString synergyLogDir() const; + + bool detectPath(const QString& name, QString& path); + void persistLogDir(); + ElevateMode elevateMode(); + + void setCryptoEnabled(bool e); + bool getCryptoEnabled() const; + + void setAutoHide(bool b); + bool getAutoHide(); + + bool activationHasRun() const; + AppConfig& activationHasRun(bool value); + + QString lastVersion() const; + + void saveSettings(); + void setLastVersion(QString version); + +protected: + QSettings& settings(); + void setScreenName(const QString& s); + void setPort(int i); + void setNetworkInterface(const QString& s); + void setLogLevel(int i); + void setLogToFile(bool b); + void setLogFilename(const QString& s); + void setWizardHasRun(); + void setLanguage(const QString language); + void setStartedBefore(bool b); + void setElevateMode(ElevateMode em); + void loadSettings(); + + private: + QSettings* m_pSettings; + QString m_ScreenName; + int m_Port; + QString m_Interface; + int m_LogLevel; + bool m_LogToFile; + QString m_LogFilename; + int m_WizardLastRun; + ProcessMode m_ProcessMode; + QString m_Language; + bool m_StartedBefore; + bool m_AutoConfig; + ElevateMode m_ElevateMode; + bool m_AutoConfigPrompted; + Edition m_Edition; + QString m_ActivateEmail; + bool m_CryptoEnabled; + bool m_AutoHide; + QString m_Serialkey; + QString m_lastVersion; + int m_LastExpiringWarningTime; + bool m_ActivationHasRun; + + static const char m_SynergysName[]; + static const char m_SynergycName[]; + static const char m_SynergyLogDir[]; + + signals: + void sslToggled(bool enabled); +}; + +#endif diff --git a/src/gui/src/BaseConfig.cpp b/src/gui/src/BaseConfig.cpp new file mode 100644 index 00000000..8def4f7b --- /dev/null +++ b/src/gui/src/BaseConfig.cpp @@ -0,0 +1,46 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "BaseConfig.h" + +const char* BaseConfig::m_ModifierNames[] = +{ + "shift", + "ctrl", + "alt", + "meta", + "super", + "none" +}; + +const char* BaseConfig::m_FixNames[] = +{ + "halfDuplexCapsLock", + "halfDuplexNumLock", + "halfDuplexScrollLock", + "xtestIsXineramaUnaware" +}; + +const char* BaseConfig::m_SwitchCornerNames[] = +{ + "top-left", + "top-right", + "bottom-left", + "bottom-right" +}; + diff --git a/src/gui/src/BaseConfig.h b/src/gui/src/BaseConfig.h new file mode 100644 index 00000000..f6f38834 --- /dev/null +++ b/src/gui/src/BaseConfig.h @@ -0,0 +1,91 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(BASECONFIG_H) + +#define BASECONFIG_H + +#include +#include +#include + +class BaseConfig +{ + public: + enum Modifier { DefaultMod = -1, Shift, Ctrl, Alt, Meta, Super, None, NumModifiers }; + enum SwitchCorner { TopLeft, TopRight, BottomLeft, BottomRight, NumSwitchCorners }; + enum Fix { CapsLock, NumLock, ScrollLock, XTest, NumFixes }; + + protected: + BaseConfig() {} + virtual ~BaseConfig() {} + + protected: + template + void readSettings(QSettings& settings, T1& array, const QString& arrayName, const T2& deflt) + { + int entries = settings.beginReadArray(arrayName + "Array"); + array.clear(); + for (int i = 0; i < entries; i++) + { + settings.setArrayIndex(i); + QVariant v = settings.value(arrayName, deflt); + array.append(v.value()); + } + settings.endArray(); + } + + template + void readSettings(QSettings& settings, T1& array, const QString& arrayName, const T2& deflt, int entries) + { + Q_ASSERT(array.size() >= entries); + settings.beginReadArray(arrayName + "Array"); + for (int i = 0; i < entries; i++) + { + settings.setArrayIndex(i); + QVariant v = settings.value(arrayName, deflt); + array[i] = v.value(); + } + settings.endArray(); + } + + template + void writeSettings(QSettings& settings, const T& array, const QString& arrayName) const + { + settings.beginWriteArray(arrayName + "Array"); + for (int i = 0; i < array.size(); i++) + { + settings.setArrayIndex(i); + settings.setValue(arrayName, array[i]); + } + settings.endArray(); + } + + + public: + static const char* modifierName(int idx) { return m_ModifierNames[idx]; } + static const char* fixName(int idx) { return m_FixNames[idx]; } + static const char* switchCornerName(int idx) { return m_SwitchCornerNames[idx]; } + + private: + static const char* m_ModifierNames[]; + static const char* m_FixNames[]; + static const char* m_SwitchCornerNames[]; +}; + +#endif diff --git a/src/gui/src/CancelActivationDialog.cpp b/src/gui/src/CancelActivationDialog.cpp new file mode 100644 index 00000000..3397309e --- /dev/null +++ b/src/gui/src/CancelActivationDialog.cpp @@ -0,0 +1,14 @@ +#include "CancelActivationDialog.h" +#include "ui_CancelActivationDialog.h" + +CancelActivationDialog::CancelActivationDialog(QWidget *parent) : + QDialog(parent), + ui(new Ui::CancelActivationDialog) +{ + ui->setupUi(this); +} + +CancelActivationDialog::~CancelActivationDialog() +{ + delete ui; +} diff --git a/src/gui/src/CancelActivationDialog.h b/src/gui/src/CancelActivationDialog.h new file mode 100644 index 00000000..bd387186 --- /dev/null +++ b/src/gui/src/CancelActivationDialog.h @@ -0,0 +1,22 @@ +#ifndef CANCELACTIVATIONDIALOG_H +#define CANCELACTIVATIONDIALOG_H + +#include + +namespace Ui { +class CancelActivationDialog; +} + +class CancelActivationDialog : public QDialog +{ + Q_OBJECT + +public: + explicit CancelActivationDialog(QWidget *parent = 0); + ~CancelActivationDialog(); + +private: + Ui::CancelActivationDialog *ui; +}; + +#endif // CANCELACTIVATIONDIALOG_H diff --git a/src/gui/src/CancelActivationDialog.ui b/src/gui/src/CancelActivationDialog.ui new file mode 100644 index 00000000..054b3fe6 --- /dev/null +++ b/src/gui/src/CancelActivationDialog.ui @@ -0,0 +1,89 @@ + + + CancelActivationDialog + + + + 0 + 0 + 400 + 165 + + + + Cancel Activation + + + + + + Are you sure? + +If you don't activate Synergy you'll be missing out on some great features. + + + true + + + true + + + + + + + <html><head/><body><p><a href="https://symless.com/pricing?source=gui"><span style=" text-decoration: underline; color:#0000ff;">Buy now</span></a></p></body></html> + + + true + + + + + + + Qt::Horizontal + + + QDialogButtonBox::No|QDialogButtonBox::Yes + + + + + + + + + buttonBox + accepted() + CancelActivationDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + CancelActivationDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/gui/src/CommandProcess.cpp b/src/gui/src/CommandProcess.cpp new file mode 100644 index 00000000..361d14fe --- /dev/null +++ b/src/gui/src/CommandProcess.cpp @@ -0,0 +1,63 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#include "CommandProcess.h" + +#include +#include + +CommandProcess::CommandProcess(QString cmd, QStringList arguments, QString input) : + m_Command(cmd), + m_Arguments(arguments), + m_Input(input) +{ +} + +QString CommandProcess::run() +{ + QProcess process; + process.setReadChannel(QProcess::StandardOutput); + process.start(m_Command, m_Arguments); + bool success = process.waitForStarted(); + + QString output, error; + if (success) + { + if (!m_Input.isEmpty()) { + process.write(m_Input.toStdString().c_str()); + } + + if (process.waitForFinished()) { + output = process.readAllStandardOutput().trimmed(); + error = process.readAllStandardError().trimmed(); + } + } + + int code = process.exitCode(); + if (!error.isEmpty() || !success || code != 0) + { + throw std::runtime_error( + QString("Code: %1\nError: %2") + .arg(process.exitCode()) + .arg(error.isEmpty() ? "Unknown" : error) + .toStdString()); + } + + emit finished(); + + return output; +} diff --git a/src/gui/src/CommandProcess.h b/src/gui/src/CommandProcess.h new file mode 100644 index 00000000..62397907 --- /dev/null +++ b/src/gui/src/CommandProcess.h @@ -0,0 +1,43 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#ifndef COMMANDTHREAD_H +#define COMMANDTHREAD_H + +#include +#include + +class CommandProcess : public QObject +{ + Q_OBJECT + +public: + CommandProcess(QString cmd, QStringList arguments, QString input = ""); + +signals: + void finished(); + +public slots: + QString run(); + +private: + QString m_Command; + QStringList m_Arguments; + QString m_Input; +}; + +#endif // COMMANDTHREAD_H diff --git a/src/gui/src/CoreInterface.cpp b/src/gui/src/CoreInterface.cpp new file mode 100644 index 00000000..ef3dc326 --- /dev/null +++ b/src/gui/src/CoreInterface.cpp @@ -0,0 +1,96 @@ +/* + * synergy -- 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 . + */ + +#include "CoreInterface.h" + +#include "CommandProcess.h" +#include "QUtility.h" + +#include +#include +#include +#include +#include + +static const char kCoreBinary[] = "syntool"; + +#ifdef Q_WS_WIN +static const char kSerialKeyFilename[] = "Synergy.subkey"; +#else +static const char kSerialKeyFilename[] = ".synergy.subkey"; +#endif + +CoreInterface::CoreInterface() +{ +} + +QString CoreInterface::getProfileDir() +{ + QStringList args("--get-profile-dir"); + return run(args); +} + +QString CoreInterface::getInstalledDir() +{ + QStringList args("--get-installed-dir"); + return run(args); +} + +QString CoreInterface::getArch() +{ + QStringList args("--get-arch"); + return run(args); +} + +QString CoreInterface::getSerialKeyFilePath() +{ + QString filename = getProfileDir() + QDir::separator() + kSerialKeyFilename; + return filename; +} + +QString CoreInterface::notifyUpdate (QString const& fromVersion, + QString const& toVersion, + QString const& serialKey) { + QStringList args("--notify-update"); + QString input(fromVersion + ":" + toVersion + ":" + serialKey); + input.append("\n"); + return run(args, input); +} + +QString CoreInterface::notifyActivation(const QString& identity) +{ + QStringList args("--notify-activation"); + + QString input(identity + ":" + hash(getFirstMacAddress())); + QString os= getOSInformation(); + if (!os.isEmpty()) { + input.append(":").append(os); + } + input.append("\n"); + + return run(args, input); +} + +QString CoreInterface::run(const QStringList& args, const QString& input) +{ + QString program( + QCoreApplication::applicationDirPath() + + "/" + kCoreBinary); + + CommandProcess commandProcess(program, args, input); + return commandProcess.run(); +} diff --git a/src/gui/src/CoreInterface.h b/src/gui/src/CoreInterface.h new file mode 100644 index 00000000..45ae47d1 --- /dev/null +++ b/src/gui/src/CoreInterface.h @@ -0,0 +1,36 @@ +/* + * synergy -- 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 . + */ + +#pragma once + +#include + +class CoreInterface +{ +public: + CoreInterface(); + + QString getProfileDir(); + QString getInstalledDir(); + QString getArch(); + QString getSerialKeyFilePath(); + QString notifyActivation(const QString& identity); + QString notifyUpdate (QString const& fromVersion, + QString const& toVersion, + QString const& serialKey); + QString run(const QStringList& args, const QString& input = ""); +}; diff --git a/src/gui/src/DataDownloader.cpp b/src/gui/src/DataDownloader.cpp new file mode 100644 index 00000000..4f778489 --- /dev/null +++ b/src/gui/src/DataDownloader.cpp @@ -0,0 +1,58 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#include "DataDownloader.h" + +DataDownloader::DataDownloader(QObject* parent) : + QObject(parent), + m_pReply(nullptr), + m_IsFinished(false) +{ + connect(&m_NetworkManager, SIGNAL(finished(QNetworkReply*)), + SLOT(complete(QNetworkReply*))); +} + +DataDownloader::~DataDownloader() +{ +} + +void DataDownloader::complete(QNetworkReply* reply) +{ + m_Data = reply->readAll(); + reply->deleteLater(); + + if (!m_Data.isEmpty()) { + m_IsFinished = true; + emit isComplete(); + } +} + +QByteArray DataDownloader::data() const +{ + return m_Data; +} + +void DataDownloader::cancel() +{ + m_pReply->abort(); +} + +void DataDownloader::download(QUrl url) +{ + QNetworkRequest request(url); + m_pReply = m_NetworkManager.get(request); +} diff --git a/src/gui/src/DataDownloader.h b/src/gui/src/DataDownloader.h new file mode 100644 index 00000000..7eb7d3ed --- /dev/null +++ b/src/gui/src/DataDownloader.h @@ -0,0 +1,53 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#ifndef DATADOWNLOADER_H +#define DATADOWNLOADER_H + +#include +#include +#include +#include +#include + +class DataDownloader : public QObject +{ + Q_OBJECT + +public: + explicit DataDownloader(QObject* parent = 0); + virtual ~DataDownloader(); + + QByteArray data() const; + void cancel(); + void download(QUrl url); + bool isFinished() const { return m_IsFinished; } + +signals: + void isComplete(); + +private slots: + void complete(QNetworkReply* reply); + +private: + QNetworkAccessManager m_NetworkManager; + QByteArray m_Data; + QNetworkReply* m_pReply; + bool m_IsFinished; +}; + +#endif // DATADOWNLOADER_H diff --git a/src/gui/src/ElevateMode.h b/src/gui/src/ElevateMode.h new file mode 100644 index 00000000..7e39eb52 --- /dev/null +++ b/src/gui/src/ElevateMode.h @@ -0,0 +1,41 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2016 Symless + * + * 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 . + */ + +#pragma once + +// The elevate mode tristate determines two behaviours on Windows. +// The first, switch-on-desk-switch (SodS), passed through synergyd as a +// command line argument to synergy core, determines if the server restarts +// when switching Windows desktops (e.g. when Windows UAC dialog pops up). +// The second, passed as a boolean flag to Synergyd over the IPC inside +// kIpcCommandMessage, determines whether Synergy should be started with +// elevated privileges. +// +// The matrix for these two behaviours is as follows: +// SodS Elevate +// ___________________________ +// ElevateAsNeeded | true | false +// ElevateAlways | false | true +// ElevateNever | false | false +// +enum ElevateMode { + ElevateAsNeeded = 0, + ElevateAlways = 1, + ElevateNever = 2 +}; + +extern const ElevateMode defaultElevateMode; diff --git a/src/gui/src/FailedLoginDialog.cpp b/src/gui/src/FailedLoginDialog.cpp new file mode 100644 index 00000000..ba53ce45 --- /dev/null +++ b/src/gui/src/FailedLoginDialog.cpp @@ -0,0 +1,15 @@ +#include "FailedLoginDialog.h" +#include "ui_FailedLoginDialog.h" + +FailedLoginDialog::FailedLoginDialog(QWidget *parent, QString message): + QDialog(parent), + ui(new Ui::FailedLoginDialog) +{ + ui->setupUi(this); + ui->messageLabel->setText(ui->messageLabel->text().arg(message)); +} + +FailedLoginDialog::~FailedLoginDialog() +{ + delete ui; +} diff --git a/src/gui/src/FailedLoginDialog.h b/src/gui/src/FailedLoginDialog.h new file mode 100644 index 00000000..d15bd706 --- /dev/null +++ b/src/gui/src/FailedLoginDialog.h @@ -0,0 +1,23 @@ +#ifndef FAILEDLOGINDIALOG_H +#define FAILEDLOGINDIALOG_H + +#include +#include + +namespace Ui { +class FailedLoginDialog; +} + +class FailedLoginDialog : public QDialog +{ + Q_OBJECT + +public: + explicit FailedLoginDialog(QWidget *parent = 0, QString message = ""); + ~FailedLoginDialog(); + +private: + Ui::FailedLoginDialog *ui; +}; + +#endif // FAILEDLOGINDIALOG_H diff --git a/src/gui/src/FailedLoginDialog.ui b/src/gui/src/FailedLoginDialog.ui new file mode 100644 index 00000000..d3c6b507 --- /dev/null +++ b/src/gui/src/FailedLoginDialog.ui @@ -0,0 +1,108 @@ + + + FailedLoginDialog + + + + 0 + 0 + 400 + 165 + + + + Activation Error + + + + + 50 + 120 + 341 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Close + + + + + + 10 + 90 + 382 + 30 + + + + <html><head/><body><p><a href="https://symless.com/account/reset/?source=gui"><span style=" text-decoration: underline; color:#0000ff;">Forgotten your password?</span></a></p></body></html> + + + true + + + + + + 10 + 10 + 382 + 72 + + + + An error occurred while trying to activate Synergy. The Symless server returned the following error: + +%1 + + + true + + + true + + + label_2 + messageLabel + buttonBox + + + + + buttonBox + accepted() + FailedLoginDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + FailedLoginDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/gui/src/Fingerprint.cpp b/src/gui/src/Fingerprint.cpp new file mode 100644 index 00000000..c9d331e6 --- /dev/null +++ b/src/gui/src/Fingerprint.cpp @@ -0,0 +1,149 @@ +/* + * synergy -- 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 . + */ + +#include "Fingerprint.h" + +#include "CoreInterface.h" + +#include +#include + +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() +{ + CoreInterface coreInterface; + QString profileDir = coreInterface.getProfileDir(); + + 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 new file mode 100644 index 00000000..24e10984 --- /dev/null +++ b/src/gui/src/Fingerprint.h @@ -0,0 +1,46 @@ +/* + * synergy -- 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 . + */ + +#pragma once + +#include + +class Fingerprint +{ +private: + Fingerprint(const QString& filename); + +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; + +public: + static Fingerprint local(); + static Fingerprint trustedServers(); + static Fingerprint trustedClients(); + static QString directoryPath(); + static QString localFingerprint(); + static bool localFingerprintExists(); + static void persistDirectory(); + +private: + QString m_Filename; +}; diff --git a/src/gui/src/Hotkey.cpp b/src/gui/src/Hotkey.cpp new file mode 100644 index 00000000..d2234130 --- /dev/null +++ b/src/gui/src/Hotkey.cpp @@ -0,0 +1,75 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "Hotkey.h" + +#include + +Hotkey::Hotkey() : + m_KeySequence(), + m_Actions() +{ +} + +QString Hotkey::text() const +{ + QString text = keySequence().toString(); + + if (keySequence().isMouseButton()) + return "mousebutton(" + text + ")"; + + return "keystroke(" + text + ")"; +} + +void Hotkey::loadSettings(QSettings& settings) +{ + keySequence().loadSettings(settings); + + 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); + } + + settings.endArray(); +} + +void Hotkey::saveSettings(QSettings& settings) const +{ + keySequence().saveSettings(settings); + + settings.beginWriteArray("actions"); + for (int i = 0; i < actions().size(); i++) + { + settings.setArrayIndex(i); + 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; + + return outStream; +} diff --git a/src/gui/src/Hotkey.h b/src/gui/src/Hotkey.h new file mode 100644 index 00000000..cc32a432 --- /dev/null +++ b/src/gui/src/Hotkey.h @@ -0,0 +1,66 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(HOTKEY_H) + +#define HOTKEY_H + +#include +#include +#include + +#include "Action.h" +#include "KeySequence.h" + +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 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; +}; + +typedef QList HotkeyList; + +QTextStream& operator<<(QTextStream& outStream, const Hotkey& hotkey); + +#endif diff --git a/src/gui/src/HotkeyDialog.cpp b/src/gui/src/HotkeyDialog.cpp new file mode 100644 index 00000000..5c08d38f --- /dev/null +++ b/src/gui/src/HotkeyDialog.cpp @@ -0,0 +1,41 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "HotkeyDialog.h" + +#include +#include + +HotkeyDialog::HotkeyDialog (QWidget* parent, Hotkey& hotkey) : + QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), + Ui::HotkeyDialogBase(), + m_Hotkey(hotkey) +{ + setupUi(this); + + m_pKeySequenceWidgetHotkey->setText(m_Hotkey.text()); +} + +void HotkeyDialog::accept() +{ + if (!sequenceWidget()->valid()) + return; + + hotkey().setKeySequence(sequenceWidget()->keySequence()); + QDialog::accept(); +} diff --git a/src/gui/src/HotkeyDialog.h b/src/gui/src/HotkeyDialog.h new file mode 100644 index 00000000..efea813f --- /dev/null +++ b/src/gui/src/HotkeyDialog.h @@ -0,0 +1,49 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(HOTKEYDIALOG_H) + +#define HOTKEYDIALOG_H + +#include "ui_HotkeyDialogBase.h" +#include "Hotkey.h" + +#include + +class HotkeyDialog : public QDialog, public Ui::HotkeyDialogBase +{ + Q_OBJECT + + public: + HotkeyDialog(QWidget* parent, Hotkey& hotkey); + + public: + const Hotkey& hotkey() const { return m_Hotkey; } + + protected slots: + void accept(); + + protected: + const KeySequenceWidget* sequenceWidget() const { return m_pKeySequenceWidgetHotkey; } + Hotkey& hotkey() { return m_Hotkey; } + + private: + Hotkey& m_Hotkey; +}; + +#endif diff --git a/src/gui/src/HotkeyDialogBase.ui b/src/gui/src/HotkeyDialogBase.ui new file mode 100644 index 00000000..0ebcb438 --- /dev/null +++ b/src/gui/src/HotkeyDialogBase.ui @@ -0,0 +1,81 @@ + + + HotkeyDialogBase + + + + 0 + 0 + 344 + 86 + + + + Hotkey + + + + + + Enter the specification for the hotkey: + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + KeySequenceWidget + QLineEdit +
KeySequenceWidget.h
+
+
+ + + + buttonBox + accepted() + HotkeyDialogBase + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + HotkeyDialogBase + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/gui/src/Ipc.cpp b/src/gui/src/Ipc.cpp new file mode 100644 index 00000000..3f4afbc7 --- /dev/null +++ b/src/gui/src/Ipc.cpp @@ -0,0 +1,26 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2012-2016 Symless Ltd. + * Copyright (C) 2012 Nick Bolton + * + * 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 . + */ + +// this class is a duplicate of /src/lib/ipc/Ipc.cpp + +#include "Ipc.h" + +const char* kIpcMsgHello = "IHEL%1i"; +const char* kIpcMsgLogLine = "ILOG%s"; +const char* kIpcMsgCommand = "ICMD%s%1i"; +const char* kIpcMsgShutdown = "ISDN"; diff --git a/src/gui/src/Ipc.h b/src/gui/src/Ipc.h new file mode 100644 index 00000000..9e627595 --- /dev/null +++ b/src/gui/src/Ipc.h @@ -0,0 +1,42 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2012-2016 Symless Ltd. + * Copyright (C) 2012 Nick Bolton + * + * 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 . + */ + +// this class is a duplicate of /src/lib/ipc/Ipc.h + +#pragma once + +#define IPC_HOST "127.0.0.1" +#define IPC_PORT 24801 + +enum qIpcMessageType { + kIpcHello, + kIpcLogLine, + kIpcCommand, + kIpcShutdown, +}; + +enum qIpcClientType { + kIpcClientUnknown, + kIpcClientGui, + kIpcClientNode, +}; + +extern const char* kIpcMsgHello; +extern const char* kIpcMsgLogLine; +extern const char* kIpcMsgCommand; +extern const char* kIpcMsgShutdown; diff --git a/src/gui/src/IpcClient.cpp b/src/gui/src/IpcClient.cpp new file mode 100644 index 00000000..2322bc3d --- /dev/null +++ b/src/gui/src/IpcClient.cpp @@ -0,0 +1,146 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2012-2016 Symless Ltd. + * Copyright (C) 2012 Nick Bolton + * + * 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 . + */ + +#include "IpcClient.h" +#include +#include +#include +#include +#include "IpcReader.h" +#include "Ipc.h" +#include + +IpcClient::IpcClient() : +m_ReaderStarted(false), +m_Enabled(false) +{ + m_Socket = new QTcpSocket(this); + connect(m_Socket, SIGNAL(connected()), this, SLOT(connected())); + connect(m_Socket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(error(QAbstractSocket::SocketError))); + + m_Reader = new IpcReader(m_Socket); + connect(m_Reader, SIGNAL(readLogLine(const QString&)), this, SLOT(handleReadLogLine(const QString&))); +} + +IpcClient::~IpcClient() +{ +} + +void IpcClient::connected() +{ + sendHello(); + infoMessage("connection established"); +} + +void IpcClient::connectToHost() +{ + m_Enabled = true; + + infoMessage("connecting to service..."); + m_Socket->connectToHost(QHostAddress(QHostAddress::LocalHost), IPC_PORT); + + if (!m_ReaderStarted) { + m_Reader->start(); + m_ReaderStarted = true; + } +} + +void IpcClient::disconnectFromHost() +{ + infoMessage("service disconnect"); + m_Reader->stop(); + m_Socket->close(); +} + +void IpcClient::error(QAbstractSocket::SocketError error) +{ + QString text; + switch (error) { + case 0: text = "connection refused"; break; + case 1: text = "remote host closed"; break; + default: text = QString("code=%1").arg(error); break; + } + + errorMessage(QString("ipc connection error, %1").arg(text)); + + QTimer::singleShot(1000, this, SLOT(retryConnect())); +} + +void IpcClient::retryConnect() +{ + if (m_Enabled) { + connectToHost(); + } +} + +void IpcClient::sendHello() +{ + QDataStream stream(m_Socket); + stream.writeRawData(kIpcMsgHello, 4); + + char typeBuf[1]; + typeBuf[0] = kIpcClientGui; + stream.writeRawData(typeBuf, 1); +} + +void IpcClient::sendCommand(const QString& command, ElevateMode const elevate) +{ + QDataStream stream(m_Socket); + + stream.writeRawData(kIpcMsgCommand, 4); + + std::string stdStringCommand = command.toStdString(); + const char* charCommand = stdStringCommand.c_str(); + int length = strlen(charCommand); + + char lenBuf[4]; + intToBytes(length, lenBuf, 4); + stream.writeRawData(lenBuf, 4); + stream.writeRawData(charCommand, length); + + char elevateBuf[1]; + // Refer to enum ElevateMode documentation for why this flag is mapped this way + elevateBuf[0] = (elevate == ElevateAlways) ? 1 : 0; + stream.writeRawData(elevateBuf, 1); +} + +void IpcClient::handleReadLogLine(const QString& text) +{ + readLogLine(text); +} + +// TODO: qt must have a built in way of converting int to bytes. +void IpcClient::intToBytes(int value, char *buffer, int size) +{ + if (size == 1) { + buffer[0] = value & 0xff; + } + else if (size == 2) { + buffer[0] = (value >> 8) & 0xff; + buffer[1] = value & 0xff; + } + else if (size == 4) { + buffer[0] = (value >> 24) & 0xff; + buffer[1] = (value >> 16) & 0xff; + buffer[2] = (value >> 8) & 0xff; + buffer[3] = value & 0xff; + } + else { + // TODO: other sizes, if needed. + } +} diff --git a/src/gui/src/IpcClient.h b/src/gui/src/IpcClient.h new file mode 100644 index 00000000..ea4b4506 --- /dev/null +++ b/src/gui/src/IpcClient.h @@ -0,0 +1,63 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2012-2016 Symless Ltd. + * Copyright (C) 2012 Nick Bolton + * + * 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 . + */ + +#pragma once + +#include +#include + +#include "ElevateMode.h" + +class QTcpSocket; +class IpcReader; + +class IpcClient : public QObject +{ + Q_OBJECT + +public: + IpcClient(); + virtual ~IpcClient(); + + void sendHello(); + void sendCommand(const QString& command, ElevateMode elevate); + void connectToHost(); + void disconnectFromHost(); + +public slots: + void retryConnect(); + +private: + void intToBytes(int value, char* buffer, int size); + +private slots: + void connected(); + void error(QAbstractSocket::SocketError error); + void handleReadLogLine(const QString& text); + +signals: + void readLogLine(const QString& text); + void infoMessage(const QString& text); + void errorMessage(const QString& text); + +private: + QTcpSocket* m_Socket; + IpcReader* m_Reader; + bool m_ReaderStarted; + bool m_Enabled; +}; diff --git a/src/gui/src/IpcReader.cpp b/src/gui/src/IpcReader.cpp new file mode 100644 index 00000000..323a4103 --- /dev/null +++ b/src/gui/src/IpcReader.cpp @@ -0,0 +1,131 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2012-2016 Symless Ltd. + * Copyright (C) 2012 Nick Bolton + * + * 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 . + */ + +#include "IpcReader.h" +#include +#include "Ipc.h" +#include +#include +#include + +IpcReader::IpcReader(QTcpSocket* socket) : +m_Socket(socket) +{ +} + +IpcReader::~IpcReader() +{ +} + +void IpcReader::start() +{ + connect(m_Socket, SIGNAL(readyRead()), this, SLOT(read())); +} + +void IpcReader::stop() +{ + disconnect(m_Socket, SIGNAL(readyRead()), this, SLOT(read())); +} + +void IpcReader::read() +{ + QMutexLocker locker(&m_Mutex); + std::cout << "ready read" << std::endl; + + while (m_Socket->bytesAvailable()) { + std::cout << "bytes available" << std::endl; + + char codeBuf[5]; + readStream(codeBuf, 4); + codeBuf[4] = 0; + std::cout << "ipc read: " << codeBuf << std::endl; + + if (memcmp(codeBuf, kIpcMsgLogLine, 4) == 0) { + std::cout << "reading log line" << std::endl; + + char lenBuf[4]; + readStream(lenBuf, 4); + int len = bytesToInt(lenBuf, 4); + + char* data = new char[len]; + readStream(data, len); + QString line = QString::fromUtf8(data, len); + delete[] data; + + readLogLine(line); + } + else { + std::cerr << "aborting, message invalid" << std::endl; + return; + } + } + + std::cout << "read done" << std::endl; +} + +bool IpcReader::readStream(char* buffer, int length) +{ + std::cout << "reading stream" << std::endl; + + int read = 0; + while (read < length) { + int ask = length - read; + if (m_Socket->bytesAvailable() < ask) { + std::cout << "buffer too short, waiting" << std::endl; + m_Socket->waitForReadyRead(-1); + } + + int got = m_Socket->read(buffer, ask); + read += got; + + std::cout << "> ask=" << ask << " got=" << got + << " read=" << read << std::endl; + + if (got == -1) { + std::cout << "socket ended, aborting" << std::endl; + return false; + } + else if (length - read > 0) { + std::cout << "more remains, seek to " << got << std::endl; + buffer += got; + } + } + return true; +} + +int IpcReader::bytesToInt(const char *buffer, int size) +{ + if (size == 1) { + return (unsigned char)buffer[0]; + } + else if (size == 2) { + return + (((unsigned char)buffer[0]) << 8) + + (unsigned char)buffer[1]; + } + else if (size == 4) { + return + (((unsigned char)buffer[0]) << 24) + + (((unsigned char)buffer[1]) << 16) + + (((unsigned char)buffer[2]) << 8) + + (unsigned char)buffer[3]; + } + else { + return 0; + } +} diff --git a/src/gui/src/IpcReader.h b/src/gui/src/IpcReader.h new file mode 100644 index 00000000..8a3e7c09 --- /dev/null +++ b/src/gui/src/IpcReader.h @@ -0,0 +1,49 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2012-2016 Symless Ltd. + * Copyright (C) 2012 Nick Bolton + * + * 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 . + */ + +#pragma once + +#include +#include + +class QTcpSocket; + +class IpcReader : public QObject +{ + Q_OBJECT; + +public: + IpcReader(QTcpSocket* socket); + virtual ~IpcReader(); + void start(); + void stop(); + +signals: + void readLogLine(const QString& text); + +private: + bool readStream(char* buffer, int length); + int bytesToInt(const char* buffer, int size); + +private slots: + void read(); + +private: + QTcpSocket* m_Socket; + QMutex m_Mutex; +}; diff --git a/src/gui/src/KeySequence.cpp b/src/gui/src/KeySequence.cpp new file mode 100644 index 00000000..8783609d --- /dev/null +++ b/src/gui/src/KeySequence.cpp @@ -0,0 +1,237 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "KeySequence.h" + +#include +#include + +// this table originally comes from Qt sources (gui/kernel/qkeysequence.cpp) +// and is heavily modified for QSynergy +static const struct +{ + int key; + const char* name; +} keyname[] = +{ + { Qt::Key_Space, "Space" }, + { Qt::Key_Escape, "Escape" }, + { Qt::Key_Tab, "Tab" }, + { Qt::Key_Backtab, "LeftTab" }, + { Qt::Key_Backspace, "BackSpace" }, + { Qt::Key_Return, "Return" }, + { Qt::Key_Insert, "Insert" }, + { Qt::Key_Delete, "Delete" }, + { Qt::Key_Pause, "Pause" }, + { Qt::Key_Print, "Print" }, + { Qt::Key_SysReq, "SysReq" }, + { Qt::Key_Home, "Home" }, + { Qt::Key_End, "End" }, + { Qt::Key_Left, "Left" }, + { Qt::Key_Up, "Up" }, + { Qt::Key_Right, "Right" }, + { Qt::Key_Down, "Down" }, + { Qt::Key_PageUp, "PageUp" }, + { Qt::Key_PageDown, "PageDown" }, + { Qt::Key_CapsLock, "CapsLock" }, + { Qt::Key_NumLock, "NumLock" }, + { Qt::Key_ScrollLock, "ScrollLock" }, + { Qt::Key_Menu, "Menu" }, + { Qt::Key_Help, "Help" }, + { Qt::Key_Enter, "KP_Enter" }, + { Qt::Key_Clear, "Clear" }, + + { Qt::Key_Back, "WWWBack" }, + { Qt::Key_Forward, "WWWForward" }, + { Qt::Key_Stop, "WWWStop" }, + { Qt::Key_Refresh, "WWWRefresh" }, + { Qt::Key_VolumeDown, "AudioDown" }, + { Qt::Key_VolumeMute, "AudioMute" }, + { Qt::Key_VolumeUp, "AudioUp" }, + { Qt::Key_MediaPlay, "AudioPlay" }, + { Qt::Key_MediaStop, "AudioStop" }, + { Qt::Key_MediaPrevious,"AudioPrev" }, + { Qt::Key_MediaNext, "AudioNext" }, + { Qt::Key_HomePage, "WWWHome" }, + { Qt::Key_Favorites, "WWWFavorites" }, + { Qt::Key_Search, "WWWSearch" }, + { Qt::Key_Standby, "Sleep" }, + { Qt::Key_LaunchMail, "AppMail" }, + { Qt::Key_LaunchMedia, "AppMedia" }, + { Qt::Key_Launch0, "AppUser1" }, + { Qt::Key_Launch1, "AppUser2" }, + { Qt::Key_Select, "Select" }, + + { 0, 0 } +}; + +KeySequence::KeySequence() : + m_Sequence(), + m_Modifiers(0), + m_IsValid(false) +{ +} + +bool KeySequence::isMouseButton() const +{ + return !m_Sequence.isEmpty() && m_Sequence.last() < Qt::Key_Space; +} + +QString KeySequence::toString() const +{ + QString result; + + for (int i = 0; i < m_Sequence.size(); i++) + { + result += keyToString(m_Sequence[i]); + + if (i != m_Sequence.size() - 1) + result += "+"; + } + + return result; +} + +bool KeySequence::appendMouseButton(int button) +{ + return appendKey(button, 0); +} + +bool KeySequence::appendKey(int key, int modifiers) +{ + if (m_Sequence.size() == 4) + return true; + + switch(key) + { + case Qt::Key_AltGr: + return false; + + case Qt::Key_Control: + case Qt::Key_Alt: + case Qt::Key_Shift: + case Qt::Key_Meta: + case Qt::Key_Menu: + { + int mod = modifiers & (~m_Modifiers); + if (mod) + { + m_Sequence.append(mod); + m_Modifiers |= mod; + } + } + break; + + default: + // see if we can handle this key, if not, don't accept it + if (keyToString(key).isEmpty()) + break; + + m_Sequence.append(key); + setValid(true); + return true; + } + + return false; +} + +void KeySequence::loadSettings(QSettings& settings) +{ + sequence().clear(); + int num = settings.beginReadArray("keys"); + for (int i = 0; i < num; i++) + { + settings.setArrayIndex(i); + sequence().append(settings.value("key", 0).toInt()); + } + settings.endArray(); + + setModifiers(0); + setValid(true); +} + +void KeySequence::saveSettings(QSettings& settings) const +{ + settings.beginWriteArray("keys"); + for (int i = 0; i < sequence().size(); i++) + { + settings.setArrayIndex(i); + settings.setValue("key", sequence()[i]); + } + settings.endArray(); +} + +QString KeySequence::keyToString(int key) +{ + // nothing there? + if (key == 0) + return ""; + + // a hack to handle mouse buttons as if they were keys + if (key < Qt::Key_Space) + { + switch(key) + { + case Qt::LeftButton: return "1"; + case Qt::RightButton: return "2"; + case Qt::MidButton: return "3"; + } + + return "4"; // qt only knows three mouse buttons, so assume it's an unknown fourth one + } + + // modifiers? + if (key & Qt::ShiftModifier) + return "Shift"; + + if (key & Qt::ControlModifier) + return "Control"; + + if (key & Qt::AltModifier) + return "Alt"; + + if (key & Qt::MetaModifier) + return "Meta"; + + // treat key pad like normal keys (FIXME: we should have another lookup table for keypad keys instead) + key &= ~Qt::KeypadModifier; + + // a printable 7 bit character? + if (key < 0x80 && key != Qt::Key_Space) + 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')); + + // give up, synergy probably won't handle this + return ""; +} diff --git a/src/gui/src/KeySequence.h b/src/gui/src/KeySequence.h new file mode 100644 index 00000000..79f49c3a --- /dev/null +++ b/src/gui/src/KeySequence.h @@ -0,0 +1,58 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(KEYSEQUENCE_H) + +#define KEYSEQUENCE_H + +#include +#include + +class QSettings; + +class KeySequence +{ + public: + KeySequence(); + + public: + QString toString() const; + bool appendKey(int modifiers, int key); + bool appendMouseButton(int button); + bool isMouseButton() const; + bool valid() const { return m_IsValid; } + int modifiers() const { return m_Modifiers; } + void saveSettings(QSettings& settings) const; + void loadSettings(QSettings& settings); + const QList& sequence() const { return m_Sequence; } + + private: + void setValid(bool b) { m_IsValid = b; } + void setModifiers(int i) { m_Modifiers = i; } + QList& sequence() { return m_Sequence; } + + private: + QList m_Sequence; + int m_Modifiers; + bool m_IsValid; + + static QString keyToString(int key); +}; + +#endif + diff --git a/src/gui/src/KeySequenceWidget.cpp b/src/gui/src/KeySequenceWidget.cpp new file mode 100644 index 00000000..c4ca4356 --- /dev/null +++ b/src/gui/src/KeySequenceWidget.cpp @@ -0,0 +1,145 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "KeySequenceWidget.h" + +#include +#include + +KeySequenceWidget::KeySequenceWidget(QWidget* parent, const KeySequence& seq) : + QPushButton(parent), + m_KeySequence(seq), + m_BackupSequence(seq), + m_Status(Stopped), + m_MousePrefix("mousebutton("), + m_MousePostfix(")"), + m_KeyPrefix("keystroke("), + m_KeyPostfix(")") +{ + setFocusPolicy(Qt::NoFocus); + updateOutput(); +} + +void KeySequenceWidget::setKeySequence(const KeySequence& seq) +{ + keySequence() = seq; + backupSequence() = seq; + + setStatus(Stopped); + updateOutput(); +} + +void KeySequenceWidget::mousePressEvent(QMouseEvent* event) +{ + event->accept(); + + if (status() == Stopped) + { + startRecording(); + return; + } + + if (m_KeySequence.appendMouseButton(event->button())) + stopRecording(); + + updateOutput(); +} + +void KeySequenceWidget::startRecording() +{ + keySequence() = KeySequence(); + setDown(true); + setFocus(); + grabKeyboard(); + setStatus(Recording); +} + +void KeySequenceWidget::stopRecording() +{ + if (!keySequence().valid()) + { + keySequence() = backupSequence(); + updateOutput(); + } + + setDown(false); + focusNextChild(); + releaseKeyboard(); + setStatus(Stopped); + emit keySequenceChanged(); +} + +bool KeySequenceWidget::event(QEvent* event) +{ + if (status() == Recording) + { + switch(event->type()) + { + case QEvent::KeyPress: + keyPressEvent(static_cast(event)); + return true; + + case QEvent::MouseButtonRelease: + event->accept(); + return true; + + case QEvent::ShortcutOverride: + event->accept(); + return true; + + case QEvent::FocusOut: + stopRecording(); + if (!valid()) + { + keySequence() = backupSequence(); + updateOutput(); + } + break; + + default: + break; + } + } + + return QPushButton::event(event); +} + +void KeySequenceWidget::keyPressEvent(QKeyEvent* event) +{ + event->accept(); + + if (status() == Stopped) + return; + + if (m_KeySequence.appendKey(event->key(), event->modifiers())) + stopRecording(); + + updateOutput(); +} + +void KeySequenceWidget::updateOutput() +{ + QString s; + + if (m_KeySequence.isMouseButton()) + s = mousePrefix() + m_KeySequence.toString() + mousePostfix(); + else + s = keyPrefix() + m_KeySequence.toString() + keyPostfix(); + + setText(s); +} diff --git a/src/gui/src/KeySequenceWidget.h b/src/gui/src/KeySequenceWidget.h new file mode 100644 index 00000000..ecd81b94 --- /dev/null +++ b/src/gui/src/KeySequenceWidget.h @@ -0,0 +1,81 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(KEYSEQUENCEWIDGET__H) + +#define KEYSEQUENCEWIDGET__H + +#include + +#include "KeySequence.h" + +class KeySequenceWidget : public QPushButton +{ + Q_OBJECT + + public: + KeySequenceWidget(QWidget* parent, const KeySequence& seq = KeySequence()); + + signals: + void keySequenceChanged(); + + public: + const QString& mousePrefix() const { return m_MousePrefix; } + const QString& mousePostfix() const { return m_MousePostfix; } + const QString& keyPrefix() const { return m_KeyPrefix; } + const QString& keyPostfix() const { return m_KeyPostfix; } + + void setMousePrefix(const QString& s) { m_MousePrefix = s; } + void setMousePostfix(const QString& s) { m_MousePostfix = s; } + void setKeyPrefix(const QString& s) { m_KeyPrefix = s; } + void setKeyPostfix(const QString& s) { m_KeyPostfix = s; } + + const KeySequence& keySequence() const { return m_KeySequence; } + const KeySequence& backupSequence() const { return m_BackupSequence; } + void setKeySequence(const KeySequence& seq); + + bool valid() const { return keySequence().valid(); } + + protected: + void mousePressEvent(QMouseEvent*); + void keyPressEvent(QKeyEvent*); + bool event(QEvent* event); + void appendToSequence(int key); + void updateOutput(); + void startRecording(); + void stopRecording(); + KeySequence& keySequence() { return m_KeySequence; } + KeySequence& backupSequence() { return m_BackupSequence; } + + private: + enum Status { Stopped, Recording }; + void setStatus(Status s) { m_Status = s; } + Status status() const { return m_Status; } + + private: + KeySequence m_KeySequence; + KeySequence m_BackupSequence; + Status m_Status; + QString m_MousePrefix; + QString m_MousePostfix; + QString m_KeyPrefix; + QString m_KeyPostfix; +}; + +#endif + diff --git a/src/gui/src/LicenseManager.cpp b/src/gui/src/LicenseManager.cpp new file mode 100644 index 00000000..b608ae6c --- /dev/null +++ b/src/gui/src/LicenseManager.cpp @@ -0,0 +1,168 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2015 Synergy Seamless Inc. + * + * 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 . + */ + +#include "LicenseManager.h" +#include "AppConfig.h" +#include +#include +#include +#include + +LicenseManager::LicenseManager(AppConfig* appConfig) : + m_AppConfig(appConfig), + m_serialKey(appConfig->edition()) { +} + +std::pair +LicenseManager::setSerialKey(SerialKey serialKey, bool acceptExpired) +{ + std::pair ret (true, ""); + time_t currentTime = ::time(0); + + if (!acceptExpired && serialKey.isExpired(currentTime)) { + ret.first = false; + ret.second = "Serial key expired"; + return ret; + } + + if (serialKey != m_serialKey) { + using std::swap; + swap (serialKey, m_serialKey); + m_AppConfig->setSerialKey(QString::fromStdString + (m_serialKey.toString())); + emit serialKeyChanged(m_serialKey); + + if (serialKey.isTrial()) { + emit endTrial(false); + } + + if (m_serialKey.edition() != serialKey.edition()) { + m_AppConfig->setEdition(m_serialKey.edition()); + emit editionChanged(m_serialKey.edition()); + } + + if (m_serialKey.isTrial()) { + if (m_serialKey.isExpired(currentTime)) { + emit endTrial(true); + } else { + emit beginTrial(m_serialKey.isExpiring(currentTime)); + } + } + + m_AppConfig->saveSettings(); + } + + return ret; +} + +void +LicenseManager::notifyUpdate(QString fromVersion, QString toVersion) { + if ((fromVersion == "Unknown") + && (m_serialKey == SerialKey(kUnregistered))) { + return; + } + + ActivationNotifier* notifier = new ActivationNotifier(); + notifier->setUpdateInfo (fromVersion, toVersion, + QString::fromStdString(m_serialKey.toString())); + + QThread* thread = new QThread(); + connect(notifier, SIGNAL(finished()), thread, SLOT(quit())); + connect(notifier, SIGNAL(finished()), notifier, SLOT(deleteLater())); + connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); + + notifier->moveToThread(thread); + thread->start(); + + QMetaObject::invokeMethod(notifier, "notifyUpdate", + Qt::QueuedConnection); +} + +Edition +LicenseManager::activeEdition() const +{ + return m_serialKey.edition(); +} + +QString +LicenseManager::activeEditionName() const +{ + return getEditionName(activeEdition(), m_serialKey.isTrial()); +} + +SerialKey +LicenseManager::serialKey() const +{ + return m_serialKey; +} + +void LicenseManager::refresh() +{ + if (!m_AppConfig->serialKey().isEmpty()) { + try { + SerialKey serialKey (m_AppConfig->serialKey().toStdString()); + setSerialKey(serialKey, true); + } catch (...) { + m_AppConfig->clearSerialKey(); + m_AppConfig->saveSettings(); + } + } + if (m_serialKey.isExpired(::time(0))) { + emit endTrial(true); + } +} + +void LicenseManager::skipActivation() +{ + notifyActivation ("skip:unknown"); +} + +QString +LicenseManager::getEditionName(Edition const edition, bool trial) +{ + std::string name ("Synergy"); + switch (edition) { + case kUnregistered: + name += " (UNREGISTERED)"; + return QString::fromUtf8 (name.c_str(), name.size()); + case kBasic: + name += " Basic"; + break; + default: + name += " Pro"; + } + if (trial) { + name += " (Trial)"; + } + return QString::fromUtf8 (name.c_str(), name.size()); +} + +void LicenseManager::notifyActivation(QString identity) +{ + ActivationNotifier* notifier = new ActivationNotifier(); + notifier->setIdentity(identity); + + QThread* thread = new QThread(); + connect(notifier, SIGNAL(finished()), thread, SLOT(quit())); + connect(notifier, SIGNAL(finished()), notifier, SLOT(deleteLater())); + connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); + + notifier->moveToThread(thread); + thread->start(); + + QMetaObject::invokeMethod(notifier, "notify", Qt::QueuedConnection); +} diff --git a/src/gui/src/LicenseManager.h b/src/gui/src/LicenseManager.h new file mode 100644 index 00000000..88fdbb59 --- /dev/null +++ b/src/gui/src/LicenseManager.h @@ -0,0 +1,54 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2015 Synergy Seamless Inc. + * + * 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 . + */ + +#pragma once + +#include +#include +#include +#include +#include + +class AppConfig; + +class LicenseManager: public QObject +{ + Q_OBJECT + +public: + LicenseManager(AppConfig* appConfig); + std::pair setSerialKey(SerialKey serialKey, + bool acceptExpired = false); + void refresh(); + Edition activeEdition() const; + QString activeEditionName() const; + SerialKey serialKey() const; + void skipActivation(); + void notifyUpdate(QString fromVersion, QString toVersion); + static QString getEditionName(Edition edition, bool trial = false); + void notifyActivation(QString identity); + +private: + AppConfig* m_AppConfig; + SerialKey m_serialKey; + +signals: + void serialKeyChanged (SerialKey) const; + void editionChanged (Edition) const; + void beginTrial (bool expiring) const; + void endTrial (bool expired) const; +}; diff --git a/src/gui/src/MainWindow.cpp b/src/gui/src/MainWindow.cpp new file mode 100644 index 00000000..a55502dd --- /dev/null +++ b/src/gui/src/MainWindow.cpp @@ -0,0 +1,1506 @@ +/* + * synergy -- 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 + * 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 . + */ + +#define DOWNLOAD_URL "http://symless.com/?source=gui" + +#include + +#include "MainWindow.h" + +#include "Fingerprint.h" +#include "AboutDialog.h" +#include "ServerConfigDialog.h" +#include "SettingsDialog.h" +#include "ActivationDialog.h" +#include "ZeroconfService.h" +#include "DataDownloader.h" +#include "CommandProcess.h" +#include "LicenseManager.h" +#include +#include "QUtility.h" +#include "ProcessorArch.h" +#include "SslCertificate.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined(Q_OS_MAC) +#include +#endif + +#if defined(Q_OS_WIN) +#define WIN32_LEAN_AND_MEAN +#include +#endif + +#if defined(Q_OS_WIN) +static const char synergyConfigName[] = "synergy.sgc"; +static const QString synergyConfigFilter(QObject::tr("Synergy Configurations (*.sgc);;All files (*.*)")); +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 synergyConfigName[] = "synergy.conf"; +static const QString synergyConfigFilter(QObject::tr("Synergy Configurations (*.conf);;All files (*.*)")); +#endif + +static const char* synergyIconFiles[] = +{ + ":/res/icons/16x16/synergy-disconnected.png", + ":/res/icons/16x16/synergy-disconnected.png", + ":/res/icons/16x16/synergy-connected.png", + ":/res/icons/16x16/synergy-transfering.png" +}; + +MainWindow::MainWindow(QSettings& settings, AppConfig& appConfig, + LicenseManager& licenseManager) : + m_Settings(settings), + m_AppConfig(&appConfig), + m_LicenseManager(&licenseManager), + m_pSynergy(NULL), + m_SynergyState(synergyDisconnected), + m_ServerConfig(&m_Settings, 5, 3, m_AppConfig->screenName(), this), + m_pTempConfigFile(NULL), + m_pTrayIcon(NULL), + m_pTrayIconMenu(NULL), + m_AlreadyHidden(false), + m_pMenuBar(NULL), + m_pMenuFile(NULL), + m_pMenuEdit(NULL), + m_pMenuWindow(NULL), + m_pMenuHelp(NULL), + m_pZeroconfService(NULL), + m_pDataDownloader(NULL), + m_DownloadMessageBox(NULL), + m_pCancelButton(NULL), + m_SuppressAutoConfigWarning(false), + m_BonjourInstall(NULL), + m_SuppressEmptyServerWarning(false), + m_ExpectedRunningState(kStopped), + m_pSslCertificate(NULL), + m_ActivationDialogRunning(false) +{ + setupUi(this); + + createMenuBar(); + loadSettings(); + initConnections(); + + m_pWidgetUpdate->hide(); + m_VersionChecker.setApp(appPath(appConfig.synergycName())); + m_pLabelScreenName->setText(getScreenName()); + m_pLabelIpAddresses->setText(getIPAddresses()); + +#if defined(Q_OS_WIN) + // ipc must always be enabled, so that we can disable command when switching to desktop mode. + connect(&m_IpcClient, SIGNAL(readLogLine(const QString&)), this, SLOT(appendLogRaw(const QString&))); + connect(&m_IpcClient, SIGNAL(errorMessage(const QString&)), this, SLOT(appendLogError(const QString&))); + connect(&m_IpcClient, SIGNAL(infoMessage(const QString&)), this, SLOT(appendLogInfo(const QString&))); + m_IpcClient.connectToHost(); +#endif + + // change default size based on os +#if defined(Q_OS_MAC) + resize(720, 550); + setMinimumSize(size()); +#elif defined(Q_OS_LINUX) + resize(700, 530); + setMinimumSize(size()); +#endif + + m_SuppressAutoConfigWarning = true; + m_pCheckBoxAutoConfig->setChecked(appConfig.autoConfig()); + m_SuppressAutoConfigWarning = false; + + m_pComboServerList->hide(); + m_pLabelPadlock->hide(); + m_trialWidget->hide(); + + connect (this, SIGNAL(windowShown()), + this, SLOT(on_windowShown()), Qt::QueuedConnection); + + connect (m_LicenseManager, SIGNAL(editionChanged(Edition)), + this, SLOT(setEdition(Edition)), Qt::QueuedConnection); + + connect (m_LicenseManager, SIGNAL(beginTrial(bool)), + this, SLOT(beginTrial(bool)), Qt::QueuedConnection); + + connect (m_LicenseManager, SIGNAL(endTrial(bool)), + this, SLOT(endTrial(bool)), Qt::QueuedConnection); + + connect (m_AppConfig, SIGNAL(sslToggled(bool)), + this, SLOT(sslToggled(bool)), Qt::QueuedConnection); + + setWindowTitle (m_LicenseManager->activeEditionName()); + m_LicenseManager->refresh(); + + QString lastVersion = m_AppConfig->lastVersion(); + QString currentVersion = m_VersionChecker.getVersion(); + if (lastVersion != currentVersion) { + m_AppConfig->setLastVersion (currentVersion); + m_AppConfig->saveSettings(); + m_LicenseManager->notifyUpdate (lastVersion, currentVersion); + } +} + +MainWindow::~MainWindow() +{ + if (appConfig().processMode() == Desktop) { + m_ExpectedRunningState = kStopped; + stopDesktop(); + } + + saveSettings(); + + delete m_pZeroconfService; + + if (m_DownloadMessageBox != NULL) { + delete m_DownloadMessageBox; + } + + if (m_BonjourInstall != NULL) { + delete m_BonjourInstall; + } + + delete m_pSslCertificate; +} + +void MainWindow::open() +{ + createTrayIcon(); + + if (!autoHide()) { + showNormal(); + } + + m_VersionChecker.checkLatest(); + + if (!appConfig().autoConfigPrompted()) { + promptAutoConfig(); + } + + // only start if user has previously started. this stops the gui from + // auto hiding before the user has configured synergy (which of course + // confuses first time users, who think synergy has crashed). + if (appConfig().startedBefore() && appConfig().processMode() == Desktop) { + m_SuppressEmptyServerWarning = true; + startSynergy(); + m_SuppressEmptyServerWarning = false; + } +} + +void MainWindow::onModeChanged(bool startDesktop, bool applyService) +{ + if (appConfig().processMode() == Service) + { + // ensure that the apply button actually does something, since desktop + // mode screws around with connecting/disconnecting the action. + disconnect(m_pButtonToggleStart, SIGNAL(clicked()), m_pActionStartSynergy, SLOT(trigger())); + connect(m_pButtonToggleStart, SIGNAL(clicked()), m_pActionStartSynergy, SLOT(trigger())); + + if (applyService) + { + stopDesktop(); + startSynergy(); + } + } + else if ((appConfig().processMode() == Desktop) && startDesktop) + { + stopService(); + startSynergy(); + } +} + +void MainWindow::setStatus(const QString &status) +{ + m_pStatusLabel->setText(status); +} + +void MainWindow::createTrayIcon() +{ + m_pTrayIconMenu = new QMenu(this); + + m_pTrayIconMenu->addAction(m_pActionStartSynergy); + m_pTrayIconMenu->addAction(m_pActionStopSynergy); + m_pTrayIconMenu->addSeparator(); + + m_pTrayIconMenu->addAction(m_pActionMinimize); + m_pTrayIconMenu->addAction(m_pActionRestore); + m_pTrayIconMenu->addSeparator(); + m_pTrayIconMenu->addAction(m_pActionQuit); + + m_pTrayIcon = new QSystemTrayIcon(this); + m_pTrayIcon->setContextMenu(m_pTrayIconMenu); + + connect(m_pTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), + this, SLOT(trayActivated(QSystemTrayIcon::ActivationReason))); + + setIcon(synergyDisconnected); + + m_pTrayIcon->show(); +} + +void MainWindow::retranslateMenuBar() +{ + m_pMenuFile->setTitle(tr("&File")); + m_pMenuEdit->setTitle(tr("&Edit")); + m_pMenuWindow->setTitle(tr("&Window")); + m_pMenuHelp->setTitle(tr("&Help")); +} + +void MainWindow::createMenuBar() +{ + m_pMenuBar = new QMenuBar(this); + m_pMenuFile = new QMenu("", m_pMenuBar); + m_pMenuEdit = new QMenu("", m_pMenuBar); + m_pMenuWindow = new QMenu("", m_pMenuBar); + m_pMenuHelp = new QMenu("", m_pMenuBar); + retranslateMenuBar(); + + m_pMenuBar->addAction(m_pMenuFile->menuAction()); + m_pMenuBar->addAction(m_pMenuEdit->menuAction()); +#if !defined(Q_OS_MAC) + m_pMenuBar->addAction(m_pMenuWindow->menuAction()); +#endif + m_pMenuBar->addAction(m_pMenuHelp->menuAction()); + + m_pMenuFile->addAction(m_pActionStartSynergy); + m_pMenuFile->addAction(m_pActionStopSynergy); + m_pMenuFile->addSeparator(); + m_pMenuFile->addAction(m_pActivate); + m_pMenuFile->addSeparator(); + m_pMenuFile->addAction(m_pActionSave); + m_pMenuFile->addSeparator(); + m_pMenuFile->addAction(m_pActionQuit); + m_pMenuEdit->addAction(m_pActionSettings); + m_pMenuWindow->addAction(m_pActionMinimize); + m_pMenuWindow->addAction(m_pActionRestore); + m_pMenuHelp->addAction(m_pActionAbout); + + setMenuBar(m_pMenuBar); +} + +void MainWindow::loadSettings() +{ + // the next two must come BEFORE loading groupServerChecked and groupClientChecked or + // disabling and/or enabling the right widgets won't automatically work + m_pRadioExternalConfig->setChecked(settings().value("useExternalConfig", false).toBool()); + m_pRadioInternalConfig->setChecked(settings().value("useInternalConfig", true).toBool()); + + m_pGroupServer->setChecked(settings().value("groupServerChecked", false).toBool()); + m_pLineEditConfigFile->setText(settings().value("configFile", QDir::homePath() + "/" + synergyConfigName).toString()); + m_pGroupClient->setChecked(settings().value("groupClientChecked", true).toBool()); + m_pLineEditHostname->setText(settings().value("serverHostname").toString()); +} + +void MainWindow::initConnections() +{ + connect(m_pActionMinimize, SIGNAL(triggered()), this, SLOT(hide())); + connect(m_pActionRestore, SIGNAL(triggered()), this, SLOT(showNormal())); + connect(m_pActionStartSynergy, SIGNAL(triggered()), this, SLOT(startSynergy())); + connect(m_pActionStopSynergy, SIGNAL(triggered()), this, SLOT(stopSynergy())); + connect(m_pActionQuit, SIGNAL(triggered()), qApp, SLOT(quit())); + connect(&m_VersionChecker, SIGNAL(updateFound(const QString&)), this, SLOT(updateFound(const QString&))); +} + +void MainWindow::saveSettings() +{ + // program settings + settings().setValue("groupServerChecked", m_pGroupServer->isChecked()); + settings().setValue("useExternalConfig", m_pRadioExternalConfig->isChecked()); + settings().setValue("configFile", m_pLineEditConfigFile->text()); + settings().setValue("useInternalConfig", m_pRadioInternalConfig->isChecked()); + settings().setValue("groupClientChecked", m_pGroupClient->isChecked()); + settings().setValue("serverHostname", m_pLineEditHostname->text()); + + settings().sync(); +} + +void MainWindow::setIcon(qSynergyState state) +{ + QIcon icon; + icon.addFile(synergyIconFiles[state]); + + if (m_pTrayIcon) + m_pTrayIcon->setIcon(icon); +} + +void MainWindow::trayActivated(QSystemTrayIcon::ActivationReason reason) +{ +#ifndef Q_OS_WIN + if (reason == QSystemTrayIcon::DoubleClick) + { + if (isVisible()) + { + hide(); + } + else + { + showNormal(); + activateWindow(); + } + } +#endif +} + +void MainWindow::logOutput() +{ + if (m_pSynergy) + { + QString text(m_pSynergy->readAllStandardOutput()); + foreach(QString line, text.split(QRegExp("\r|\n|\r\n"))) + { + if (!line.isEmpty()) + { + appendLogRaw(line); + } + } + } +} + +void MainWindow::logError() +{ + if (m_pSynergy) + { + appendLogRaw(m_pSynergy->readAllStandardError()); + } +} + +void MainWindow::updateFound(const QString &version) +{ + m_pWidgetUpdate->show(); + m_pLabelUpdate->setText( + tr("

Your version of Synergy is out of date. " + "Version %1 is now available to " + "download.

") + .arg(version).arg(DOWNLOAD_URL)); +} + +void MainWindow::appendLogInfo(const QString& text) +{ + appendLogRaw(getTimeStamp() + " INFO: " + text); +} + +void MainWindow::appendLogDebug(const QString& text) { + if (appConfig().logLevel() >= 4) { + appendLogRaw(getTimeStamp() + " DEBUG: " + text); + } +} + +void MainWindow::appendLogError(const QString& text) +{ + appendLogRaw(getTimeStamp() + " ERROR: " + text); +} + +void MainWindow::appendLogRaw(const QString& text) +{ + foreach(QString line, text.split(QRegExp("\r|\n|\r\n"))) { + if (!line.isEmpty()) { + m_pLogOutput->append(line); + updateFromLogLine(line); + } + } +} + +void MainWindow::updateFromLogLine(const QString &line) +{ + // TODO: this code makes Andrew cry + checkConnected(line); + checkFingerprint(line); + checkLicense(line); +} + +void MainWindow::checkConnected(const QString& line) +{ + // TODO: implement ipc connection state messages to replace this hack. + if (line.contains("started server") || + line.contains("connected to server") || + line.contains("watchdog status: ok")) + { + setSynergyState(synergyConnected); + + if (!appConfig().startedBefore() && isVisible()) { + QMessageBox::information( + this, "Synergy", + tr("Synergy is now connected. You can close the " + "config window and Synergy will remain connected in " + "the background.")); + + appConfig().setStartedBefore(true); + appConfig().saveSettings(); + } + } +} + +void MainWindow::checkLicense(const QString &line) +{ + if (line.contains("trial has expired")) { + licenseManager().refresh(); + raiseActivationDialog(); + } +} + +void MainWindow::checkFingerprint(const QString& line) +{ + QRegExp fingerprintRegex(".*server fingerprint: ([A-F0-9:]+)"); + if (!fingerprintRegex.exactMatch(line)) { + return; + } + + QString fingerprint = fingerprintRegex.cap(1); + if (Fingerprint::trustedServers().isTrusted(fingerprint)) { + return; + } + + static bool messageBoxAlreadyShown = false; + + if (!messageBoxAlreadyShown) { + stopSynergy(); + + 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) { + // restart core process after trusting fingerprint. + Fingerprint::trustedServers().trust(fingerprint); + startSynergy(); + } + + messageBoxAlreadyShown = false; + } +} + +bool MainWindow::autoHide() +{ + if ((appConfig().processMode() == Desktop) && + appConfig().getAutoHide()) { + hide(); + return true; + } + + return false; +} + +QString MainWindow::getTimeStamp() +{ + QDateTime current = QDateTime::currentDateTime(); + return '[' + current.toString(Qt::ISODate) + ']'; +} + +void MainWindow::restartSynergy() +{ + stopSynergy(); + startSynergy(); +} + +void MainWindow::proofreadInfo() +{ + setEdition(m_AppConfig->edition()); // Why is this here? + + int oldState = m_SynergyState; + m_SynergyState = synergyDisconnected; + setSynergyState((qSynergyState)oldState); +} + +void MainWindow::showEvent(QShowEvent* event) +{ + QMainWindow::showEvent(event); + emit windowShown(); +} + +void MainWindow::clearLog() +{ + m_pLogOutput->clear(); +} + +void MainWindow::startSynergy() +{ + SerialKey serialKey = m_LicenseManager->serialKey(); + time_t currentTime = ::time(0); + if (serialKey.isExpired(currentTime)) { + if (QDialog::Rejected == raiseActivationDialog()) { + return; + } + } + + bool desktopMode = appConfig().processMode() == Desktop; + bool serviceMode = appConfig().processMode() == Service; + + appendLogDebug("starting process"); + m_ExpectedRunningState = kStarted; + setSynergyState(synergyConnecting); + + QString app; + QStringList args; + + args << "-f" << "--no-tray" << "--debug" << appConfig().logLevelText(); + + + args << "--name" << getScreenName(); + + if (desktopMode) + { + setSynergyProcess(new QProcess(this)); + } + else + { + // tell client/server to talk to daemon through ipc. + args << "--ipc"; + +#if defined(Q_OS_WIN) + // tell the client/server to shut down when a ms windows desk + // is switched; this is because we may need to elevate or not + // based on which desk the user is in (login always needs + // elevation, where as default desk does not). + // Note that this is only enabled when synergy is set to elevate + // 'as needed' (e.g. on a UAC dialog popup) in order to prevent + // unnecessary restarts when synergy was started elevated or + // when it is not allowed to elevate. In these cases restarting + // the server is fruitless. + if (appConfig().elevateMode() == ElevateAsNeeded) { + args << "--stop-on-desk-switch"; + } +#endif + } + +#ifndef Q_OS_LINUX + + if (m_ServerConfig.enableDragAndDrop()) { + args << "--enable-drag-drop"; + } + +#endif + + if (m_AppConfig->getCryptoEnabled()) { + args << "--enable-crypto"; + } + +#if defined(Q_OS_WIN) + // on windows, the profile directory changes depending on the user that + // 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" << getProfileRootForArg(); +#endif + + if ((synergyType() == synergyClient && !clientArgs(args, app)) + || (synergyType() == synergyServer && !serverArgs(args, app))) + { + stopSynergy(); + return; + } + + if (desktopMode) + { + connect(synergyProcess(), SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(synergyFinished(int, QProcess::ExitStatus))); + connect(synergyProcess(), SIGNAL(readyReadStandardOutput()), this, SLOT(logOutput())); + connect(synergyProcess(), SIGNAL(readyReadStandardError()), this, SLOT(logError())); + } + + // put a space between last log output and new instance. + if (!m_pLogOutput->toPlainText().isEmpty()) + appendLogRaw(""); + + appendLogInfo("starting " + QString(synergyType() == synergyServer ? "server" : "client")); + + qDebug() << args; + + // show command if debug log level... + if (appConfig().logLevel() >= 4) { + appendLogInfo(QString("command: %1 %2").arg(app, args.join(" "))); + } + + appendLogInfo("config file: " + configFilename()); + appendLogInfo("log level: " + appConfig().logLevelText()); + + if (appConfig().logToFile()) + appendLogInfo("log file: " + appConfig().logFilename()); + + if (desktopMode) + { + synergyProcess()->start(app, args); + if (!synergyProcess()->waitForStarted()) + { + show(); + QMessageBox::warning(this, tr("Program can not be started"), QString(tr("The executable

%1

could not be successfully started, although it does exist. Please check if you have sufficient permissions to run this program.").arg(app))); + return; + } + } + + if (serviceMode) + { + QString command(app + " " + args.join(" ")); + m_IpcClient.sendCommand(command, appConfig().elevateMode()); + } +} + +void +MainWindow::sslToggled (bool enabled) +{ + if (enabled) { + m_pSslCertificate = new SslCertificate(this); + m_pSslCertificate->generateCertificate(); + } + updateLocalFingerprint(); +} + +bool MainWindow::clientArgs(QStringList& args, QString& app) +{ + app = appPath(appConfig().synergycName()); + + if (!QFile::exists(app)) + { + show(); + QMessageBox::warning(this, tr("Synergy client not found"), + tr("The executable for the synergy client does not exist.")); + return false; + } + +#if defined(Q_OS_WIN) + // wrap in quotes so a malicious user can't start \Program.exe as admin. + app = QString("\"%1\"").arg(app); +#endif + + if (appConfig().logToFile()) + { + appConfig().persistLogDir(); + args << "--log" << appConfig().logFilenameCmd(); + } + + // check auto config first, if it is disabled or no server detected, + // use line edit host name if it is not empty + if (m_pCheckBoxAutoConfig->isChecked()) { + if (m_pComboServerList->count() != 0) { + QString serverIp = m_pComboServerList->currentText(); + args << serverIp + ":" + QString::number(appConfig().port()); + return true; + } + } + + if (m_pLineEditHostname->text().isEmpty()) { + show(); + if (!m_SuppressEmptyServerWarning) { + QMessageBox::warning(this, tr("Hostname is empty"), + tr("Please fill in a hostname for the synergy client to connect to.")); + } + return false; + } + + args << m_pLineEditHostname->text() + ":" + QString::number(appConfig().port()); + + return true; +} + +QString MainWindow::configFilename() +{ + QString filename; + 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). + m_pTempConfigFile = new QTemporaryFile(); + if (!m_pTempConfigFile->open()) + { + QMessageBox::critical(this, tr("Cannot write configuration file"), tr("The temporary configuration file required to start synergy can not be written.")); + return ""; + } + + serverConfig().save(*m_pTempConfigFile); + filename = m_pTempConfigFile->fileName(); + + m_pTempConfigFile->close(); + } + else + { + if (!QFile::exists(m_pLineEditConfigFile->text())) + { + if (QMessageBox::warning(this, tr("Configuration filename invalid"), + tr("You have not filled in a valid configuration file for the synergy server. " + "Do you want to browse for the configuration file now?"), QMessageBox::Yes | QMessageBox::No) != QMessageBox::Yes + || !on_m_pButtonBrowseConfigFile_clicked()) + return ""; + } + + filename = m_pLineEditConfigFile->text(); + } + return filename; +} + +QString MainWindow::address() +{ + QString i = appConfig().networkInterface(); + return (!i.isEmpty() ? i : "") + ":" + QString::number(appConfig().port()); +} + +QString MainWindow::appPath(const QString& name) +{ + return appConfig().synergyProgramDir() + name; +} + +bool MainWindow::serverArgs(QStringList& args, QString& app) +{ + app = appPath(appConfig().synergysName()); + + if (!QFile::exists(app)) + { + QMessageBox::warning(this, tr("Synergy server not found"), + tr("The executable for the synergy server does not exist.")); + return false; + } + +#if defined(Q_OS_WIN) + // wrap in quotes so a malicious user can't start \Program.exe as admin. + app = QString("\"%1\"").arg(app); +#endif + + if (appConfig().logToFile()) + { + appConfig().persistLogDir(); + + args << "--log" << appConfig().logFilenameCmd(); + } + + QString configFilename = this->configFilename(); +#if defined(Q_OS_WIN) + // wrap in quotes in case username contains spaces. + configFilename = QString("\"%1\"").arg(configFilename); +#endif + args << "-c" << configFilename << "--address" << address(); + + if (!appConfig().serialKey().isEmpty()) { + args << "--serial-key" << appConfig().serialKey(); + } + + return true; +} + +void MainWindow::stopSynergy() +{ + appendLogDebug("stopping process"); + + m_ExpectedRunningState = kStopped; + + if (appConfig().processMode() == Service) + { + stopService(); + } + else if (appConfig().processMode() == Desktop) + { + stopDesktop(); + } + + setSynergyState(synergyDisconnected); + + // HACK: deleting the object deletes the physical file, which is + // bad, since it could be in use by the Windows service! +#if !defined(Q_OS_WIN) + delete m_pTempConfigFile; +#endif + m_pTempConfigFile = NULL; + + // reset so that new connects cause auto-hide. + m_AlreadyHidden = false; +} + +void MainWindow::stopService() +{ + // send empty command to stop service from laucning anything. + m_IpcClient.sendCommand("", appConfig().elevateMode()); +} + +void MainWindow::stopDesktop() +{ + QMutexLocker locker(&m_StopDesktopMutex); + if (!synergyProcess()) { + return; + } + + appendLogInfo("stopping synergy desktop process"); + + if (synergyProcess()->isOpen()) { + synergyProcess()->close(); + } + + delete synergyProcess(); + setSynergyProcess(NULL); +} + +void MainWindow::synergyFinished(int exitCode, QProcess::ExitStatus) +{ + if (exitCode == 0) { + appendLogInfo(QString("process exited normally")); + } + else { + appendLogError(QString("process exited with error code: %1").arg(exitCode)); + } + + if (m_ExpectedRunningState == kStarted) { + QTimer::singleShot(1000, this, SLOT(startSynergy())); + appendLogInfo(QString("detected process not running, auto restarting")); + } + else { + setSynergyState(synergyDisconnected); + } +} + +void MainWindow::setSynergyState(qSynergyState state) +{ + if (synergyState() == state) + return; + + if (state == synergyConnected || state == synergyConnecting) + { + disconnect (m_pButtonToggleStart, SIGNAL(clicked()), m_pActionStartSynergy, SLOT(trigger())); + connect (m_pButtonToggleStart, SIGNAL(clicked()), m_pActionStopSynergy, SLOT(trigger())); + m_pButtonToggleStart->setText(tr("&Stop")); + m_pButtonApply->setEnabled(true); + } + else if (state == synergyDisconnected) + { + disconnect (m_pButtonToggleStart, SIGNAL(clicked()), m_pActionStopSynergy, SLOT(trigger())); + connect (m_pButtonToggleStart, SIGNAL(clicked()), m_pActionStartSynergy, SLOT(trigger())); + m_pButtonToggleStart->setText(tr("&Start")); + m_pButtonApply->setEnabled(false); + } + + bool connected = false; + if (state == synergyConnected || state == synergyTransfering) { + connected = true; + } + + m_pActionStartSynergy->setEnabled(!connected); + m_pActionStopSynergy->setEnabled(connected); + + switch (state) + { + case synergyConnected: { + if (m_AppConfig->getCryptoEnabled()) { + m_pLabelPadlock->show(); + } + else { + m_pLabelPadlock->hide(); + } + + setStatus(tr("Synergy is running.")); + + break; + } + case synergyConnecting: + m_pLabelPadlock->hide(); + setStatus(tr("Synergy is starting.")); + break; + case synergyDisconnected: + m_pLabelPadlock->hide(); + setStatus(tr("Synergy is not running.")); + break; + case synergyTransfering: + break; + } + + setIcon(state); + + m_SynergyState = state; +} + +void MainWindow::setVisible(bool visible) +{ + QMainWindow::setVisible(visible); + m_pActionMinimize->setEnabled(visible); + m_pActionRestore->setEnabled(!visible); + +#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070 // lion + // dock hide only supported on lion :( + ProcessSerialNumber psn = { 0, kCurrentProcess }; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wdeprecated-declarations" + GetCurrentProcess(&psn); +#pragma GCC diagnostic pop + if (visible) + TransformProcessType(&psn, kProcessTransformToForegroundApplication); + else + TransformProcessType(&psn, kProcessTransformToBackgroundApplication); +#endif +} + +QString MainWindow::getIPAddresses() +{ + QList addresses = QNetworkInterface::allAddresses(); + + bool hinted = false; + QString result; + for (int i = 0; i < addresses.size(); i++) { + if (addresses[i].protocol() == QAbstractSocket::IPv4Protocol && + addresses[i] != QHostAddress(QHostAddress::LocalHost)) { + + QString address = addresses[i].toString(); + QString format = "%1, "; + + // usually 192.168.x.x is a useful ip for the user, so indicate + // this by making it bold. + if (!hinted && address.startsWith("192.168")) { + hinted = true; + format = "%1, "; + } + + result += format.arg(address); + } + } + + if (result == "") { + return tr("Unknown"); + } + + // remove trailing comma. + result.chop(2); + + return result; +} + +QString MainWindow::getScreenName() +{ + if (appConfig().screenName() == "") { + return QHostInfo::localHostName(); + } + else { + return appConfig().screenName(); + } +} + +void MainWindow::changeEvent(QEvent* event) +{ + if (event != 0) + { + switch (event->type()) + { + case QEvent::LanguageChange: + { + retranslateUi(this); + retranslateMenuBar(); + + proofreadInfo(); + + break; + } + default: + QMainWindow::changeEvent(event); + } + } +} + +void MainWindow::updateZeroconfService() +{ + QMutexLocker locker(&m_UpdateZeroconfMutex); + + if (isBonjourRunning()) { + if (!m_AppConfig->wizardShouldRun()) { + if (m_pZeroconfService) { + delete m_pZeroconfService; + m_pZeroconfService = NULL; + } + + if (m_AppConfig->autoConfig() || synergyType() == synergyServer) { + m_pZeroconfService = new ZeroconfService(this); + } + } + } +} + +void MainWindow::serverDetected(const QString name) +{ + if (m_pComboServerList->findText(name) == -1) { + // Note: the first added item triggers startSynergy + m_pComboServerList->addItem(name); + } + + if (m_pComboServerList->count() > 1) { + m_pComboServerList->show(); + } +} + +void MainWindow::setEdition(Edition edition) +{ + setWindowTitle(m_LicenseManager->getEditionName (edition)); + if (m_AppConfig->getCryptoEnabled()) { + m_pSslCertificate = new SslCertificate(this); + m_pSslCertificate->generateCertificate(); + } + updateLocalFingerprint(); + saveSettings(); +} + +void MainWindow::beginTrial(bool isExpiring) +{ + //Hack + //if (isExpiring) { + time_t daysLeft = m_LicenseManager->serialKey().daysLeft(::time(0)); + QString expiringNotice ("

%1 day%3 of " + "your %2 trial remain%5. " + "Buy now!" + "

"); + expiringNotice = expiringNotice + .arg (daysLeft) + .arg (LicenseManager::getEditionName + (m_LicenseManager->activeEdition())) + .arg ((daysLeft == 1) ? "" : "s") + .arg (QString::fromStdString + (m_LicenseManager->serialKey().toString())) + .arg ((daysLeft == 1) ? "s" : ""); + this->m_trialLabel->setText(expiringNotice); + this->m_trialWidget->show(); + //} + setWindowTitle (m_LicenseManager->activeEditionName()); +} + +void MainWindow::endTrial(bool isExpired) +{ + if (isExpired) { + QString expiredNotice ( + "

Your %1 trial has expired. " + "" + "Buy now!

" + ); + expiredNotice = expiredNotice + .arg(LicenseManager::getEditionName + (m_LicenseManager->activeEdition())) + .arg(QString::fromStdString + (m_LicenseManager->serialKey().toString())); + + this->m_trialLabel->setText(expiredNotice); + this->m_trialWidget->show(); + stopSynergy(); + m_AppConfig->activationHasRun(false); + } else { + this->m_trialWidget->hide(); + } + setWindowTitle (m_LicenseManager->activeEditionName()); +} + +void MainWindow::updateLocalFingerprint() +{ + if (m_AppConfig->getCryptoEnabled() && Fingerprint::local().fileExists()) { + m_pLabelFingerprint->setVisible(true); + m_pLabelLocalFingerprint->setVisible(true); + m_pLabelLocalFingerprint->setText(Fingerprint::local().readFirst()); + } + else { + m_pLabelFingerprint->setVisible(false); + m_pLabelLocalFingerprint->setVisible(false); + } +} + +LicenseManager& +MainWindow::licenseManager() const +{ + return *m_LicenseManager; +} + +void MainWindow::on_m_pGroupClient_toggled(bool on) +{ + m_pGroupServer->setChecked(!on); + if (on) { + updateZeroconfService(); + } +} + +void MainWindow::on_m_pGroupServer_toggled(bool on) +{ + m_pGroupClient->setChecked(!on); + if (on) { + updateZeroconfService(); + } +} + +bool MainWindow::on_m_pButtonBrowseConfigFile_clicked() +{ + QString fileName = QFileDialog::getOpenFileName(this, tr("Browse for a synergys config file"), QString(), synergyConfigFilter); + + if (!fileName.isEmpty()) + { + m_pLineEditConfigFile->setText(fileName); + return true; + } + + return false; +} + +bool MainWindow::on_m_pActionSave_triggered() +{ + QString fileName = QFileDialog::getSaveFileName(this, tr("Save configuration as...")); + + if (!fileName.isEmpty() && !serverConfig().save(fileName)) + { + QMessageBox::warning(this, tr("Save failed"), tr("Could not save configuration to file.")); + return true; + } + + return false; +} + +void MainWindow::on_m_pActionAbout_triggered() +{ + AboutDialog dlg(this, appPath(appConfig().synergycName())); + dlg.exec(); +} + +void MainWindow::on_m_pActionSettings_triggered() +{ + ProcessMode lastProcessMode = appConfig().processMode(); + + SettingsDialog dlg(this, appConfig()); + dlg.exec(); + + if (lastProcessMode != appConfig().processMode()) + { + onModeChanged(true, true); + } +} + +void MainWindow::autoAddScreen(const QString name) +{ + if (!m_ServerConfig.ignoreAutoConfigClient()) { + if (m_ActivationDialogRunning) { + // TODO: refactor this code + // add this screen to the pending list and check this list until + // users finish activation dialog + m_PendingClientNames.append(name); + return; + } + + int r = m_ServerConfig.autoAddScreen(name); + if (r != kAutoAddScreenOk) { + switch (r) { + case kAutoAddScreenManualServer: + showConfigureServer( + tr("Please add the server (%1) to the grid.") + .arg(appConfig().screenName())); + break; + + case kAutoAddScreenManualClient: + showConfigureServer( + tr("Please drag the new client screen (%1) " + "to the desired position on the grid.") + .arg(name)); + break; + } + } + else { + restartSynergy(); + } + } +} + +void MainWindow::showConfigureServer(const QString& message) +{ + ServerConfigDialog dlg(this, serverConfig(), appConfig().screenName()); + dlg.message(message); + dlg.exec(); +} + +void MainWindow::on_m_pButtonConfigureServer_clicked() +{ + showConfigureServer(); +} + +void MainWindow::on_m_pActivate_triggered() +{ + raiseActivationDialog(); +} + +void MainWindow::on_m_pButtonApply_clicked() +{ + restartSynergy(); +} + +#if defined(Q_OS_WIN) +bool MainWindow::isServiceRunning(QString name) +{ + SC_HANDLE hSCManager; + hSCManager = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT); + if (hSCManager == NULL) { + appendLogError("failed to open a service controller manager, error: " + + GetLastError()); + return false; + } + + auto array = name.toLocal8Bit(); + SC_HANDLE hService = OpenService(hSCManager, array.data(), SERVICE_QUERY_STATUS); + + if (hService == NULL) { + appendLogDebug("failed to open service: " + name); + return false; + } + + SERVICE_STATUS status; + if (QueryServiceStatus(hService, &status)) { + if (status.dwCurrentState == SERVICE_RUNNING) { + return true; + } + } +#else +bool MainWindow::isServiceRunning() +{ +#endif + return false; +} + +bool MainWindow::isBonjourRunning() +{ + bool result = false; + +#if defined(Q_OS_WIN) + result = isServiceRunning("Bonjour Service"); +#else + result = true; +#endif + + return result; +} + +void MainWindow::downloadBonjour() +{ +#if defined(Q_OS_WIN) + QUrl url; + int arch = getProcessorArch(); + if (arch == kProcessorArchWin32) { + url.setUrl(bonjourBaseUrl + bonjourFilename32); + appendLogInfo("downloading 32-bit Bonjour"); + } + else if (arch == kProcessorArchWin64) { + url.setUrl(bonjourBaseUrl + bonjourFilename64); + appendLogInfo("downloading 64-bit Bonjour"); + } + else { + QMessageBox::critical( + this, tr("Synergy"), + tr("Failed to detect system architecture.")); + return; + } + + if (m_pDataDownloader == NULL) { + m_pDataDownloader = new DataDownloader(this); + connect(m_pDataDownloader, SIGNAL(isComplete()), SLOT(installBonjour())); + } + + m_pDataDownloader->download(url); + + if (m_DownloadMessageBox == NULL) { + m_DownloadMessageBox = new QMessageBox(this); + m_DownloadMessageBox->setWindowTitle("Synergy"); + m_DownloadMessageBox->setIcon(QMessageBox::Information); + m_DownloadMessageBox->setText("Installing Bonjour, please wait..."); + m_DownloadMessageBox->setStandardButtons(0); + m_pCancelButton = m_DownloadMessageBox->addButton( + tr("Cancel"), QMessageBox::RejectRole); + } + + m_DownloadMessageBox->exec(); + + if (m_DownloadMessageBox->clickedButton() == m_pCancelButton) { + m_pDataDownloader->cancel(); + } +#endif +} + +void MainWindow::installBonjour() +{ +#if defined(Q_OS_WIN) +#if QT_VERSION >= 0x050000 + QString tempLocation = QStandardPaths::writableLocation(QStandardPaths::TempLocation); +#else + QString tempLocation = QDesktopServices::storageLocation( + QDesktopServices::TempLocation); +#endif + QString filename = tempLocation; + filename.append("\\").append(bonjourTargetFilename); + QFile file(filename); + if (!file.open(QIODevice::WriteOnly)) { + m_DownloadMessageBox->hide(); + + QMessageBox::warning( + this, "Synergy", + tr("Failed to download Bonjour installer to location: %1") + .arg(tempLocation)); + return; + } + + file.write(m_pDataDownloader->data()); + file.close(); + + QStringList arguments; + arguments.append("/i"); + QString winFilename = QDir::toNativeSeparators(filename); + arguments.append(winFilename); + arguments.append("/passive"); + if (m_BonjourInstall == NULL) { + m_BonjourInstall = new CommandProcess("msiexec", arguments); + } + + QThread* thread = new QThread; + connect(m_BonjourInstall, SIGNAL(finished()), this, + SLOT(bonjourInstallFinished())); + connect(m_BonjourInstall, SIGNAL(finished()), thread, SLOT(quit())); + connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); + + m_BonjourInstall->moveToThread(thread); + thread->start(); + + QMetaObject::invokeMethod(m_BonjourInstall, "run", Qt::QueuedConnection); + + m_DownloadMessageBox->hide(); +#endif +} + +void MainWindow::promptAutoConfig() +{ + if (!isBonjourRunning()) { + int r = QMessageBox::question( + this, tr("Synergy"), + tr("Do you want to enable auto config and install Bonjour?\n\n" + "This feature helps you establish the connection."), + QMessageBox::Yes | QMessageBox::No); + + if (r == QMessageBox::Yes) { + m_AppConfig->setAutoConfig(true); + downloadBonjour(); + } + else { + m_AppConfig->setAutoConfig(false); + m_pCheckBoxAutoConfig->setChecked(false); + } + } + + m_AppConfig->setAutoConfigPrompted(true); +} + +void MainWindow::on_m_pComboServerList_currentIndexChanged(QString ) +{ + if (m_pComboServerList->count() != 0) { + restartSynergy(); + } +} + +void MainWindow::on_m_pCheckBoxAutoConfig_toggled(bool checked) +{ + if (!isBonjourRunning() && checked) { + if (!m_SuppressAutoConfigWarning) { + int r = QMessageBox::information( + this, tr("Synergy"), + tr("Auto config feature requires Bonjour.\n\n" + "Do you want to install Bonjour?"), + QMessageBox::Yes | QMessageBox::No); + + if (r == QMessageBox::Yes) { + downloadBonjour(); + } + } + + m_pCheckBoxAutoConfig->setChecked(false); + return; + } + + m_pLineEditHostname->setDisabled(checked); + appConfig().setAutoConfig(checked); + updateZeroconfService(); + + if (!checked) { + m_pComboServerList->clear(); + m_pComboServerList->hide(); + } +} + +void MainWindow::bonjourInstallFinished() +{ + appendLogInfo("Bonjour install finished"); + + m_pCheckBoxAutoConfig->setChecked(true); +} + +int MainWindow::raiseActivationDialog() +{ + if (m_ActivationDialogRunning) { + return QDialog::Rejected; + } + ActivationDialog activationDialog (this, appConfig(), licenseManager()); + m_ActivationDialogRunning = true; + connect (&activationDialog, SIGNAL(finished(int)), + this, SLOT(on_activationDialogFinish()), Qt::QueuedConnection); + int result = activationDialog.exec(); + m_ActivationDialogRunning = false; + if (!m_PendingClientNames.empty()) { + foreach (const QString& name, m_PendingClientNames) { + autoAddScreen(name); + } + + m_PendingClientNames.clear(); + } + if (result == QDialog::Accepted) { + restartSynergy(); + } + return result; +} + +void MainWindow::on_windowShown() +{ + time_t currentTime = ::time(0); + if (!m_AppConfig->activationHasRun() + && ((m_AppConfig->edition() == kUnregistered) || + (m_LicenseManager->serialKey().isExpired(currentTime)))) { + raiseActivationDialog(); + } +} + +QString MainWindow::getProfileRootForArg() +{ + CoreInterface coreInterface; + QString dir = coreInterface.getProfileDir(); + + // HACK: strip our app name since we're returning the root dir. +#if defined(Q_OS_WIN) + dir.replace("\\Synergy", ""); +#else + dir.replace("/.synergy", ""); +#endif + + return QString("\"%1\"").arg(dir); +} diff --git a/src/gui/src/MainWindow.h b/src/gui/src/MainWindow.h new file mode 100644 index 00000000..75920caa --- /dev/null +++ b/src/gui/src/MainWindow.h @@ -0,0 +1,241 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(MAINWINDOW__H) + +#define MAINWINDOW__H + +#include +#include +#include +#include +#include + +#include "ui_MainWindowBase.h" + +#include "ServerConfig.h" +#include "AppConfig.h" +#include "VersionChecker.h" +#include "IpcClient.h" +#include "Ipc.h" +#include "ActivationDialog.h" + +#include + +class QAction; +class QMenu; +class QLineEdit; +class QGroupBox; +class QPushButton; +class QTextEdit; +class QComboBox; +class QTabWidget; +class QCheckBox; +class QRadioButton; +class QTemporaryFile; +class QMessageBox; +class QAbstractButton; + +class LogDialog; +class QSynergyApplication; +class SetupWizard; +class ZeroconfService; +class DataDownloader; +class CommandProcess; +class SslCertificate; +class LicenseManager; + +class MainWindow : public QMainWindow, public Ui::MainWindowBase +{ + Q_OBJECT + + friend class QSynergyApplication; + friend class SetupWizard; + friend class ActivationDialog; + friend class SettingsDialog; + + public: + enum qSynergyState + { + synergyDisconnected, + synergyConnecting, + synergyConnected, + synergyTransfering + }; + + enum qSynergyType + { + synergyClient, + synergyServer + }; + + enum qLevel { + Error, + Info + }; + + enum qRuningState { + kStarted, + kStopped + }; + + public: + MainWindow(QSettings& settings, AppConfig& appConfig, + LicenseManager& licenseManager); + ~MainWindow(); + + public: + void setVisible(bool visible); + int synergyType() const { return m_pGroupClient->isChecked() ? synergyClient : synergyServer; } + int synergyState() const { return m_SynergyState; } + QString hostname() const { return m_pLineEditHostname->text(); } + QString configFilename(); + QString address(); + QString appPath(const QString& name); + void open(); + void clearLog(); + VersionChecker& versionChecker() { return m_VersionChecker; } + QString getScreenName(); + ServerConfig& serverConfig() { return m_ServerConfig; } + void showConfigureServer(const QString& message); + void showConfigureServer() { showConfigureServer(""); } + void autoAddScreen(const QString name); + void updateZeroconfService(); + void serverDetected(const QString name); + void updateLocalFingerprint(); + LicenseManager& licenseManager() const; + + int raiseActivationDialog(); + +public slots: + void setEdition(Edition edition); + void beginTrial(bool isExpiring); + void endTrial(bool isExpired); + void appendLogRaw(const QString& text); + void appendLogInfo(const QString& text); + void appendLogDebug(const QString& text); + void appendLogError(const QString& text); + void startSynergy(); + + protected slots: + void sslToggled(bool enabled); + void on_m_pGroupClient_toggled(bool on); + void on_m_pGroupServer_toggled(bool on); + bool on_m_pButtonBrowseConfigFile_clicked(); + void on_m_pButtonConfigureServer_clicked(); + bool on_m_pActionSave_triggered(); + void on_m_pActionAbout_triggered(); + void on_m_pActionSettings_triggered(); + void on_m_pActivate_triggered(); + void synergyFinished(int exitCode, QProcess::ExitStatus); + void trayActivated(QSystemTrayIcon::ActivationReason reason); + void stopSynergy(); + void logOutput(); + void logError(); + void updateFound(const QString& version); + void bonjourInstallFinished(); + + protected: + QSettings& settings() { return m_Settings; } + AppConfig& appConfig() { return *m_AppConfig; } + QProcess* synergyProcess() { return m_pSynergy; } + void setSynergyProcess(QProcess* p) { m_pSynergy = p; } + void initConnections(); + void createMenuBar(); + void createStatusBar(); + void createTrayIcon(); + void loadSettings(); + void saveSettings(); + void setIcon(qSynergyState state); + void setSynergyState(qSynergyState state); + bool checkForApp(int which, QString& app); + bool clientArgs(QStringList& args, QString& app); + bool serverArgs(QStringList& args, QString& app); + void setStatus(const QString& status); + void sendIpcMessage(qIpcMessageType type, const char* buffer, bool showErrors); + void onModeChanged(bool startDesktop, bool applyService); + void updateFromLogLine(const QString& line); + QString getIPAddresses(); + void stopService(); + void stopDesktop(); + void changeEvent(QEvent* event); + void retranslateMenuBar(); +#if defined(Q_OS_WIN) + bool isServiceRunning(QString name); +#else + bool isServiceRunning(); +#endif + bool isBonjourRunning(); + void downloadBonjour(); + void promptAutoConfig(); + QString getProfileRootForArg(); + void checkConnected(const QString& line); + void checkLicense(const QString& line); + void checkFingerprint(const QString& line); + bool autoHide(); + QString getTimeStamp(); + void restartSynergy(); + void proofreadInfo(); + + void showEvent (QShowEvent*); + + private: + QSettings& m_Settings; + AppConfig* m_AppConfig; + LicenseManager* m_LicenseManager; + QProcess* m_pSynergy; + int m_SynergyState; + ServerConfig m_ServerConfig; + QTemporaryFile* m_pTempConfigFile; + QSystemTrayIcon* m_pTrayIcon; + QMenu* m_pTrayIconMenu; + bool m_AlreadyHidden; + VersionChecker m_VersionChecker; + IpcClient m_IpcClient; + QMenuBar* m_pMenuBar; + QMenu* m_pMenuFile; + QMenu* m_pMenuEdit; + QMenu* m_pMenuWindow; + QMenu* m_pMenuHelp; + ZeroconfService* m_pZeroconfService; + DataDownloader* m_pDataDownloader; + QMessageBox* m_DownloadMessageBox; + QAbstractButton* m_pCancelButton; + QMutex m_UpdateZeroconfMutex; + bool m_SuppressAutoConfigWarning; + CommandProcess* m_BonjourInstall; + bool m_SuppressEmptyServerWarning; + qRuningState m_ExpectedRunningState; + QMutex m_StopDesktopMutex; + SslCertificate* m_pSslCertificate; + bool m_ActivationDialogRunning; + QStringList m_PendingClientNames; + +private slots: + void on_m_pCheckBoxAutoConfig_toggled(bool checked); + void on_m_pComboServerList_currentIndexChanged(QString ); + void on_m_pButtonApply_clicked(); + void installBonjour(); + void on_windowShown(); + +signals: + void windowShown(); +}; + +#endif + diff --git a/src/gui/src/MainWindowBase.ui b/src/gui/src/MainWindowBase.ui new file mode 100644 index 00000000..7069b8b2 --- /dev/null +++ b/src/gui/src/MainWindowBase.ui @@ -0,0 +1,613 @@ + + + MainWindowBase + + + + 0 + 0 + 600 + 550 + + + + + 0 + 0 + + + + + 500 + 400 + + + + Synergy + + + + + + + + 2 + + + 0 + + + 0 + + + 8 + + + + + + + + :/res/icons/16x16/warning.png + + + + + + + <html><head/><body><p><span style=" font-weight:600;">%1</span> days of your Synergy Pro trial remain. <a href="http://symless.com/pricing?src=gui"><span style=" text-decoration: underline; color:#0000ff;">Buy now!</span></a></p></body></html> + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 2 + + + 0 + + + 0 + + + 8 + + + + + + + + :/res/icons/16x16/warning.png + + + + + + + m_pLabelUpdate + + + true + + + + + + + Qt::Horizontal + + + + 469 + 20 + + + + + + + + + + + + 0 + 0 + + + + Ser&ver (share this computer's mouse and keyboard): + + + true + + + true + + + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + IP addresses: + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + SSL Fingerprint: + + + + + + + + + + + + + + + + Configure interactively: + + + true + + + + + + + + + &Configure Server... + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Use existing configuration: + + + + + + + + + &Configuration file: + + + m_pLineEditConfigFile + + + + + + + false + + + + + + + false + + + &Browse... + + + + + + + + + + + + + 0 + 0 + + + + &Client (use another computer's mouse and keyboard): + + + true + + + true + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + Screen name: + + + + + + + + + + + + + + &Server IP: + + + m_pLineEditHostname + + + + + + + + + + Auto config + + + + + + + + 0 + 0 + + + + + 120 + 0 + + + + + + + + + + + Log + + + + + + + 0 + 0 + + + + + Courier + + + + false + + + false + + + QTextEdit::NoWrap + + + true + + + + + + + + + + QLayout::SetDefaultConstraint + + + + + true + + + + + + :/res/icons/16x16/padlock.png + + + + + + + Ready + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + &Apply + + + + + + + &Start + + + + + + + + + + &About Synergy... + + + + + + + + &Quit + + + Quit + + + Ctrl+Q + + + + + &Start + + + Run + + + Ctrl+S + + + + + false + + + S&top + + + Stop + + + Ctrl+T + + + + + S&how Status + + + Ctrl+H + + + + + &Hide + + + Hide + + + + + + + + &Show + + + Show + + + + + + + + Save configuration &as... + + + Save the interactively generated server configuration to a file. + + + Ctrl+Alt+S + + + + + Settings + + + Edit settings + + + + + + + + Activate + + + Activate + + + + + + + + + m_pRadioExternalConfig + toggled(bool) + m_pLineEditConfigFile + setEnabled(bool) + + + 156 + 179 + + + 169 + 209 + + + + + m_pRadioExternalConfig + toggled(bool) + m_pButtonBrowseConfigFile + setEnabled(bool) + + + 353 + 182 + + + 356 + 211 + + + + + m_pRadioInternalConfig + toggled(bool) + m_pButtonConfigureServer + setEnabled(bool) + + + 204 + 244 + + + 212 + 274 + + + + + m_pButtonToggleStart + clicked() + m_pActionStartSynergy + trigger() + + + 361 + 404 + + + -1 + -1 + + + + + diff --git a/src/gui/src/NewScreenWidget.cpp b/src/gui/src/NewScreenWidget.cpp new file mode 100644 index 00000000..7873e8b1 --- /dev/null +++ b/src/gui/src/NewScreenWidget.cpp @@ -0,0 +1,48 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "NewScreenWidget.h" +#include "ScreenSetupModel.h" + +#include +#include + +NewScreenWidget::NewScreenWidget(QWidget* parent) : + QLabel(parent) +{ +} + +void NewScreenWidget::mousePressEvent(QMouseEvent* event) +{ + Screen newScreen(tr("Unnamed")); + + QByteArray itemData; + QDataStream dataStream(&itemData, QIODevice::WriteOnly); + dataStream << -1 << -1 << newScreen; + + QMimeData* pMimeData = new QMimeData; + pMimeData->setData(ScreenSetupModel::mimeType(), itemData); + + QDrag* pDrag = new QDrag(this); + pDrag->setMimeData(pMimeData); + pDrag->setPixmap(*pixmap()); + pDrag->setHotSpot(event->pos()); + + pDrag->exec(Qt::CopyAction, Qt::CopyAction); +} + diff --git a/src/gui/src/NewScreenWidget.h b/src/gui/src/NewScreenWidget.h new file mode 100644 index 00000000..67ff44f6 --- /dev/null +++ b/src/gui/src/NewScreenWidget.h @@ -0,0 +1,40 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(NEWSCREENWIDGET__H) + +#define NEWSCREENWIDGET__H + +#include + +class QMouseEvent; +class QWidget; + +class NewScreenWidget : public QLabel +{ + Q_OBJECT + + public: + NewScreenWidget(QWidget* parent); + + protected: + void mousePressEvent(QMouseEvent* event); +}; + +#endif + diff --git a/src/gui/src/ProcessorArch.h b/src/gui/src/ProcessorArch.h new file mode 100644 index 00000000..cb2d30fc --- /dev/null +++ b/src/gui/src/ProcessorArch.h @@ -0,0 +1,28 @@ +/* + * synergy -- 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 . + */ + +#pragma once + +enum qProcessorArch { + kProcessorArchWin32, + kProcessorArchWin64, + kProcessorArchMac32, + kProcessorArchMac64, + kProcessorArchLinux32, + kProcessorArchLinux64, + kProcessorArchUnknown +}; diff --git a/src/gui/src/QSynergyApplication.cpp b/src/gui/src/QSynergyApplication.cpp new file mode 100644 index 00000000..969d2a4b --- /dev/null +++ b/src/gui/src/QSynergyApplication.cpp @@ -0,0 +1,72 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "QSynergyApplication.h" +#include "MainWindow.h" + +#include +#include + +QSynergyApplication* QSynergyApplication::s_Instance = NULL; + +QSynergyApplication::QSynergyApplication(int& argc, char** argv) : + QApplication(argc, argv), + m_Translator(NULL) +{ + s_Instance = this; +} + +QSynergyApplication::~QSynergyApplication() +{ + delete m_Translator; +} + +void QSynergyApplication::commitData(QSessionManager&) +{ + foreach(QWidget* widget, topLevelWidgets()) + { + MainWindow* mainWindow = qobject_cast(widget); + if (mainWindow) + mainWindow->saveSettings(); + } +} + +QSynergyApplication* QSynergyApplication::getInstance() +{ + return s_Instance; +} + +void QSynergyApplication::switchTranslator(QString lang) +{ + if (m_Translator != NULL) + { + removeTranslator(m_Translator); + delete m_Translator; + } + + QResource locale(":/res/lang/gui_" + lang + ".qm"); + m_Translator = new QTranslator(); + m_Translator->load(locale.data(), locale.size()); + installTranslator(m_Translator); +} + +void QSynergyApplication::setTranslator(QTranslator* translator) +{ + m_Translator = translator; + installTranslator(m_Translator); +} diff --git a/src/gui/src/QSynergyApplication.h b/src/gui/src/QSynergyApplication.h new file mode 100644 index 00000000..26c3be5e --- /dev/null +++ b/src/gui/src/QSynergyApplication.h @@ -0,0 +1,47 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(QSYNERGYAPPLICATION__H) + +#define QSYNERGYAPPLICATION__H + +#include + +class QSessionManager; + +class QSynergyApplication : public QApplication +{ + public: + QSynergyApplication(int& argc, char** argv); + ~QSynergyApplication(); + + public: + void commitData(QSessionManager& manager); + void switchTranslator(QString lang); + void setTranslator(QTranslator* translator); + + static QSynergyApplication* getInstance(); + + private: + QTranslator* m_Translator; + + static QSynergyApplication* s_Instance; +}; + +#endif + diff --git a/src/gui/src/QUtility.cpp b/src/gui/src/QUtility.cpp new file mode 100644 index 00000000..34c0db96 --- /dev/null +++ b/src/gui/src/QUtility.cpp @@ -0,0 +1,115 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2013-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 . + */ + +#include "QUtility.h" + +#include "ProcessorArch.h" +#include "CommandProcess.h" + +#if defined(Q_OS_LINUX) +#include +#endif + +#if defined(Q_OS_WIN) +#define WIN32_LEAN_AND_MEAN +#include +#endif + +void setIndexFromItemData(QComboBox* comboBox, const QVariant& itemData) +{ + for (int i = 0; i < comboBox->count(); ++i) + { + if (comboBox->itemData(i) == itemData) + { + comboBox->setCurrentIndex(i); + return; + } + } +} + +QString hash(const QString& string) +{ + QByteArray data = string.toUtf8(); + QByteArray hash = QCryptographicHash::hash(data, QCryptographicHash::Md5); + return hash.toHex(); +} + +QString getFirstMacAddress() +{ + QString mac; + foreach (const QNetworkInterface &interface, QNetworkInterface::allInterfaces()) + { + mac = interface.hardwareAddress(); + if (mac.size() != 0) + { + break; + } + } + return mac; +} + +qProcessorArch getProcessorArch() +{ +#if defined(Q_OS_WIN) + SYSTEM_INFO systemInfo; + GetNativeSystemInfo(&systemInfo); + + switch (systemInfo.wProcessorArchitecture) { + case PROCESSOR_ARCHITECTURE_INTEL: + return kProcessorArchWin32; + case PROCESSOR_ARCHITECTURE_IA64: + return kProcessorArchWin64; + case PROCESSOR_ARCHITECTURE_AMD64: + return kProcessorArchWin64; + default: + return kProcessorArchUnknown; + } +#endif + +#if defined(Q_OS_LINUX) +#ifdef __i386__ + return kProcessorArchLinux32; +#else + return kProcessorArchLinux64; +#endif +#endif + + return kProcessorArchUnknown; +} + +QString getOSInformation() +{ + QString result; + +#if defined(Q_OS_LINUX) + result = "Linux"; + try { + QStringList arguments; + arguments.append("/etc/os-release"); + CommandProcess cp("/bin/cat", arguments); + QString output = cp.run(); + + QRegExp resultRegex(".*PRETTY_NAME=\"([^\"]+)\".*"); + if (resultRegex.exactMatch(output)) { + result = resultRegex.cap(1); + } + } catch (...) { + } +#endif + + return result; +} diff --git a/src/gui/src/QUtility.h b/src/gui/src/QUtility.h new file mode 100644 index 00000000..0738d96c --- /dev/null +++ b/src/gui/src/QUtility.h @@ -0,0 +1,31 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2013-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 . + */ + +#pragma once + +#include "ProcessorArch.h" + +#include +#include +#include +#include + +void setIndexFromItemData(QComboBox* comboBox, const QVariant& itemData); +QString hash(const QString& string); +QString getFirstMacAddress(); +qProcessorArch getProcessorArch(); +QString getOSInformation(); diff --git a/src/gui/src/Screen.cpp b/src/gui/src/Screen.cpp new file mode 100644 index 00000000..3ec07caa --- /dev/null +++ b/src/gui/src/Screen.cpp @@ -0,0 +1,147 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "Screen.h" + +#include +#include + +Screen::Screen() : + m_Pixmap(QPixmap(":res/icons/64x64/video-display.png")), + m_Swapped(false) +{ + init(); +} + +Screen::Screen(const QString& name) : + m_Pixmap(QPixmap(":res/icons/64x64/video-display.png")), + m_Swapped(false) +{ + init(); + setName(name); +} + +void Screen::init() +{ + name().clear(); + aliases().clear(); + modifiers().clear(); + switchCorners().clear(); + fixes().clear(); + setSwitchCornerSize(0); + + // m_Modifiers, m_SwitchCorners and m_Fixes are QLists we use like fixed-size arrays, + // thus we need to make sure to fill them with the required number of elements. + for (int i = 0; i < NumModifiers; i++) + modifiers() << i; + + for (int i = 0; i < NumSwitchCorners; i++) + switchCorners() << false; + + for (int i = 0; i < NumFixes; i++) + fixes() << false; +} + +void Screen::loadSettings(QSettings& settings) +{ + setName(settings.value("name").toString()); + + if (name().isEmpty()) + return; + + setSwitchCornerSize(settings.value("switchCornerSize").toInt()); + + readSettings(settings, aliases(), "alias", QString("")); + readSettings(settings, modifiers(), "modifier", static_cast(DefaultMod), NumModifiers); + readSettings(settings, switchCorners(), "switchCorner", false, NumSwitchCorners); + readSettings(settings, fixes(), "fix", false, NumFixes); +} + +void Screen::saveSettings(QSettings& settings) const +{ + settings.setValue("name", name()); + + if (name().isEmpty()) + return; + + settings.setValue("switchCornerSize", switchCornerSize()); + + writeSettings(settings, aliases(), "alias"); + writeSettings(settings, modifiers(), "modifier"); + writeSettings(settings, switchCorners(), "switchCorner"); + writeSettings(settings, fixes(), "fix"); +} + +QTextStream& Screen::writeScreensSection(QTextStream& outStream) const +{ + outStream << "\t" << name() << ":" << endl; + + for (int i = 0; i < modifiers().size(); i++) + if (modifier(i) != i) + outStream << "\t\t" << modifierName(i) << " = " << modifierName(modifier(i)) << endl; + + for (int i = 0; i < fixes().size(); i++) + outStream << "\t\t" << fixName(i) << " = " << (fixes()[i] ? "true" : "false") << endl; + + outStream << "\t\t" << "switchCorners = none "; + for (int i = 0; i < switchCorners().size(); i++) + if (switchCorners()[i]) + outStream << "+" << switchCornerName(i) << " "; + outStream << endl; + + outStream << "\t\t" << "switchCornerSize = " << switchCornerSize() << endl; + + return outStream; +} + +QTextStream& Screen::writeAliasesSection(QTextStream& outStream) const +{ + if (!aliases().isEmpty()) + { + outStream << "\t" << name() << ":" << endl; + + foreach (const QString& alias, aliases()) + outStream << "\t\t" << alias << endl; + } + + return outStream; +} + +QDataStream& operator<<(QDataStream& outStream, const Screen& screen) +{ + return outStream + << screen.name() + << screen.switchCornerSize() + << screen.aliases() + << screen.modifiers() + << screen.switchCorners() + << screen.fixes() + ; +} + +QDataStream& operator>>(QDataStream& inStream, Screen& screen) +{ + return inStream + >> screen.m_Name + >> screen.m_SwitchCornerSize + >> screen.m_Aliases + >> screen.m_Modifiers + >> screen.m_SwitchCorners + >> screen.m_Fixes + ; +} diff --git a/src/gui/src/Screen.h b/src/gui/src/Screen.h new file mode 100644 index 00000000..8ae823fe --- /dev/null +++ b/src/gui/src/Screen.h @@ -0,0 +1,105 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(SCREEN__H) + +#define SCREEN__H + +#include +#include +#include +#include + +#include "BaseConfig.h" + +class QSettings; +class QTextStream; + +class ScreenSettingsDialog; + +class Screen : public BaseConfig +{ + friend QDataStream& operator<<(QDataStream& outStream, const Screen& screen); + friend QDataStream& operator>>(QDataStream& inStream, Screen& screen); + friend class ScreenSettingsDialog; + friend class ScreenSetupModel; + friend class ScreenSetupView; + + public: + Screen(); + Screen(const QString& name); + + public: + const QPixmap* pixmap() const { return &m_Pixmap; } + const QString& name() const { return m_Name; } + const QStringList& aliases() const { return m_Aliases; } + + bool isNull() const { return m_Name.isEmpty(); } + int modifier(int m) const { return m_Modifiers[m] == DefaultMod ? m : m_Modifiers[m]; } + const QList& modifiers() const { return m_Modifiers; } + bool switchCorner(int c) const { return m_SwitchCorners[c]; } + const QList& switchCorners() const { return m_SwitchCorners; } + int switchCornerSize() const { return m_SwitchCornerSize; } + bool fix(Fix f) const { return m_Fixes[f]; } + const QList& fixes() const { return m_Fixes; } + + void loadSettings(QSettings& settings); + void saveSettings(QSettings& settings) const; + QTextStream& writeScreensSection(QTextStream& outStream) const; + QTextStream& writeAliasesSection(QTextStream& outStream) const; + + bool swapped() const { return m_Swapped; } + QString& name() { return m_Name; } + void setName(const QString& name) { m_Name = name; } + + protected: + void init(); + QPixmap* pixmap() { return &m_Pixmap; } + + void setPixmap(const QPixmap& pixmap) { m_Pixmap = pixmap; } + QStringList& aliases() { return m_Aliases; } + void setModifier(int m, int n) { m_Modifiers[m] = n; } + QList& modifiers() { return m_Modifiers; } + void addAlias(const QString& alias) { m_Aliases.append(alias); } + void setSwitchCorner(int c, bool on) { m_SwitchCorners[c] = on; } + QList& switchCorners() { return m_SwitchCorners; } + void setSwitchCornerSize(int val) { m_SwitchCornerSize = val; } + void setFix(int f, bool on) { m_Fixes[f] = on; } + QList& fixes() { return m_Fixes; } + void setSwapped(bool on) { m_Swapped = on; } + + private: + QPixmap m_Pixmap; + QString m_Name; + + QStringList m_Aliases; + QList m_Modifiers; + QList m_SwitchCorners; + int m_SwitchCornerSize; + QList m_Fixes; + + bool m_Swapped; +}; + +typedef QList 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 new file mode 100644 index 00000000..740137a3 --- /dev/null +++ b/src/gui/src/ScreenSettingsDialog.cpp @@ -0,0 +1,137 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "ScreenSettingsDialog.h" +#include "Screen.h" + +#include +#include +#include + +ScreenSettingsDialog::ScreenSettingsDialog(QWidget* parent, Screen* pScreen) : + QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), + Ui::ScreenSettingsDialogBase(), + m_pScreen(pScreen) +{ + setupUi(this); + + QRegExp validScreenName("[a-z0-9\\._-]{,255}", Qt::CaseInsensitive); + + m_pLineEditName->setText(m_pScreen->name()); + m_pLineEditName->setValidator(new QRegExpValidator(validScreenName, m_pLineEditName)); + m_pLineEditName->selectAll(); + + m_pLineEditAlias->setValidator(new QRegExpValidator(validScreenName, m_pLineEditName)); + + for (int i = 0; i < m_pScreen->aliases().count(); i++) + new QListWidgetItem(m_pScreen->aliases()[i], m_pListAliases); + + m_pComboBoxShift->setCurrentIndex(m_pScreen->modifier(Screen::Shift)); + m_pComboBoxCtrl->setCurrentIndex(m_pScreen->modifier(Screen::Ctrl)); + m_pComboBoxAlt->setCurrentIndex(m_pScreen->modifier(Screen::Alt)); + m_pComboBoxMeta->setCurrentIndex(m_pScreen->modifier(Screen::Meta)); + m_pComboBoxSuper->setCurrentIndex(m_pScreen->modifier(Screen::Super)); + + m_pCheckBoxCornerTopLeft->setChecked(m_pScreen->switchCorner(Screen::TopLeft)); + m_pCheckBoxCornerTopRight->setChecked(m_pScreen->switchCorner(Screen::TopRight)); + m_pCheckBoxCornerBottomLeft->setChecked(m_pScreen->switchCorner(Screen::BottomLeft)); + m_pCheckBoxCornerBottomRight->setChecked(m_pScreen->switchCorner(Screen::BottomRight)); + m_pSpinBoxSwitchCornerSize->setValue(m_pScreen->switchCornerSize()); + + m_pCheckBoxCapsLock->setChecked(m_pScreen->fix(Screen::CapsLock)); + m_pCheckBoxNumLock->setChecked(m_pScreen->fix(Screen::NumLock)); + m_pCheckBoxScrollLock->setChecked(m_pScreen->fix(Screen::ScrollLock)); + m_pCheckBoxXTest->setChecked(m_pScreen->fix(Screen::XTest)); +} + +void ScreenSettingsDialog::accept() +{ + if (m_pLineEditName->text().isEmpty()) + { + QMessageBox::warning( + this, tr("Screen name is empty"), + tr("The screen name cannot be empty. " + "Please either fill in a name or cancel the dialog.")); + return; + } + + m_pScreen->init(); + + m_pScreen->setName(m_pLineEditName->text()); + + for (int i = 0; i < m_pListAliases->count(); i++) + { + QString alias(m_pListAliases->item(i)->text()); + if (alias == m_pLineEditName->text()) + { + QMessageBox::warning( + this, tr("Screen name matches alias"), + tr("The screen name cannot be the same as an alias. " + "Please either remove the alias or change the screen name.")); + return; + } + m_pScreen->addAlias(alias); + } + + m_pScreen->setModifier(Screen::Shift, m_pComboBoxShift->currentIndex()); + m_pScreen->setModifier(Screen::Ctrl, m_pComboBoxCtrl->currentIndex()); + m_pScreen->setModifier(Screen::Alt, m_pComboBoxAlt->currentIndex()); + m_pScreen->setModifier(Screen::Meta, m_pComboBoxMeta->currentIndex()); + m_pScreen->setModifier(Screen::Super, m_pComboBoxSuper->currentIndex()); + + m_pScreen->setSwitchCorner(Screen::TopLeft, m_pCheckBoxCornerTopLeft->isChecked()); + m_pScreen->setSwitchCorner(Screen::TopRight, m_pCheckBoxCornerTopRight->isChecked()); + m_pScreen->setSwitchCorner(Screen::BottomLeft, m_pCheckBoxCornerBottomLeft->isChecked()); + m_pScreen->setSwitchCorner(Screen::BottomRight, m_pCheckBoxCornerBottomRight->isChecked()); + m_pScreen->setSwitchCornerSize(m_pSpinBoxSwitchCornerSize->value()); + + m_pScreen->setFix(Screen::CapsLock, m_pCheckBoxCapsLock->isChecked()); + m_pScreen->setFix(Screen::NumLock, m_pCheckBoxNumLock->isChecked()); + m_pScreen->setFix(Screen::ScrollLock, m_pCheckBoxScrollLock->isChecked()); + m_pScreen->setFix(Screen::XTest, m_pCheckBoxXTest->isChecked()); + + QDialog::accept(); +} + +void ScreenSettingsDialog::on_m_pButtonAddAlias_clicked() +{ + if (!m_pLineEditAlias->text().isEmpty() && m_pListAliases->findItems(m_pLineEditAlias->text(), Qt::MatchFixedString).isEmpty()) + { + new QListWidgetItem(m_pLineEditAlias->text(), m_pListAliases); + m_pLineEditAlias->clear(); + } +} + +void ScreenSettingsDialog::on_m_pLineEditAlias_textChanged(const QString& text) +{ + m_pButtonAddAlias->setEnabled(!text.isEmpty()); +} + +void ScreenSettingsDialog::on_m_pButtonRemoveAlias_clicked() +{ + QList items = m_pListAliases->selectedItems(); + + for (int i = 0; i < items.count(); i++) + delete items[i]; +} + +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 new file mode 100644 index 00000000..620acc84 --- /dev/null +++ b/src/gui/src/ScreenSettingsDialog.h @@ -0,0 +1,53 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(SCREENSETTINGSDIALOG__H) + +#define SCREENSETTINGSDIALOG__H + +#include + +#include "ui_ScreenSettingsDialogBase.h" + +class QWidget; +class QString; + +class Screen; + +class ScreenSettingsDialog : public QDialog, public Ui::ScreenSettingsDialogBase +{ + Q_OBJECT + + public: + ScreenSettingsDialog(QWidget* parent, Screen* pScreen = NULL); + + public slots: + void accept(); + + private slots: + void on_m_pButtonAddAlias_clicked(); + void on_m_pButtonRemoveAlias_clicked(); + void on_m_pLineEditAlias_textChanged(const QString& text); + void on_m_pListAliases_itemSelectionChanged(); + + private: + Screen* m_pScreen; +}; + +#endif + diff --git a/src/gui/src/ScreenSettingsDialogBase.ui b/src/gui/src/ScreenSettingsDialogBase.ui new file mode 100644 index 00000000..0d6d7689 --- /dev/null +++ b/src/gui/src/ScreenSettingsDialogBase.ui @@ -0,0 +1,543 @@ + + + ScreenSettingsDialogBase + + + + 0 + 0 + 434 + 437 + + + + Screen Settings + + + + + + + + Screen &name: + + + m_pLineEditName + + + + + + + + + + + + + + true + + + A&liases + + + false + + + + + + + + + false + + + &Add + + + + + + + QAbstractItemView::ExtendedSelection + + + + + + + false + + + &Remove + + + + + + + Qt::Vertical + + + + 20 + 126 + + + + + + + + + + + &Modifier keys + + + false + + + + + + &Shift: + + + m_pComboBoxShift + + + + + + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Meta + + + + + Super + + + + + None + + + + + + + + &Ctrl: + + + m_pComboBoxCtrl + + + + + + + 1 + + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Meta + + + + + Super + + + + + None + + + + + + + + Al&t: + + + m_pComboBoxAlt + + + + + + + 2 + + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Meta + + + + + Super + + + + + None + + + + + + + + M&eta: + + + m_pComboBoxMeta + + + + + + + 3 + + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Meta + + + + + Super + + + + + None + + + + + + + + S&uper: + + + m_pComboBoxSuper + + + + + + + 4 + + + + Shift + + + + + Ctrl + + + + + Alt + + + + + Meta + + + + + Super + + + + + None + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + &Dead corners + + + false + + + + + + Top-left + + + + + + + Top-right + + + + + + + Bottom-left + + + + + + + Bottom-right + + + + + + + + + Corner Si&ze: + + + m_pSpinBoxSwitchCornerSize + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + &Fixes + + + false + + + + + + Fix CAPS LOCK key + + + + + + + Fix NUM LOCK key + + + + + + + Fix SCROLL LOCK key + + + + + + + Fix XTest for Xinerama + + + false + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + + m_pButtonBox + accepted() + ScreenSettingsDialogBase + accept() + + + 222 + 502 + + + 157 + 274 + + + + + m_pButtonBox + rejected() + ScreenSettingsDialogBase + reject() + + + 290 + 508 + + + 286 + 274 + + + + + diff --git a/src/gui/src/ScreenSetupModel.cpp b/src/gui/src/ScreenSetupModel.cpp new file mode 100644 index 00000000..40e93c87 --- /dev/null +++ b/src/gui/src/ScreenSetupModel.cpp @@ -0,0 +1,143 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "ScreenSetupModel.h" +#include "Screen.h" + +#include +#include + +const QString ScreenSetupModel::m_MimeType = "application/x-qsynergy-screen"; + +ScreenSetupModel::ScreenSetupModel(ScreenList& screens, int numColumns, int numRows) : + QAbstractTableModel(NULL), + m_Screens(screens), + m_NumColumns(numColumns), + m_NumRows(numRows) +{ + if (m_NumColumns * m_NumRows > screens.size()) + qFatal("Not enough elements (%u) in screens QList for %d columns and %d rows", screens.size(), m_NumColumns, m_NumRows); +} + +QVariant ScreenSetupModel::data(const QModelIndex& index, int role) const +{ + if (index.isValid() && index.row() < m_NumRows && index.column() < m_NumColumns) + { + switch(role) + { + case Qt::DecorationRole: + if (screen(index).isNull()) + break; + return QIcon(*screen(index).pixmap()); + + case Qt::ToolTipRole: + if (screen(index).isNull()) + break; + return QString(tr( + "
Screen: %1
" + "
Double click to edit settings" + "
Drag screen to the trashcan to remove it")).arg(screen(index).name()); + + case Qt::DisplayRole: + if (screen(index).isNull()) + break; + return screen(index).name(); + } + } + + return QVariant(); +} + +Qt::ItemFlags ScreenSetupModel::flags(const QModelIndex& index) const +{ + if (!index.isValid() || index.row() >= m_NumRows || index.column() >= m_NumColumns) + return 0; + + if (!screen(index).isNull()) + return Qt::ItemIsEnabled | Qt::ItemIsDragEnabled | Qt::ItemIsSelectable | Qt::ItemIsDropEnabled; + + return Qt::ItemIsDropEnabled; +} + +Qt::DropActions ScreenSetupModel::supportedDropActions() const +{ + return Qt::MoveAction | Qt::CopyAction; +} + +QStringList ScreenSetupModel::mimeTypes() const +{ + return QStringList() << m_MimeType; +} + +QMimeData* ScreenSetupModel::mimeData(const QModelIndexList& indexes) const +{ + QMimeData* pMimeData = new QMimeData(); + QByteArray encodedData; + + QDataStream stream(&encodedData, QIODevice::WriteOnly); + + foreach (const QModelIndex& index, indexes) + if (index.isValid()) + stream << index.column() << index.row() << screen(index); + + pMimeData->setData(m_MimeType, encodedData); + + return pMimeData; +} + +bool ScreenSetupModel::dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) +{ + if (action == Qt::IgnoreAction) + return true; + + if (!data->hasFormat(m_MimeType)) + return false; + + if (!parent.isValid() || row != -1 || column != -1) + return false; + + QByteArray encodedData = data->data(m_MimeType); + QDataStream stream(&encodedData, QIODevice::ReadOnly); + + int sourceColumn = -1; + int sourceRow = -1; + + stream >> sourceColumn; + stream >> sourceRow; + + // don't drop screen onto itself + if (sourceColumn == parent.column() && sourceRow == parent.row()) + return false; + + Screen droppedScreen; + stream >> droppedScreen; + + Screen oldScreen = screen(parent.column(), parent.row()); + if (!oldScreen.isNull() && sourceColumn != -1 && sourceRow != -1) + { + // mark the screen so it isn't deleted after the dragndrop succeeded + // see ScreenSetupView::startDrag() + oldScreen.setSwapped(true); + screen(sourceColumn, sourceRow) = oldScreen; + } + + screen(parent.column(), parent.row()) = droppedScreen; + + return true; +} + diff --git a/src/gui/src/ScreenSetupModel.h b/src/gui/src/ScreenSetupModel.h new file mode 100644 index 00000000..726c6ed8 --- /dev/null +++ b/src/gui/src/ScreenSetupModel.h @@ -0,0 +1,71 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(SCREENSETUPMODEL__H) + +#define SCREENSETUPMODEL__H + +#include +#include +#include +#include + +#include "Screen.h" + +class ScreenSetupView; +class ServerConfigDialog; + +class ScreenSetupModel : public QAbstractTableModel +{ + Q_OBJECT + + friend class ScreenSetupView; + friend class ServerConfigDialog; + + public: + ScreenSetupModel(ScreenList& screens, int numColumns, int numRows); + + public: + static const QString& mimeType() { return m_MimeType; } + QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; + int rowCount() const { return m_NumRows; } + int columnCount() const { return m_NumColumns; } + int rowCount(const QModelIndex&) const { return rowCount(); } + int columnCount(const QModelIndex&) const { return columnCount(); } + Qt::DropActions supportedDropActions() const; + Qt::ItemFlags flags(const QModelIndex& index) const; + QStringList mimeTypes() const; + QMimeData* mimeData(const QModelIndexList& indexes) const; + + protected: + bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent); + const Screen& screen(const QModelIndex& index) const { return screen(index.column(), index.row()); } + Screen& screen(const QModelIndex& index) { return screen(index.column(), index.row()); } + const Screen& screen(int column, int row) const { return m_Screens[row * m_NumColumns + column]; } + Screen& screen(int column, int row) { return m_Screens[row * m_NumColumns + column]; } + + private: + ScreenList& m_Screens; + const int m_NumColumns; + const int m_NumRows; + + static const QString m_MimeType; +}; + +#endif + diff --git a/src/gui/src/ScreenSetupView.cpp b/src/gui/src/ScreenSetupView.cpp new file mode 100644 index 00000000..f26d9700 --- /dev/null +++ b/src/gui/src/ScreenSetupView.cpp @@ -0,0 +1,161 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "ScreenSetupView.h" +#include "ScreenSetupModel.h" +#include "ScreenSettingsDialog.h" + +#include +#include + +ScreenSetupView::ScreenSetupView(QWidget* parent) : + QTableView(parent) +{ + setDropIndicatorShown(true); + setDragDropMode(DragDrop); + setSelectionMode(SingleSelection); + + setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + + setIconSize(QSize(64, 64)); + horizontalHeader()->hide(); + verticalHeader()->hide(); +} + +void ScreenSetupView::setModel(QAbstractItemModel* model) +{ + QTableView::setModel(model); + setTableSize(); +} + +ScreenSetupModel* ScreenSetupView::model() const +{ + return qobject_cast(QTableView::model()); +} + +void ScreenSetupView::setTableSize() +{ + for (int i = 0; i < model()->columnCount(); i++) + setColumnWidth(i, width() / model()->columnCount()); + + for (int i = 0; i < model()->rowCount(); i++) + setRowHeight(i, height() / model()->rowCount()); +} + +void ScreenSetupView::resizeEvent(QResizeEvent* event) +{ + setTableSize(); + event->ignore(); +} + +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(); + } + } + else + event->ignore(); +} + +void ScreenSetupView::dragEnterEvent(QDragEnterEvent* event) +{ + // we accept anything that enters us by a drag as long as the + // mime type is okay. anything else is dealt with in dragMoveEvent() + if (event->mimeData()->hasFormat(ScreenSetupModel::mimeType())) + event->accept(); + else + event->ignore(); +} + +void ScreenSetupView::dragMoveEvent(QDragMoveEvent* event) +{ + if (event->mimeData()->hasFormat(ScreenSetupModel::mimeType())) + { + // where does the event come from? myself or someone else? + if (event->source() == this) + { + // myself is ok, but then it must be a move action, never a copy + event->setDropAction(Qt::MoveAction); + event->accept(); + } + else + { + int col = columnAt(event->pos().x()); + int row = rowAt(event->pos().y()); + + // a drop from outside is not allowed if there's a screen already there. + if (!model()->screen(col, row).isNull()) + event->ignore(); + else + event->acceptProposedAction(); + } + } + else + event->ignore(); +} + +// this is reimplemented from QAbstractItemView::startDrag() +void ScreenSetupView::startDrag(Qt::DropActions) +{ + QModelIndexList indexes = selectedIndexes(); + + if (indexes.count() != 1) + return; + + QMimeData* pData = model()->mimeData(indexes); + if (pData == NULL) + return; + + QPixmap pixmap = *model()->screen(indexes[0]).pixmap(); + QDrag* pDrag = new QDrag(this); + pDrag->setPixmap(pixmap); + pDrag->setMimeData(pData); + pDrag->setHotSpot(QPoint(pixmap.width() / 2, pixmap.height() / 2)); + + if (pDrag->exec(Qt::MoveAction, Qt::MoveAction) == Qt::MoveAction) + { + selectionModel()->clear(); + + // make sure to only delete the drag source if screens weren't swapped + // see ScreenSetupModel::dropMimeData + if (!model()->screen(indexes[0]).swapped()) + model()->screen(indexes[0]) = Screen(); + else + model()->screen(indexes[0]).setSwapped(false); + } +} + +QStyleOptionViewItem ScreenSetupView::viewOptions() const +{ + QStyleOptionViewItem option = QTableView::viewOptions(); + option.showDecorationSelected = true; + option.decorationPosition = QStyleOptionViewItem::Top; + option.displayAlignment = Qt::AlignCenter; + option.textElideMode = Qt::ElideMiddle; + return option; +} + diff --git a/src/gui/src/ScreenSetupView.h b/src/gui/src/ScreenSetupView.h new file mode 100644 index 00000000..38eae2a4 --- /dev/null +++ b/src/gui/src/ScreenSetupView.h @@ -0,0 +1,57 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(SCREENSETUPVIEW__H) + +#define SCREENSETUPVIEW__H + +#include +#include + +#include "Screen.h" + +class QWidget; +class QMouseEvent; +class QResizeEvent; +class QDragEnterEvent; +class ScreenSetupModel; + +class ScreenSetupView : public QTableView +{ + Q_OBJECT + + public: + ScreenSetupView(QWidget* parent); + + public: + void setModel(QAbstractItemModel* model) override; + ScreenSetupModel* model() const; + + protected: + void mouseDoubleClickEvent(QMouseEvent*); + void setTableSize(); + void resizeEvent(QResizeEvent*); + void dragEnterEvent(QDragEnterEvent* event); + void dragMoveEvent(QDragMoveEvent* event); + void startDrag(Qt::DropActions supportedActions); + QStyleOptionViewItem viewOptions() const; + void scrollTo(const QModelIndex&, ScrollHint) {} +}; + +#endif + diff --git a/src/gui/src/ServerConfig.cpp b/src/gui/src/ServerConfig.cpp new file mode 100644 index 00000000..8ced4148 --- /dev/null +++ b/src/gui/src/ServerConfig.cpp @@ -0,0 +1,403 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "ServerConfig.h" +#include "Hotkey.h" +#include "MainWindow.h" +#include "AddClientDialog.h" + +#include +#include +#include +#include + +static const struct +{ + int x; + int y; + const char* name; +} neighbourDirs[] = +{ + { 1, 0, "right" }, + { -1, 0, "left" }, + { 0, -1, "up" }, + { 0, 1, "down" }, + +}; + +const int serverDefaultIndex = 7; + +ServerConfig::ServerConfig(QSettings* settings, int numColumns, int numRows , + QString serverName, MainWindow* mainWindow) : + m_pSettings(settings), + m_Screens(), + m_NumColumns(numColumns), + m_NumRows(numRows), + m_ServerName(serverName), + m_IgnoreAutoConfigClient(false), + m_EnableDragAndDrop(false), + m_ClipboardSharing(true), + m_pMainWindow(mainWindow) +{ + Q_ASSERT(m_pSettings); + + loadSettings(); +} + +ServerConfig::~ServerConfig() +{ + saveSettings(); +} + +bool ServerConfig::save(const QString& fileName) const +{ + QFile file(fileName); + if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) + return false; + + save(file); + file.close(); + + return true; +} + +void ServerConfig::save(QFile& file) const +{ + QTextStream outStream(&file); + outStream << *this; +} + +void ServerConfig::init() +{ + switchCorners().clear(); + screens().clear(); + + // m_NumSwitchCorners is used as a fixed size array. See Screen::init() + for (int i = 0; i < NumSwitchCorners; i++) + switchCorners() << false; + + // There must always be screen objects for each cell in the screens QList. Unused screens + // are identified by having an empty name. + for (int i = 0; i < numColumns() * numRows(); i++) + addScreen(Screen()); +} + +void ServerConfig::saveSettings() +{ + settings().beginGroup("internalConfig"); + settings().remove(""); + + settings().setValue("numColumns", numColumns()); + settings().setValue("numRows", numRows()); + + settings().setValue("hasHeartbeat", hasHeartbeat()); + settings().setValue("heartbeat", heartbeat()); + settings().setValue("relativeMouseMoves", relativeMouseMoves()); + settings().setValue("screenSaverSync", screenSaverSync()); + settings().setValue("win32KeepForeground", win32KeepForeground()); + settings().setValue("hasSwitchDelay", hasSwitchDelay()); + settings().setValue("switchDelay", switchDelay()); + settings().setValue("hasSwitchDoubleTap", hasSwitchDoubleTap()); + settings().setValue("switchDoubleTap", switchDoubleTap()); + settings().setValue("switchCornerSize", switchCornerSize()); + settings().setValue("ignoreAutoConfigClient", ignoreAutoConfigClient()); + settings().setValue("enableDragAndDrop", enableDragAndDrop()); + + writeSettings(settings(), switchCorners(), "switchCorner"); + + settings().beginWriteArray("screens"); + for (int i = 0; i < screens().size(); i++) + { + settings().setArrayIndex(i); + screens()[i].saveSettings(settings()); + } + settings().endArray(); + + settings().beginWriteArray("hotkeys"); + for (int i = 0; i < hotkeys().size(); i++) + { + settings().setArrayIndex(i); + hotkeys()[i].saveSettings(settings()); + } + settings().endArray(); + + settings().endGroup(); +} + +void ServerConfig::loadSettings() +{ + settings().beginGroup("internalConfig"); + + setNumColumns(settings().value("numColumns", 5).toInt()); + setNumRows(settings().value("numRows", 3).toInt()); + + // we need to know the number of columns and rows before we can set up ourselves + init(); + + haveHeartbeat(settings().value("hasHeartbeat", false).toBool()); + setHeartbeat(settings().value("heartbeat", 5000).toInt()); + setRelativeMouseMoves(settings().value("relativeMouseMoves", false).toBool()); + setScreenSaverSync(settings().value("screenSaverSync", true).toBool()); + setWin32KeepForeground(settings().value("win32KeepForeground", false).toBool()); + haveSwitchDelay(settings().value("hasSwitchDelay", false).toBool()); + setSwitchDelay(settings().value("switchDelay", 250).toInt()); + haveSwitchDoubleTap(settings().value("hasSwitchDoubleTap", false).toBool()); + setSwitchDoubleTap(settings().value("switchDoubleTap", 250).toInt()); + setSwitchCornerSize(settings().value("switchCornerSize").toInt()); + setIgnoreAutoConfigClient(settings().value("ignoreAutoConfigClient").toBool()); + setEnableDragAndDrop(settings().value("enableDragAndDrop", true).toBool()); + + readSettings(settings(), switchCorners(), "switchCorner", false, NumSwitchCorners); + + int numScreens = settings().beginReadArray("screens"); + Q_ASSERT(numScreens <= screens().size()); + for (int i = 0; i < numScreens; i++) + { + settings().setArrayIndex(i); + screens()[i].loadSettings(settings()); + } + settings().endArray(); + + int numHotkeys = settings().beginReadArray("hotkeys"); + for (int i = 0; i < numHotkeys; i++) + { + settings().setArrayIndex(i); + Hotkey h; + h.loadSettings(settings()); + hotkeys().append(h); + } + settings().endArray(); + + settings().endGroup(); +} + +int ServerConfig::adjacentScreenIndex(int idx, int deltaColumn, int deltaRow) const +{ + if (screens()[idx].isNull()) + return -1; + + // if we're at the left or right end of the table, don't find results going further left or right + if ((deltaColumn > 0 && (idx+1) % numColumns() == 0) + || (deltaColumn < 0 && idx % numColumns() == 0)) + return -1; + + int arrayPos = idx + deltaColumn + deltaRow * numColumns(); + + if (arrayPos >= screens().size() || arrayPos < 0) + return -1; + + return arrayPos; +} + +QTextStream& operator<<(QTextStream& outStream, const ServerConfig& config) +{ + outStream << "section: screens" << endl; + + foreach (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()) + if (!s.isNull()) + s.writeAliasesSection(outStream); + + outStream << "end" << endl << endl; + + outStream << "section: links" << endl; + + for (int i = 0; i < config.screens().size(); i++) + if (!config.screens()[i].isNull()) + { + outStream << "\t" << config.screens()[i].name() << ":" << endl; + + for (unsigned int j = 0; j < sizeof(neighbourDirs) / sizeof(neighbourDirs[0]); j++) + { + int idx = config.adjacentScreenIndex(i, neighbourDirs[j].x, neighbourDirs[j].y); + if (idx != -1 && !config.screens()[idx].isNull()) + outStream << "\t\t" << neighbourDirs[j].name << " = " << config.screens()[idx].name() << endl; + } + } + + outStream << "end" << endl << endl; + + outStream << "section: options" << endl; + + if (config.hasHeartbeat()) + outStream << "\t" << "heartbeat = " << config.heartbeat() << endl; + + outStream << "\t" << "relativeMouseMoves = " << (config.relativeMouseMoves() ? "true" : "false") << endl; + outStream << "\t" << "screenSaverSync = " << (config.screenSaverSync() ? "true" : "false") << endl; + outStream << "\t" << "win32KeepForeground = " << (config.win32KeepForeground() ? "true" : "false") << endl; + outStream << "\t" << "clipboardSharing = " << (config.clipboardSharing() ? "true" : "false") << endl; + + if (config.hasSwitchDelay()) + outStream << "\t" << "switchDelay = " << config.switchDelay() << endl; + + if (config.hasSwitchDoubleTap()) + outStream << "\t" << "switchDoubleTap = " << config.switchDoubleTap() << endl; + + outStream << "\t" << "switchCorners = none "; + for (int i = 0; i < config.switchCorners().size(); i++) + if (config.switchCorners()[i]) + outStream << "+" << config.switchCornerName(i) << " "; + outStream << endl; + + outStream << "\t" << "switchCornerSize = " << config.switchCornerSize() << endl; + + foreach(const Hotkey& hotkey, config.hotkeys()) + outStream << hotkey; + + outStream << "end" << endl << endl; + + return outStream; +} + +int ServerConfig::numScreens() const +{ + int rval = 0; + + foreach(const Screen& s, screens()) + if (!s.isNull()) + rval++; + + return rval; +} + +int ServerConfig::autoAddScreen(const QString name) +{ + int serverIndex = -1; + int targetIndex = -1; + if (!findScreenName(m_ServerName, serverIndex)) { + if (!fixNoServer(m_ServerName, serverIndex)) { + return kAutoAddScreenManualServer; + } + } + if (findScreenName(name, targetIndex)) { + // already exists. + return kAutoAddScreenIgnore; + } + + int result = showAddClientDialog(name); + + if (result == kAddClientIgnore) { + return kAutoAddScreenIgnore; + } + + if (result == kAddClientOther) { + addToFirstEmptyGrid(name); + return kAutoAddScreenManualClient; + } + + bool success = false; + int startIndex = serverIndex; + int offset = 1; + int dirIndex = 0; + + if (result == kAddClientLeft) { + offset = -1; + dirIndex = 1; + } + else if (result == kAddClientUp) { + offset = -5; + dirIndex = 2; + } + else if (result == kAddClientDown) { + offset = 5; + dirIndex = 3; + } + + + int idx = adjacentScreenIndex(startIndex, neighbourDirs[dirIndex].x, + neighbourDirs[dirIndex].y); + while (idx != -1) { + if (screens()[idx].isNull()) { + m_Screens[idx].setName(name); + success = true; + break; + } + + startIndex += offset; + idx = adjacentScreenIndex(startIndex, neighbourDirs[dirIndex].x, + neighbourDirs[dirIndex].y); + } + + if (!success) { + addToFirstEmptyGrid(name); + return kAutoAddScreenManualClient; + } + + saveSettings(); + return kAutoAddScreenOk; +} + +bool ServerConfig::findScreenName(const QString& name, int& index) +{ + bool found = false; + for (int i = 0; i < screens().size(); i++) { + if (!screens()[i].isNull() && + screens()[i].name().compare(name) == 0) { + index = i; + found = true; + break; + } + } + return found; +} + +bool ServerConfig::fixNoServer(const QString& name, int& index) +{ + bool fixed = false; + if (screens()[serverDefaultIndex].isNull()) { + m_Screens[serverDefaultIndex].setName(name); + index = serverDefaultIndex; + fixed = true; + } + + return fixed; +} + +int ServerConfig::showAddClientDialog(const QString& clientName) +{ + int result = kAddClientIgnore; + + if (!m_pMainWindow->isActiveWindow()) { + m_pMainWindow->showNormal(); + m_pMainWindow->activateWindow(); + } + + AddClientDialog addClientDialog(clientName, m_pMainWindow); + addClientDialog.exec(); + result = addClientDialog.addResult(); + m_IgnoreAutoConfigClient = addClientDialog.ignoreAutoConfigClient(); + + return result; +} + +void::ServerConfig::addToFirstEmptyGrid(const QString &clientName) +{ + for (int i = 0; i < screens().size(); i++) { + if (screens()[i].isNull()) { + m_Screens[i].setName(clientName); + break; + } + } +} diff --git a/src/gui/src/ServerConfig.h b/src/gui/src/ServerConfig.h new file mode 100644 index 00000000..e9b685c5 --- /dev/null +++ b/src/gui/src/ServerConfig.h @@ -0,0 +1,141 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(SERVERCONFIG__H) + +#define SERVERCONFIG__H + +#include + +#include "Screen.h" +#include "BaseConfig.h" +#include "Hotkey.h" + +class QTextStream; +class QSettings; +class QString; +class QFile; +class ServerConfigDialog; +class MainWindow; + +class ServerConfig : public BaseConfig +{ + friend class ServerConfigDialog; + friend QTextStream& operator<<(QTextStream& outStream, const ServerConfig& config); + + public: + ServerConfig(QSettings* settings, int numColumns, int numRows, + QString serverName, MainWindow* mainWindow); + ~ServerConfig(); + + public: + const ScreenList& screens() const { return m_Screens; } + int numColumns() const { return m_NumColumns; } + int numRows() const { return m_NumRows; } + bool hasHeartbeat() const { return m_HasHeartbeat; } + int heartbeat() const { return m_Heartbeat; } + bool relativeMouseMoves() const { return m_RelativeMouseMoves; } + bool screenSaverSync() const { return m_ScreenSaverSync; } + bool win32KeepForeground() const { return m_Win32KeepForeground; } + bool hasSwitchDelay() const { return m_HasSwitchDelay; } + int switchDelay() const { return m_SwitchDelay; } + bool hasSwitchDoubleTap() const { return m_HasSwitchDoubleTap; } + int switchDoubleTap() const { return m_SwitchDoubleTap; } + bool switchCorner(int c) const { return m_SwitchCorners[c]; } + int switchCornerSize() const { return m_SwitchCornerSize; } + const QList& switchCorners() const { return m_SwitchCorners; } + const HotkeyList& hotkeys() const { return m_Hotkeys; } + bool ignoreAutoConfigClient() const { return m_IgnoreAutoConfigClient; } + bool enableDragAndDrop() const { return m_EnableDragAndDrop; } + bool clipboardSharing() const { return m_ClipboardSharing; } + + void saveSettings(); + void loadSettings(); + bool save(const QString& fileName) const; + void save(QFile& file) const; + int numScreens() const; + int autoAddScreen(const QString name); + + 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); } + void setNumColumns(int n) { m_NumColumns = n; } + void setNumRows(int n) { m_NumRows = n; } + void haveHeartbeat(bool on) { m_HasHeartbeat = on; } + void setHeartbeat(int val) { m_Heartbeat = val; } + void setRelativeMouseMoves(bool on) { m_RelativeMouseMoves = on; } + void setScreenSaverSync(bool on) { m_ScreenSaverSync = on; } + void setWin32KeepForeground(bool on) { m_Win32KeepForeground = on; } + void haveSwitchDelay(bool on) { m_HasSwitchDelay = on; } + void setSwitchDelay(int val) { m_SwitchDelay = val; } + void haveSwitchDoubleTap(bool on) { m_HasSwitchDoubleTap = on; } + void setSwitchDoubleTap(int val) { m_SwitchDoubleTap = val; } + void setSwitchCorner(int c, bool on) { m_SwitchCorners[c] = on; } + void setSwitchCornerSize(int val) { m_SwitchCornerSize = val; } + void setIgnoreAutoConfigClient(bool on) { m_IgnoreAutoConfigClient = on; } + void setEnableDragAndDrop(bool on) { m_EnableDragAndDrop = on; } + void setClipboardSharing(bool on) { m_ClipboardSharing = on; } + QList& switchCorners() { return m_SwitchCorners; } + HotkeyList& hotkeys() { return m_Hotkeys; } + + void init(); + int adjacentScreenIndex(int idx, int deltaColumn, int deltaRow) const; + + private: + bool findScreenName(const QString& name, int& index); + bool fixNoServer(const QString& name, int& index); + int showAddClientDialog(const QString& clientName); + void addToFirstEmptyGrid(const QString& clientName); + + private: + QSettings* m_pSettings; + ScreenList m_Screens; + int m_NumColumns; + int m_NumRows; + bool m_HasHeartbeat; + int m_Heartbeat; + bool m_RelativeMouseMoves; + bool m_ScreenSaverSync; + bool m_Win32KeepForeground; + bool m_HasSwitchDelay; + int m_SwitchDelay; + bool m_HasSwitchDoubleTap; + int m_SwitchDoubleTap; + int m_SwitchCornerSize; + QList m_SwitchCorners; + HotkeyList m_Hotkeys; + QString m_ServerName; + bool m_IgnoreAutoConfigClient; + bool m_EnableDragAndDrop; + bool m_ClipboardSharing; + MainWindow* m_pMainWindow; +}; + +QTextStream& operator<<(QTextStream& outStream, const ServerConfig& config); + +enum { + kAutoAddScreenOk, + kAutoAddScreenManualServer, + kAutoAddScreenManualClient, + kAutoAddScreenIgnore +}; + +#endif + diff --git a/src/gui/src/ServerConfigDialog.cpp b/src/gui/src/ServerConfigDialog.cpp new file mode 100644 index 00000000..6fc10248 --- /dev/null +++ b/src/gui/src/ServerConfigDialog.cpp @@ -0,0 +1,219 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "ServerConfigDialog.h" +#include "ServerConfig.h" +#include "HotkeyDialog.h" +#include "ActionDialog.h" + +#include +#include +#include + +ServerConfigDialog::ServerConfigDialog(QWidget* parent, ServerConfig& config, const QString& defaultScreenName) : + QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), + Ui::ServerConfigDialogBase(), + m_OrigServerConfig(config), + m_ServerConfig(config), + m_ScreenSetupModel(serverConfig().screens(), serverConfig().numColumns(), serverConfig().numRows()), + m_Message("") +{ + setupUi(this); + + m_pCheckBoxHeartbeat->setChecked(serverConfig().hasHeartbeat()); + m_pSpinBoxHeartbeat->setValue(serverConfig().heartbeat()); + + m_pCheckBoxRelativeMouseMoves->setChecked(serverConfig().relativeMouseMoves()); + m_pCheckBoxScreenSaverSync->setChecked(serverConfig().screenSaverSync()); + m_pCheckBoxWin32KeepForeground->setChecked(serverConfig().win32KeepForeground()); + + m_pCheckBoxSwitchDelay->setChecked(serverConfig().hasSwitchDelay()); + m_pSpinBoxSwitchDelay->setValue(serverConfig().switchDelay()); + + m_pCheckBoxSwitchDoubleTap->setChecked(serverConfig().hasSwitchDoubleTap()); + m_pSpinBoxSwitchDoubleTap->setValue(serverConfig().switchDoubleTap()); + + m_pCheckBoxCornerTopLeft->setChecked(serverConfig().switchCorner(BaseConfig::TopLeft)); + m_pCheckBoxCornerTopRight->setChecked(serverConfig().switchCorner(BaseConfig::TopRight)); + m_pCheckBoxCornerBottomLeft->setChecked(serverConfig().switchCorner(BaseConfig::BottomLeft)); + m_pCheckBoxCornerBottomRight->setChecked(serverConfig().switchCorner(BaseConfig::BottomRight)); + m_pSpinBoxSwitchCornerSize->setValue(serverConfig().switchCornerSize()); + + m_pCheckBoxIgnoreAutoConfigClient->setChecked(serverConfig().ignoreAutoConfigClient()); + + m_pCheckBoxEnableDragAndDrop->setChecked(serverConfig().enableDragAndDrop()); + + m_pCheckBoxEnableClipboard->setChecked(serverConfig().clipboardSharing()); + + foreach(const Hotkey& hotkey, serverConfig().hotkeys()) + m_pListHotkeys->addItem(hotkey.text()); + + m_pScreenSetupView->setModel(&m_ScreenSetupModel); + + if (serverConfig().numScreens() == 0) + model().screen(serverConfig().numColumns() / 2, serverConfig().numRows() / 2) = Screen(defaultScreenName); +} + +void ServerConfigDialog::showEvent(QShowEvent* event) +{ + QDialog::show(); + + if (!m_Message.isEmpty()) + { + // TODO: ideally this massage box should pop up after the dialog is shown + QMessageBox::information(this, tr("Configure server"), m_Message); + } +} + +void ServerConfigDialog::accept() +{ + serverConfig().haveHeartbeat(m_pCheckBoxHeartbeat->isChecked()); + serverConfig().setHeartbeat(m_pSpinBoxHeartbeat->value()); + + serverConfig().setRelativeMouseMoves(m_pCheckBoxRelativeMouseMoves->isChecked()); + serverConfig().setScreenSaverSync(m_pCheckBoxScreenSaverSync->isChecked()); + serverConfig().setWin32KeepForeground(m_pCheckBoxWin32KeepForeground->isChecked()); + + serverConfig().haveSwitchDelay(m_pCheckBoxSwitchDelay->isChecked()); + serverConfig().setSwitchDelay(m_pSpinBoxSwitchDelay->value()); + + serverConfig().haveSwitchDoubleTap(m_pCheckBoxSwitchDoubleTap->isChecked()); + serverConfig().setSwitchDoubleTap(m_pSpinBoxSwitchDoubleTap->value()); + + serverConfig().setSwitchCorner(BaseConfig::TopLeft, m_pCheckBoxCornerTopLeft->isChecked()); + serverConfig().setSwitchCorner(BaseConfig::TopRight, m_pCheckBoxCornerTopRight->isChecked()); + serverConfig().setSwitchCorner(BaseConfig::BottomLeft, m_pCheckBoxCornerBottomLeft->isChecked()); + serverConfig().setSwitchCorner(BaseConfig::BottomRight, m_pCheckBoxCornerBottomRight->isChecked()); + serverConfig().setSwitchCornerSize(m_pSpinBoxSwitchCornerSize->value()); + serverConfig().setIgnoreAutoConfigClient(m_pCheckBoxIgnoreAutoConfigClient->isChecked()); + serverConfig().setEnableDragAndDrop(m_pCheckBoxEnableDragAndDrop->isChecked()); + serverConfig().setClipboardSharing(m_pCheckBoxEnableClipboard->isChecked()); + + // now that the dialog has been accepted, copy the new server config to the original one, + // which is a reference to the one in MainWindow. + setOrigServerConfig(serverConfig()); + + QDialog::accept(); +} + +void ServerConfigDialog::on_m_pButtonNewHotkey_clicked() +{ + Hotkey hotkey; + HotkeyDialog dlg(this, hotkey); + if (dlg.exec() == QDialog::Accepted) + { + serverConfig().hotkeys().append(hotkey); + m_pListHotkeys->addItem(hotkey.text()); + } +} + +void ServerConfigDialog::on_m_pButtonEditHotkey_clicked() +{ + int idx = m_pListHotkeys->currentRow(); + Q_ASSERT(idx >= 0 && idx < serverConfig().hotkeys().size()); + Hotkey& hotkey = serverConfig().hotkeys()[idx]; + HotkeyDialog dlg(this, hotkey); + if (dlg.exec() == QDialog::Accepted) + m_pListHotkeys->currentItem()->setText(hotkey.text()); +} + +void ServerConfigDialog::on_m_pButtonRemoveHotkey_clicked() +{ + int idx = m_pListHotkeys->currentRow(); + Q_ASSERT(idx >= 0 && idx < serverConfig().hotkeys().size()); + serverConfig().hotkeys().removeAt(idx); + m_pListActions->clear(); + delete m_pListHotkeys->item(idx); +} + +void ServerConfigDialog::on_m_pListHotkeys_itemSelectionChanged() +{ + bool itemsSelected = !m_pListHotkeys->selectedItems().isEmpty(); + m_pButtonEditHotkey->setEnabled(itemsSelected); + m_pButtonRemoveHotkey->setEnabled(itemsSelected); + m_pButtonNewAction->setEnabled(itemsSelected); + + if (itemsSelected && serverConfig().hotkeys().size() > 0) + { + m_pListActions->clear(); + + int idx = m_pListHotkeys->row(m_pListHotkeys->selectedItems()[0]); + + // There's a bug somewhere around here: We get idx == 1 right after we deleted the next to last item, so idx can + // only possibly be 0. GDB shows we got called indirectly from the delete line in + // on_m_pButtonRemoveHotkey_clicked() above, but the delete is of course necessary and seems correct. + // The while() is a generalized workaround for all that and shouldn't be required. + while (idx >= 0 && idx >= serverConfig().hotkeys().size()) + idx--; + + Q_ASSERT(idx >= 0 && idx < serverConfig().hotkeys().size()); + + const Hotkey& hotkey = serverConfig().hotkeys()[idx]; + foreach(const Action& action, hotkey.actions()) + m_pListActions->addItem(action.text()); + } +} + +void ServerConfigDialog::on_m_pButtonNewAction_clicked() +{ + int idx = m_pListHotkeys->currentRow(); + Q_ASSERT(idx >= 0 && idx < serverConfig().hotkeys().size()); + Hotkey& hotkey = serverConfig().hotkeys()[idx]; + + Action action; + ActionDialog dlg(this, serverConfig(), hotkey, action); + if (dlg.exec() == QDialog::Accepted) + { + hotkey.actions().append(action); + m_pListActions->addItem(action.text()); + } +} + +void ServerConfigDialog::on_m_pButtonEditAction_clicked() +{ + int idxHotkey = m_pListHotkeys->currentRow(); + Q_ASSERT(idxHotkey >= 0 && idxHotkey < serverConfig().hotkeys().size()); + Hotkey& hotkey = serverConfig().hotkeys()[idxHotkey]; + + int idxAction = m_pListActions->currentRow(); + Q_ASSERT(idxAction >= 0 && idxAction < hotkey.actions().size()); + Action& action = hotkey.actions()[idxAction]; + + ActionDialog dlg(this, serverConfig(), hotkey, action); + if (dlg.exec() == QDialog::Accepted) + m_pListActions->currentItem()->setText(action.text()); +} + +void ServerConfigDialog::on_m_pButtonRemoveAction_clicked() +{ + int idxHotkey = m_pListHotkeys->currentRow(); + Q_ASSERT(idxHotkey >= 0 && idxHotkey < serverConfig().hotkeys().size()); + Hotkey& hotkey = serverConfig().hotkeys()[idxHotkey]; + + int idxAction = m_pListActions->currentRow(); + Q_ASSERT(idxAction >= 0 && idxAction < hotkey.actions().size()); + + hotkey.actions().removeAt(idxAction); + delete m_pListActions->currentItem(); +} + +void ServerConfigDialog::on_m_pListActions_itemSelectionChanged() +{ + m_pButtonEditAction->setEnabled(!m_pListActions->selectedItems().isEmpty()); + m_pButtonRemoveAction->setEnabled(!m_pListActions->selectedItems().isEmpty()); +} diff --git a/src/gui/src/ServerConfigDialog.h b/src/gui/src/ServerConfigDialog.h new file mode 100644 index 00000000..37543bda --- /dev/null +++ b/src/gui/src/ServerConfigDialog.h @@ -0,0 +1,66 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(SERVERCONFIGDIALOG__H) + +#define SERVERCONFIGDIALOG__H + +#include "ScreenSetupModel.h" +#include "ServerConfig.h" + +#include "ui_ServerConfigDialogBase.h" + +#include + +class ServerConfigDialog : public QDialog, public Ui::ServerConfigDialogBase +{ + Q_OBJECT + + public: + ServerConfigDialog(QWidget* parent, ServerConfig& config, const QString& defaultScreenName); + + public slots: + void accept(); + void showEvent(QShowEvent* event); + void message(const QString& message) { m_Message = message; } + + protected slots: + void on_m_pButtonNewHotkey_clicked(); + void on_m_pListHotkeys_itemSelectionChanged(); + void on_m_pButtonEditHotkey_clicked(); + void on_m_pButtonRemoveHotkey_clicked(); + + void on_m_pButtonNewAction_clicked(); + void on_m_pListActions_itemSelectionChanged(); + void on_m_pButtonEditAction_clicked(); + void on_m_pButtonRemoveAction_clicked(); + + protected: + ServerConfig& serverConfig() { return m_ServerConfig; } + void setOrigServerConfig(const ServerConfig& s) { m_OrigServerConfig = s; } + ScreenSetupModel& model() { return m_ScreenSetupModel; } + + private: + ServerConfig& m_OrigServerConfig; + ServerConfig m_ServerConfig; + ScreenSetupModel m_ScreenSetupModel; + QString m_Message; +}; + +#endif + diff --git a/src/gui/src/ServerConfigDialogBase.ui b/src/gui/src/ServerConfigDialogBase.ui new file mode 100644 index 00000000..5478f360 --- /dev/null +++ b/src/gui/src/ServerConfigDialogBase.ui @@ -0,0 +1,781 @@ + + + ServerConfigDialogBase + + + + 0 + 0 + 795 + 534 + + + + Server Configuration + + + + + + 0 + + + + Screens and links + + + + + + + + true + + + Drag a screen from the grid to the trashcan to remove it. + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + :/res/icons/64x64/user-trash.png + + + + + + + + 1 + 0 + + + + Configure the layout of your synergy server configuration. + + + Qt::AlignCenter + + + true + + + + + + + Drag this button to the grid to add a new screen. + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + + :/res/icons/64x64/video-display.png + + + + + + + + + + 0 + 273 + + + + + 16777215 + 273 + + + + true + + + false + + + QFrame::StyledPanel + + + QFrame::Sunken + + + + + + + + 1 + 0 + + + + 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. + + + Qt::AlignCenter + + + true + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + Hotkeys + + + + + + &Hotkeys + + + + + + + + + true + + + &New + + + + + + + false + + + &Edit + + + + + + + false + + + &Remove + + + + + + + Qt::Vertical + + + + 75 + 161 + + + + + + + + + + + A&ctions + + + + + + + + + false + + + Ne&w + + + + + + + false + + + E&dit + + + + + + + false + + + Re&move + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + Advanced server settings + + + + + + &Switch + + + + + + + + true + + + Switch &after waiting + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + 10 + + + 10000 + + + 10 + + + 250 + + + + + + + ms + + + + + + + + + + + true + + + Switch on double &tap within + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + 10 + + + 10000 + + + 10 + + + 250 + + + + + + + ms + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + &Options + + + + + + true + + + Don't take &foreground window on Windows servers + + + + + + + true + + + Use &relative mouse moves + + + + + + + true + + + S&ynchronize screen savers + + + + + + + + + true + + + &Check clients every + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + 1000 + + + 30000 + + + 1000 + + + 5000 + + + + + + + ms + + + + + + + + + Qt::Vertical + + + + 20 + 16 + + + + + + + + Enable drag and drop file transfers + + + + + + + Ignore auto config clients + + + + + + + Enable clipboard sharing + + + true + + + + + + + + + + &Dead corners + + + false + + + + + + To&p-left + + + + + + + Top-rig&ht + + + + + + + &Bottom-left + + + + + + + Bottom-ri&ght + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Cor&ner Size: + + + m_pSpinBoxSwitchCornerSize + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + ScreenSetupView + QTableView +
ScreenSetupView.h
+ 1 +
+ + NewScreenWidget + QLabel +
NewScreenWidget.h
+
+ + TrashScreenWidget + QLabel +
TrashScreenWidget.h
+
+
+ + + + + + m_pButtonBox + accepted() + ServerConfigDialogBase + accept() + + + 572 + 424 + + + 377 + -8 + + + + + m_pButtonBox + rejected() + ServerConfigDialogBase + reject() + + + 641 + 424 + + + 595 + 1 + + + + + m_pCheckBoxSwitchDelay + toggled(bool) + m_pSpinBoxSwitchDelay + setEnabled(bool) + + + 110 + 63 + + + 110 + 63 + + + + + m_pCheckBoxSwitchDoubleTap + toggled(bool) + m_pSpinBoxSwitchDoubleTap + setEnabled(bool) + + + 110 + 63 + + + 110 + 63 + + + + + m_pCheckBoxHeartbeat + toggled(bool) + m_pSpinBoxHeartbeat + setEnabled(bool) + + + 110 + 63 + + + 110 + 63 + + + + + m_pListHotkeys + itemDoubleClicked(QListWidgetItem*) + m_pButtonEditHotkey + click() + + + 197 + 115 + + + 304 + 115 + + + + + m_pListActions + itemDoubleClicked(QListWidgetItem*) + m_pButtonEditAction + click() + + + 505 + 120 + + + 677 + 118 + + + + +
diff --git a/src/gui/src/SettingsDialog.cpp b/src/gui/src/SettingsDialog.cpp new file mode 100644 index 00000000..109d2d06 --- /dev/null +++ b/src/gui/src/SettingsDialog.cpp @@ -0,0 +1,154 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "SettingsDialog.h" + +#include "CoreInterface.h" +#include "SynergyLocale.h" +#include "QSynergyApplication.h" +#include "QUtility.h" +#include "AppConfig.h" +#include "SslCertificate.h" +#include "MainWindow.h" + +#include +#include +#include +#include +#include + +static const char networkSecurity[] = "ns"; + +SettingsDialog::SettingsDialog(QWidget* parent, AppConfig& config) : + QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint), + Ui::SettingsDialogBase(), + m_appConfig(config) +{ + setupUi(this); + + m_Locale.fillLanguageComboBox(m_pComboLanguage); + + m_pLineEditScreenName->setText(appConfig().screenName()); + m_pSpinBoxPort->setValue(appConfig().port()); + m_pLineEditInterface->setText(appConfig().networkInterface()); + m_pComboLogLevel->setCurrentIndex(appConfig().logLevel()); + m_pCheckBoxLogToFile->setChecked(appConfig().logToFile()); + m_pLineEditLogFilename->setText(appConfig().logFilename()); + setIndexFromItemData(m_pComboLanguage, appConfig().language()); + m_pCheckBoxAutoHide->setChecked(appConfig().getAutoHide()); + +#if defined(Q_OS_WIN) + m_pComboElevate->setCurrentIndex(static_cast(appConfig().elevateMode())); + + m_pCheckBoxAutoHide->hide(); +#else + // elevate checkbox is only useful on ms windows. + m_pLabelElevate->hide(); + m_pComboElevate->hide(); +#endif + + m_pCheckBoxEnableCrypto->setChecked(m_appConfig.getCryptoEnabled()); + m_pCheckBoxEnableCrypto->setEnabled(m_appConfig.edition() == kPro); +} + +void SettingsDialog::accept() +{ + appConfig().setScreenName(m_pLineEditScreenName->text()); + appConfig().setPort(m_pSpinBoxPort->value()); + appConfig().setNetworkInterface(m_pLineEditInterface->text()); + appConfig().setLogLevel(m_pComboLogLevel->currentIndex()); + appConfig().setLogToFile(m_pCheckBoxLogToFile->isChecked()); + appConfig().setLogFilename(m_pLineEditLogFilename->text()); + appConfig().setLanguage(m_pComboLanguage->itemData(m_pComboLanguage->currentIndex()).toString()); + appConfig().setElevateMode(static_cast(m_pComboElevate->currentIndex())); + appConfig().setAutoHide(m_pCheckBoxAutoHide->isChecked()); + appConfig().saveSettings(); + QDialog::accept(); +} + +void SettingsDialog::reject() +{ + if (appConfig().language() != m_pComboLanguage->itemData(m_pComboLanguage->currentIndex()).toString()) { + QSynergyApplication::getInstance()->switchTranslator(appConfig().language()); + } + + QDialog::reject(); +} + +void SettingsDialog::changeEvent(QEvent* event) +{ + if (event != 0) + { + switch (event->type()) + { + case QEvent::LanguageChange: + { + int logLevelIndex = m_pComboLogLevel->currentIndex(); + + m_pComboLanguage->blockSignals(true); + retranslateUi(this); + m_pComboLanguage->blockSignals(false); + + m_pComboLogLevel->setCurrentIndex(logLevelIndex); + break; + } + + default: + QDialog::changeEvent(event); + } + } +} + +void SettingsDialog::on_m_pCheckBoxLogToFile_stateChanged(int i) +{ + bool checked = i == 2; + + m_pLineEditLogFilename->setEnabled(checked); + m_pButtonBrowseLog->setEnabled(checked); +} + +void SettingsDialog::on_m_pButtonBrowseLog_clicked() +{ + QString fileName = QFileDialog::getSaveFileName( + this, tr("Save log file to..."), + m_pLineEditLogFilename->text(), + "Logs (*.log *.txt)"); + + if (!fileName.isEmpty()) + { + m_pLineEditLogFilename->setText(fileName); + } +} + +void SettingsDialog::on_m_pComboLanguage_currentIndexChanged(int index) +{ + QString ietfCode = m_pComboLanguage->itemData(index).toString(); + QSynergyApplication::getInstance()->switchTranslator(ietfCode); +} + +void SettingsDialog::on_m_pCheckBoxEnableCrypto_toggled(bool checked) +{ + m_appConfig.setCryptoEnabled(checked); + m_appConfig.saveSettings(); + if (checked) { + SslCertificate sslCertificate; + sslCertificate.generateCertificate(); + MainWindow& mainWindow = dynamic_cast (*this->parent()); + mainWindow.updateLocalFingerprint(); + } +} diff --git a/src/gui/src/SettingsDialog.h b/src/gui/src/SettingsDialog.h new file mode 100644 index 00000000..298197aa --- /dev/null +++ b/src/gui/src/SettingsDialog.h @@ -0,0 +1,57 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(SETTINGSDIALOG_H) + +#define SETTINGSDIALOG_H + +#include +#include "ui_SettingsDialogBase.h" +#include "SynergyLocale.h" +#include "CoreInterface.h" + +class AppConfig; + +class SettingsDialog : public QDialog, public Ui::SettingsDialogBase +{ + Q_OBJECT + + public: + SettingsDialog(QWidget* parent, AppConfig& config); + static QString browseForSynergyc(QWidget* parent, const QString& programDir, const QString& synergycName); + static QString browseForSynergys(QWidget* parent, const QString& programDir, const QString& synergysName); + + protected: + void accept(); + void reject(); + void changeEvent(QEvent* event); + AppConfig& appConfig() { return m_appConfig; } + + private: + AppConfig& m_appConfig; + SynergyLocale m_Locale; + CoreInterface m_CoreInterface; + + private slots: + void on_m_pCheckBoxEnableCrypto_toggled(bool checked); + void on_m_pComboLanguage_currentIndexChanged(int index); + void on_m_pCheckBoxLogToFile_stateChanged(int ); + void on_m_pButtonBrowseLog_clicked(); +}; + +#endif diff --git a/src/gui/src/SettingsDialogBase.ui b/src/gui/src/SettingsDialogBase.ui new file mode 100644 index 00000000..f604cf7a --- /dev/null +++ b/src/gui/src/SettingsDialogBase.ui @@ -0,0 +1,376 @@ + + + SettingsDialogBase + + + + 0 + 0 + 368 + 380 + + + + Settings + + + + + + &Miscellaneous + + + + + + + 75 + 0 + + + + Sc&reen name: + + + m_pLineEditScreenName + + + + + + + true + + + + + + + P&ort: + + + m_pSpinBoxPort + + + + + + + true + + + + 0 + 0 + + + + 65535 + + + 24800 + + + + + + + &Interface: + + + m_pLineEditInterface + + + + + + + true + + + + + + + + 0 + 0 + + + + + 75 + 0 + + + + &Language: + + + m_pComboLanguage + + + + + + + + + + &Hide on startup + + + + + + + Specify when the Synergy service should run at an elevated privilege level + + + 0 + + + + As Needed + + + + + Always + + + + + Never + + + + + + + + Elevate + + + + + + + + + + true + + + + 0 + 0 + + + + &Network Security + + + + QFormLayout::AllNonFixedFieldsGrow + + + + + false + + + Use &SSL encryption + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + 0 + 0 + + + + Logging + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + false + + + + + + + 75 + 0 + + + + &Logging level: + + + m_pComboLogLevel + + + + + + + + Error + + + + + Warning + + + + + Note + + + + + Info + + + + + Debug + + + + + Debug1 + + + + + Debug2 + + + + + + + + Log to file: + + + + + + + false + + + + + + + false + + + Browse... + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + m_pComboLanguage + m_pLineEditScreenName + m_pSpinBoxPort + m_pLineEditInterface + m_pComboElevate + m_pCheckBoxAutoHide + m_pCheckBoxEnableCrypto + m_pComboLogLevel + m_pCheckBoxLogToFile + m_pLineEditLogFilename + m_pButtonBrowseLog + + + + + buttonBox + accepted() + SettingsDialogBase + accept() + + + 266 + 340 + + + 157 + 274 + + + + + buttonBox + rejected() + SettingsDialogBase + reject() + + + 334 + 340 + + + 286 + 274 + + + + + diff --git a/src/gui/src/SetupWizard.cpp b/src/gui/src/SetupWizard.cpp new file mode 100644 index 00000000..c7af2547 --- /dev/null +++ b/src/gui/src/SetupWizard.cpp @@ -0,0 +1,151 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "SetupWizard.h" +#include "MainWindow.h" +#include "WebClient.h" +#include "ActivationNotifier.h" +#include "LicenseManager.h" +#include "QSynergyApplication.h" +#include "QUtility.h" + +#include + +SetupWizard::SetupWizard(MainWindow& mainWindow, bool startMain) : + m_MainWindow(mainWindow), + m_StartMain(startMain) +{ + setupUi(this); + +#if defined(Q_OS_MAC) + + // the mac style needs a little more room because of the + // graphic on the left. + resize(600, 500); + setMinimumSize(size()); + +#elif defined(Q_OS_WIN) + + // when areo 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 + // it again, so don't do that. + resize(size().width(), size().height() + 1); + +#endif + + connect(m_pServerRadioButton, SIGNAL(toggled(bool)), m_MainWindow.m_pGroupServer, SLOT(setChecked(bool))); + connect(m_pClientRadioButton, SIGNAL(toggled(bool)), m_MainWindow.m_pGroupClient, SLOT(setChecked(bool))); + + m_Locale.fillLanguageComboBox(m_pComboLanguage); + setIndexFromItemData(m_pComboLanguage, m_MainWindow.appConfig().language()); +} + +SetupWizard::~SetupWizard() +{ +} + +bool SetupWizard::validateCurrentPage() +{ + QMessageBox message; + message.setWindowTitle(tr("Setup Synergy")); + message.setIcon(QMessageBox::Information); + + if (currentPage() == m_pNodePage) + { + bool result = m_pClientRadioButton->isChecked() || + m_pServerRadioButton->isChecked(); + + if (!result) + { + message.setText(tr("Please select an option.")); + message.exec(); + return false; + } + } + + return true; +} + +void SetupWizard::changeEvent(QEvent* event) +{ + if (event != 0) + { + switch (event->type()) + { + case QEvent::LanguageChange: + { + m_pComboLanguage->blockSignals(true); + retranslateUi(this); + m_pComboLanguage->blockSignals(false); + break; + } + + default: + QWizard::changeEvent(event); + } + } +} + +void SetupWizard::accept() +{ + AppConfig& appConfig = m_MainWindow.appConfig(); + + appConfig.setLanguage(m_pComboLanguage->itemData(m_pComboLanguage->currentIndex()).toString()); + + appConfig.setWizardHasRun(); + appConfig.saveSettings(); + + QSettings& settings = m_MainWindow.settings(); + if (m_pServerRadioButton->isChecked()) + { + settings.setValue("groupServerChecked", true); + settings.setValue("groupClientChecked", false); + } + if (m_pClientRadioButton->isChecked()) + { + settings.setValue("groupClientChecked", true); + settings.setValue("groupServerChecked", false); + } + + QWizard::accept(); + + if (m_StartMain) + { + m_MainWindow.updateZeroconfService(); + m_MainWindow.open(); + } +} + +void SetupWizard::reject() +{ + QSynergyApplication::getInstance()->switchTranslator(m_MainWindow.appConfig().language()); + + if (m_StartMain) + { + m_MainWindow.open(); + } + + QWizard::reject(); +} + +void SetupWizard::on_m_pComboLanguage_currentIndexChanged(int index) +{ + QString ietfCode = m_pComboLanguage->itemData(index).toString(); + QSynergyApplication::getInstance()->switchTranslator(ietfCode); +} diff --git a/src/gui/src/SetupWizard.h b/src/gui/src/SetupWizard.h new file mode 100644 index 00000000..5e3173ea --- /dev/null +++ b/src/gui/src/SetupWizard.h @@ -0,0 +1,53 @@ +/* + * synergy -- 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 + * 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 . + */ + +#pragma once + +#include "ui_SetupWizardBase.h" +#include "SynergyLocale.h" + +#include +#include + +class MainWindow; + +class SetupWizard : public QWizard, public Ui::SetupWizardBase +{ + Q_OBJECT +public: + enum { + kMaximiumLoginAttemps = 3 + }; + +public: + SetupWizard(MainWindow& mainWindow, bool startMain); + virtual ~SetupWizard(); + bool validateCurrentPage(); + +protected: + void changeEvent(QEvent* event); + void accept(); + void reject(); + +private: + MainWindow& m_MainWindow; + bool m_StartMain; + SynergyLocale m_Locale; + +private slots: + void on_m_pComboLanguage_currentIndexChanged(int index); +}; diff --git a/src/gui/src/SetupWizardBase.ui b/src/gui/src/SetupWizardBase.ui new file mode 100644 index 00000000..8c089886 --- /dev/null +++ b/src/gui/src/SetupWizardBase.ui @@ -0,0 +1,245 @@ + + + SetupWizardBase + + + + 0 + 0 + 556 + 464 + + + + + 0 + 0 + + + + + 500 + 390 + + + + Setup Synergy + + + + Welcome + + + + + + + + + Thanks for installing Synergy! + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + + + + 100 + 0 + + + + &Language: + + + m_pComboLanguage + + + + + + + + 200 + 16777215 + + + + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 10 + + + + + + + + + + + Synergy 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. Synergy is cross-platform (works on Windows, Mac OS X and Linux). + + + true + + + + + + + + + 0 + 0 + + + + Server or Client? + + + + + + + + + + 75 + true + + + + &Server (share this computer's mouse and keyboard) + + + + + + + + 0 + 0 + + + + <!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> + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::Fixed + + + + 20 + 20 + + + + + + + + + 75 + true + + + + &Client (use another computer's mouse and keyboard) + + + + + + + + 0 + 0 + + + + <!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> + + + true + + + + + + + Qt::Vertical + + + QSizePolicy::MinimumExpanding + + + + 0 + 0 + + + + + + + + + m_pComboLanguage + m_pServerRadioButton + m_pClientRadioButton + + + + diff --git a/src/gui/src/SslCertificate.cpp b/src/gui/src/SslCertificate.cpp new file mode 100644 index 00000000..f8180a9a --- /dev/null +++ b/src/gui/src/SslCertificate.cpp @@ -0,0 +1,178 @@ +/* + * synergy -- 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 . + */ + +#include "SslCertificate.h" + +#include "Fingerprint.h" + +#include +#include +#include + +static const char kCertificateLifetime[] = "365"; +static const char kCertificateSubjectInfo[] = "/CN=Synergy"; +static const char kCertificateFilename[] = "Synergy.pem"; +static const char kSslDir[] = "SSL"; +static const char kUnixOpenSslCommand[] = "openssl"; + +#if defined(Q_OS_WIN) +static const char kWinOpenSslBinary[] = "OpenSSL\\openssl.exe"; +static const char kConfigFile[] = "OpenSSL\\synergy.conf"; +#endif + +SslCertificate::SslCertificate(QObject *parent) : + QObject(parent) +{ + m_ProfileDir = m_CoreInterface.getProfileDir(); + if (m_ProfileDir.isEmpty()) { + emit error(tr("Failed to get profile directory.")); + } +} + +bool SslCertificate::runTool(const QStringList& args) +{ + 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(); + } + + 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; + } + + return true; +} + +void SslCertificate::generateCertificate() +{ + 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:1024"); + + QDir sslDir(sslDirPath); + if (!sslDir.exists()) { + sslDir.mkpath("."); + } + + // key output filename + arguments.append("-keyout"); + arguments.append(filename); + + // certificate output filename + arguments.append("-out"); + arguments.append(filename); + + if (!runTool(arguments)) { + return; + } + + emit info(tr("SSL certificate generated.")); + } + + generateFingerprint(filename); + + emit generateFinished(); +} + +void SslCertificate::generateFingerprint(const QString& certificateFilename) +{ + QStringList arguments; + arguments.append("x509"); + arguments.append("-fingerprint"); + arguments.append("-sha1"); + arguments.append("-noout"); + arguments.append("-in"); + arguments.append(certificateFilename); + + if (!runTool(arguments)) { + return; + } + + // 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); + + Fingerprint::local().trust(fingerprint, false); + emit info(tr("SSL fingerprint generated.")); + } + else { + emit error(tr("Failed to find SSL fingerprint.")); + } +} diff --git a/src/gui/src/SslCertificate.h b/src/gui/src/SslCertificate.h new file mode 100644 index 00000000..6683269d --- /dev/null +++ b/src/gui/src/SslCertificate.h @@ -0,0 +1,47 @@ +/* + * synergy -- 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 . + */ + +#pragma once + +#include "CoreInterface.h" + +#include + +class SslCertificate : public QObject +{ +Q_OBJECT + +public: + explicit SslCertificate(QObject *parent = 0); + +public slots: + void generateCertificate(); + +signals: + void error(QString e); + void info(QString i); + void generateFinished(); + +private: + bool runTool(const QStringList& args); + void generateFingerprint(const QString& certificateFilename); + +private: + QString m_ProfileDir; + QString m_ToolOutput; + CoreInterface m_CoreInterface; +}; diff --git a/src/gui/src/SynergyLocale.cpp b/src/gui/src/SynergyLocale.cpp new file mode 100644 index 00000000..488cd0f0 --- /dev/null +++ b/src/gui/src/SynergyLocale.cpp @@ -0,0 +1,68 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2013-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 + */ + +#include "SynergyLocale.h" + +#include +#include +#include + +SynergyLocale::SynergyLocale() +{ + loadLanguages(); +} + +void SynergyLocale::loadLanguages() +{ + QResource resource(":/res/lang/Languages.xml"); + QByteArray bytes(reinterpret_cast(resource.data()), resource.size()); + QXmlStreamReader xml(bytes); + + while (!xml.atEnd()) + { + QXmlStreamReader::TokenType token = xml.readNext(); + if (xml.hasError()) + { + qCritical() << xml.errorString(); + throw std::exception(); + } + + if (xml.name() == "language" && token == QXmlStreamReader::StartElement) + { + QXmlStreamAttributes attributes = xml.attributes(); + addLanguage( + attributes.value("ietfCode").toString(), + attributes.value("name").toString()); + } + } +} + +void SynergyLocale::addLanguage(const QString& ietfCode, const QString& name) +{ + m_Languages.push_back(SynergyLocale::Language(ietfCode, name)); +} + +void SynergyLocale::fillLanguageComboBox(QComboBox* comboBox) +{ + comboBox->blockSignals(true); + QVector::iterator it; + for (it = m_Languages.begin(); it != m_Languages.end(); ++it) + { + comboBox->addItem((*it).m_Name, (*it).m_IetfCode); + } + comboBox->blockSignals(false); +} diff --git a/src/gui/src/SynergyLocale.h b/src/gui/src/SynergyLocale.h new file mode 100644 index 00000000..beaa4f7d --- /dev/null +++ b/src/gui/src/SynergyLocale.h @@ -0,0 +1,48 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2013-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 . + */ + +#pragma once + +#include +#include +#include + +class SynergyLocale +{ + class Language + { + public: + Language() { } + Language(const QString& IetfCode, const QString& name) + : m_IetfCode(IetfCode), m_Name(name) { } + + public: + QString m_IetfCode; + QString m_Name; + }; + +public: + SynergyLocale(); + void fillLanguageComboBox(QComboBox* comboBox); + +private: + void loadLanguages(); + void addLanguage(const QString& IetfCode, const QString& name); + +private: + QVector m_Languages; +}; diff --git a/src/gui/src/TrashScreenWidget.cpp b/src/gui/src/TrashScreenWidget.cpp new file mode 100644 index 00000000..9d980d97 --- /dev/null +++ b/src/gui/src/TrashScreenWidget.cpp @@ -0,0 +1,43 @@ +/* + * synergy -- 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 + * 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 . + */ + +#include "TrashScreenWidget.h" +#include "ScreenSetupModel.h" + +#include +#include + +void TrashScreenWidget::dragEnterEvent(QDragEnterEvent* event) +{ + if (event->mimeData()->hasFormat(ScreenSetupModel::mimeType())) + { + event->setDropAction(Qt::MoveAction); + event->accept(); + } + else + event->ignore(); +} + +void TrashScreenWidget::dropEvent(QDropEvent* event) +{ + if (event->mimeData()->hasFormat(ScreenSetupModel::mimeType())) + event->acceptProposedAction(); + else + event->ignore(); +} + diff --git a/src/gui/src/TrashScreenWidget.h b/src/gui/src/TrashScreenWidget.h new file mode 100644 index 00000000..524b39ee --- /dev/null +++ b/src/gui/src/TrashScreenWidget.h @@ -0,0 +1,42 @@ +/* + * synergy -- 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 + * 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 . + */ + +#if !defined(TRASHSCREENWIDGET__H) + +#define TRASHSCREENWIDGET__H + +#include + +class QWidget; +class QDragEnterEvent; +class QDropEvent; + +class TrashScreenWidget : public QLabel +{ + Q_OBJECT + + public: + TrashScreenWidget(QWidget* parent) : QLabel(parent) {} + + public: + void dragEnterEvent(QDragEnterEvent* event); + void dropEvent(QDropEvent* event); +}; + +#endif + diff --git a/src/gui/src/VersionChecker.cpp b/src/gui/src/VersionChecker.cpp new file mode 100644 index 00000000..214f2ec5 --- /dev/null +++ b/src/gui/src/VersionChecker.cpp @@ -0,0 +1,107 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2012-2016 Symless Ltd. + * Copyright (C) 2012 Nick Bolton + * + * 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 . + */ + +#include "VersionChecker.h" + +#include +#include +#include +#include +#include + +#define VERSION_REGEX "(\\d+\\.\\d+\\.\\d+)" +#define VERSION_URL "http://symless.com/version/" + +VersionChecker::VersionChecker() +{ + m_manager = new QNetworkAccessManager(this); + + connect(m_manager, SIGNAL(finished(QNetworkReply*)), + this, SLOT(replyFinished(QNetworkReply*))); +} + +VersionChecker::~VersionChecker() +{ + delete m_manager; +} + +void VersionChecker::checkLatest() +{ + m_manager->get(QNetworkRequest(QUrl(VERSION_URL))); +} + +void VersionChecker::replyFinished(QNetworkReply* reply) +{ + QString newestVersion = QString(reply->readAll()); + if (!newestVersion.isEmpty()) + { + QString currentVersion = getVersion(); + if (currentVersion != "Unknown") { + if (compareVersions(currentVersion, newestVersion) > 0) + emit updateFound(newestVersion); + } + } +} + +int VersionChecker::compareVersions(const QString& left, const QString& right) +{ + if (left.compare(right) == 0) + return 0; // versions are same. + + QStringList leftSplit = left.split(QRegExp("\\.")); + if (leftSplit.size() != 3) + return 1; // assume right wins. + + QStringList rightSplit = right.split(QRegExp("\\.")); + if (rightSplit.size() != 3) + return -1; // assume left wins. + + int leftMajor = leftSplit.at(0).toInt(); + int leftMinor = leftSplit.at(1).toInt(); + int leftRev = leftSplit.at(2).toInt(); + + int rightMajor = rightSplit.at(0).toInt(); + int rightMinor = rightSplit.at(1).toInt(); + int rightRev = rightSplit.at(2).toInt(); + + bool rightWins = + (rightMajor > leftMajor) || + ((rightMajor >= leftMajor) && (rightMinor > leftMinor)) || + ((rightMajor >= leftMajor) && (rightMinor >= leftMinor) && (rightRev > leftRev)); + + return rightWins ? 1 : -1; +} + +QString VersionChecker::getVersion() +{ + QProcess process; + process.start(m_app, QStringList() << "--version"); + + process.setReadChannel(QProcess::StandardOutput); + if (process.waitForStarted() && process.waitForFinished()) + { + QRegExp rx(VERSION_REGEX); + QString text = process.readLine(); + if (rx.indexIn(text) != -1) + { + return rx.cap(1); + } + } + + return tr("Unknown"); +} diff --git a/src/gui/src/VersionChecker.h b/src/gui/src/VersionChecker.h new file mode 100644 index 00000000..9f49cc37 --- /dev/null +++ b/src/gui/src/VersionChecker.h @@ -0,0 +1,44 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2012-2016 Symless Ltd. + * Copyright (C) 2012 Nick Bolton + * + * 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 . + */ + +#pragma once + +#include +#include + +class QNetworkAccessManager; +class QNetworkReply; + +class VersionChecker : public QObject +{ + Q_OBJECT +public: + VersionChecker(); + virtual ~VersionChecker(); + void checkLatest(); + QString getVersion(); + void setApp(const QString& app) { m_app = app; } + int compareVersions(const QString& left, const QString& right); +public slots: + void replyFinished(QNetworkReply* reply); +signals: + void updateFound(const QString& version); +private: + QNetworkAccessManager* m_manager; + QString m_app; +}; diff --git a/src/gui/src/WebClient.cpp b/src/gui/src/WebClient.cpp new file mode 100644 index 00000000..99ad1a13 --- /dev/null +++ b/src/gui/src/WebClient.cpp @@ -0,0 +1,83 @@ +/* + * synergy -- 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 . + */ + +#include "WebClient.h" + +#include "QUtility.h" + +#include +#include +#include +#include + +bool +WebClient::getEdition (int& edition, QString& errorOut) { + QString responseJson = request(); + + /* TODO: This is horrible and should be ripped out as soon as we move + * to Qt 5. See issue #5630 + */ + + QRegExp resultRegex(".*\"result\".*:.*(true|false).*"); + if (resultRegex.exactMatch (responseJson)) { + QString boolString = resultRegex.cap(1); + if (boolString == "true") { + QRegExp editionRegex(".*\"edition\".*:.*\"([^\"]+)\".*"); + if (editionRegex.exactMatch(responseJson)) { + QString e = editionRegex.cap(1); + edition = e.toInt(); + return true; + } else { + throw std::runtime_error ("Unrecognised server response."); + } + } else { + errorOut = tr("Login failed. Invalid email address or password."); + return false; + } + } else { + QRegExp errorRegex(".*\"error\".*:.*\"([^\"]+)\".*"); + if (errorRegex.exactMatch (responseJson)) { + errorOut = errorRegex.cap(1).replace("\\n", "\n"); + return false; + } else { + throw std::runtime_error ("Unrecognised server response."); + } + } +} + +bool +WebClient::setEmail (QString email, QString& errorOut) { + if (email.isEmpty()) { + errorOut = tr("Your email address cannot be left blank."); + return false; + } + m_Email = email; + return true; +} + +bool +WebClient::setPassword (QString password, QString&) { + m_Password = password; + return true; +} + +QString +WebClient::request() { + QStringList args("--login-auth"); + QString credentials (m_Email + ":" + hash(m_Password) + "\n"); + return m_CoreInterface.run (args, credentials); +} diff --git a/src/gui/src/WebClient.h b/src/gui/src/WebClient.h new file mode 100644 index 00000000..2280031e --- /dev/null +++ b/src/gui/src/WebClient.h @@ -0,0 +1,49 @@ +/* + * synergy -- 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 . + */ + +#ifndef WEBCLIENT_H +#define WEBCLIENT_H + +#include +#include + +#include "CoreInterface.h" + +class QMessageBox; +class QWidget; +class QStringList; + +class WebClient : public QObject +{ + Q_OBJECT + +public: + bool getEdition (int& edition, QString& errorOut); + bool setEmail (QString email, QString& errorOut); + bool setPassword (QString password, QString& errorOut); +signals: + void error(QString e); + +private: + QString request(); + + QString m_Email; + QString m_Password; + CoreInterface m_CoreInterface; +}; + +#endif // WEBCLIENT_H diff --git a/src/gui/src/ZeroconfBrowser.cpp b/src/gui/src/ZeroconfBrowser.cpp new file mode 100644 index 00000000..00764ce5 --- /dev/null +++ b/src/gui/src/ZeroconfBrowser.cpp @@ -0,0 +1,92 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#include "ZeroconfBrowser.h" + +#include + +ZeroconfBrowser::ZeroconfBrowser(QObject* parent) : + QObject(parent), + m_DnsServiceRef(0), + m_pSocket(0) +{ +} + +ZeroconfBrowser::~ZeroconfBrowser() +{ + if (m_pSocket) { + delete m_pSocket; + } + + if (m_DnsServiceRef) { + DNSServiceRefDeallocate(m_DnsServiceRef); + m_DnsServiceRef = 0; + } +} + +void ZeroconfBrowser::browseForType(const QString& type) +{ + DNSServiceErrorType err = DNSServiceBrowse(&m_DnsServiceRef, 0, 0, + type.toUtf8().constData(), 0, browseReply, this); + + if (err != kDNSServiceErr_NoError) { + emit error(err); + } + else { + int sockFD = DNSServiceRefSockFD(m_DnsServiceRef); + if (sockFD == -1) { + emit error(kDNSServiceErr_Invalid); + } + else { + m_pSocket = new QSocketNotifier(sockFD, QSocketNotifier::Read, this); + connect(m_pSocket, SIGNAL(activated(int)), this, + SLOT(socketReadyRead())); + } + } +} + +void ZeroconfBrowser::socketReadyRead() +{ + DNSServiceErrorType err = DNSServiceProcessResult(m_DnsServiceRef); + if (err != kDNSServiceErr_NoError) { + emit error(err); + } +} + +void ZeroconfBrowser::browseReply(DNSServiceRef, DNSServiceFlags flags, + quint32, DNSServiceErrorType errorCode, const char* serviceName, + const char* regType, const char* replyDomain, void* context) +{ + ZeroconfBrowser* browser = static_cast(context); + if (errorCode != kDNSServiceErr_NoError) { + emit browser->error(errorCode); + } + else { + ZeroconfRecord record(serviceName, regType, replyDomain); + if (flags & kDNSServiceFlagsAdd) { + if (!browser->m_Records.contains(record)) { + browser->m_Records.append(record); + } + } + else { + browser->m_Records.removeAll(record); + } + if (!(flags & kDNSServiceFlagsMoreComing)) { + emit browser->currentRecordsChanged(browser->m_Records); + } + } +} diff --git a/src/gui/src/ZeroconfBrowser.h b/src/gui/src/ZeroconfBrowser.h new file mode 100644 index 00000000..c15a24bf --- /dev/null +++ b/src/gui/src/ZeroconfBrowser.h @@ -0,0 +1,57 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#pragma once + +#include "ZeroconfRecord.h" + +#include +#define _MSL_STDINT_H +#include +#include + +class QSocketNotifier; + +class ZeroconfBrowser : public QObject +{ + Q_OBJECT + +public: + ZeroconfBrowser(QObject* parent = 0); + ~ZeroconfBrowser(); + void browseForType(const QString& type); + inline QList currentRecords() const { return m_Records; } + inline QString serviceType() const { return m_BrowsingType; } + +signals: + void currentRecordsChanged(const QList& list); + void error(DNSServiceErrorType err); + +private slots: + void socketReadyRead(); + +private: + static void DNSSD_API browseReply(DNSServiceRef, DNSServiceFlags flags, + quint32, DNSServiceErrorType errorCode, const char* serviceName, + const char* regType, const char* replyDomain, void* context); + +private: + DNSServiceRef m_DnsServiceRef; + QSocketNotifier* m_pSocket; + QList m_Records; + QString m_BrowsingType; +}; diff --git a/src/gui/src/ZeroconfRecord.h b/src/gui/src/ZeroconfRecord.h new file mode 100644 index 00000000..0da155a1 --- /dev/null +++ b/src/gui/src/ZeroconfRecord.h @@ -0,0 +1,50 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#pragma once + +#include +#include + +class ZeroconfRecord +{ +public: + ZeroconfRecord() {} + ZeroconfRecord(const QString& name, const QString& regType, + const QString& domain) + : serviceName(name), registeredType(regType), replyDomain(domain) + {} + ZeroconfRecord(const char* name, const char* regType, const char* domain) + { + serviceName = QString::fromUtf8(name); + registeredType = QString::fromUtf8(regType); + replyDomain = QString::fromUtf8(domain); + } + + bool operator==(const ZeroconfRecord& other) const { + return serviceName == other.serviceName + && registeredType == other.registeredType + && replyDomain == other.replyDomain; + } + +public: + QString serviceName; + QString registeredType; + QString replyDomain; +}; + +Q_DECLARE_METATYPE(ZeroconfRecord) diff --git a/src/gui/src/ZeroconfRegister.cpp b/src/gui/src/ZeroconfRegister.cpp new file mode 100644 index 00000000..3e7e3c75 --- /dev/null +++ b/src/gui/src/ZeroconfRegister.cpp @@ -0,0 +1,94 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#include "ZeroconfRegister.h" + +#include + +ZeroconfRegister::ZeroconfRegister(QObject* parent) : + QObject(parent), + m_DnsServiceRef(0), + m_pSocket(0) +{ +} + +ZeroconfRegister::~ZeroconfRegister() +{ + if (m_pSocket) { + delete m_pSocket; + } + + if (m_DnsServiceRef) { + DNSServiceRefDeallocate(m_DnsServiceRef); + m_DnsServiceRef = 0; + } +} + +void ZeroconfRegister::registerService(const ZeroconfRecord& record, + quint16 servicePort) +{ + if (m_DnsServiceRef) { + qWarning("Warning: Already registered a service for this object"); + return; + } + + quint16 bigEndianPort = servicePort; +#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN + { + bigEndianPort = 0 | ((servicePort & 0x00ff) << 8) | ((servicePort & 0xff00) >> 8); + } +#endif + + DNSServiceErrorType err = DNSServiceRegister(&m_DnsServiceRef, + kDNSServiceFlagsNoAutoRename, 0, + record.serviceName.toUtf8().constData(), + record.registeredType.toUtf8().constData(), + record.replyDomain.isEmpty() ? 0 : record.replyDomain.toUtf8().constData(), + 0, bigEndianPort, 0, 0, registerService, this); + + if (err != kDNSServiceErr_NoError) { + emit error(err); + } + else { + int sockfd = DNSServiceRefSockFD(m_DnsServiceRef); + if (sockfd == -1) { + emit error(kDNSServiceErr_Invalid); + } + else { + m_pSocket = new QSocketNotifier(sockfd, QSocketNotifier::Read, this); + connect(m_pSocket, SIGNAL(activated(int)), this, SLOT(socketReadyRead())); + } + } +} + +void ZeroconfRegister::socketReadyRead() +{ + DNSServiceErrorType err = DNSServiceProcessResult(m_DnsServiceRef); + if (err != kDNSServiceErr_NoError) { + emit error(err); + } +} + +void ZeroconfRegister::registerService(DNSServiceRef, DNSServiceFlags, + DNSServiceErrorType errorCode, const char* name, const char* regtype, + const char* domain, void* data) +{ + ZeroconfRegister* serviceRegister = static_cast(data); + if (errorCode != kDNSServiceErr_NoError) { + emit serviceRegister->error(errorCode); + } +} diff --git a/src/gui/src/ZeroconfRegister.h b/src/gui/src/ZeroconfRegister.h new file mode 100644 index 00000000..05487e12 --- /dev/null +++ b/src/gui/src/ZeroconfRegister.h @@ -0,0 +1,61 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#pragma once + +#include + +#include "ZeroconfRecord.h" + +class QSocketNotifier; + +// Bonjour flags +#define _MSL_STDINT_H +#include +#if defined(Q_OS_WIN) +#define WIN32_LEAN_AND_MEAN +#endif +#include + +class ZeroconfRegister : public QObject +{ + Q_OBJECT + +public: + ZeroconfRegister(QObject* parent = 0); + ~ZeroconfRegister(); + + void registerService(const ZeroconfRecord& record, quint16 servicePort); + inline ZeroconfRecord registeredRecord() const { return finalRecord; } + +signals: + void error(DNSServiceErrorType error); + void serviceRegistered(const ZeroconfRecord& record); + +private slots: + void socketReadyRead(); + +private: + static void DNSSD_API registerService(DNSServiceRef sdRef, + DNSServiceFlags, DNSServiceErrorType errorCode, const char* name, + const char* regtype, const char* domain, void* context); + +private: + DNSServiceRef m_DnsServiceRef; + QSocketNotifier* m_pSocket; + ZeroconfRecord finalRecord; +}; diff --git a/src/gui/src/ZeroconfServer.cpp b/src/gui/src/ZeroconfServer.cpp new file mode 100644 index 00000000..e4d6dfd8 --- /dev/null +++ b/src/gui/src/ZeroconfServer.cpp @@ -0,0 +1,33 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#include "ZeroconfServer.h" +#include "ZeroconfThread.h" + +#include + +ZeroconfServer::ZeroconfServer(QObject* parent) : + QTcpServer(parent) +{ +} + +void ZeroconfServer::incomingConnection(qintptr socketDescriptor) +{ + ZeroconfThread* thread = new ZeroconfThread(socketDescriptor, this); + connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater())); + thread->start(); +} diff --git a/src/gui/src/ZeroconfServer.h b/src/gui/src/ZeroconfServer.h new file mode 100644 index 00000000..2f6c6f11 --- /dev/null +++ b/src/gui/src/ZeroconfServer.h @@ -0,0 +1,37 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#pragma once + +#include +#include + +class ZeroconfRegister; + +class ZeroconfServer : public QTcpServer +{ + Q_OBJECT + +public: + ZeroconfServer(QObject* parent = 0); + +protected: + void incomingConnection(qintptr socketDescriptor) override; + +private: + QStringList fortunes; +}; diff --git a/src/gui/src/ZeroconfService.cpp b/src/gui/src/ZeroconfService.cpp new file mode 100644 index 00000000..5ecc5773 --- /dev/null +++ b/src/gui/src/ZeroconfService.cpp @@ -0,0 +1,164 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#include "ZeroconfService.h" + +#include "MainWindow.h" +#include "ZeroconfRegister.h" +#include "ZeroconfBrowser.h" + +#include +#include +#define _MSL_STDINT_H +#include +#include + +static const QStringList preferedIPAddress( + QStringList() << + "192.168." << + "10." << + "172."); + +const char* ZeroconfService:: m_ServerServiceName = "_synergyServerZeroconf._tcp"; +const char* ZeroconfService:: m_ClientServiceName = "_synergyClientZeroconf._tcp"; + +ZeroconfService::ZeroconfService(MainWindow* mainWindow) : + m_pMainWindow(mainWindow), + m_pZeroconfBrowser(0), + m_pZeroconfRegister(0), + m_ServiceRegistered(false) +{ + if (m_pMainWindow->synergyType() == MainWindow::synergyServer) { + if (registerService(true)) { + m_pZeroconfBrowser = new ZeroconfBrowser(this); + connect(m_pZeroconfBrowser, SIGNAL( + currentRecordsChanged(const QList&)), + this, SLOT(clientDetected(const QList&))); + m_pZeroconfBrowser->browseForType( + QLatin1String(m_ClientServiceName)); + } + } + else { + m_pZeroconfBrowser = new ZeroconfBrowser(this); + connect(m_pZeroconfBrowser, SIGNAL( + currentRecordsChanged(const QList&)), + this, SLOT(serverDetected(const QList&))); + m_pZeroconfBrowser->browseForType( + QLatin1String(m_ServerServiceName)); + } + + connect(m_pZeroconfBrowser, SIGNAL(error(DNSServiceErrorType)), + this, SLOT(errorHandle(DNSServiceErrorType))); +} + +ZeroconfService::~ZeroconfService() +{ + if (m_pZeroconfBrowser) { + delete m_pZeroconfBrowser; + } + if (m_pZeroconfRegister) { + delete m_pZeroconfRegister; + } +} + +void ZeroconfService::serverDetected(const QList& list) +{ + foreach (ZeroconfRecord record, list) { + registerService(false); + m_pMainWindow->appendLogInfo(tr("zeroconf server detected: %1").arg( + record.serviceName)); + m_pMainWindow->serverDetected(record.serviceName); + } +} + +void ZeroconfService::clientDetected(const QList& list) +{ + foreach (ZeroconfRecord record, list) { + m_pMainWindow->appendLogInfo(tr("zeroconf client detected: %1").arg( + record.serviceName)); + m_pMainWindow->autoAddScreen(record.serviceName); + } +} + +void ZeroconfService::errorHandle(DNSServiceErrorType errorCode) +{ + QMessageBox::critical(0, tr("Zero configuration service"), + tr("Error code: %1.").arg(errorCode)); +} + +QString ZeroconfService::getLocalIPAddresses() +{ + QStringList addresses; + foreach (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) { + if (address.startsWith(preferedIP)) { + return address; + } + } + } + + return ""; +} + +bool ZeroconfService::registerService(bool server) +{ + bool result = true; + + if (!m_ServiceRegistered) { + if (!m_zeroconfServer.listen()) { + QMessageBox::critical(0, tr("Zero configuration service"), + tr("Unable to start the zeroconf: %1.") + .arg(m_zeroconfServer.errorString())); + result = false; + } + else { + m_pZeroconfRegister = new ZeroconfRegister(this); + if (server) { + QString localIP = getLocalIPAddresses(); + if (localIP.isEmpty()) { + QMessageBox::warning(m_pMainWindow, tr("Synergy"), + tr("Failed to get local IP address. " + "Please manually type in server address " + "on your clients")); + } + else { + m_pZeroconfRegister->registerService( + ZeroconfRecord(tr("%1").arg(localIP), + QLatin1String(m_ServerServiceName), QString()), + m_zeroconfServer.serverPort()); + } + } + else { + m_pZeroconfRegister->registerService( + ZeroconfRecord(tr("%1").arg(m_pMainWindow->getScreenName()), + QLatin1String(m_ClientServiceName), QString()), + m_zeroconfServer.serverPort()); + } + + m_ServiceRegistered = true; + } + } + + return result; +} diff --git a/src/gui/src/ZeroconfService.h b/src/gui/src/ZeroconfService.h new file mode 100644 index 00000000..17fe3bf7 --- /dev/null +++ b/src/gui/src/ZeroconfService.h @@ -0,0 +1,57 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#pragma once + +#include "ZeroconfServer.h" +#include "ZeroconfRecord.h" + +#include + +typedef int32_t DNSServiceErrorType; + +class ZeroconfRegister; +class ZeroconfBrowser; +class MainWindow; + +class ZeroconfService : public QObject +{ + Q_OBJECT + +public: + ZeroconfService(MainWindow* mainWindow); + ~ZeroconfService(); + +private slots: + void serverDetected(const QList& list); + void clientDetected(const QList& list); + void errorHandle(DNSServiceErrorType errorCode); + +private: + QString getLocalIPAddresses(); + bool registerService(bool server); + +private: + MainWindow* m_pMainWindow; + ZeroconfServer m_zeroconfServer; + ZeroconfBrowser* m_pZeroconfBrowser; + ZeroconfRegister* m_pZeroconfRegister; + bool m_ServiceRegistered; + + static const char* m_ServerServiceName; + static const char* m_ClientServiceName; +}; diff --git a/src/gui/src/ZeroconfThread.cpp b/src/gui/src/ZeroconfThread.cpp new file mode 100644 index 00000000..48e9fd8a --- /dev/null +++ b/src/gui/src/ZeroconfThread.cpp @@ -0,0 +1,38 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#include "ZeroconfThread.h" + +#include + +ZeroconfThread::ZeroconfThread(int socketDescriptor, QObject* parent) : + QThread(parent), + m_SocketDescriptor(socketDescriptor) +{ +} + +void ZeroconfThread::run() +{ + QTcpSocket tcpSocket; + if (!tcpSocket.setSocketDescriptor(m_SocketDescriptor)) { + emit error(tcpSocket.error()); + return; + } + + tcpSocket.disconnectFromHost(); + tcpSocket.waitForDisconnected(); +} diff --git a/src/gui/src/ZeroconfThread.h b/src/gui/src/ZeroconfThread.h new file mode 100644 index 00000000..b2e7485e --- /dev/null +++ b/src/gui/src/ZeroconfThread.h @@ -0,0 +1,38 @@ +/* + * synergy -- mouse and keyboard sharing utility + * Copyright (C) 2014-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 . + */ + +#pragma once + +#include +#include + +class ZeroconfThread : public QThread +{ + Q_OBJECT + +public: + ZeroconfThread(int socketDescriptor, QObject* parent); + + void run(); + +signals: + void error(QTcpSocket::SocketError socketError); + +private: + int m_SocketDescriptor; + QString m_Text; +}; diff --git a/src/gui/src/main.cpp b/src/gui/src/main.cpp new file mode 100644 index 00000000..fe09ed3e --- /dev/null +++ b/src/gui/src/main.cpp @@ -0,0 +1,176 @@ +/* + * synergy -- 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 + * 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 . + */ + +#define TRAY_RETRY_COUNT 10 +#define TRAY_RETRY_WAIT 2000 + +#include "QSynergyApplication.h" +#include "LicenseManager.h" +#include "MainWindow.h" +#include "AppConfig.h" +#include "SetupWizard.h" + +#include +#include +#include +#include + +#if defined(Q_OS_MAC) +#include +#endif + +#ifdef Q_OS_DARWIN +#include +#endif + +class QThreadImpl : public QThread +{ +public: + static void msleep(unsigned long msecs) + { + QThread::msleep(msecs); + } +}; + +int waitForTray(); + +#if defined(Q_OS_MAC) +bool checkMacAssistiveDevices(); +#endif + +int main(int argc, char* argv[]) +{ +#ifdef Q_OS_DARWIN + /* Workaround for QTBUG-40332 - "High ping when QNetworkAccessManager is instantiated" */ + ::setenv ("QT_BEARER_POLL_TIMEOUT", "-1", 1); +#endif + QCoreApplication::setOrganizationName("Synergy"); + QCoreApplication::setOrganizationDomain("http://symless.com/"); + QCoreApplication::setApplicationName("Synergy"); + + QSynergyApplication app(argc, argv); + +#if defined(Q_OS_MAC) + + if (app.applicationDirPath().startsWith("/Volumes/")) { + QMessageBox::information( + NULL, "Synergy", + "Please drag Synergy to the Applications folder, and open it from there."); + return 1; + } + + if (!checkMacAssistiveDevices()) + { + return 1; + } +#endif + + if (!waitForTray()) + { + return -1; + } + +#ifndef Q_OS_WIN + QApplication::setQuitOnLastWindowClosed(false); +#endif + + QSettings settings; + AppConfig appConfig (&settings); + qRegisterMetaType("Edition"); + LicenseManager licenseManager (&appConfig); + + app.switchTranslator(appConfig.language()); + + MainWindow mainWindow(settings, appConfig, licenseManager); + SetupWizard setupWizard(mainWindow, true); + + if (appConfig.wizardShouldRun()) + { + setupWizard.show(); + } + else + { + mainWindow.open(); + } + + return app.exec(); +} + +int waitForTray() +{ + // on linux, the system tray may not be available immediately after logging in, + // so keep retrying but give up after a short time. + int trayAttempts = 0; + while (true) + { + if (QSystemTrayIcon::isSystemTrayAvailable()) + { + break; + } + + if (++trayAttempts > TRAY_RETRY_COUNT) + { + QMessageBox::critical(NULL, "Synergy", + QObject::tr("System tray is unavailable, don't close your window.")); + return true; + } + + QThreadImpl::msleep(TRAY_RETRY_WAIT); + } + return true; +} + +#if defined(Q_OS_MAC) +bool checkMacAssistiveDevices() +{ +#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1090 // mavericks + + // new in mavericks, applications are trusted individually + // with use of the accessibility api. this call will show a + // prompt which can show the security/privacy/accessibility + // tab, with a list of allowed applications. synergy should + // show up there automatically, but will be unchecked. + + if (AXIsProcessTrusted()) { + return true; + } + + const void* keys[] = { kAXTrustedCheckOptionPrompt }; + const void* trueValue[] = { kCFBooleanTrue }; + CFDictionaryRef options = CFDictionaryCreate(NULL, keys, trueValue, 1, NULL, NULL); + + bool result = AXIsProcessTrustedWithOptions(options); + CFRelease(options); + return result; + +#else + + // now deprecated in mavericks. + bool result = AXAPIEnabled(); + if (!result) { + QMessageBox::information( + NULL, "Synergy", + "Please enable access to assistive devices " + "System Preferences -> Security & Privacy -> " + "Privacy -> Accessibility, then re-open Synergy."); + } + return result; + +#endif +} +#endif