Repository: linuxdeepin/dde-control-center Branch: master Commit: c687c0da264b Files: 1114 Total size: 20.1 MB Directory structure: gitextract_nl82i_9z/ ├── .clang-format ├── .editorconfig ├── .github/ │ ├── copilot-instructions.md │ └── workflows/ │ ├── backup-to-gitlab.yml │ ├── call-auto-tag.yml │ ├── call-build-distribution.yml │ ├── call-chatOps.yml │ ├── call-clacheck.yml │ ├── call-commitlint.yml │ ├── call-deploy-dev-doc.yml │ ├── call-license-check.yml │ └── cppcheck.yml ├── .gitignore ├── .obs/ │ └── workflows.yml ├── .reuse/ │ └── dep5 ├── .tx/ │ ├── config │ ├── deepin.conf │ └── transifex.yaml ├── CMakeLists.txt ├── LICENSE ├── LICENSES/ │ ├── CC-BY-4.0.txt │ ├── CC0-1.0.txt │ ├── GPL-3.0-or-later.txt │ ├── LGPL-3.0-or-later.txt │ └── MIT.txt ├── README.md ├── README.zh_CN.md ├── archlinux/ │ └── PKGBUILD ├── debian/ │ ├── changelog │ ├── control │ ├── copyright │ ├── dde-control-center-dev.install │ ├── dde-control-center.install │ ├── preinst │ ├── rules │ └── source/ │ ├── format │ └── lintian-overrides ├── docs/ │ ├── CMakeLists.txt │ ├── v23-dcc-interface.zh_CN.md │ └── v25-dcc-interface.zh_CN.md ├── examples/ │ ├── CMakeLists.txt │ └── plugin-example/ │ ├── CMakeLists.txt │ ├── qml/ │ │ ├── Example.qml │ │ ├── ExampleMain.qml │ │ ├── ExamplePage1.qml │ │ ├── ExamplePage2.qml │ │ ├── ExamplePage3.qml │ │ └── dcc_example.dci │ ├── src/ │ │ ├── pluginexample.cpp │ │ └── pluginexample.h │ └── translations/ │ ├── example.ts │ ├── example_az.ts │ ├── example_bo.ts │ ├── example_ca.ts │ ├── example_es.ts │ ├── example_fi.ts │ ├── example_fr.ts │ ├── example_hu.ts │ ├── example_it.ts │ ├── example_ja.ts │ ├── example_ko.ts │ ├── example_nb_NO.ts │ ├── example_pl.ts │ ├── example_pt_BR.ts │ ├── example_ru.ts │ ├── example_uk.ts │ ├── example_zh_CN.ts │ ├── example_zh_HK.ts │ ├── example_zh_TW.ts │ ├── examples.ts │ ├── examples_az.ts │ ├── examples_bo.ts │ ├── examples_ca.ts │ ├── examples_es.ts │ ├── examples_fi.ts │ ├── examples_fr.ts │ ├── examples_hu.ts │ ├── examples_it.ts │ ├── examples_ja.ts │ ├── examples_ko.ts │ ├── examples_nb_NO.ts │ ├── examples_pl.ts │ ├── examples_pt_BR.ts │ ├── examples_ru.ts │ ├── examples_uk.ts │ ├── examples_zh_CN.ts │ ├── examples_zh_HK.ts │ └── examples_zh_TW.ts ├── include/ │ └── dccfactory.h ├── misc/ │ ├── DdeControlCenterConfig.cmake.in │ ├── DdeControlCenterConfigOld.cmake.in │ ├── DdeControlCenterPluginMacros.cmake │ ├── configs/ │ │ ├── common/ │ │ │ └── org.deepin.region-format.json │ │ ├── org.deepin.dde.control-center.accounts.json │ │ ├── org.deepin.dde.control-center.commoninfo.json │ │ ├── org.deepin.dde.control-center.datetime.json │ │ ├── org.deepin.dde.control-center.display.json │ │ ├── org.deepin.dde.control-center.json │ │ ├── org.deepin.dde.control-center.personalization.json │ │ ├── org.deepin.dde.control-center.power.json │ │ └── org.deepin.dde.control-center.sound.json │ ├── deepin-debug-config/ │ │ └── org.deepin.dde.control-center.json │ ├── deepin-log-config/ │ │ └── org.deepin.dde.control-center.json │ ├── developdocument.html │ ├── gen_report.sh │ ├── org.deepin.dde-grand-search.dde-control-center-setting.conf │ ├── org.deepin.dde.ControlCenter1.service.in │ ├── org.deepin.dde.control-center.desktop │ ├── org.deepin.dde.controlcenter.metainfo.xml │ ├── systemd/ │ │ └── dde-control-center.service.in │ ├── translate_desktop2ts.sh │ ├── translate_generation.sh │ └── translate_ts2desktop.sh ├── src/ │ ├── dde-control-center/ │ │ ├── CMakeLists.txt │ │ ├── controlcenterdbusadaptor.cpp │ │ ├── controlcenterdbusadaptor.h │ │ ├── dccmanager.cpp │ │ ├── dccmanager.h │ │ ├── main.cpp │ │ ├── navigationmodel.cpp │ │ ├── navigationmodel.h │ │ ├── plugin/ │ │ │ ├── CMakeLists.txt │ │ │ ├── Crumb.qml │ │ │ ├── DccCheckIcon.qml │ │ │ ├── DccEditorItem.qml │ │ │ ├── DccGroupView.qml │ │ │ ├── DccItem.qml │ │ │ ├── DccItemBackground.qml │ │ │ ├── DccLabel.qml │ │ │ ├── DccLoader.qml │ │ │ ├── DccMenuEditorItem.qml │ │ │ ├── DccMenuItem.qml │ │ │ ├── DccRightView.qml │ │ │ ├── DccRowView.qml │ │ │ ├── DccSettingsObject.qml │ │ │ ├── DccSettingsView.qml │ │ │ ├── DccTimeRange.qml │ │ │ ├── DccTitleObject.qml │ │ │ ├── DccUtils.js │ │ │ ├── DccWindow.qml │ │ │ ├── HomePage.qml │ │ │ ├── SearchBar.qml │ │ │ ├── SecondPage.qml │ │ │ ├── control-loading.dci │ │ │ ├── dccapp.cpp │ │ │ ├── dccapp.h │ │ │ ├── dccimageprovider.cpp │ │ │ ├── dccimageprovider.h │ │ │ ├── dccmodel.cpp │ │ │ ├── dccmodel.h │ │ │ ├── dccobject.cpp │ │ │ ├── dccobject.h │ │ │ ├── dccobject_p.h │ │ │ ├── dccquickdbusinterface.cpp │ │ │ ├── dccquickdbusinterface.h │ │ │ ├── dccquickdbusinterface_p.h │ │ │ ├── dccrepeater.cpp │ │ │ ├── dccrepeater.h │ │ │ ├── reddot.dci │ │ │ └── sidebar.dci │ │ ├── pluginmanager.cpp │ │ ├── pluginmanager.h │ │ ├── qrc/ │ │ │ └── dcc.qrc │ │ ├── searchmodel.cpp │ │ └── searchmodel.h │ ├── plugin-accounts/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── accountlistmodel.cpp │ │ │ ├── accountlistmodel.h │ │ │ ├── accountscontroller.cpp │ │ │ ├── accountscontroller.h │ │ │ ├── accountsdbusproxy.cpp │ │ │ ├── accountsdbusproxy.h │ │ │ ├── accountsworker.cpp │ │ │ ├── accountsworker.h │ │ │ ├── avatarlistmodel.cpp │ │ │ ├── avatarlistmodel.h │ │ │ ├── creationresult.cpp │ │ │ ├── creationresult.h │ │ │ ├── pwqualitymanager.cpp │ │ │ ├── pwqualitymanager.h │ │ │ ├── qrc/ │ │ │ │ ├── accounts.qrc │ │ │ │ └── icons/ │ │ │ │ ├── dcc_user_add_icon.dci │ │ │ │ ├── dcc_user_animal.dci │ │ │ │ ├── dcc_user_custom.dci │ │ │ │ ├── dcc_user_emoji.dci │ │ │ │ ├── dcc_user_funny.dci │ │ │ │ ├── dcc_user_human.dci │ │ │ │ └── dcc_user_scenery.dci │ │ │ ├── securitydbusproxy.cpp │ │ │ ├── securitydbusproxy.h │ │ │ ├── syncdbusproxy.cpp │ │ │ ├── syncdbusproxy.h │ │ │ ├── user.cpp │ │ │ ├── user.h │ │ │ ├── userdbusproxy.cpp │ │ │ ├── userdbusproxy.h │ │ │ ├── usermodel.cpp │ │ │ └── usermodel.h │ │ └── qml/ │ │ ├── AccountSettings.qml │ │ ├── Accounts.qml │ │ ├── AccountsMain.qml │ │ ├── AutoLoginWarningDialog.qml │ │ ├── AvatarGridView.qml │ │ ├── AvatarSettingsDialog.qml │ │ ├── ComfirmDeleteDialog.qml │ │ ├── ComfirmSafePage.qml │ │ ├── CreateAccountDialog.qml │ │ ├── CustomAvatarCropper.qml │ │ ├── CustomAvatarEmpatyArea.qml │ │ ├── CustomLocalAvatarsRow.qml │ │ ├── EditActionLabel.qml │ │ ├── LoginMethod.qml │ │ ├── PasswordLayout.qml │ │ ├── PasswordModifyDialog.qml │ │ ├── accounts.dci │ │ ├── dcc-edit.dci │ │ └── metadata.json │ ├── plugin-authentication/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── abstractbiometriccontroller.cpp │ │ │ ├── abstractbiometriccontroller.h │ │ │ ├── biometricauthcontroller.cpp │ │ │ ├── biometricauthcontroller.h │ │ │ ├── charamangerdbusproxy.cpp │ │ │ ├── charamangerdbusproxy.h │ │ │ ├── charamangermodel.cpp │ │ │ ├── charamangermodel.h │ │ │ ├── charamangerworker.cpp │ │ │ ├── charamangerworker.h │ │ │ ├── faceauthcontroller.cpp │ │ │ ├── faceauthcontroller.h │ │ │ ├── fingerprintauthcontroller.cpp │ │ │ ├── fingerprintauthcontroller.h │ │ │ ├── irisauthcontroller.cpp │ │ │ ├── irisauthcontroller.h │ │ │ └── qrc/ │ │ │ ├── authentication.qrc │ │ │ └── icons/ │ │ │ ├── dcc_delete.dci │ │ │ ├── dcc_edit.dci │ │ │ ├── iris_add.dci │ │ │ ├── iris_lose.dci │ │ │ ├── iris_scan.dci │ │ │ ├── iris_scanning.dci │ │ │ ├── iris_success.dci │ │ │ ├── scan_loader.dci │ │ │ ├── user_biometric_face.dci │ │ │ ├── user_biometric_face_add.dci │ │ │ ├── user_biometric_face_lose.dci │ │ │ ├── user_biometric_face_success.dci │ │ │ ├── user_biometric_fingerprint.dci │ │ │ ├── user_biometric_fingerprint_add.dci │ │ │ ├── user_biometric_fingerprint_lose.dci │ │ │ ├── user_biometric_fingerprint_success.dci │ │ │ └── user_biometric_iris.dci │ │ └── qml/ │ │ ├── AddFaceinfoDialog.qml │ │ ├── AddFingerDialog.qml │ │ ├── AddIrisDialog.qml │ │ ├── Authentication.qml │ │ ├── AuthenticationMain.qml │ │ └── DisclaimerControl.qml │ ├── plugin-bluetooth/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── bluetoothadapter.cpp │ │ │ ├── bluetoothadapter.h │ │ │ ├── bluetoothadaptersmodel.cpp │ │ │ ├── bluetoothadaptersmodel.h │ │ │ ├── bluetoothdbusproxy.cpp │ │ │ ├── bluetoothdbusproxy.h │ │ │ ├── bluetoothdevice.cpp │ │ │ ├── bluetoothdevice.h │ │ │ ├── bluetoothdevicemodel.cpp │ │ │ ├── bluetoothdevicemodel.h │ │ │ ├── bluetoothinteraction.cpp │ │ │ ├── bluetoothinteraction.h │ │ │ ├── bluetoothmodel.cpp │ │ │ ├── bluetoothmodel.h │ │ │ ├── bluetoothworker.cpp │ │ │ ├── bluetoothworker.h │ │ │ └── qrc/ │ │ │ ├── bluetooth.qrc │ │ │ └── icons/ │ │ │ ├── bluetoothNomal.dci │ │ │ ├── bluetooth_option.dci │ │ │ └── bluetooth_redo.dci │ │ └── qml/ │ │ ├── Adapters.qml │ │ ├── BlueTooth.qml │ │ ├── BlueToothDeviceListView.qml │ │ ├── BlueToothMain.qml │ │ ├── BluetoothCtl.qml │ │ ├── MyDevice.qml │ │ ├── OtherDevice.qml │ │ ├── bluetooth.dci │ │ ├── bluetoothNomal.dci │ │ ├── bluetooth_camera.dci │ │ ├── bluetooth_clang.dci │ │ ├── bluetooth_headset.dci │ │ ├── bluetooth_keyboard.dci │ │ ├── bluetooth_lan.dci │ │ ├── bluetooth_laptop.dci │ │ ├── bluetooth_micphone.dci │ │ ├── bluetooth_microphone.dci │ │ ├── bluetooth_mouse.dci │ │ ├── bluetooth_option.dci │ │ ├── bluetooth_other.dci │ │ ├── bluetooth_pad.dci │ │ ├── bluetooth_pc.dci │ │ ├── bluetooth_pen.dci │ │ ├── bluetooth_pheadset.dci │ │ ├── bluetooth_phone.dci │ │ ├── bluetooth_print.dci │ │ ├── bluetooth_redo.dci │ │ ├── bluetooth_scaner.dci │ │ ├── bluetooth_scanner.dci │ │ ├── bluetooth_touchpad.dci │ │ ├── bluetooth_tv.dci │ │ ├── bluetooth_vidicon.dci │ │ ├── metadata.json │ │ ├── option.dci │ │ └── redo.dci │ ├── plugin-commoninfo/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── commoninfointeraction.cpp │ │ │ ├── commoninfointeraction.h │ │ │ ├── commoninfomodel.cpp │ │ │ ├── commoninfomodel.h │ │ │ ├── commoninfoproxy.cpp │ │ │ ├── commoninfoproxy.h │ │ │ ├── commoninfowork.cpp │ │ │ ├── commoninfowork.h │ │ │ ├── grubanimationmodel.cpp │ │ │ ├── grubanimationmodel.h │ │ │ ├── grubmenulistmodel.cpp │ │ │ ├── grubmenulistmodel.h │ │ │ ├── pwqualitymanager.cpp │ │ │ ├── pwqualitymanager.h │ │ │ ├── qrc/ │ │ │ │ ├── commoninfo.qrc │ │ │ │ └── icons/ │ │ │ │ ├── develop_bind.dci │ │ │ │ ├── inner_shadow.dci │ │ │ │ ├── selected.dci │ │ │ │ └── tick.dci │ │ │ └── utils.h │ │ └── qml/ │ │ ├── BootPage.qml │ │ ├── CommonInfoMain.qml │ │ ├── DevelopModePage.qml │ │ ├── boot_deepin.dci │ │ ├── boot_uos.dci │ │ ├── common_inner_shadow.dci │ │ ├── common_ok.dci │ │ ├── common_tick.dci │ │ ├── develop_bind.dci │ │ ├── developer.dci │ │ ├── meau.dci │ │ └── metadata.json │ ├── plugin-datetime/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── datetimedbusproxy.cpp │ │ │ ├── datetimedbusproxy.h │ │ │ ├── datetimemodel.cpp │ │ │ ├── datetimemodel.h │ │ │ ├── datetimeworker.cpp │ │ │ ├── datetimeworker.h │ │ │ ├── keyboard/ │ │ │ │ ├── keyboarddbusproxy.cpp │ │ │ │ ├── keyboarddbusproxy.h │ │ │ │ ├── keyboardmodel.cpp │ │ │ │ ├── keyboardmodel.h │ │ │ │ ├── keyboardwork.cpp │ │ │ │ ├── keyboardwork.h │ │ │ │ ├── metadata.cpp │ │ │ │ ├── metadata.h │ │ │ │ ├── qrc/ │ │ │ │ │ └── keyboard.qrc │ │ │ │ ├── shortcutmodel.cpp │ │ │ │ └── shortcutmodel.h │ │ │ ├── langregionmodel.cpp │ │ │ ├── langregionmodel.h │ │ │ ├── languagelistmodel.cpp │ │ │ ├── languagelistmodel.h │ │ │ ├── qrc/ │ │ │ │ ├── datetime.qrc │ │ │ │ └── images/ │ │ │ │ └── popup_menu.css │ │ │ ├── regionproxy.cpp │ │ │ ├── regionproxy.h │ │ │ ├── timezoneMap/ │ │ │ │ ├── timezone.cpp │ │ │ │ ├── timezone.h │ │ │ │ ├── timezone_map_util.cpp │ │ │ │ └── timezone_map_util.h │ │ │ ├── zoneinfo.cpp │ │ │ ├── zoneinfo.h │ │ │ ├── zoneinfomodel.cpp │ │ │ └── zoneinfomodel.h │ │ └── qml/ │ │ ├── ComboLabel.qml │ │ ├── DateTimeSettingDialog.qml │ │ ├── Datetime.qml │ │ ├── DatetimeMain.qml │ │ ├── LangAndFormat.qml │ │ ├── LangsChooserDialog.qml │ │ ├── RegionFormatDialog.qml │ │ ├── RegionsChooserWindow.qml │ │ ├── SearchableListViewPopup.qml │ │ ├── SpinboxEx.qml │ │ ├── TimeAndDate.qml │ │ ├── TimezoneClock.qml │ │ ├── TimezoneDialog.qml │ │ ├── dcc-delete.dci │ │ ├── dcc_lang_format.dci │ │ ├── dcc_time_date.dci │ │ ├── inactive.dci │ │ └── metadata.json │ ├── plugin-deepinid/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── appinfolistmodel.cpp │ │ │ ├── appinfolistmodel.h │ │ │ ├── cryptor.cpp │ │ │ ├── cryptor.h │ │ │ ├── deepiniddbusproxy.cpp │ │ │ ├── deepiniddbusproxy.h │ │ │ ├── deepinidinterface.cpp │ │ │ ├── deepinidinterface.h │ │ │ ├── deepinidmodel.cpp │ │ │ ├── deepinidmodel.h │ │ │ ├── deepinidworker.cpp │ │ │ ├── deepinidworker.h │ │ │ ├── downloadurl.cpp │ │ │ ├── downloadurl.h │ │ │ ├── hardwareinfo.cpp │ │ │ ├── hardwareinfo.h │ │ │ ├── qrc/ │ │ │ │ ├── deepinid.qrc │ │ │ │ └── icons/ │ │ │ │ └── dcc_cloud_logo.dci │ │ │ ├── syncdbusproxy.cpp │ │ │ ├── syncdbusproxy.h │ │ │ ├── syncinfolistmodel.cpp │ │ │ ├── syncinfolistmodel.h │ │ │ ├── utclouddbusproxy.cpp │ │ │ ├── utclouddbusproxy.h │ │ │ ├── utils.cpp │ │ │ └── utils.h │ │ └── qml/ │ │ ├── ConFirmDialog.qml │ │ ├── ConfirmManager.qml │ │ ├── DeepinIDAccountSecurity.qml │ │ ├── DeepinIDLogin.qml │ │ ├── DeepinIDSyncService.qml │ │ ├── DeepinIDUserInfo.qml │ │ ├── Deepinid.qml │ │ ├── DeepinidMain.qml │ │ ├── RegisterDialog.qml │ │ ├── VerifyDialog.qml │ │ ├── dcc-edit.dci │ │ ├── dcc-systemcset.dci │ │ └── deepinid.dci │ ├── plugin-defaultapp/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── category.cpp │ │ │ ├── category.h │ │ │ ├── categorymodel.cpp │ │ │ ├── categorymodel.h │ │ │ ├── defappmodel.cpp │ │ │ ├── defappmodel.h │ │ │ ├── defappworker.cpp │ │ │ ├── defappworker.h │ │ │ ├── defappworkerold.cpp │ │ │ ├── defappworkerold.h │ │ │ ├── mimedbusproxy.cpp │ │ │ ├── mimedbusproxy.h │ │ │ ├── mimedbusproxyold.cpp │ │ │ └── mimedbusproxyold.h │ │ └── qml/ │ │ ├── Defaultapp.qml │ │ ├── DefaultappMain.qml │ │ ├── DetailItem.qml │ │ ├── dcc-delete.dci │ │ ├── defapp_mail.dci │ │ ├── defapp_music.dci │ │ ├── defapp_network.dci │ │ ├── defapp_picture.dci │ │ ├── defapp_terminal.dci │ │ ├── defapp_text.dci │ │ ├── defapp_video.dci │ │ ├── default_program.dci │ │ └── metadata.json │ ├── plugin-device/ │ │ ├── CMakeLists.txt │ │ └── qml/ │ │ ├── Device.qml │ │ ├── hardware.dci │ │ └── metadata.json │ ├── plugin-display/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── dccscreen.cpp │ │ │ ├── dccscreen.h │ │ │ ├── displaymodule.cpp │ │ │ ├── displaymodule.h │ │ │ ├── private/ │ │ │ │ ├── concatscreen.cpp │ │ │ │ ├── concatscreen.h │ │ │ │ ├── dccscreen_p.h │ │ │ │ ├── displaydbusproxy.cpp │ │ │ │ ├── displaydbusproxy.h │ │ │ │ ├── displaymodel.cpp │ │ │ │ ├── displaymodel.h │ │ │ │ ├── displaymodule_p.h │ │ │ │ ├── displayworker.cpp │ │ │ │ ├── displayworker.h │ │ │ │ ├── monitor.cpp │ │ │ │ ├── monitor.h │ │ │ │ ├── monitordbusproxy.cpp │ │ │ │ ├── monitordbusproxy.h │ │ │ │ └── types/ │ │ │ │ ├── brightnessmap.cpp │ │ │ │ ├── brightnessmap.h │ │ │ │ ├── reflectlist.cpp │ │ │ │ ├── reflectlist.h │ │ │ │ ├── resolution.cpp │ │ │ │ ├── resolution.h │ │ │ │ ├── resolutionlist.cpp │ │ │ │ ├── resolutionlist.h │ │ │ │ ├── rotationlist.cpp │ │ │ │ ├── rotationlist.h │ │ │ │ ├── screenrect.cpp │ │ │ │ ├── screenrect.h │ │ │ │ ├── touchscreeninfolist.cpp │ │ │ │ ├── touchscreeninfolist.h │ │ │ │ ├── touchscreeninfolist_v2.cpp │ │ │ │ ├── touchscreeninfolist_v2.h │ │ │ │ ├── touchscreenmap.cpp │ │ │ │ └── touchscreenmap.h │ │ │ └── qrc/ │ │ │ ├── built-in-icons/ │ │ │ │ ├── dcc_display_bottom.dci │ │ │ │ ├── dcc_display_left.dci │ │ │ │ ├── dcc_display_right.dci │ │ │ │ └── dcc_display_top.dci │ │ │ └── display.qrc │ │ ├── qml/ │ │ │ ├── Display.qml │ │ │ ├── DisplayCenter.dci │ │ │ ├── DisplayDefault.dci │ │ │ ├── DisplayFit.dci │ │ │ ├── DisplayMain.qml │ │ │ ├── DisplayStretch.dci │ │ │ ├── ScreenIndicator.qml │ │ │ ├── ScreenItem.qml │ │ │ ├── ScreenRecognize.qml │ │ │ ├── ScreenTab.qml │ │ │ ├── TimeoutDialog.qml │ │ │ ├── cool_colour.dci │ │ │ ├── dcc_brightnesshigh.dci │ │ │ ├── dcc_brightnesslow.dci │ │ │ ├── display.dci │ │ │ ├── home_screen.dci │ │ │ ├── metadata.json │ │ │ └── warm_colour.dci │ │ └── wayland/ │ │ └── libwayqt/ │ │ ├── Output.cpp │ │ ├── Output.h │ │ ├── OutputManager.cpp │ │ ├── OutputManager.h │ │ ├── Registry.cpp │ │ ├── Registry.h │ │ ├── TreeLandOutputManager.cpp │ │ ├── TreeLandOutputManager.h │ │ ├── WayQtUtils.cpp │ │ └── WayQtUtils.h │ ├── plugin-dock/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── dccdockexport.cpp │ │ │ ├── dccdockexport.h │ │ │ ├── dockdbusproxy.cpp │ │ │ ├── dockdbusproxy.h │ │ │ ├── dockpluginmodel.cpp │ │ │ ├── dockpluginmodel.h │ │ │ ├── dockpluginsortproxymodel.cpp │ │ │ └── dockpluginsortproxymodel.h │ │ ├── qml/ │ │ │ ├── CustomComBobox.qml │ │ │ ├── Dock.qml │ │ │ ├── DockMain.qml │ │ │ ├── PluginArea.qml │ │ │ └── metadata.json │ │ └── res/ │ │ ├── dcc-dock-plugin.qrc │ │ └── icons/ │ │ ├── dock.dci │ │ └── plugin.dci │ ├── plugin-keyboard/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── keyboardcontroller.cpp │ │ │ ├── keyboardcontroller.h │ │ │ ├── keyboarddbusproxy.cpp │ │ │ ├── keyboarddbusproxy.h │ │ │ ├── keyboardmodel.cpp │ │ │ ├── keyboardmodel.h │ │ │ ├── keyboardwork.cpp │ │ │ ├── keyboardwork.h │ │ │ ├── layoutsmodel.cpp │ │ │ ├── layoutsmodel.h │ │ │ ├── metadata.cpp │ │ │ ├── metadata.h │ │ │ ├── qrc/ │ │ │ │ └── keyboard.qrc │ │ │ ├── shortcutmodel.cpp │ │ │ └── shortcutmodel.h │ │ └── qml/ │ │ ├── Common.qml │ │ ├── KeySequenceDisplay.qml │ │ ├── Keyboard.qml │ │ ├── KeyboardMain.qml │ │ ├── ShortcutSettingDialog.qml │ │ ├── Shortcuts.qml │ │ ├── device_keyboard.dci │ │ ├── keyboard_add_file.dci │ │ ├── keyboard_delete.dci │ │ ├── keyboard_edit.dci │ │ ├── keyboard_fn.dci │ │ ├── keyboard_input.dci │ │ ├── keyboard_layout.dci │ │ └── metadata.json │ ├── plugin-mouse/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── gesturedata.cpp │ │ │ ├── gesturedata.h │ │ │ ├── gesturemodel.cpp │ │ │ ├── gesturemodel.h │ │ │ ├── mousedbusproxy.cpp │ │ │ ├── mousedbusproxy.h │ │ │ ├── mousemodel.cpp │ │ │ ├── mousemodel.h │ │ │ ├── mouseworker.cpp │ │ │ ├── mouseworker.h │ │ │ ├── qrc/ │ │ │ │ └── mouse.qrc │ │ │ ├── treelandworker.cpp │ │ │ └── treelandworker.h │ │ └── qml/ │ │ ├── ClickTest.qml │ │ ├── Common.qml │ │ ├── GestureGroup.qml │ │ ├── Mouse.qml │ │ ├── MouseMain.qml │ │ ├── MousePage.qml │ │ ├── Touchpad.qml │ │ ├── device_mouse.dci │ │ ├── metadata.json │ │ ├── mouse_trackpad_mouse.dci │ │ ├── mouse_trackpad_trackpad.dci │ │ ├── tip_warning.dci │ │ ├── trackpad_gesture_3_click.dci │ │ ├── trackpad_gesture_3_down.dci │ │ ├── trackpad_gesture_3_left.dci │ │ ├── trackpad_gesture_3_right.dci │ │ ├── trackpad_gesture_3_up.dci │ │ ├── trackpad_gesture_4_click.dci │ │ ├── trackpad_gesture_4_down.dci │ │ ├── trackpad_gesture_4_left.dci │ │ ├── trackpad_gesture_4_right.dci │ │ └── trackpad_gesture_4_up.dci │ ├── plugin-notification/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── appmgr.cpp │ │ │ ├── appmgr.h │ │ │ ├── appslistmodel.cpp │ │ │ ├── appslistmodel.h │ │ │ ├── appssourcemodel.cpp │ │ │ ├── appssourcemodel.h │ │ │ ├── model/ │ │ │ │ ├── appitemmodel.cpp │ │ │ │ ├── appitemmodel.h │ │ │ │ ├── sysitemmodel.cpp │ │ │ │ └── sysitemmodel.h │ │ │ ├── notificationmodel.cpp │ │ │ ├── notificationmodel.h │ │ │ ├── notificationsetting.cpp │ │ │ ├── notificationsetting.h │ │ │ ├── qrc/ │ │ │ │ └── notification.qrc │ │ │ └── xml/ │ │ │ ├── org.desktopspec.ApplicationManager1.Application.xml │ │ │ └── org.desktopspec.ObjectManager1.xml │ │ ├── qml/ │ │ │ ├── ImageCheckBox.qml │ │ │ ├── Notification.qml │ │ │ ├── NotificationMain.qml │ │ │ ├── TimeRange.qml │ │ │ ├── dcc_notification.dci │ │ │ └── metadata.json │ │ └── types/ │ │ └── am.h │ ├── plugin-personalization/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── imagehelper.cpp │ │ │ ├── imagehelper.h │ │ │ ├── keyfile.cpp │ │ │ ├── keyfile.h │ │ │ ├── model/ │ │ │ │ ├── fontmodel.cpp │ │ │ │ ├── fontmodel.h │ │ │ │ ├── fontsizemodel.cpp │ │ │ │ ├── fontsizemodel.h │ │ │ │ ├── thememodel.cpp │ │ │ │ ├── thememodel.h │ │ │ │ ├── wallpapermodel.cpp │ │ │ │ └── wallpapermodel.h │ │ │ ├── personalizationdbusproxy.cpp │ │ │ ├── personalizationdbusproxy.h │ │ │ ├── personalizationexport.hpp │ │ │ ├── personalizationinterface.cpp │ │ │ ├── personalizationinterface.h │ │ │ ├── personalizationmodel.cpp │ │ │ ├── personalizationmodel.h │ │ │ ├── personalizationworker.cpp │ │ │ ├── personalizationworker.h │ │ │ ├── qrc/ │ │ │ │ ├── icons/ │ │ │ │ │ ├── appearance.dci │ │ │ │ │ ├── arrow_left.dci │ │ │ │ │ ├── arrow_right.dci │ │ │ │ │ ├── balance.dci │ │ │ │ │ ├── best_vision.dci │ │ │ │ │ ├── close.dci │ │ │ │ │ ├── color_extractor.dci │ │ │ │ │ ├── dcc_wallpaper.dci │ │ │ │ │ ├── font_size.dci │ │ │ │ │ ├── icon_cursor.dci │ │ │ │ │ ├── optimum_performance.dci │ │ │ │ │ ├── screensaver.dci │ │ │ │ │ ├── taskbar.dci │ │ │ │ │ ├── theme_icon.dci │ │ │ │ │ ├── topic_cursor.dci │ │ │ │ │ ├── wallpaper_add.dci │ │ │ │ │ ├── wallpaper_add_bg.dci │ │ │ │ │ ├── wallpaper_addcolor.dci │ │ │ │ │ └── window_effect.dci │ │ │ │ └── personalization.qrc │ │ │ ├── screensaverprovider.cpp │ │ │ ├── screensaverprovider.h │ │ │ ├── treelandworker.cpp │ │ │ ├── treelandworker.h │ │ │ ├── utils.hpp │ │ │ ├── wallpaperprovider.cpp │ │ │ ├── wallpaperprovider.h │ │ │ ├── x11worker.cpp │ │ │ └── x11worker.h │ │ └── qml/ │ │ ├── ColorAndIcons.qml │ │ ├── CustomComboBox.qml │ │ ├── DccColorDialog.qml │ │ ├── DccSaturationLightnessPicker.qml │ │ ├── FontCombobox.qml │ │ ├── FontSizePage.qml │ │ ├── IconThemeGridView.qml │ │ ├── InterfaceEffectListview.qml │ │ ├── Personalization.qml │ │ ├── PersonalizationMain.qml │ │ ├── ScreenIndicator.qml │ │ ├── ScreenSaverPage.qml │ │ ├── ScreenTab.qml │ │ ├── ThemeSelectView.qml │ │ ├── WallpaperPage.qml │ │ ├── WallpaperSelectView.qml │ │ ├── WindowEffectPage.qml │ │ ├── metadata.json │ │ └── personalization.dci │ ├── plugin-power/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── powerdbusproxy.cpp │ │ │ ├── powerdbusproxy.h │ │ │ ├── powerinterface.cpp │ │ │ ├── powerinterface.h │ │ │ ├── powermodel.cpp │ │ │ ├── powermodel.h │ │ │ ├── poweroperatormodel.cpp │ │ │ ├── poweroperatormodel.h │ │ │ ├── powerworker.cpp │ │ │ ├── powerworker.h │ │ │ ├── qrc/ │ │ │ │ ├── icons/ │ │ │ │ │ ├── balance_performance.dci │ │ │ │ │ ├── balanced.dci │ │ │ │ │ ├── general.dci │ │ │ │ │ ├── high_performance.dci │ │ │ │ │ ├── on_battery.dci │ │ │ │ │ ├── plugged_in.dci │ │ │ │ │ └── power_performance.dci │ │ │ │ └── power.qrc │ │ │ └── utils.h │ │ └── qml/ │ │ ├── BatteryPage.qml │ │ ├── CustomComboBox.qml │ │ ├── CustomTipsSlider.qml │ │ ├── GeneralPage.qml │ │ ├── Power.qml │ │ ├── PowerMain.qml │ │ ├── PowerPage.qml │ │ ├── PowerPlansListview.qml │ │ ├── ScheduledShutdownDialog.qml │ │ ├── metadata.json │ │ └── power.dci │ ├── plugin-privacy/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── applicationitem.cpp │ │ │ ├── applicationitem.h │ │ │ ├── dde-apps.h │ │ │ ├── privacysecuritydataproxy.cpp │ │ │ ├── privacysecuritydataproxy.h │ │ │ ├── privacysecurityexport.cpp │ │ │ ├── privacysecurityexport.h │ │ │ ├── privacysecuritymodel.cpp │ │ │ ├── privacysecuritymodel.h │ │ │ ├── privacysecurityworker.cpp │ │ │ ├── privacysecurityworker.h │ │ │ └── qrc/ │ │ │ ├── icons/ │ │ │ │ ├── arrow-down.dci │ │ │ │ ├── security_camera.dci │ │ │ │ └── security_folder.dci │ │ │ └── privacy.qrc │ │ └── qml/ │ │ ├── Camera.qml │ │ ├── FileAndFolder.qml │ │ ├── Privacy.qml │ │ ├── PrivacyMain.qml │ │ ├── metadata.json │ │ └── privacy.dci │ ├── plugin-sound/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── audioport.h │ │ │ ├── audioservermodel.cpp │ │ │ ├── audioservermodel.h │ │ │ ├── port.cpp │ │ │ ├── port.h │ │ │ ├── qrc/ │ │ │ │ ├── icons/ │ │ │ │ │ ├── big_volume.dci │ │ │ │ │ ├── dcc_volume1.dci │ │ │ │ │ ├── dcc_volume2.dci │ │ │ │ │ ├── dcc_volume3.dci │ │ │ │ │ ├── play_back.dci │ │ │ │ │ ├── small_volume.dci │ │ │ │ │ └── sound_off.dci │ │ │ │ └── sound.qrc │ │ │ ├── soundDeviceData.cpp │ │ │ ├── soundDeviceData.h │ │ │ ├── soundDeviceModel.cpp │ │ │ ├── soundDeviceModel.h │ │ │ ├── soundEffectsData.cpp │ │ │ ├── soundEffectsData.h │ │ │ ├── soundInteraction.cpp │ │ │ ├── soundInteraction.h │ │ │ ├── sounddbusproxy.cpp │ │ │ ├── sounddbusproxy.h │ │ │ ├── soundeffectsmodel.cpp │ │ │ ├── soundeffectsmodel.h │ │ │ ├── soundmodel.cpp │ │ │ ├── soundmodel.h │ │ │ ├── soundworker.cpp │ │ │ └── soundworker.h │ │ └── qml/ │ │ ├── DeviceListView.qml │ │ ├── MicrophonePage.qml │ │ ├── Sound.qml │ │ ├── SoundDevicemanagesPage.qml │ │ ├── SoundEffectsPage.qml │ │ ├── SoundMain.qml │ │ ├── SpeakerPage.qml │ │ ├── audio.dci │ │ ├── audio_framework.dci │ │ ├── big_volume.dci │ │ ├── equipment_management.dci │ │ ├── metadata.json │ │ ├── play_back.dci │ │ ├── small_volume.dci │ │ ├── sound_off.dci │ │ └── system_sound.dci │ ├── plugin-system/ │ │ ├── CMakeLists.txt │ │ └── qml/ │ │ ├── System.qml │ │ ├── commoninfo.dci │ │ └── metadata.json │ ├── plugin-systeminfo/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── qrc/ │ │ │ │ ├── gpl/ │ │ │ │ │ ├── gpl-3.0-en_US-body.txt │ │ │ │ │ ├── gpl-3.0-en_US-title.txt │ │ │ │ │ ├── gpl-3.0-zh_CN-body.txt │ │ │ │ │ ├── gpl-3.0-zh_CN-title.txt │ │ │ │ │ ├── gpl-3.0-zh_TW-body.txt │ │ │ │ │ └── gpl-3.0-zh_TW-title.txt │ │ │ │ ├── icons/ │ │ │ │ │ └── edit.dci │ │ │ │ ├── license/ │ │ │ │ │ ├── deepin-end-user-license-agreement_community_en_US.txt │ │ │ │ │ ├── deepin-end-user-license-agreement_community_zh_CN.txt │ │ │ │ │ ├── deepin-end-user-license-agreement_developer_community_en_US.txt │ │ │ │ │ ├── deepin-end-user-license-agreement_developer_community_zh_CN.txt │ │ │ │ │ ├── deepin-end-user-license-agreement_developer_community_zh_HK.txt │ │ │ │ │ ├── deepin-end-user-license-agreement_developer_community_zh_TW.txt │ │ │ │ │ ├── deepin-end-user-license-agreement_en_US.txt │ │ │ │ │ └── deepin-end-user-license-agreement_zh_CN.txt │ │ │ │ └── systeminfo.qrc │ │ │ ├── systeminfodbusproxy.cpp │ │ │ ├── systeminfodbusproxy.h │ │ │ ├── systeminfointeraction.cpp │ │ │ ├── systeminfointeraction.h │ │ │ ├── systeminfomodel.cpp │ │ │ ├── systeminfomodel.h │ │ │ ├── systeminfowork.cpp │ │ │ ├── systeminfowork.h │ │ │ └── utils.h │ │ └── qml/ │ │ ├── NativeInfoPage.qml │ │ ├── PrivacyPolicyPage.qml │ │ ├── SystemInfo.qml │ │ ├── SystemInfoMain.qml │ │ ├── UserExperienceProgramPage.qml │ │ ├── UserLicensePage.qml │ │ ├── VersionProtocolPage.qml │ │ ├── about.dci │ │ ├── dcc_systemInfo_edit.dci │ │ ├── metadata.json │ │ ├── privacy_policy.dci │ │ ├── software_declaration.dci │ │ ├── user_experience_plan.dci │ │ └── user_license_agreement.dci │ ├── plugin-touchscreen/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── monitordbusproxy.cpp │ │ │ ├── monitordbusproxy.h │ │ │ ├── qrc/ │ │ │ │ └── touchscreen.qrc │ │ │ ├── touchscreenmatchmodel.cpp │ │ │ ├── touchscreenmatchmodel.h │ │ │ ├── touchscreenmodel.cpp │ │ │ ├── touchscreenmodel.h │ │ │ ├── touchscreenmodel_p.h │ │ │ ├── touchscreenproxy.cpp │ │ │ ├── touchscreenproxy.h │ │ │ └── types/ │ │ │ ├── touchscreeninfolist_v2.cpp │ │ │ ├── touchscreeninfolist_v2.h │ │ │ ├── touchscreenmap.cpp │ │ │ └── touchscreenmap.h │ │ └── qml/ │ │ ├── TouchScreen.qml │ │ ├── Touchscreen.qml │ │ ├── TouchscreenMain.qml │ │ ├── device_touchscreen.dci │ │ └── metadata.json │ ├── plugin-wacom/ │ │ ├── CMakeLists.txt │ │ ├── operation/ │ │ │ ├── qrc/ │ │ │ │ └── wacom.qrc │ │ │ ├── wacomdbusproxy.cpp │ │ │ ├── wacomdbusproxy.h │ │ │ ├── wacommodel.cpp │ │ │ ├── wacommodel.h │ │ │ └── wacommodelprivate_p.h │ │ └── qml/ │ │ ├── Wacom.qml │ │ ├── WacomMain.qml │ │ └── metadata.json │ └── shared-utils/ │ ├── CMakeLists.txt │ ├── dcclocale.cpp │ └── dcclocale.h ├── tests/ │ └── CMakeLists.txt ├── toolGenerate/ │ ├── dconfig2cpp/ │ │ ├── org_deepin_dde_control-center.hpp │ │ ├── org_deepin_dde_control-center_accounts.hpp │ │ ├── org_deepin_dde_control-center_datetime.hpp │ │ ├── org_deepin_dde_control-center_display.hpp │ │ ├── org_deepin_dde_control-center_personalization.hpp │ │ ├── org_deepin_dde_control-center_power.hpp │ │ ├── org_deepin_dde_control-center_update.hpp │ │ └── org_deepin_region-format.hpp │ └── qdbusxml2cpp/ │ ├── org.deepin.dde.controlcenter.metainfoAdaptor.cpp │ ├── org.deepin.dde.controlcenter.metainfoAdaptor.h │ ├── org.desktopspec.ApplicationManager1.ApplicationAdaptor.cpp │ ├── org.desktopspec.ApplicationManager1.ApplicationAdaptor.h │ ├── org.desktopspec.ObjectManager1Adaptor.cpp │ ├── org.desktopspec.ObjectManager1Adaptor.h │ ├── treeland-output-managementAdaptor.cpp │ ├── treeland-output-managementAdaptor.h │ ├── wlr-output-management-unstable-v1Adaptor.cpp │ └── wlr-output-management-unstable-v1Adaptor.h └── translations/ ├── dde-control-center_ady.ts ├── dde-control-center_af.ts ├── dde-control-center_af_ZA.ts ├── dde-control-center_ak.ts ├── dde-control-center_am.ts ├── dde-control-center_am_ET.ts ├── dde-control-center_ar.ts ├── dde-control-center_ar_EG.ts ├── dde-control-center_ast.ts ├── dde-control-center_az.ts ├── dde-control-center_bg.ts ├── dde-control-center_bn.ts ├── dde-control-center_bo.ts ├── dde-control-center_bqi.ts ├── dde-control-center_br.ts ├── dde-control-center_ca.ts ├── dde-control-center_cgg.ts ├── dde-control-center_cs.ts ├── dde-control-center_da.ts ├── dde-control-center_de.ts ├── dde-control-center_el.ts ├── dde-control-center_el_GR.ts ├── dde-control-center_en.ts ├── dde-control-center_en_AU.ts ├── dde-control-center_en_GB.ts ├── dde-control-center_en_NO.ts ├── dde-control-center_en_US.ts ├── dde-control-center_eo.ts ├── dde-control-center_es.ts ├── dde-control-center_et.ts ├── dde-control-center_eu.ts ├── dde-control-center_fa.ts ├── dde-control-center_fi.ts ├── dde-control-center_fil.ts ├── dde-control-center_fr.ts ├── dde-control-center_gl.ts ├── dde-control-center_gl_ES.ts ├── dde-control-center_he.ts ├── dde-control-center_hi_IN.ts ├── dde-control-center_hr.ts ├── dde-control-center_hu.ts ├── dde-control-center_hy.ts ├── dde-control-center_id.ts ├── dde-control-center_id_ID.ts ├── dde-control-center_it.ts ├── dde-control-center_ja.ts ├── dde-control-center_ka.ts ├── dde-control-center_kab.ts ├── dde-control-center_kk.ts ├── dde-control-center_km_KH.ts ├── dde-control-center_kn_IN.ts ├── dde-control-center_ko.ts ├── dde-control-center_krl.ts ├── dde-control-center_ku.ts ├── dde-control-center_ku_IQ.ts ├── dde-control-center_ky.ts ├── dde-control-center_ky@Arab.ts ├── dde-control-center_la.ts ├── dde-control-center_lo.ts ├── dde-control-center_lt.ts ├── dde-control-center_lv.ts ├── dde-control-center_ml.ts ├── dde-control-center_mn.ts ├── dde-control-center_mr.ts ├── dde-control-center_ms.ts ├── dde-control-center_nb.ts ├── dde-control-center_nb_NO.ts ├── dde-control-center_ne.ts ├── dde-control-center_nl.ts ├── dde-control-center_pa.ts ├── dde-control-center_pam.ts ├── dde-control-center_pl.ts ├── dde-control-center_ps.ts ├── dde-control-center_pt.ts ├── dde-control-center_pt_BR.ts ├── dde-control-center_qu.ts ├── dde-control-center_ro.ts ├── dde-control-center_ru.ts ├── dde-control-center_ru_UA.ts ├── dde-control-center_sc.ts ├── dde-control-center_si.ts ├── dde-control-center_sk.ts ├── dde-control-center_sl.ts ├── dde-control-center_sq.ts ├── dde-control-center_sr.ts ├── dde-control-center_sv.ts ├── dde-control-center_sv_SE.ts ├── dde-control-center_sw.ts ├── dde-control-center_ta.ts ├── dde-control-center_te.ts ├── dde-control-center_th.ts ├── dde-control-center_tr.ts ├── dde-control-center_tzm.ts ├── dde-control-center_ug.ts ├── dde-control-center_uk.ts ├── dde-control-center_ur.ts ├── dde-control-center_uz.ts ├── dde-control-center_vi.ts ├── dde-control-center_zh_CN.ts ├── dde-control-center_zh_HK.ts ├── dde-control-center_zh_TW.ts └── desktop/ ├── desktop.ts ├── desktop_ady.ts ├── desktop_af.ts ├── desktop_af_ZA.ts ├── desktop_ak.ts ├── desktop_am.ts ├── desktop_am_ET.ts ├── desktop_ar.ts ├── desktop_ar_EG.ts ├── desktop_ast.ts ├── desktop_az.ts ├── desktop_bg.ts ├── desktop_bn.ts ├── desktop_bo.ts ├── desktop_bqi.ts ├── desktop_br.ts ├── desktop_ca.ts ├── desktop_cgg.ts ├── desktop_cs.ts ├── desktop_da.ts ├── desktop_de.ts ├── desktop_el.ts ├── desktop_el_GR.ts ├── desktop_en.ts ├── desktop_en_AU.ts ├── desktop_en_GB.ts ├── desktop_en_NO.ts ├── desktop_en_US.ts ├── desktop_eo.ts ├── desktop_es.ts ├── desktop_et.ts ├── desktop_eu.ts ├── desktop_fa.ts ├── desktop_fi.ts ├── desktop_fil.ts ├── desktop_fr.ts ├── desktop_gl.ts ├── desktop_gl_ES.ts ├── desktop_he.ts ├── desktop_hi_IN.ts ├── desktop_hr.ts ├── desktop_hu.ts ├── desktop_hy.ts ├── desktop_id.ts ├── desktop_id_ID.ts ├── desktop_it.ts ├── desktop_ja.ts ├── desktop_ka.ts ├── desktop_kab.ts ├── desktop_kk.ts ├── desktop_km_KH.ts ├── desktop_kn_IN.ts ├── desktop_ko.ts ├── desktop_ku.ts ├── desktop_ku_IQ.ts ├── desktop_ky.ts ├── desktop_ky@Arab.ts ├── desktop_la.ts ├── desktop_lo.ts ├── desktop_lt.ts ├── desktop_lv.ts ├── desktop_ml.ts ├── desktop_mn.ts ├── desktop_mr.ts ├── desktop_ms.ts ├── desktop_nb.ts ├── desktop_ne.ts ├── desktop_nl.ts ├── desktop_pa.ts ├── desktop_pam.ts ├── desktop_pl.ts ├── desktop_ps.ts ├── desktop_pt.ts ├── desktop_pt_BR.ts ├── desktop_ro.ts ├── desktop_ru.ts ├── desktop_ru_UA.ts ├── desktop_sc.ts ├── desktop_si.ts ├── desktop_sk.ts ├── desktop_sl.ts ├── desktop_sq.ts ├── desktop_sr.ts ├── desktop_sv.ts ├── desktop_sv_SE.ts ├── desktop_sw.ts ├── desktop_ta.ts ├── desktop_te.ts ├── desktop_th.ts ├── desktop_tr.ts ├── desktop_tzm.ts ├── desktop_ug.ts ├── desktop_uk.ts ├── desktop_ur.ts ├── desktop_uz.ts ├── desktop_vi.ts ├── desktop_zh_CN.ts ├── desktop_zh_HK.ts └── desktop_zh_TW.ts ================================================ FILE CONTENTS ================================================ ================================================ FILE: .clang-format ================================================ # This is the clang-format style used by qt releated deepin projects. # # This file is modified from https://github.com/qt/qt5/blob/5b22f8ec2e4fbb58e362b709ee82f2dbd8afdfd3/_clang-format # based on the rules from https://github.com/linuxdeepin/deepin-styleguide, # https://wiki.qt.io/Qt_Coding_Style and https://wiki.qt.io/Coding_Conventions # # This is for clang-format >= 14.0.0 --- # Webkit style was loosely based on the Qt style BasedOnStyle: WebKit # deepin project might not use same standard. Standard: Auto # Column width is limited to 100 in accordance with Qt Coding Style. # https://wiki.qt.io/Qt_Coding_Style # Note that this may be changed at some point in the future. ColumnLimit: 100 # How much weight do extra characters after the line length limit have. # PenaltyExcessCharacter: 4 # Disable reflow of some specific comments # qdoc comments: indentation rules are different. # Translation comments and SPDX license identifiers are also excluded. CommentPragmas: "^!|^:|^ SPDX-License-Identifier:" PointerAlignment: Right # We use template< without space. SpaceAfterTemplateKeyword: false # We want to break before the operators, but not before a '='. BreakBeforeBinaryOperators: NonAssignment # Braces are usually attached, but not after functions or class declarations. BreakBeforeBraces: Custom BraceWrapping: AfterClass: true AfterControlStatement: false AfterEnum: false AfterFunction: true AfterNamespace: false AfterObjCDeclaration: false AfterStruct: true AfterUnion: false BeforeCatch: false BeforeElse: false IndentBraces: false # Indent initializers by 4 spaces ConstructorInitializerIndentWidth: 4 # Indent width for line continuations. ContinuationIndentWidth: 8 # No indentation for namespaces. NamespaceIndentation: None # Allow indentation for preprocessing directives (if/ifdef/endif). https://reviews.llvm.org/rL312125 IndentPPDirectives: AfterHash # We only indent with 2 spaces for preprocessor directives PPIndentWidth: 2 # Horizontally align arguments after an open bracket. # The coding style does not specify the following, but this is what gives # results closest to the existing code. AlignAfterOpenBracket: true AlwaysBreakTemplateDeclarations: true # Ideally we should also allow less short function in a single line, but # clang-format does not handle that. AllowShortFunctionsOnASingleLine: Inline # As clang-format 13 can regroup includes we enable this feature. # basically according to https://wiki.qt.io/Coding_Conventions#Including_headers # and https://github.com/linuxdeepin/deepin-styleguide IncludeBlocks: Regroup IncludeCategories: # gtest/gmock's h files - Regex: '^$' Priority: 6 CaseSensitive: true # C system headers. - Regex: '^<(aio|arpa/inet|assert|complex|cpio|ctype|curses|dirent|dlfcn|errno|fcntl|fenv|float|fmtmsg|fnmatch|ftw|glob|grp|iconv|inttypes|iso646|langinfo|libgen|limits|locale|math|monetary|mqueue|ndbm|netdb|net/if|netinet/in|netinet/tcp|nl_types|poll|pthread|pwd|regex|sched|search|semaphore|setjmp|signal|spawn|stdalign|stdarg|stdatomic|stdbool|stddef|stdint|stdio|stdlib|stdnoreturn|string|strings|stropts|sys/ipc|syslog|sys/mman|sys/msg|sys/resource|sys/select|sys/sem|sys/shm|sys/socket|sys/stat|sys/statvfs|sys/time|sys/times|sys/types|sys/uio|sys/un|sys/utsname|sys/wait|tar|term|termios|tgmath|threads|time|trace|uchar|ulimit|uncntrl|unistd|utime|utmpx|wchar|wctype|wordexp)\.h>$' Priority: 7 CaseSensitive: true # other libraries' h files. - Regex: '^<' Priority: 3 IncludeIsMainRegex: '((T|t)est)?$' SortIncludes: true # macros for which the opening brace stays attached. ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH, forever, Q_FOREVER, QBENCHMARK, QBENCHMARK_ONCE ] # Break constructor initializers before the colon and after the commas. BreakConstructorInitializers: BeforeComma # Add "// namespace " comments on closing brace for a namespace # Ignored for namespaces that qualify as a short namespace, # see 'ShortNamespaceLines' FixNamespaceComments: true # Definition of how short a short namespace is, default 1 ShortNamespaceLines: 1 # When escaping newlines in a macro attach the '\' as far left as possible, e.g. ##define a \ # something; \ # other; \ # thelastlineislong; AlignEscapedNewlines: Left # Avoids the addition of a space between an identifier and the # initializer list in list-initialization. SpaceBeforeCpp11BracedList: false AllowAllArgumentsOnNextLine: false AllowShortLambdasOnASingleLine: Empty AlignTrailingComments: true BinPackArguments: false BinPackParameters: false # EmptyLineAfterAccessModifier: Never PackConstructorInitializers: Never PenaltyReturnTypeOnItsOwnLine: 100 SeparateDefinitionBlocks: Always WhitespaceSensitiveMacros: - Q_PROPERTY - Q_INTERFACES ================================================ FILE: .editorconfig ================================================ root = true [*] charset = utf-8 end_of_line = lf [CMakeLists.txt] indent_style = space indent_size = 4 [*.{cpp,h,ts}] indent_style = space indent_size = 4 ================================================ FILE: .github/copilot-instructions.md ================================================ # DDE Control Center - AI Coding Agent Instructions ## Project Overview DDE Control Center (深度控制中心) v6.0+ is a Qt6/QML-based desktop control panel for Deepin Desktop Environment. It uses a **plugin-based architecture** where the core framework provides infrastructure and all features are implemented as plugins. ## Critical Architecture Concepts ### Plugin System (V25 Architecture) - **Two-phase loading**: Plugins load in stages to optimize startup 1. `{plugin}.qml` - Metadata/menu entry (fast, synchronous) 2. `{plugin}.so` - C++ backend (threaded, async) 3. `{plugin}Main.qml` - Full UI (loaded on-demand) - **Plugin location**: `${CMAKE_INSTALL_LIBDIR}/dde-control-center/plugins_v1.0/{plugin-name}/` - **Factory pattern**: Use `DCC_FACTORY_CLASS(YourClass)` macro + `#include "yourclass.moc"` to register plugins - **Thread safety**: Plugin C++ objects created in worker threads are moved to main thread - all child objects MUST be in the same tree hierarchy or they won't be moved ### Core Framework Classes - **DccObject**: Tree-node base class for all UI elements. Key properties: - `name`: Unique ID (no `/` characters, used in URL paths) - `parentName`: Parent's URL path (can be hierarchical like `"aa/bb/cc"`) - `weight`: Display order (0-65535, use increments of 10) - `pageType`: Determines rendering (Menu, Editor, Item) - **DccApp**: Global singleton accessible from QML, provides `root`, `addObject()`, `removeObject()`, `showPage()` - **DccFactory**: Interface for plugin registration (see [include/dccfactory.h](include/dccfactory.h)) ### QML-C++ Integration - C++ exports accessed via `dccData` in QML (automatically injected) - Use `Q_PROPERTY`, `Q_INVOKABLE`, or slots for QML exposure - Example: `dccData.calc(a, b)` calls C++ method from QML ## Build & Development Workflows ### Standard Build ```bash cmake -B build cmake --build build # Debug single plugin without installing: ./build/bin/dde-control-center --spec ./build/lib/plugins_v1.0/{plugin-name} ``` ### Build Flags - `BUILD_TESTING=ON`: Enable unit tests (uses GTest) - `ENABLE_ASAN=OFF`: Address sanitizer (disabled by default due to plugin compat issues) - `DISABLE_*` options: Conditionally disable plugins (see [CMakeLists.txt](CMakeLists.txt#L40-L46)) ### Plugin Development Pattern See complete example in [examples/plugin-example](examples/plugin-example) and [docs/v25-dcc-interface.zh_CN.md](docs/v25-dcc-interface.zh_CN.md) **CMakeLists.txt template**: ```cmake find_package(DdeControlCenter REQUIRED) add_library(myplugin MODULE src/myplugin.cpp) target_link_libraries(myplugin PRIVATE Dde::Control-Center Qt6::Core) dcc_install_plugin(NAME myplugin TARGET myplugin) dcc_handle_plugin_translation(NAME myplugin) # auto-handles i18n ``` **Plugin registration** ([src/plugin-*/operation/*.cpp](src/plugin-deepinid/operation/deepinidinterface.cpp#L25-L26)): ```cpp #include "dccfactory.h" DCC_FACTORY_CLASS(YourPluginClass) #include "yourpluginclass.moc" ``` ## Project Conventions ### File Naming - Plugins: `plugin-{name}/` directories under [src/](src/) - QML entry: `{name}.qml` (metadata only) - QML main: `{name}Main.qml` (full UI implementation) - **renamed from `main.qml` in v6.0.77 to avoid translation conflicts** - C++ sources: `operation/` or `src/` subdirectories ### Configuration Management - **DConfig** for settings: `org.deepin.dde.control-center` ([misc/configs/](misc/configs/)) - Check visibility: `dde-dconfig get org.deepin.dde.control-center -r org.deepin.dde.control-center hideModule` - **DccDBusInterface** QML type for DBus interaction (see [docs/v25-dcc-interface.zh_CN.md](docs/v25-dcc-interface.zh_CN.md#L168-L186)) ### Qt Version - **Qt6 only** - mixing Qt5 libraries will cause crashes - Uses `Qt6::`, `Dtk6::` namespaces - CMake: `set(QT_NS Qt6)` and `set(DTK_NS Dtk6)` ## Testing - Framework: GTest for C++ unit tests - Location: [tests/](tests/) and [dde-grand-search/tests/](dde-grand-search/tests/) - Run: Enable `BUILD_TESTING=ON`, tests built to `build/bin/` ## Common Pitfalls 1. **ASAN incompatibility**: Don't use ASAN in plugins if control center wasn't built with it 2. **Thread safety**: Plugin constructor objects must be children of the exported class to be moved to main thread 3. **Name conflicts**: Plugin `name` property must be unique - used for URLs and configuration 4. **QML translation**: Use `qsTr()` in QML, handled by `dcc_handle_plugin_translation()` ## Key Files for Reference - [include/dccobject.h](include/dccobject.h) - Core object properties/signals - [include/dccapp.h](include/dccapp.h) - Global API - [include/dccfactory.h](include/dccfactory.h) - Plugin interface + registration macro - [misc/DdeControlCenterPluginMacros.cmake](misc/DdeControlCenterPluginMacros.cmake) - CMake helpers - [docs/v25-dcc-interface.zh_CN.md](docs/v25-dcc-interface.zh_CN.md) - Complete API reference (Chinese) ================================================ FILE: .github/workflows/backup-to-gitlab.yml ================================================ name: backup to gitlab on: [push] concurrency: group: ${{ github.workflow }} cancel-in-progress: true jobs: backup-to-gitlabwh: uses: linuxdeepin/.github/.github/workflows/backup-to-gitlabwh.yml@master secrets: inherit backup-to-gitee: uses: linuxdeepin/.github/.github/workflows/backup-to-gitee.yml@master secrets: inherit ================================================ FILE: .github/workflows/call-auto-tag.yml ================================================ name: auto tag on: pull_request_target: types: [opened, synchronize, closed] paths: - "debian/changelog" concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: auto_tag: uses: linuxdeepin/.github/.github/workflows/auto-tag.yml@master secrets: inherit ================================================ FILE: .github/workflows/call-build-distribution.yml ================================================ name: Call build-distribution on: push: paths-ignore: - ".github/workflows/**" pull_request_target: paths-ignore: - ".github/workflows/**" jobs: check_job: uses: linuxdeepin/.github/.github/workflows/build-distribution.yml@master secrets: inherit ================================================ FILE: .github/workflows/call-chatOps.yml ================================================ name: chatOps on: issue_comment: types: [created] jobs: chatopt: uses: linuxdeepin/.github/.github/workflows/chatOps.yml@master secrets: inherit ================================================ FILE: .github/workflows/call-clacheck.yml ================================================ name: Call CLA check on: issue_comment: types: [created] pull_request_target: types: [opened, closed, synchronize] concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: clacheck: uses: linuxdeepin/.github/.github/workflows/cla-check.yml@master secrets: inherit ================================================ FILE: .github/workflows/call-commitlint.yml ================================================ name: Call commitlint on: pull_request_target: concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: check_job: uses: linuxdeepin/.github/.github/workflows/commitlint.yml@master ================================================ FILE: .github/workflows/call-deploy-dev-doc.yml ================================================ name: deploy docs on: push: branches: ["master"] workflow_dispatch: inputs: tag: required: true type: string permissions: contents: read pages: write id-token: write # Allow one concurrent deployment concurrency: group: "pages" cancel-in-progress: true jobs: deploydocs: uses: linuxdeepin/.github/.github/workflows/deploy-dev-doc.yml@master with: ref: ${{ inputs.tag }} secrets: inherit ================================================ FILE: .github/workflows/call-license-check.yml ================================================ name: Call License and README Check on: pull_request_target: types: [opened, synchronize, reopened] permissions: pull-requests: write contents: read concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: license-check: uses: linuxdeepin/.github/.github/workflows/license-check.yml@master ================================================ FILE: .github/workflows/cppcheck.yml ================================================ name: cppcheck on: pull_request_target: paths-ignore: - ".github/workflows/**" concurrency: group: ${{ github.workflow }}-pull/${{ github.event.number }} cancel-in-progress: true jobs: cppchceck: name: cppcheck runs-on: ubuntu-latest steps: - run: export - uses: actions/checkout@v4 with: ref: ${{ github.event.pull_request.head.sha }} persist-credentials: false - uses: linuxdeepin/action-cppcheck@main with: github_token: ${{ secrets.GITHUB_TOKEN }} repository: ${{ github.repository }} pull_request_id: ${{ github.event.pull_request.number }} allow_approve: false ================================================ FILE: .gitignore ================================================ # Compiled Object files *.slo *.lo *.o # Compiled Dynamic libraries *.so *.dylib # Compiled Static libraries *.lai *.la *.a build*/ *.pro.user* *.DS_Store *.core *.autosave *.user* debian/files debian/tmp obj-x86_64-linux-gnu debian/debhelper-build-stamp debian/dde-control-center debian/dde-control-center-dev debian/dde-control-center-doc *.log *.substvars .debhelper # qm file is auto generate from .ts file *.qm # vim tmp file *.swp *.vscode *.vim # clion tmp file .idea/ # clangd tmp file .cache/ .transifexrc lupdate.sh # nix .direnv ================================================ FILE: .obs/workflows.yml ================================================ test_build: steps: - link_package: source_project: deepin:Develop:dde source_package: %{SCM_REPOSITORY_NAME} target_project: deepin:CI - configure_repositories: project: deepin:CI repositories: - name: deepin_develop paths: - target_project: deepin:Develop:dde target_repository: deepin_develop - target_project: deepin:CI target_repository: deepin_develop - target_project: deepin:CI:dodconfig target_repository: deepin_develop architectures: - x86_64 - aarch64 filters: event: pull_request tag_build: steps: - trigger_services: project: deepin:Unstable:dde package: %{SCM_REPOSITORY_NAME} filters: event: tag_push commit_build: steps: - trigger_services: project: deepin:Develop:dde package: %{SCM_REPOSITORY_NAME} filters: event: push ================================================ FILE: .reuse/dep5 ================================================ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: dtkcore Upstream-Contact: UnionTech Software Technology Co., Ltd. <> Source: https://github.com/linuxdeepin/dtkcore # ci Files: .github/* .gitlab-ci.yml .obs/workflows.yml Copyright: None License: CC0-1.0 # config Files: .clang-format .editorconfig Copyright: None License: CC0-1.0 # debian rpm archlinux Files: debian/* rpm/* archlinux/* Copyright: None License: CC0-1.0 # translation Files: translations/* **/*.ts .tx/config .tx/transifex.yaml Copyright: UnionTech Software Technology Co., Ltd. License: GPL-3.0-or-later # png svg Files: **/*.svg **/*.png **/*.dci **/*.gif **/*.webp Copyright: UnionTech Software Technology Co., Ltd. License: CC0-1.0 # xml toml json conf yaml ... Files: **/*.json **/*.service **/*.txt **/*.sh **/*.html **/conf .gitignore **/*.desktop **/*.css **/*.ttf *.conf *.xml Copyright: None License: CC0-1.0 # README Files: **/*.md README.md README.zh_CN.md Copyright: UnionTech Software Technology Co., Ltd. License: CC-BY-4.0 # Project file Files: **/*.cmake **/CMakeLists.txt **/*.in **/*.qrc CMakeLists.txt Copyright: None License: CC0-1.0 # MetaInfo File Files: misc/org.deepin.dde.controlcenter.metainfo.xml Copyright: None License: CC0-1.0 # 3rdparty Files: src/plugin-display/wayland/* Copyright: Marcus Britanicus, Abrar, rahmanshaber License: MIT ######## dcc-old ######## # translation Files: dcc-old/translations/* Copyright: UnionTech Software Technology Co., Ltd. License: GPL-3.0-or-later # 3rdparty Files: dcc-old/src/plugin-display/wayland/* Copyright: Marcus Britanicus, Abrar, rahmanshaber License: MIT Files: toolGenerate/**/* Copyright: None License: CC0-1.0 ================================================ FILE: .tx/config ================================================ [main] host = https://www.transifex.com [o:linuxdeepin:p:deepin-desktop-environment:r:332dacad18d2b1a048dba06b5c1f0293] file_filter = translations/dde-control-center_.ts source_file = translations/dde-control-center_en.ts source_lang = en_US type = QT [o:linuxdeepin:p:deepin-desktop-environment:r:4ea171636f1b3b620948addfb330f0d9] file_filter = translations/desktop/desktop_.ts source_file = translations/desktop/desktop.ts source_lang = en_US type = QT ================================================ FILE: .tx/deepin.conf ================================================ [transifex] branch = m23 ================================================ FILE: .tx/transifex.yaml ================================================ filters: - filter_type: file source_file: translations/dde-control-center_en.ts file_format: QT source_language: en_US translation_files_expression: translations/dde-control-center_.ts - filter_type: file source_file: translations/desktop/desktop.ts file_format: QT source_language: en_US translation_files_expression: translations/desktop/desktop_.ts settings: pr_branch_name: transifex_update_ ================================================ FILE: CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(DVERSION "6.0.44" CACHE STRING "define project version") set(BUILD_DOCS OFF CACHE BOOL "Generate doxygen-based documentation") set(PROJECT_NAME dde-control-center) project(${PROJECT_NAME} VERSION ${DVERSION} DESCRIPTION "Deepin Control Center" HOMEPAGE_URL "https://github.com/linuxdeepin/dde-control-center" LANGUAGES CXX C ) set(CMAKE_CXX_STANDARD 17) set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(ENABLE_ASAN OFF) option(BUILD_TESTING "UNIT test" OFF) set(BUILD_EXAMPLES OFF) set(DCC_ENABLE_MEMORY_MANAGEMENT ON) set(QT_NS Qt6) set(DTK_NS Dtk6) set(ASQT_NS AppStreamQt) # 设置静态库文件目录 set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # 动态库文件目录 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) # 可执行文件目录 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) # INFO: # plugins can be disabled and their options # plugin-authentication : DISABLE_AUTHENTICATION # plugin-keyboard: DISABLE_LANGUAGE to disable language panel option(DISABLE_AUTHENTICATION "disable build authentication plugins" OFF) option(DISABLE_PRIVACY_PLUGIN "disable privacy and security plugin" OFF) option(DISABLE_LANGUAGE "disable lanugage settings in control center" OFF) option(USE_DEEPIN_ZONE "enable special timezone file on deepin" OFF) option(DISABLE_SOUND_ADVANCED "disable sound advanced settings" OFF) set(DEEPIN_TIME_ZONE_PATH "/usr/share/dde/zoneinfo/zone1970.tab" CACHE STRING "deepin timezone path") set(LOCALE_I18N_PATH "/usr/share/i18n/SUPPORTED" CACHE STRING "Supported locale path") set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/misc;${CMAKE_MODULE_PATH};${ECM_MODULE_PATH};${PROJECT_SOURCE_DIR}/misc") include(DdeControlCenterPluginMacros) # asan 自己有内存泄露,暂不使用 if (CMAKE_BUILD_TYPE STREQUAL "Debug") set(UNITTEST ON) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -Werror=return-type -fno-omit-frame-pointer -Wextra") if(ENABLE_ASAN) if (CMAKE_CXX_COMPILER_ID MATCHES "GNU" OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -g") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -g") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fsanitize=address") set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} -fsanitize=address") set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fsanitize=address") add_definitions(-DUSE_ASAN) endif() endif() else() # generate qm execute_process(COMMAND bash "misc/translate_generation.sh" "${CMAKE_CURRENT_BINARY_DIR}/src/dde-control-center" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) # generate desktop translate execute_process(COMMAND bash "misc/translate_ts2desktop.sh" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) endif() if (BUILD_TESTING) set(UNITTEST ON) endif() set(BUILD_PLUGIN ON) if (NOT BUILD_PLUGIN) set(UNITTEST OFF) endif() # GNU 默认 if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set(UT_COMPILER -fprofile-arcs -ftest-coverage) elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") set(UT_COMPILER -fprofile-instr-generate -ftest-coverage) endif() if (USE_DEEPIN_ZONE) add_definitions(-DUSE_DEEPIN_ZONE) add_definitions(-DDEEPIN_TIME_ZONE_PATH="${DEEPIN_TIME_ZONE_PATH}") endif () add_definitions(-DLOCALE_I18N_PATH="${LOCALE_I18N_PATH}") if(DCC_ENABLE_MEMORY_MANAGEMENT) add_definitions(-DDCC_ENABLE_MEMORY_MANAGEMENT) endif() # 增加安全编译参数 set(POSITION_INDEPENDENT_CODE True) set(THREADS_PREFER_PTHREAD_FLAG ON) find_package(Threads REQUIRED) # Install settings if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) set(CMAKE_INSTALL_PREFIX /usr) endif () include(GNUInstallDirs) include(CMakePackageConfigHelpers) include(GoogleTest) if(BUILD_DOCS) add_subdirectory(docs) endif() set(DCC_PLUGINS_VERSION 1.1) set(DCC_TRANSLATION_INSTALL_DIR "${CMAKE_INSTALL_DATAROOTDIR}/${PROJECT_NAME}/translations/v${DCC_PLUGINS_VERSION}" CACHE STRING "Install dir for dde-control-center translate files") # 输出目录 set(DCC_LIBDIR ${PROJECT_BINARY_DIR}/lib) # 插件目录 set(DCC_PLUGINS_DIR plugins_v${DCC_PLUGINS_VERSION}) # 安装目录 set(DCC_INSTALL_DIR ${CMAKE_INSTALL_LIBDIR}/dde-control-center) set(DCC_DEBUG_LIBDIR ${DCC_INSTALL_DIR}) set(DCC_TRANSLATE_READ_DIR ${CMAKE_INSTALL_PREFIX}/${DCC_TRANSLATION_INSTALL_DIR}) if (CMAKE_BUILD_TYPE STREQUAL "Debug") set(DCC_DEBUG_LIBDIR ${DCC_LIBDIR}) set(DCC_TRANSLATE_READ_DIR ${PROJECT_BINARY_DIR}/src/dde-control-center) endif() add_definitions(-DTRANSLATE_READ_DIR="${DCC_TRANSLATE_READ_DIR}") # 插件安装目录 set(DCC_PLUGINS_INSTALL_DIR ${DCC_DEBUG_LIBDIR}/${DCC_PLUGINS_DIR} CACHE STRING "Install dir for dde-control-center plugins") # 插件读取目录 set(MODULE_READ_DIR "${DCC_DEBUG_LIBDIR}" CACHE STRING "Dir to find dde-control-center modules") set(PLUGINS_READ_DIR "${DCC_PLUGINS_INSTALL_DIR}" CACHE STRING "Dir to find dde-control-center plugins") GNUInstallDirs_get_absolute_install_dir( MODULE_READ_FULL_DIR MODULE_READ_DIR LIBDIR ) GNUInstallDirs_get_absolute_install_dir( PLUGINS_READ_FULL_DIR PLUGINS_READ_DIR LIBDIR ) message(STATUS ${MODULE_READ_FULL_DIR}) message(STATUS ${PLUGINS_READ_FULL_DIR}) message(STATUS ${DCC_PLUGINS_INSTALL_DIR}) add_definitions(-DDefaultModuleDirectory="${MODULE_READ_FULL_DIR}") add_definitions(-DDefaultPluginsDirectory="${PLUGINS_READ_FULL_DIR}") # DdeControlCenterPluginMacros.cmake 使用 set(DDE_CONTROL_CENTER_PLUGIN_DIR ${DCC_PLUGINS_DIR}) set(DDE_CONTROL_CENTER_TRANSLATION_INSTALL_DIR ${DCC_TRANSLATION_INSTALL_DIR}) set(DDE_CONTROL_CENTER_PLUGIN_INSTALL_DIR ${DCC_PLUGINS_INSTALL_DIR}) set(LOCALSTATE_READ_DIR "${CMAKE_INSTALL_FULL_LOCALSTATEDIR}" CACHE STRING "Dir to find modifiable single-machine data") set(DCC_PROJECT_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}) add_definitions(-DVARDIRECTORY="${LOCALSTATE_READ_DIR}") # Find the library find_package(PkgConfig REQUIRED) find_package(${DTK_NS} REQUIRED COMPONENTS Core Gui ) find_package(${QT_NS} COMPONENTS Core Quick Gui Network DBus Concurrent Test LinguistTools Multimedia REQUIRED) if(${QT_NS}_VERSION VERSION_GREATER_EQUAL 6.10) find_package(${QT_NS} COMPONENTS GuiPrivate REQUIRED) endif() find_package(GTest REQUIRED) find_package(Threads REQUIRED) # Check if dde-api provides EventLogger (header-only) find_package(DDEAPI QUIET) if(DDEAPI_FOUND) set(HAVE_DDE_API_EVENTLOGGER ON) message(STATUS "Found DDEAPI: EventLogger available") else() message(STATUS "DDEAPI not found, event logging will be disabled") endif() if (${CMAKE_SYSTEM_PROCESSOR} STREQUAL "sw_64") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mieee") endif() # dconfig file(GLOB DCONFIG_FILES "misc/configs/*.json") dtk_add_config_meta_files(APPID org.deepin.dde.control-center BASE misc/configs FILES ${DCONFIG_FILES}) file(GLOB DCONFIG_FILE_REGION_FORMAT "misc/configs/common/org.deepin.region-format.json") dtk_add_config_meta_files(COMMONID true FILES ${DCONFIG_FILE_REGION_FORMAT}) include_directories( include ) set(Test_Libraries -lgcov Threads::Threads GTest::gtest ${QT_NS}::Test ) set(DCC_FRAME_Library dde-control-center_frame) set(Enable_TreelandSupport ON CACHE BOOL "Enable Treeland Support") add_subdirectory(src/dde-control-center) #-----------------------shared-utils------------------------ add_subdirectory(src/shared-utils) #--------------------------plugins-------------------------- add_subdirectory(src/plugin-system) add_subdirectory(src/plugin-device) add_subdirectory(src/plugin-accounts) if (NOT DISABLE_AUTHENTICATION) add_subdirectory(src/plugin-authentication) endif() add_subdirectory(src/plugin-sound) add_subdirectory(src/plugin-defaultapp) add_subdirectory(src/plugin-power) add_subdirectory(src/plugin-mouse) add_subdirectory(src/plugin-personalization) add_subdirectory(src/plugin-keyboard) add_subdirectory(src/plugin-systeminfo) add_subdirectory(src/plugin-commoninfo) add_subdirectory(src/plugin-touchscreen) add_subdirectory(src/plugin-datetime) add_subdirectory(src/plugin-wacom) add_subdirectory(src/plugin-bluetooth) add_subdirectory(src/plugin-notification) add_subdirectory(src/plugin-deepinid) add_subdirectory(src/plugin-display) if (NOT DISABLE_PRIVACY_PLUGIN) add_subdirectory(src/plugin-privacy) endif() add_subdirectory(src/plugin-dock) if(BUILD_EXAMPLES) add_subdirectory(examples) endif() if(UNITTEST) add_subdirectory(tests) endif() ================================================ FILE: LICENSE ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: LICENSES/CC-BY-4.0.txt ================================================ Creative Commons Attribution 4.0 International Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible. Using Creative Commons Public Licenses Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses. Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors. Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensor’s permission is not necessary for any reason–for example, because of any applicable exception or limitation to copyright–then that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public. Creative Commons Attribution 4.0 International Public License By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions. Section 1 – Definitions. a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image. b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License. c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights. d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements. e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material. f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License. g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license. h. Licensor means the individual(s) or entity(ies) granting rights under this Public License. i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them. j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world. k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning. Section 2 – Scope. a. License grant. 1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to: A. reproduce and Share the Licensed Material, in whole or in part; and B. produce, reproduce, and Share Adapted Material. 2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions. 3. Term. The term of this Public License is specified in Section 6(a). 4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material. 5. Downstream recipients. A. Offer from the Licensor – Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License. B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material. 6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i). b. Other rights. 1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise. 2. Patent and trademark rights are not licensed under this Public License. 3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties. Section 3 – License Conditions. Your exercise of the Licensed Rights is expressly made subject to the following conditions. a. Attribution. 1. If You Share the Licensed Material (including in modified form), You must: A. retain the following if it is supplied by the Licensor with the Licensed Material: i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated); ii. a copyright notice; iii. a notice that refers to this Public License; iv. a notice that refers to the disclaimer of warranties; v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable; B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License. 2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information. 3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable. 4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License. Section 4 – Sui Generis Database Rights. Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material: a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database; b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database. For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights. Section 5 – Disclaimer of Warranties and Limitation of Liability. a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You. b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You. c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability. Section 6 – Term and Termination. a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically. b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates: 1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or 2. upon express reinstatement by the Licensor. c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License. d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License. e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License. Section 7 – Other Terms and Conditions. a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed. b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License. Section 8 – Interpretation. a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License. b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions. c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor. d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority. Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses. Creative Commons may be contacted at creativecommons.org. ================================================ FILE: LICENSES/CC0-1.0.txt ================================================ Creative Commons Legal Code CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer(s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. ================================================ FILE: LICENSES/GPL-3.0-or-later.txt ================================================ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. “This License” refers to version 3 of the GNU General Public License. “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. A “covered work” means either the unmodified Program or a work based on the Program. To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: LICENSES/LGPL-3.0-or-later.txt ================================================ GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright © 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. “This License” refers to version 3 of the GNU General Public License. “Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. “The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. A “covered work” means either the unmodified Program or a work based on the Program. To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. “Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. “Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . ================================================ FILE: LICENSES/MIT.txt ================================================ MIT License Copyright (c) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: README.md ================================================ ## DDE Control Center DDE Control Center is the control panel of Deepin Desktop Environment. ## Dependencies Check `debian/control` for build-time and runtime dependencies, or use `cmake` to check the missing required dependencies. ## Installation ### Build from source code 1. Make sure you have installed all dependencies. 2. Build: ``` $ cd dde-control-center $ mkdir Build $ cd Build $ cmake .. $ make ``` 3. Install: ``` $ sudo make install ``` The executable binary file could be found at `/usr/bin/dde-control-center` after the installation is finished, and plugins will be placed into `${CMAKE_INSTALL_FULL_LIBDIR}/dde-control-center/modules/`, usually is `/usr/lib/dde-control-center/modules/`. A `debian` folder is provided to build the package under the *deepin* linux desktop distribution. To build the package, use the following command: ```shell $ sudo apt build-dep . # install build dependencies $ dpkg-buildpackage -uc -us -nc -b # build binary package(s) ``` ## Usage Execute `dde-control-center -h` to get more details. Note: `--spec` can be used to debug plugins. The passed in value is the path where the so of plugin is in. ## Getting help You can press `F1` to start [deepin-manual](https://github.com/linuxdeepin/deepin-manual) when you focus on DDE Control Center window. You may also find these channels useful if you encounter any other issues: * [Telegram group](https://deepin.org/to/tg) * [Matrix](https://matrix.to/#/#deepin-community:matrix.org) * [IRC (libera.chat)](https://web.libera.chat/#deepin-community) * [Forum](https://bbs.deepin.org) * [WiKi](https://wiki.deepin.org/) ## Develop Plugins with cmake ```cmake # just show the target link way find_package(DdeControlCenter REQUIRED) find_package(Dtk COMPONENTS Core Widget REQUIRED) find_package(Qt5 COMPONENTS Core Gui Widgets REQUIRED) add_library(dcc_exampleplugin SHARED plugin.h plugin.cpp ) target_link_libraries(dcc_exampleplugin PRIVATE Dde::DCCWidget Dde::DCCInterface Dtk::Core Dtk::Widget Qt5::Core Qt5::Gui Qt5::Widgets ) ``` ## Getting involved We encourage you to report issues and contribute changes * [Contribution guide for developers](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers-en). (English) * [开发者代码贡献指南](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers) (中文) ## License DDE Control Center is licensed under [GPL-3.0-or-later](LICENSE). ================================================ FILE: README.zh_CN.md ================================================ ## DDE 控制中心 DDE 控制中心控制整个DDE桌面环境 ## 依赖 查看 `debian/control` 文件来了解此项目的构建与运行时依赖,或者使用 `cmake` 检查缺失的必要组件。 ## 安装 ### 源码安装 1. Make sure you have installed all dependencies. 2. Build: ```bash cd dde-control-center cmake -B build cmake --build build ``` 3. Install: ```bash sudo make install ``` 注意,不推荐,应该先打包然后安装。 运行文件在 `/usr/bin/dde-control-center` , 插件在 `${CMAKE_INSTALL_FULL_LIBDIR}/dde-control-center/modules/`下,`CMAKE_INSTALL_FULL_LIBDIR`请查阅GNUInstallDir,根据发行版有所不同 , 如arch下这个目录在 `/usr/lib/dde-control-center/modules/`. 为在 *deepin* 桌面发行版进行此软件包的构建,我们还提供了一个 `debian` 目录。若要构建软件包,可参照下面的命令进行构建: ```shell $ sudo apt build-dep . # 安装构建依赖 $ dpkg-buildpackage -uc -us -nc -b # 构建二进制软件包 ``` ## 使用方式 Execute `dde-control-center -h` to get more details. ## 帮助 任何使用问题都可以通过以下方式寻求帮助: * [Telegram 群组](https://t.me/deepin_community) * [Matrix](https://matrix.to/#/#deepin-community:matrix.org) * [IRC (libera.chat)](https://web.libera.chat/#deepin-community) * [Forum](https://bbs.deepin.org) * [WiKi](https://wiki.deepin.org/) ## 加入我们 请到developer-center提交issue或者参与讨论。当然也可以直接参与代码维护提交代码和修复。我们会很开心获得您的帮助和贡献 * [Contribution guide for developers](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers-en). (English) * [开发者代码贡献指南](https://github.com/linuxdeepin/developer-center/wiki/Contribution-Guidelines-for-Developers) (中文) ## License DDE Control Center 遵循协议 [GPL-3.0-or-later](LICENSE). ================================================ FILE: archlinux/PKGBUILD ================================================ pkgname=deepin-control-center-git _pkgname=deepin-control-center pkgver=5.4.47.r673.g52c86a908 pkgrel=1 sourcename=dde-control-center sourcetars=("$sourcename"_"$pkgver".tar.xz) sourcedir="$sourcename" pkgdesc='New control center for linux deepin' arch=('x86_64' 'aarch64') url="https://github.com/linuxdeepin/dde-control-center" license=('GPL3') depends=('dtkwidget-git' 'libpwquality' 'doxygen' 'deepin-daemon-git' 'startdde-git' 'deepin-pw-check-git' 'qt5-gsettings' 'icu') makedepends=('git' 'cmake' 'ninja' 'qt5-tools' 'qt5-base' 'qt5-x11extras' 'qt5-multimedia' 'qt5-svg' 'dtkcommon-git' 'dtkcore-git' 'dtkwidget-git' 'dtkgui-git' 'gtest' 'gmock' 'polkit-qt5' 'systemd') optdepends=('redshift: automatic color temperature support') # Not packaged: network-manager-l2tp conflicts=('deepin-control-center') provides=('deepin-control-center') optdepends=('deepin-network-core-git' 'networkmanager-qt') groups=('deepin-git') source=("${sourcetars[@]}") sha512sums=('SKIP') prepare() { cd $sourcedir } build() { cd $sourcedir cmake -GNinja \ -DCMAKE_INSTALL_PREFIX=/usr \ -DDISABLE_UPDATE=ON \ -DDISABLE_AUTHENTICATION=ON \ -DDISABLE_LANGUAGE=ON \ -DCMAKE_INSTALL_LIBDIR=/usr/lib \ -DCMAKE_INSTALL_LOCALSTATEDIR=/var ninja } package() { cd $sourcedir DESTDIR="$pkgdir" ninja install } ================================================ FILE: debian/changelog ================================================ dde-control-center (6.1.83) unstable; urgency=medium * build: add dde-api-dev build dependency * i18n: Updates for project Deepin Desktop Environment (#3179) -- zhangkun Fri, 24 Apr 2026 13:18:28 +0800 dde-control-center (6.1.82) unstable; urgency=medium * feat: add event logger integration for control center * perf(wallpaper): optimize wallpaper thumbnail loading with QImageReader scaling * refactor: simplify plugin loading by removing async loading * Revert "fix: use QQmlIncubator for asynchronous plugin object creation" * fix: Optimize the typesetting layout of open-source software declarations * feat(notification): add app notification search functionality * fix(display): use screen dimensions instead of currentResolution for Qt screen matching * fix: use QQmlIncubator for asynchronous plugin object creation * docs: update v25 dcc interface documentation * i18n: Updates for project Deepin Desktop Environment (#3170) * fix: prevent control center from not closing properly * fix: Window size not correctly restored after maximisation * fix: optimize page visibility management in DccWindow * fix(datetime): add real-time display for timezone information * i18n: Updates for project Deepin Desktop Environment (#3127) -- zhangkun Thu, 23 Apr 2026 21:46:05 +0800 dde-control-center (6.1.81) unstable; urgency=medium * feat: improve DccRepeater parent object assignment * fix: dconfig controls whether the username is displayed in the verification password pop-up window * fix: fix control center plugin loading and page display logic * fix: Optimize the typesetting layout of open-source software declarations * fix: defer icon source resolution until component completion * fix: synchronize plugin data phase loading * refactor: move plugin factory preparation before module loading * refactor: remove mutex lock and use async processing for image provider * fix: improve keyboard navigation focus management and rename property * fix(sound): fix Bluetooth audio mode detection and switching logic * fix: DConfig controls whether the boot menu item area supports editing the wallpaper * fix: Modify the background transparency of the account creation screen * fix: correct text color property type and logic * fix(datetime): fix layout overlap in RegionFormatDialog * fix(ui): optimize layout and visibility control for list items -- zhangkun Thu, 09 Apr 2026 20:27:22 +0800 dde-control-center (6.1.80) unstable; urgency=medium * fix: add support for markdown format in user license * fix: update license file search logic and UI improvements * fix: enable TLS certificate verification for avatar downloads -- zhangkun Fri, 03 Apr 2026 13:05:02 +0800 dde-control-center (6.1.79) unstable; urgency=medium * chore(systeminfo): remove redundant Copyright fields from license files * fix(systeminfo): prevent auth dialog loop by transferring focus to edit button -- zhangkun Mon, 30 Mar 2026 15:16:14 +0800 dde-control-center (6.1.78) unstable; urgency=medium * fix: defer object creation to prevent QML GC crash * fix(commoninfo): set notification replacesId to 0 for proper display * fix: update translation URLs and fix typo * fix: Fix the issue where pressing Enter on an item has no effect * fix: resolve highlight residue issue after mouse leaves dropdown menu items * fix(bluetooth): correct audio headset icon mapping * fix: correct typo "operation system" to "operating system" in GPL license files * fix: Resolve the issue where the shortcut key for selected desktop files does not work * fix: fix DccRepeater memory management and object ownership * i18n: Updates for project Deepin Desktop Environment (#3112) * chore: update GPL-3.0 license files with complete open source software list * fix: prevent GC crashes during page transitions * fix(datetime): resolve SpinboxEx unit text overlap in English locale * refactor: optimize DConfig data synchronization to reduce DBus calls * fix: prevent control center crash from recursive QML creation * fix: optimize model assignment in RegionFormatDialog * fix(ui): optimize UI details and unify color management * refactor: optimize time plugin timer update mechanism * fix: optimize package query method for privacy security module * fix: change overlap detection from complete to partial coverage * fix: fix potential null pointer and loading state issues * fix: prevent infinite loops and improve UI responsiveness * style(keyboard): update file selection button icon in shortcut dialog * fix(ui): fix theme switch buttons to prevent blur * fix: Fix the issue of inconsistent display of title text * fix(keyboard): resolve shortcut text overlap with input box on window resize * i18n: Updates for project Deepin Desktop Environment (#3082) * fix: correct shortcut ID for preview-workspace -- zhangkun Wed, 25 Mar 2026 17:09:29 +0800 dde-control-center (6.1.77) unstable; urgency=medium * refactor: remove DConfig usage for permission blacklist * fix: Fix the misalignment issue of the tablet title * fix(ui): fix breadcrumb title overlap when window width is small * fix(touchscreen): add tooltip for truncated display names * fix(accounts): fix edit icon color too light in account fullname editor * Fix: Optimised the UI display of the Eye Care interface * fix: update layout on Crumb visibility change * fix: Custom keyboard shortcuts * fix(datetime): resolve long date/time format text overflow in language settings * fix(display): make home screen icon responsive to screen item size * Fix: Keyboard control issue in secondary menus * fix: Fix brightness control height issue * fix(datetime): adjust date label left margin to align with settings * Revert "fix: Speaker Display Anomaly" * fix(datetime): optimize timezone display and text visibility * Fix: Issue with password prompt box * fix(datetime): adjust timezone clock icon size to 24px * fix(datetime): adjust spacing between clock and title bar * refactor(datetime): optimize datetime setting dialog layout and unit display * fix(power): adjust spacing to 6px in power management interface * fix(touchscreen): fix style issues in touchscreen settings module * fix: Fixed the issue of the other users list not displaying completely -- zhangkun Wed, 18 Mar 2026 14:13:59 +0800 dde-control-center (6.1.76) unstable; urgency=medium * refactor: update system info DBus interface and proxy * fix(display): preserve display order when adjusting resolution * Fix: Abnormal behaviour in primary menu tabs * fix(accounts): resolve clear button shifting during text input * fix: Time display UI optimisation * fix: fix module matching and listing issues * fix: Optimized focus acquisition logic for secondary menus * fix: add parent module validation and fix DTK reference * fix(window): change about dialog to window modal mode * fix: make loading page background opaque * fix(plugin): set DTK palette for loaded plugin components * fix(power): show tooltip for truncated text in ComboBox dropdown items * refactor: improve permission matching with package name fallback * fix(ui): adjust padding and insets for better layout alignment * fix: remove unused port combo enable properties * fix: set smooth=false for sidebar button icon to prevent blur at fractional scaling * fix: preserve maximized window state when jumping from global search * fix: fix control center initialization and navigation issues * refactor: remove search result separator logic * fix: Fix the translation function call issue in ListElement * fix(keyboard): use DTK font manager for shortcuts edit button * fix(accounts): adjust password dialog layout spacing -- zhangkun Thu, 12 Mar 2026 21:31:46 +0800 dde-control-center (6.1.75) unstable; urgency=medium * fix: Optimized display for solid-color wallpapers * fix(accounts): fix hover area response issue in custom avatar upload * fix(ui): adapt button width to text content * fix: optimize window color and page visibility handling * feat: optimize object lookup performance with name-based mapping * refactor: improve search relevance algorithm and sorting * fix: resolve clicked function naming conflict * fix(accounts): optimize delete dialog layout alignment * fix(bluetooth): adjust loading animation size * fix: Fixed the issue of the secondary screen being disconnected during resolution changes * fix: Subsystem sound options appearing empty when navigating -- zhangkun Thu, 05 Mar 2026 20:48:43 +0800 dde-control-center (6.1.74) unstable; urgency=medium * Revert "fix: Optimized text display position at progress bar edges" * fix: prevent dangling pointer in page navigation * fix(systeminfo): align copyright text center in systemLogo * fix(systeminfo): align copyright text center and enable word wrap * fix: defer showing repeat days edit page -- zhangkun Mon, 02 Mar 2026 10:52:37 +0800 dde-control-center (6.1.73) unstable; urgency=medium * fix: Fix incomplete display of processor text on the page * fix: include size in image cache key to prevent collisions * fix: Optimized text display position at progress bar edges * feat: simplify cursor size selection logic * fix: Filter out components whose focus cannot be operated * fix: fix sidebar width initialization and validation * feat: add loading page for control center * chore: update dde-control-center-dev dependencies * fix: keep sleep and screen lock switches enabled with passwordless login * fix: fix cache image error * fix: fix touchpad visibility and disable input condition * Fix: Optimize cyclic selection in the system sound effects list. * fix(personalization): fix touchpad swipe and mouse drag in theme selector * fix(time-range): improve hour input focus behavior * fix: Speaker Display Anomaly -- zhangkun Fri, 27 Feb 2026 17:02:50 +0800 dde-control-center (6.1.72) unstable; urgency=medium * fix: Adapt the first item in the menu * fix(bluetooth): fix audio-headphones device type support * fix: Fixed issue where the focus did not start from the current page when entering the secondary interface * fix(display): prevent unintended brightness reset to 10% * fix: prevent face image stretching distortion * fix: Optimise Password Change Interface * fix: Default window size not restored * fix(sound): font size of "No output device for sound found" is too large * fix: fix wallpaper path handling for non-existent files * fix(display): fix screen context for x11 display dialogs * fix: improve audio device combo box state management * fix: adjust wallpaper selection border rendering order * feat: Updated translations * feat: adjust sidebar width for English locale and update device module name * fix(ui): fix scrollbar ghosting during page switching * feat: add dock plugin sorting with custom proxy model * feat: add pluginsChanged signal to reload dock tray plugins dynamically * fix: [Device] [Keyboard] Keyboard test text appears too large * fix: No response when using arrow keys * fix: improve navigation object tracking in control center * fix(systeminfo): fix processorChanged signal emission and processor setting location * fix: Fix cursor style not updating after theme switch * fix: fix window effect feature availability and combo box model handling * feat: add indicator display control * refactor: optimize parent object lookup and code structure * fix(bluetooth): fix send file button not showing due to stale state * docs: update v25 dcc interface documentation * fix: update fingerprint enrollment error handling and UI logic * fix: Configuration switch save error * fix: The black wallpaper is positioned too far forward * fix: move getAppPath to background thread * Fixed: Level 1 menu items unresponsive when navigating with keyboard arrow keys * feat: show touchpad only on laptops -- zhangkun Thu, 05 Feb 2026 19:23:12 +0800 dde-control-center (6.1.71) unstable; urgency=medium * i18n: Updates for project Deepin Desktop Environment (#2967) * fix: Fix the UI flickering issue when editing shortcut keys * fix: Modified the time setting logic in the scheduled shutdown feature. * chore: update cmake minimum version to 3.23 * fix(sound): sync source mute state with volume * feat: Updated translation * feat: add brightness control for Treeland compositor * feat: migrate QML plugins to Qt6 resource system -- zhangkun Thu, 29 Jan 2026 20:22:08 +0800 dde-control-center (6.1.70) unstable; urgency=medium * feat: support configurable password encryption algorithms * fix: Fix the timing of when the popup appears * fix: adjust mode delegate styling properties * feat: redesign color picker dialog UI * fix: Fix the error of looping through the plugin area list -- fuleyi Wed, 28 Jan 2026 15:59:27 +0800 dde-control-center (6.1.69) unstable; urgency=medium * fix: fix screensaver initialization on Wayland * docs: update developer mode license agreement text * fix: hide screensaver module when treeland is active * chore: update commoninfo icon * fix: add DBus signal connection for mime info changes * fix: separate model data from checked states in privacy folder * fix: improve spinbox input validation and sync * fix: remove premature wallpaperMapChanged signal emission * i18n: Updates for project Deepin Desktop Environment (#2942) * fix: Fix issue where system sound effects cannot be selected using the Tab key * feat: add privacy configuration for control center * fix: update file dialog signal handling and remove debug log -- zhangkun Fri, 23 Jan 2026 10:05:33 +0800 dde-control-center (6.1.68) unstable; urgency=medium * feat: Change "Device" to "Bluetooth and other devices" * i18n: Translate dde-control-center_en.ts in ja * i18n: Translate dde-control-center_en.ts in ja * i18n: Translate dde-control-center_en.ts in ja * i18n: Translate dde-control-center_en.ts in ja * fix: resolve binding loop in CustomComBobox MenuItem * refactor: migrate DBus interfaces to DDBusInterface * fix: Fix the issue of the timeRange control sending signals repeatedly * fix: remove duplicate taskbar icon for region chooser * fix: adjust mouse cursor size UI layout and remove debug log * fix spelling errors * fix: Fix multiple entries showing in the list after renaming Bluetooth * fix: improve timezone list display performance * fix: correct copyright year logic for system info * feat: add Alt+Space shortcut for window menu -- zhangkun Thu, 15 Jan 2026 20:00:09 +0800 dde-control-center (6.1.67) unstable; urgency=medium * fix: exclude onboard from privacy FileAndFolder app list -- zhangkun Wed, 07 Jan 2026 13:35:37 +0800 dde-control-center (6.1.66) unstable; urgency=medium * chore: remove touchpad switch file existence check * fix: fix command injection vulnerability in password encryption * fix: correct 12-hour time format patterns in RegionProxy * i18n: Updates for project Deepin Desktop Environment (#2920) * fix: Fix the issue with focus in the user group interface * refactor: migrate InterfaceEffectListview to DccObject for search support * i18n: Updates for project Deepin Desktop Environment (#2889) * fix: unmute input device when adjusting volume * fix: Fix the issue where error messages do not disappear automatically * fix: resolve Next button not disabled after unchecking disclaimer * fix: reset face image content when starting enrollment * fix: Fix the issue where disabled modules are not grayed out * fix: correct decimal symbol setting when user selects space * docs: add GitHub Copilot instructions file * feat: support multiple plugin directories via --spec option * fix: add text drop support to search bar * fix: add close button hint to timezone popup * fix: prepend runtime plugin directory to QML import paths -- zhangkun Tue, 06 Jan 2026 20:51:47 +0800 dde-control-center (6.1.65) unstable; urgency=medium * fix: adjust alert tooltip target in authentication UI * fix: Fix the issue with selecting screensaver settings * fix: emit all relevant roles on bluetooth device state change -- zhangkun Thu, 25 Dec 2025 19:33:39 +0800 dde-control-center (6.1.64) unstable; urgency=medium * feat: manage QML cache versioning proactively * fix: Fix the issue where the theme area cannot switch focus * fix: Fix the issue where tab cannot select focus * fix: Change the app order in Privacy and Security * feat: Remove old code * fix: avoid list refresh on camera auth dialog open * fix: Fixed the issue where the time format did not follow the locale * fix: resolve text truncation in multi-screen dock settings * fix: correct loading indicator position when adding language * fix: add scrollbar to region format list in RegionFormatDialog * feat: remove night mode redshift integration -- YeShanShan Wed, 24 Dec 2025 14:36:14 +0800 dde-control-center (6.1.63) unstable; urgency=medium * i18n: Updates for project Deepin Desktop Environment (#2885) * fix: fix QML component loading and gesture data handling * fix: Modify display interface layout spacing * fix: improve URL matching logic and empty URL handling * fix: Fix build with Qt 6.10 and higher * i18n: Updates for project Deepin Desktop Environment (#2873) * feat: remove pointer size configuration from mouse settings * fix: add pointer size change notification * fix: adjust DccTitleObject styling for better visual consistency * fix: Fix incomplete display of resolution options * fix: adjust footer layout spacing in DccSettingsView * fix: Update open source license * fix: Optimize the UI of wallpaper selection page -- zhangkun Thu, 18 Dec 2025 19:43:30 +0800 dde-control-center (6.1.62) unstable; urgency=medium * refactor: standardize QML component id naming * fix: fix sidebar width update when right view is empty * fix: Tooltip for the add image button * fix: add monitor count tracking for multi-screen visibility * fix: Fix the issue of shortcut key replacement failure * fix: Fix Bluetooth model being reset * refactor: replace custom object creation with Qt Loader * fix: refresh fingerprint list before enrollment * feat: replace screen saver start/stop with preview method * fix: fix repeater child object crash without parent * fix: refresh fingerprint list when device is hot-plugged * fix: align balance slider style with design specification * fix: Fix issue where renaming a Bluetooth device does not refresh * chore: fix screensaver button colors * fix: resolve text overflow issues in keyboard plugin for Russian locale * fix: Update translation file -- YeShanShan Thu, 11 Dec 2025 20:32:03 +0800 dde-control-center (6.1.61) unstable; urgency=medium * fix: Fix the issue with link text style errors * fix: Fix issue where the interface does not restore after deleting the avatar * fix: Fix no prompt when input is too long * fix: Fix thumbnails not updating * fix: reset boot delay switch state when authentication is cancelled * i18n: Updates for project Deepin Desktop Environment (#2847) * fix: Fix issue with full names containing spaces being incorrectly recognized * fix: restore Custom shortcut edit button in Spanish locale -- fuleyi Thu, 04 Dec 2025 19:12:24 +0800 dde-control-center (6.1.60) unstable; urgency=medium * i18n: Updates for project Deepin Desktop Environment (#2840) -- wjyrich Fri, 28 Nov 2025 10:45:26 +0800 dde-control-center (6.1.59) unstable; urgency=medium * fix: adjust clear cloud data button font size * fix: Fix the date server authentication issue * fix: update transaltion * feat: add combine application icons option to dock settings * i18n: Updates for project Deepin Desktop Environment (#2806) * fix: auto fallback to system app when default app is uninstalled * fix: unify screen tab style in display and wallpaper modules * fix: adjust font size of setting button in ScreenSaver page * fix: add tooltip for truncated authorization button in NativeInfoPage * fix: resolve preview button text truncation in ScreenSaverPage * fix: Modify mouse interface layout * fix: resolve color picker handle overflow in SaturationLightnessPicker * fix: Fix custom avatar selection issue * fix: improve wallpaper thumbnail alignment and layout * fix: improve locale-aware number formatting * fix: Fixed an issue where the edit and add buttons could not be focused using the tab key * i18n: remove de_DE translation resources * fix: Fix the mouse interface layout effect * fix: improve wallpaper thumbnail rendering quality * refactor: use install command for plugin binaries * fix: resolve unknown icons in notifications after editor install * fix: Fix the issue of drag-and-drop images not working * fix: resolve duplicate installation in QML plugin build * feat: add reproducible build parameters * fix: add display mode detection for dock plugin visibility -- zhaoyingzhen Thu, 27 Nov 2025 17:31:35 +0800 dde-control-center (6.1.58) unstable; urgency=medium * fix: update dock plugins reload, icon not show. -- wujiangyu Fri, 14 Nov 2025 13:53:21 +0800 dde-control-center (6.1.57) unstable; urgency=medium * fix: fix QML memory management crash issues * fix: Fix where custom dates have no authorization * fix: prioritize loading group plugins and fix icon paths * fix: Fix shortcut key tooltip text overflow * fix: hide touchpad switch on devices without touchpad_switch file * fix: Fix language long text overflow * fix: resolve delay when removing user apps via trash button * feat: enhance number format symbol conflict handling * refactor: expose initData as public slot and add activation handler * fix: improve text width calculation in sound plugin menu items * i18n: Updates for project Deepin Desktop Environment (#2803) * fix: update DNotifySender usage for system protection * fix: add translation for system protection notification * feat: add solid system read-only protection feature * fix: normalize title-to-thumbnail spacing in WallpaperSelectView * fix: Fix Bluetooth name change flashing -- xionglinlin Thu, 13 Nov 2025 19:53:05 +0800 dde-control-center (6.1.56) unstable; urgency=medium * fix: Record the status of the sidebar -- caixiangrong Fri, 07 Nov 2025 10:11:47 +0800 dde-control-center (6.1.55) unstable; urgency=medium * fix: add hover tooltip for Mode options in Sound settings * fix: Modifying text beyond the scope of the control * fix: update shortcut placeholder text * i18n: Updates for project Deepin Desktop Environment (#2786) * fix: resolve color picker dialog shaking issue * refactor: reorder window effect settings * fix: update translations * fix: Screen sorted by type * fix: Record the status of the sidebar * fix: Update disclaimer content * fix: correct eyedropper button style in custom color dialog * i18n: Updates for project Deepin Desktop Environment (#2782) * feat: add Min Nan Chinese locale support * [dde-control-center] Updates for project Deepin Desktop Environment (#2759) * fix: align screensaver preview height with settings items * fix: Repeated incorrect password change prompt * fix: enable tab focus for app items in FileAndFolder * fix: align selection background with design spec in ScreenTab * fix: prevent UI freeze when rapidly clicking Restore Defaults button * fix: resolve text spacing issue in ScreenSaver setting button -- caixiangrong Thu, 06 Nov 2025 16:56:37 +0800 dde-control-center (6.1.54) UNRELEASED; urgency=medium * fix: resolve currency format example display issues in RTL locales * fix: remove hover inner shadow on first item in Touchpad gestures * fix: Fix the password input box so that Chinese characters can be entered * fix: Fix the main window graying out after the dialog box is displayed * fix: ScheduledShutdownDialog title invisible in dark mode * fix: reduce screensaver settings button height in personalization * fix: scrollbar cannot reach bottom in language selection dialog * fix: prevent button conflict during language loading in LangAndFormat -- zhangkun Thu, 30 Oct 2025 21:47:29 +0800 dde-control-center (6.1.53) unstable; urgency=medium * fix: correct custom wallpaper delete button color in dark mode * i18n: Updates for project Deepin Desktop Environment (#2749) * fix: correct lock switch display with passwordless login enabled * fix: Modify the spacing between menu controls * fix: adjust dialog layout margins and width calculation * feat: sort theme list alphabetically and keep custom theme first * fix: background misalignment in format dialog * fix: auth dialog missing on second timezone change * feat: adjust disclaimer layout spacing * fix: Fix password verification prompt * fix: underscore search mismatch in keyboard shortcuts * fix: escape HTML special characters in conflict name display * i18n: Translate dde-control-center_en.ts in pl * feat: add fingerprint device change handling -- wujiangyu Thu, 23 Oct 2025 17:19:10 +0800 dde-control-center (6.1.52) unstable; urgency=medium * i18n: Translate dde-control-center_en.ts in uk * fix: Fix the issue on the change password interface * [dde-control-center] Updates for project Deepin Desktop Environment (#2730) * fix: Modify the issue of only X screen not updating * fix: Modify the user experience plan popup style * fix: Fix abnormal graying effect * fix: add ListView background and rounded item selection * fix: compatibility with Qt 6.10 * fix: adjust SearchEdit width to align with list in RegionFormatDialog * fix: resolve spacing issues in RegionFormatDialog * fix: add background highlight when clicking accounts * fix: gesture animation plays selected action instead of hovered item * fix: Modify the font style of color temperature parameters * fix: add tooltip for truncated text in sound device dropdown menu * fix: Fix the incorrect email issue in the privacy text * fix: make fingerprint renaming operation synchronous * [dde-control-center] Updates for project Deepin Desktop Environment (#2722) * fix: resolve SearchEdit text truncation with large font size * fix: Fix custom avatar issue * refactor: optimize wallpaper settings layout structure -- zhangkun Thu, 16 Oct 2025 20:51:00 +0800 dde-control-center (6.1.51) unstable; urgency=medium * fix: add missing signal for developer mode state sync * fix: remove keyboard layout from description * fix: prevent control center freeze when uninstalling third-party apps * fix: remove click-triggered focus highlight in accounts list * fix: resolve disabled speaker still showing as current output device * fix: update time format display when system timezone is modified * fix: preserve hostname validation alert when input loses focus * fix: support qrc scheme in image loading and replace dci with png * refactor: optimize image loading and thumbnail generation * fix: add missing scrollbars in timezone selection dialogs * fix: adjust time range input opacity based on enabled state -- YeShanShan Fri, 10 Oct 2025 17:31:21 +0800 dde-control-center (6.1.50) unstable; urgency=medium * fix: Fix the issue of the edit button not being horizontal -- zhangkun Fri, 26 Sep 2025 13:11:56 +0800 dde-control-center (6.1.49) unstable; urgency=medium * fix: disable hover effect on language delete button * fix: Fix the security center version judgment exception * fix: Fix the issue with the display of the license file * fix: resolve dark mode icon visibility in keyboard shortcut editor * fix: handle multi-arch package list paths * fix: enable text wrapping for security center link * fix: Fix the password error not selected completely * fix: update week start day format on locale change * fix: correct ACL error code matching logic * fix: fix applet threading and item removal issues * fix: add persistent storage for custom NTP server addresses * refactor: replace libdpkg API with dpkg-query command * feat: remove keyboard layout management module * i18n: Updates for project Deepin Desktop Environment (#2691) * fix: When system has no blur effect, the Multitasking View plugin is also displayed in the Control Center * fix: resolve onboard icon display in privacy FileAndFolder -- YeShanShan Thu, 25 Sep 2025 19:28:02 +0800 dde-control-center (6.1.48) unstable; urgency=medium * fix: connect license state change signal * i18n: Updates for project Deepin Desktop Environment (#2685) * fix: remove background from default app items * style: update font styles in control center * feat: adapt developer mode to use ACL service * i18n: Updates for project Deepin Desktop Environment (#2683) * fix: update iris enrollment UI and max limit * feat: improve fingerprint enrollment animation and messaging * fix: adjust title bar left margin * feat: add configurable device management visibility * fix: Adjust the display effects of the user group interface. * i18n: Updates for project Deepin Desktop Environment (#2668) * fix: hide current keyboard layouts from add layout dialog * fix: resolve missing translation in power module US English locale * fix: Fix the abnormal layout of the interface * fix: Adjust the user group interface layout * refactor: simplify gesture action mapping logic * fix: correct i18n formatting in QML file * fix: typo mistake of "Wallpapers" * fix: resolve scrollbar unable to reach bottom in region list * fix: add timeout dialog for X11 rotation changes * fix: improve touchpad gesture animation behavior * chore: Sync by https://github.com/linuxdeepin/.github/commit/ae0f54a002362031e7e012 f4be2d79cfb370a57e -- YeShanShan Thu, 18 Sep 2025 20:07:38 +0800 dde-control-center (6.1.47) unstable; urgency=medium * chore(iris): update translation * refactor: restructure biometric authentication controllers * i18n: Translate dde-control-center_en.ts in uk (#2663) * fix: Fix the Bluetooth interface opening slowly * fix: Fix the font issue in the Bluetooth interface. * [dde-control-center] Updates for project Deepin Desktop Environment (#2659) * fix: adapt datetime interface to 20pt system font size * fix: Fix developer mode links not clicking * fix: Fix the startup menu text not displaying fully * fix: align edit button to right in language module * fix: adapt datetime plugin dialogs for 20pt font size display * fix: Fix account interface focus anomaly * i18n: Updates for project Deepin Desktop Environment (#2649) * fix: Fix the issue of unresponsive spaces * fix: center-align verification switch in boot menu settings * [dde-control-center] Updates for project Deepin Desktop Environment (#2644) * [dde-control-center] Updates for project Deepin Desktop Environment (#2644) * fix: resolve incorrect corner display on hover in default app list * fix: add previousServerAddress recovery mechanism in datetime plugin * i18n: Updates for project Deepin Desktop Environment (#2635) -- zhangkun Thu, 11 Sep 2025 20:58:45 +0800 dde-control-center (6.1.46) unstable; urgency=medium * chore: update color extractor icon binary * fix: fix combobox layout issues in sound settings * fix: Fix the plaintext password to be copied * fix: update DeepinID UI layout and icons * fix: Changing the reset password does not prompt an error * fix: fix gesture group item corner and separator styling * feat: replace rectangle with DciIcon for badge display * i18n: Translate dde-control-center_en.ts in pl (#2618) * fix: adjust notification settings checkbox layout * fix: Adjust the layout of the password change interface * fix: adjust ScrollBar position and width in LangsChooserDialog * fix: Modify the Edit Avatar interface * fix: use ClickStyle instead of magic number * fix: correct ScrollBar position in RegionsChooserWindow * fix: update gesture group combo box background style * fix: rename four finger click animation file * fix: adjust ComboBox width in datetime plugin for better layout * fix: add missing number separators for international locales * fix: show remove button when locale generation is running * fix: resolve loading state inconsistency in LangAndFormat component * style: adjust font size and left margin in multiple QML files * fix: Supplement referral dependencies * fix: prevent region dropdown graying out on language switch * fix: improve face enrollment dialog layout and responsiveness -- zhangkun Thu, 04 Sep 2025 21:47:37 +0800 dde-control-center (6.1.45) unstable; urgency=medium * refactor: standardize shortcut key identifiers naming convention * fix: resolve text truncation in language dialog with large system fonts * Fix: Adapt debugging settings function * fix: standardize font sizes for Wacom plugin menu item titles * fix: correct DBus interface usage in SetTimezone method * i18n: Updates for project Deepin Desktop Environment (#2605) * style: remove explicit width from combo boxes * fix: correct bluetooth mouse icon style issue * fix: Fixed the user group list stuttering * fix: enhance timezone authentication and standardize UI text formatting * fix: Modify the interface layout * fix: Fixed a bug in the developer mode interface * fix: prevent audio effect output when toggling mono audio setting * fix: resolve text truncation issue in ShortcutSettingDialog * fix: align combo label to right (#2599) -- zhangkun Thu, 28 Aug 2025 14:33:41 +0200 dde-control-center (6.1.44) unstable; urgency=medium * style: adjust busy indicator size and positioning * Fix: Modify search list style * fix: Fixed the launch menu display issue * fix: resolve language display order issues in language name formatting * fix: Fixed user group list tab focus failure * [dde-control-center] Updates for project Deepin Desktop Environment (#2591) * Fix: Default display on the primary screen * i18n: Updates for project Deepin Desktop Environment (#2575) * fix: add system shortcut name conflict detection * fix: correct double click speed slider direction (#2588) * fix: resolve bluetooth device more button style issues * fix: Fix the password box display abnormally * fix: resolve delete button hover effect issues in DefaultApp DetailItem * fix: resolve missing corner radius in format list items * fix: adjust DccEditorItem height calculation * fix: update building warnings. * style: update DccLabel font style * feat: enhance privacy plugin UI and functionality * refactor: simplify theme selection UI components -- YeShanShan Thu, 21 Aug 2025 19:47:51 +0800 dde-control-center (6.1.43) unstable; urgency=medium * fix: update region format config flags * chore: update desktop translation * i18n: Updates for project Deepin Desktop Environment (#2573) * fix: adjust notification UI alignment * fix: improve input field UI consistency * fix: adjust password layout spacing and margins * fix: improve shortcut conflict text display * fix: improve Bluetooth UI state handling during power toggle * fix: improve shortcut dialog text consistency * fix: bluetooth device list auto-refresh after power toggle (#2567) -- zhangkun Thu, 14 Aug 2025 20:46:50 +0800 dde-control-center (6.1.42) unstable; urgency=medium * fix: improve bluetooth mode selection stability (#2564) * i18n: Updates for project Deepin Desktop Environment (#2558) * fix: round margin values to prevent subpixel blurring -- wujiangyu Tue, 12 Aug 2025 10:38:51 +0800 dde-control-center (6.1.41) unstable; urgency=medium * fix: improve gesture action data handling * i18n: Updates for project Deepin Desktop Environment (#2552) * fix: Created successfully with the same username and password * fix: add focus support for SearchableListViewPopup -- YeShanShan Thu, 07 Aug 2025 20:52:06 +0800 dde-control-center (6.1.40) unstable; urgency=medium * fix: unsupported relocation error on arm64 -- Wang Zichong Fri, 01 Aug 2025 11:08:00 +0800 dde-control-center (6.1.39) unstable; urgency=medium * chore: remove upper-level datetime_*.ts resources * fix: Modify the translation of Scaling * i18n: Updates for project Deepin Desktop Environment (#2549) * fix: update double click speed slider labels * style: adjust datetime plugin UI elements * fix: remove unnecessary trim in Bluetooth device name validation * fix: Cursor display jumps add text measurement and auto-alignment for text field * i18n: Updates for project Deepin Desktop Environment (#2545) * fix: remove unused QString to UnicodeString convert * fix: remove the need of `datetime_language.ts` and `datetime_country.ts` * i18n: Updates for project Deepin Desktop Environment (#2543) * chore: update ts files * i18n: Translate dde-control-center_en.ts in es (#2541) * fix: remove the need of `keyboard_language.ts` resources * i18n: Updates for project Deepin Desktop Environment (#2521) * fix: add fallback for empty app icons in notification plugin * fix: show shortcut keys in edit mode * refactor: remove redundant textColor property in NativeInfoPage * fix: allow saving shortcuts with modifier-only keys * feat: adjust notification combo box width * fix: Fixed the issue of incomplete display of large fonts * fix: Modify search error issues * fix: Modify the schematic diagram style * fix: resolve active color inconsistency in timezone menu popup * fix: Change the size of the hover background * fix: Fixed the issue of pop-up theme mismatch * fix: resolve theme adaptation issues in RegionsChooserWindow dark mode * fix: resolve cancel operation in shortcut setting dialog * fix: Fix mailbox errors * fix: Fix the startup screen * fix: reset view position when searching in RegionFormatDialog * fix: resolve empty region list after clearing search input * fix: The error message is fixed -- YeShanShan Thu, 31 Jul 2025 19:42:46 +0800 dde-control-center (6.1.38) unstable; urgency=medium * i18n: Updates for project Deepin Desktop Environment (#2519) -- zhangkun Fri, 18 Jul 2025 15:08:00 +0800 dde-control-center (6.1.37) unstable; urgency=medium * fix: Update text errors * [dde-control-center] Updates for project Deepin Desktop Environment (#2512) * fix: Fixed Bluetooth device status not refreshing * fix: hide noise suppression setting when input device is bluetooth * fix: Modifying icons does not change with the theme -- zhangkun Fri, 18 Jul 2025 13:58:02 +0800 dde-control-center (6.1.36) unstable; urgency=medium * fix: Worng state in power anagement * fix: resolve keyboard layout addition failure * fix: Fix password error prompt issue * i18n: Updates for project Deepin Desktop Environment (#2500) * fix: resolve audio feedback issue when adjusting volume from 0% to 100% * refactor: clean up QML properties and connections * fix: improve region selection menu styling and interaction * style: remove redundant textColor properties in DccWindow * fix: The issue of renaming user groups is fixed * fix: adjust text opacity in LangAndFormat for better visibility * fix: Fixed the Bluetooth speaker icon error * fix: Fixed the issue of customizing the avatar -- WuJiangYu Wed, 16 Jul 2025 10:47:37 +0800 dde-control-center (6.1.35) unstable; urgency=medium * i18n: Translate dde-control-center_en.ts in zh_TW * i18n: Translate dde-control-center_en.ts in zh_HK * i18n: Translate dde-control-center_en.ts in zh_CN * i18n: Translate dde-control-center_en.ts in hu * i18n: Translate dde-control-center_en.ts in fi * i18n: Translate dde-control-center_en.ts in pl * i18n: Translate dde-control-center_en.ts in sv * i18n: Translate dde-control-center_en.ts in az * i18n: Translate dde-control-center_en.ts in vi * i18n: Translate dde-control-center_en.ts in kab * i18n: Translate dde-control-center_en.ts in pt_BR * i18n: Translate dde-control-center_en.ts in zh_HK * i18n: Translate dde-control-center_en.ts in fr * i18n: Translate dde-control-center_en.ts in ko * i18n: Translate dde-control-center_en.ts in ru * i18n: Translate dde-control-center_en.ts in sl * i18n: Translate dde-control-center_en.ts in zh_CN * i18n: Translate dde-control-center_en.ts in gl_ES * i18n: Translate dde-control-center_en.ts in zh_TW * i18n: Translate dde-control-center_en.ts in th * i18n: Translate dde-control-center_en.ts in ja * i18n: Translate dde-control-center_en.ts in es * i18n: Translate dde-control-center_en.ts in sq * i18n: Translate dde-control-center_en.ts in ne * i18n: Translate dde-control-center_en.ts in uk * i18n: Translate dde-control-center_en.ts in kk * i18n: Translate dde-control-center_en.ts in de_DE * i18n: Translate dde-control-center_en.ts in bn * i18n: Translate dde-control-center_en.ts in ca * i18n: Translate dde-control-center_en.ts in tr * i18n: Translate dde-control-center_en.ts in he * i18n: Translate dde-control-center_en.ts in et * i18n: Translate dde-control-center_en.ts in ar * feat: add locale generation support and UI indicators * fix: resolve missing number format in region settings * i18n: Translate dde-control-center_en.ts in zh_CN * i18n: Translate dde-control-center_en.ts in zh_TW * i18n: Translate dde-control-center_en.ts in zh_HK * i18n: Translate dde-control-center_en.ts in ru * i18n: Translate dde-control-center_en.ts in kk * i18n: Translate dde-control-center_en.ts in kab * i18n: Translate dde-control-center_en.ts in sq * i18n: Translate dde-control-center_en.ts in fr * i18n: Translate dde-control-center_en.ts in de_DE * i18n: Translate dde-control-center_en.ts in zh_CN * i18n: Translate dde-control-center_en.ts in he * i18n: Translate dde-control-center_en.ts in th * i18n: Translate dde-control-center_en.ts in vi * i18n: Translate dde-control-center_en.ts in ne * i18n: Translate dde-control-center_en.ts in pt_BR * i18n: Translate dde-control-center_en.ts in bn * i18n: Translate dde-control-center_en.ts in hu * i18n: Translate dde-control-center_en.ts in ca * i18n: Translate dde-control-center_en.ts in fi * i18n: Translate dde-control-center_en.ts in uk * i18n: Translate dde-control-center_en.ts in pl * i18n: Translate dde-control-center_en.ts in gl_ES * i18n: Translate dde-control-center_en.ts in sl * i18n: Translate dde-control-center_en.ts in tr * i18n: Translate dde-control-center_en.ts in az * i18n: Translate dde-control-center_en.ts in zh_HK * i18n: Translate dde-control-center_en.ts in et * i18n: Translate dde-control-center_en.ts in es * i18n: Translate dde-control-center_en.ts in zh_TW * i18n: Translate dde-control-center_en.ts in sv * i18n: Translate dde-control-center_en.ts in ko * i18n: Translate dde-control-center_en.ts in ja * i18n: Translate dde-control-center_en.ts in ar * fix: improve nickname modification handling and validation * i18n: Updates for project Deepin Desktop Environment (#2491) * fix: Unprocessed screen scaling * fix: Fixed the issue of right-clicking to exit editing * fix: Modify the schematic diagram style * fix: The issue of creating a new user prompt is fixed * fix: Fixed the sorting issue of Bluetooth devices * [dde-control-center] Updates for project Deepin Desktop Environment (#2470) * feat: implement avatar caching system * fix: Fixed the dynamic display in Security Center * fix: hide balance control for handsfree devices * fix: prevent bottom button occlusion in RegionFormatDialog * fix: prevent scrollbar overflow in region selection dropdown * fix: Volume adjustment display issue Update font size and add transparency to volume percentage labels * fix: Fix file prompts that are not supported * fix: fix region and format panel layout in TimeAndDate dialog * fix: Fixed the user group focus issue * fix: improve shortcut conflict handling and data persistence * fix: prevent duplicate shortcut conflict errors * fix: prevent bottom clipping at maximum font size -- zhangkun Thu, 10 Jul 2025 21:52:38 +0800 dde-control-center (6.1.34) unstable; urgency=medium * refactor: clean up code and optimize variable declarations * fix: The fingerprint animation is too small * feat: Add development and debugging options to the community version -- caixiangrong Fri, 04 Jul 2025 09:28:25 +0800 dde-control-center (6.1.33) unstable; urgency=medium * fix: Fix symbolic link error * i18n: Updates for project Deepin Desktop Environment (#2463) * fix: Add image caching processing * fix: Fix the issue of abnormal display of user types * fix: Modify the button style * fix: optimize search bar layout metrics in ListViewPopup * fix(power): The first modification of custom shutdown does not take effect * fix: Add schematic text shadow * fix: Fixed the issue that custom avatars were displayed incorrectly * chore: avoid hard-code compiler options in CMakeLists.txt * fix: enhance timezone selector layout and display * fix: Modify the issue of incomplete text display in Crumb * fix: Fixed the issue that the upload avatar was set immediately * fix: Scheduled shutdown dialog date synchronization issue Initialize `selectedDays` as empty and sync with latest model data on dialog visibility. Centralizes reset logic in `syncSelectedDays()` function called during: - Dialog visibility changes - Closing/cancellation actions - Cancel button click * fix: resolve oversized edit button font in language settings * fix: Add error handling for opening developer mode * fix: adjust language selector layout alignment * Make the string translatable * fix: preserve balance when toggling mono audio and adjust UI weights * fix: Fix compilation warning * fix: prevent focus on keyboard shortcut edit buttons * fix: Fixed some copywriting errors * fix: Fixed the Bluetooth sorting issue of links * chore: add option to disable privacy'n'security plugin * fix: Modify the Create User dialog box * fix: round volume values to avoid floating point precision issues * fix: add shortcut clearing functionality in keyboard module * fix: Fixed the issue that the settings menu was opened * fix: position regions chooser window at mouse click position * fix: adjust UI spacing and fonts in Region and Language interface * fix: Fixed the issue that the blur effect was abnormal * fix: Fixed the wrong selection of the active color * fix: remove duplicate Numeric Keypad display names in keyboard settings * fix: Fix creating user interface display * fix: maintain selected region when filtering in RegionFormatDialog * fix: improve icon handling and UI components * fix(accounts): The 'Quick Login' option is not hidden correctly -- WuJiangYu Thu, 03 Jul 2025 19:59:25 +0800 dde-control-center (6.1.32) unstable; urgency=medium * i18n: Updates for project Deepin Desktop Environment (#2419) * chore: remove reginal variants for es language * fix: update deepin ID notification for UOS compatibility * refactor: add Q_UNUSED macros to unused parameters * i18n: Updates for project Deepin Desktop Environment (#2415) -- caixiangrong Mon, 23 Jun 2025 16:58:03 +0800 dde-control-center (6.1.31) unstable; urgency=medium * fix: Open all keyboard layouts -- caixiangrong Thu, 19 Jun 2025 16:43:03 +0800 dde-control-center (6.1.30) unstable; urgency=medium * fix: hide pressure sensitivity settings in mouse mode * refactor: reorganize shutdown time signal and handling * fix: resolve spacing and font issues in touchpad components * fix: adjust spacing and margins in LangsChooserDialog * fix: Fix the issue of incomplete text display * fix: Block keyboard lock function * fix: Fixed text position anomalies * fix: resolve button hover effects in MicrophonePage * fix: add missing hover effects for shortcut editing buttons * fix: Fixed icon exceptions * i18n: Translate dde-control-center_en.ts in uk (#2399) * fix: Fixed the issue of font display in user groups * fix: reduce excessive spacing between list items in LangAndFormat * fix: reduce excessive spacing between setting sections in TimeAndDate * fix: align placeholder text to left in custom NTP server input field * i18n: Updates for project Deepin Desktop Environment (#2378) * fix: modify opacity slide Min value as 25%. * fix: adapt custom server confirm button for screen scaling * fix: resolve volume icon hover effect issues in SpeakerPage * fix: Fix default display for unnamed Bluetooth * fix: resolve play button icon display in sound effects * style: reorder member variable initialization -- zhangkun Thu, 19 Jun 2025 10:09:03 +0800 dde-control-center (6.1.29) unstable; urgency=medium * fix: Fixed the failure of uploading an avatar * fix: Fix activation status not syncing * fix: Modify the processing method of the identify window * fix: ScheduledShutdownDialog cancel behavior on close * fix: standardize icon naming in TimeAndDate component * fix: resolve caps lock toggle functionality in keyboard plugin * fix: Modify brightness text style * fix: hide Touchpad gesture options when disabled * fix: Fix search no results * fix: The fixed issue is prompt for creating a user with the same name * fix: Add notification jump processing * fix: resolve editing state issue in Shortcuts component * fix: Fixed the display of developer mode * i18n: Updates for project Deepin Desktop Environment (#2370) * fix: improve RegionsChooserWindow layout and scrolling experience * fix: handle empty text input in DateTimeSettingDialog * fix: Fixed the issue of user group clicking * fix: Modify the height spacing * fix: customize spinbox input validation in DateTimeSettingDialog * chore: update debian control * i18n: Translate dde-control-center_en.ts in zh_TW (#2368) * i18n: Updates for project Deepin Desktop Environment (#2363) -- caixiangrong Thu, 12 Jun 2025 16:40:40 +0800 dde-control-center (6.1.28) unstable; urgency=medium * refactor: migrate RSA encryption to EVP API * style: add unused parameter markers and fix member order * feat: add battery power state awareness to screensaver * fix: add POST_BUILD to custom commands * fix: update translation with QuickLogin and Lock Dock * fix: Add a user group error message * feat: add Lock the height of dock. * feat: add quick login. * fix: improve caps lock and num lock toggle functionality * fix: add disambiguation context for "Medium" copywriting * i18n: Updates for project Deepin Desktop Environment (#2352) * fix: prevent key sequence recording when edit button is clicked * fix: Add a full name error message * fix: Fixed the issue that the error message was displayed * fix: Fix text length limit * fix: adjust text handling in KeyboardLayout component * feat: Implement keyboard on/off authentication * feat: The mode is not updated when only one screen is switched * fix: optimize scrolling experience in Shortcuts component * fix: Mask input field copy operations * fix: Modify menu translations * fix: optimize input field layout and validation in TimeAndDate * feat: update moudle translation * feat: Implement keyboard on/off function * fix: remove redundant displayName properties in sound component * fix: Fixed the issue of the background color of the list item hover * fix: Optimized the focus of the user group list * fix: optimize volume control step size for better usability * fix: improve deepinid plugin initialization and activation logic * i18n: Updates for project Deepin Desktop Environment (#2329) * fix: Modifying desktop display without options issue * i18n: Updates for project Deepin Desktop Environment (#2326) -- zhangkun Thu, 05 Jun 2025 21:38:17 +0800 dde-control-center (6.1.27) unstable; urgency=medium * fix: Edit compilation warning * fix: Modify the style of the ComboBox * fix: Modify confirmation window coordinate error * fix: Fixed the computer name error message * chore: use day name from Locale.standaloneDayName() * fix: Modify duplicate settings issue * fix: enhance clear button UI and padding in TimeAndDate * fix: Fixed the issue that Bluetooth did not refresh automatically * fix: Add password hint restrictions * fix: Duplicate applications can be added in the default program * fix: improve text visibility in TimeAndDate component * fix: resolve con loading in LangsChooserDialog * feat: Add URL fuzzy matching function * fix: resolve shortcut conflicts by adding type parameter * fix: Fixed the issue that the menu position was abnormal * fix: remove ai-assistant from assistive tools filter * fix: The default program appears in recent installations * fix: Fixed the issue of slow creation of multiple accounts * fix: preserve custom shortcut order in ShortcutModel * fix: optimize window switch handling in keyboard plugin * chore: Update QML imports for compatibility with Qt >= 6.9 * fix: Fix the blank context menu issue * fix: Fixed the issue that the button text was not displayed completely * fix: optimize text filtering in keyboard shortcuts * fix: The scrollbar does not display * fix: Modify time input control * fix: Same page return and item animation * fix: update focus handling in Common * chore: update UI text descriptions and translations * feat: disables search in privacy plugin settings * fix: Fixed the issue that the font size did not change with the change * fix: optimize input field widths on Sound page * fix: Modify custom time rules * style: add subtle borders to preview containers * fix: adjust sound name width with ellipsis in TimeAndDate * fix: Fixed the issue that the font size did not change with the change * fix: Modify the text ellipsis effect * style: improve window blur color handling * fix: prevent duplicate format in TimeAndDate component * chore: Update obs workflows.yml * fix: update numberKeepList with Arabic thousands separator * fix: update time format strings in RegionProxy * fix: Add Bluetooth connection animation * fix: add wrap support for datetime spinboxes * fix: Fixed the issue that other account status was abnormal * fix: adjust component heights and vertical alignment for localization * refactor: improve scheduled shutdown dialog handling * fix: Fix the issue of user group name not displaying completely * fix: The following is fixed for the user group sorting error * fix: improve text visibility in Label components * fix: The default program of the terminal cannot be set * fix: No search results related to performance mode * fix: Tab key cannot traverse application notifications -- zhangkun Thu, 29 May 2025 17:31:02 +0800 dde-control-center (6.1.26) unstable; urgency=medium * fix: ensure plain text format in KeySequenceDisplay * fix: Correct spelling errors * fix: improve sound device combo box dynamic sizing * fix: disable power management features in virtual environments * fix: adjust device page plugin order * fix: The application name contains the deepin character * fix: Fix the issue of names that are too long not being truncated. * fix: improve language label display in LangsChooserDialog * fix: Fix the display issue of the new creation failure interface. * fix: disable focus on shortcut operation buttons * fix: Modify custom time rules * fix(auth): adjust unreasonable UI -- xionglinlin Thu, 15 May 2025 22:05:47 +0800 dde-control-center (6.1.25) unstable; urgency=medium * fix: Modifying settings for copying mode issues * fix: Fix the hyperlink issue in the user interface * fix: Fix Bluetooth rename prompt error * fix: correct week start day format index * fix: Fix text style * fix: Fix the button text display issue * fix: hide play button background * fix: improve datetime format handling for non-Chinese locales * i18n: Updates for project Deepin Desktop Environment (#2244) * fix: preserve original language data in LanguageListModel -- YeShanShan Tue, 13 May 2025 16:28:40 +0800 dde-control-center (6.1.24) unstable; urgency=medium * fix: optimize slider behavior in sound control center * fix: improve country name translation in datetime module * fix: update mouse double-click speed slider labels * fix: Fixed the issue that hyperlinks did not have context menus * fix: Fixed the Bluetooth switch issue in airplane mode * fix: Fixed the lack of hover effect for list items * fix: Modify the height of the sidebar item * fix: improve time format handling in datetime model * feat: adapt to WallpaperChanged signal * fix: Modify and check password strength issues * fix: Add keyboard_language generation script * i18n: Updates for project Deepin Desktop Environment (#2233) * fix: Fix layout errors * fix: update font in ShortcutSettingDialog * fix: Fixed the issue that the rename was empty * i18n: Updates for project Deepin Desktop Environment (#2229) -- YeShanShan Thu, 08 May 2025 16:44:23 +0800 dde-control-center (6.1.23) unstable; urgency=medium * fix: Add new language translation * fix: The issue of abnormal mouse style is fixed * fix: clear filter wildcard in LangsChooserDialog when deactivated * fix: failed to retrieve search results for grand searching * fix: Fixed the issue that the test content was not cleared * fix: adjust icon size in LangAndFormat component * fix: update locale in currentTime() * fix: Fixed the error of opening the default path * i18n: Updates for project Deepin Desktop Environment (#2218) * fix: update system time zone check in addUserTimeZone method * fix: Fixed the issue that the error content did not disappear * fix: add setFirstDayOfWeek call in setCurrentFormat * fix: Fixed the background exception of mouse operation * fix: resolve display issues in TimeAndDate component * fix: Modify the width of the strong reminder box * fix: Update Chinese translation * fix: Fixed that the password was empty and could still be determined * feat: DccCheckIcon defaults to checked status * fix: Modify search term configuration * fix: enhance SearchableListViewPopup and TimeAndDate components * fix: Fixed the issue that Bluetooth was renamed to empty * fix: Fixed the error issue of changing the full name * fix: Fixed the issue of waiting for Bluetooth to be turned on and off * fix: The issue of setting the background of grub startup is fixed -- YeShanShan Tue, 29 Apr 2025 13:16:21 +0800 dde-control-center (6.1.22) unstable; urgency=medium * fix: Display window only when DBus calls ShowPage * fix: Update error messages for camera occupancy * i18n: Updates for project Deepin Desktop Environment (#2198) * fix: add stopSoundEffectPlayback method and integrate into SoundEffectsPage * fix: Fixed the Bluetooth list loading issue * i18n: Updates for project Deepin Desktop Environment (#2194) * fix: Can be renamed to a duplicate name * fix: update sound effects and animations for theme support * fix: Fixed the Bluetooth name display issue -- caixiangrong Tue, 22 Apr 2025 15:52:20 +0800 dde-control-center (6.1.21) unstable; urgency=medium * fix: Compatible with previous command parameters * fix: Return hierarchy error * fix: Return hierarchy error * fix: use system locale for date formatting * fix: Add translation language types * fix: use system locale for date formatting * fix: Added error sounds * fix: Modify the translation loading location * fix: The title is displayed incorrectly. * fix: Add secure compilation parameters * i18n: Updates for project Deepin Desktop Environment (#2171) * fix: improve timezone selection persistence in search * fix: The issue of user group editing is fixed * fix: always include switch-monitors in system shortcuts filter * fix: Fixed the Bluetooth checkbox clicking issue * fix: simplify NTP server validation and address assignment * fix: missing unchecked state for DccCheckIcon * fix: ScorllBar still hide when hovered * feat: Support the user agreement for UosMilitary * fix: copyright cannot display Chinese * fix: Add the computer name tooltip * i18n: Updates for project Deepin Desktop Environment (#2168) * fix: Fixed the issue of formula bar style * fix: The issue that the username is displayed too long is fixed * fix: The issue that the group title is not refreshed in time is fixed * fix: disable microphone input level slider interaction * i18n: Updates for project Deepin Desktop Environment (#2156) -- caixiangrong Thu, 17 Apr 2025 16:32:20 +0800 dde-control-center (6.1.20) unstable; urgency=medium * refact: migrate plugin-update to deepin-update-ui * fix: remove redundant locale config when setting region * fix: improve SearchableListViewPopup positioning and visibility * fix: Fixed text color errors * fix: The issue that the username is displayed abnormally is fixed * fix: Fixed the issue that the full name could not be set to the blank * fix: number separator issue in SpinBox with C locale * fix: Fixed the profile picture background issue * fix: Fixed the issue that the font size does not change * fix: adjust UI for DccCheckIcon * fix: Fixed it was not refreshed in time when switching theme displays * fix: prevent duplicate timezone between system and user lists * i18n: Updates for project Deepin Desktop Environment (#2154) * i18n: Updates for project Deepin Desktop Environment (#2153) -- YeShanShan Thu, 10 Apr 2025 15:49:14 +0800 dde-control-center (6.1.19) unstable; urgency=medium * feat: modify the system configuration items of the deepinid * fix: No configuration written after modifying the region format * chore: update README.md and translations in desktop file * i18n: Updates for project Deepin Desktop Environment (#2147) * fix: typo mistakes (#2145) * i18n: Updates for project Deepin Desktop Environment (#2146) * fix(personalization): UI optimization * fix: Modify Crumb spacing * fix: No configuration written after modifying the region format * i18n: Updates for project Deepin Desktop Environment (#2140) * fix: Remove Qt5 dependencies * fix: wallpaper interface loads slowly * fix: Modify search list keyboard interaction * fix: Modify the style of the return key * i18n: Updates for project Deepin Desktop Environment (#2138) * fix: fix typo and update ts files * i18n: Updates for project Deepin Desktop Environment (#2136) * fix: minor typos (#2134) * fix: add update moudle check error tips * i18n: Updates for project Deepin Desktop Environment (#2131) * i18n: Updates for project Deepin Desktop Environment (#2130) * fix: add transifex config -- caixiangrong Thu, 27 Mar 2025 15:52:20 +0800 dde-control-center (6.1.18) unstable; urgency=medium * fix: The issue of intercepting mouse events while modifying the ComboBox * fix: Adjust the ListView UI * chore(power): update translate * fix(power): ui optimization * fix: Modify Crumb style * fix: add transifex config * fix: the number of wallpapers displayed has not been updated * fix: no hide 'Show the shutdown Interface' option on lid close * fix: Modifying cursor style issues * fix: Modify Control Center Exit Deadlock Issue * fix: Notification preview image without dark mode * fix: develop moudel add get debug level * fix: change sound list model enabled * fix: Can delete logged-in users -- caixiangrong Thu, 20 Mar 2025 17:52:20 +0800 dde-control-center (6.1.17) unstable; urgency=medium * fix: occasionally crashes when switching wallpapers on multiple screens -- zhangkun Tue, 18 Mar 2025 10:27:40 +0800 dde-control-center (6.1.16) unstable; urgency=medium * chore: update icon * fix: add Bluetooth name and icon margin -- caixiangrong Wed, 12 Mar 2025 13:31:20 +0800 dde-control-center (6.1.15) unstable; urgency=medium * fix: Missing application notification title * fix: langAndFormat moudle Reset button width * fix: Change username to root * fix: update touchscreen icon * fix: No response to jump datetime module * feat: comment unadapted system configuration items -- xionglinlin Tue, 11 Mar 2025 16:22:22 +0800 dde-control-center (6.1.14) unstable; urgency=medium * fix: Add eye protection mode * fix: Change the image of the startup menu * fix: appearance theme can not change by property changed * chore: update icons * fix: update developerMode translation * chore(bluetooth): update icon * feat(power): Adjust and optimize the UI * fix: Modify the button hierarchy of the title bar * fix: change system version info to Authorization Property data * chore: hide compact mode * chore(power): update icon * fix: Continuous calls to the enroll interface may not initiate enroll * typo: Correct the interface of the PropertiesChanged signal * fix: Fix overlapping issue in the control center display schematic adjustment * fix: update status is incorrect * fix: Modify the disappearance issue of the network interface * fix: Abnormal display of modify delete button -- zhangkun Thu, 06 Mar 2025 19:30:52 +0800 dde-control-center (6.1.13) unstable; urgency=medium * chore: add dde-control-center-dock conflict -- zhangkun Fri, 28 Feb 2025 17:22:58 +0800 dde-control-center (6.1.12) unstable; urgency=medium * fix: update moudle add reday state * fix: update User Experience Program text * chore(personalization): Custom images are prohibited from selecting GIF and svg images * fix: combobox for slideShow wallpaper will not select 'never' * fix: Occasionally crash when exiting * fit: Modify the display logic of the monitor title * fix: font combobox displays incomplete font names * chore(power): Unhide the auto shutdown module on treeland * fit: No response after switching to only the secondary screen * chore(update): update icon * fit: Modifying the unplugged network card caused a crash issue * fit: When merge mode, masking should not be re spliced * fix: update bluetooth icon * fix: update commonInfo translation * fix: first thumb name is empty * fix: fix develop mode status issue * fit: Modify the display rules of the Identify button * fix: the configuration of hide combobox options does not take effect * feat: hide privacy on non uos * fit: No character rule verification * fit: Modify screen stitching overlap issue * fix: fix develop mode status issue * fix: unlock when not locked * fix: biometric authentication sometimes not displaying * chore(wallpaper): update translate * chore(dock): update include * feat: add dock plugin -- shenwenqi Fri, 28 Feb 2025 14:40:53 +0800 dde-control-center (6.1.11) unstable; urgency=medium * feat: add dock plugin -- zhangkun Fri, 21 Feb 2025 17:18:53 +0800 dde-control-center (6.1.10) unstable; urgency=medium * feat: Support selecting monitor when setting wallpaper * fix: can not click setting button when setting picture screensaver * fix: the opacity has abnormally reached its maximum value in treeland * feat: Add tab key navigation interaction function * chore: update custom solidwallpapers path * chore(personalization): update translate * feat: add wallpaper and screensaver * fix: update Bluetooth list ui * feat: update moudle translation * feat: update moudle adapter Lastore daemon * fix: multiple accounts can be enabled for automatic login * fix: standardUser can change other account passwords * fix: The bottom button is not fully displayed -- zhangkun Fri, 21 Feb 2025 15:49:34 +0800 dde-control-center (6.1.9) unstable; urgency=medium * fix(privacy): some applications that have been abnormally excluded * feat(BiometricAuth): Add fingerprint registration animation and Reasonably hide modules * feat: Provide interfaces for setting wallpapers and themeType * feat: Update icon * feat: Update display module translation * feat: Display module screen splicing function * fix: delete update moudel list item implicitHeight * fix: modify Bluetooth moudle edit button style * fix: Plugin status updates are processed in the main thread through signaling * fix: modify update actionBtn width * fix: modify bluetooth moudel redo icon path * fix: Incorrect setting of suspend mode to hibernate mode * fix: Incorrect password modification function for other accounts * fix: bluetooth moudle change button to toolbutton * fix: add bluetooth device not update model * fix: update touchpad translation * fix: touchpad finger animation not update * feat: add biometric authentication module -- zhangkun Fri, 14 Feb 2025 10:38:44 +0800 dde-control-center (6.1.8) unstable; urgency=medium * feat: override icu database * fix: Modify the issue of dconfig saving crashing and freezing * feat: impl privacy * fix: Modify memory release issue * feat: 初步实现生物认证-人脸识别 -- zhangkun Thu, 23 Jan 2025 17:21:20 +0800 dde-control-center (6.1.7) unstable; urgency=medium * fix: Adjust default program UI style * feat: add mouse touchpad gesture module (#2000) * feat: Temporarily hide account and security modules (#1999) * feat: update deepinid module (#1997) -- caixiangrong Tue, 14 Jan 2025 16:46:20 +0800 dde-control-center (6.1.6) unstable; urgency=medium * fix: Add default program functionality * fix: Error in modifying the setting area * fix: Adjust the UI style of the control center * fix: update system update icon * fix: update keyboard icon -- zhangkun Fri, 10 Jan 2025 14:34:23 +0800 dde-control-center (6.1.5) unstable; urgency=medium * fix: Modify the UI style of the list view * fix: delete boot menu background color (#1987) * fix: add mouse and keyboard icon (#1988) * fix: the icon for sending system notifications is incorrect * fix: Adjust bluetooth more button size * chore: do not fullscreen on space key pressed * feat: Add the function of modifying screen scale * fix: Adjust sound combobox mode data (#1983) * chore: hide edit button when item count < 2 * chore: dialog set fix size * fix: Adjust the bluetooth module UI (#1980) -- zhangkun Thu, 02 Jan 2025 13:52:51 +0800 dde-control-center (6.1.4) unstable; urgency=medium * fix: Adjust the audio module UI * fix: abnormal hiding of some items on Treeland * fix: Modify exit crash issue * fix: button size tweak * chore: CustomAvatarEmptyArea text align tweak * fix: update systeminfo ui * chore(personalization): ui optimization * fix: arrow button error in dark mode * fix: crash when saving avatar * fix: option to set the 'titlebarHeight' for Combbox is empty * feat: Modify sidebar behavior * fix: shortcut modify failed * chore: account view loading speed optimized * fix: RegionFormatDialog view background missing * chore: disable timezone clock animation * fix: region chooser window color and position error -- zhangkun Tue, 24 Dec 2024 19:29:24 +0800 dde-control-center (6.1.3) unstable; urgency=medium * release 6.1.3 -- shenwenqi Mon, 23 Dec 2024 10:28:31 +0800 dde-control-center (6.1.2) unstable; urgency=medium * release 6.1.2 -- shenwenqi Fri, 20 Dec 2024 11:30:42 +0800 dde-control-center (6.1.1) unstable; urgency=medium * release 6.1.1 -- Mike Chen Thu, 19 Dec 2024 11:06:42 +0800 dde-control-center (6.1.0) unstable; urgency=medium * fix: Failed to modify DBus jump issue * fix: long date formats error -- caixiangrong Mon, 16 Dec 2024 16:33:40 +0800 dde-control-center (6.0.78) unstable; urgency=medium * 6.0.78 -- Wang Fei Fri, 13 Dec 2024 13:46:35 +0800 dde-control-center (6.0.77) unstable; urgency=medium * fix: Fix incorrect page status after the update is completed * chore: adjust active colors * chore: keyboard translations tweak * chore: update datetime/language translations * chore: add keboard layout tips * chore(power): update translate * chore(personalization): update translate * fix: modify deepinid module display name * fix: have no input device,there are input titles and prompt texts (#1873) * fix: DBus adds asynchronous return processing * feat: add audio Mono (#1871) * chore: dcc focus tweak * Fix: update bluetooth translation * fix: wallpaper color selection is not effective * fix: region format init failed * fix: wrong lib install path * feat: Modify translation processing errors * chore: udpate keyboard shortcut translations * fix(personnalization): screen select combobox is empty * feat: Update menu item description * feat: add sound description (#1859) * chore: update date and time translations * chore(personalization): update activeColor list * fix: hidden developer mode (#1856) * fix: system/custom timezone datas affect each other * fix(power): The sliding bar scale value is incorrect * feat: update audio framework translations (#1853) * fix: Modifying DBus cannot redirect properly * feat: Add audio framework module (#1850) * feat: Update weight * feat: Update {name}Main translation * feat: Change main.qml to {name}Main.qm * fix: window effect no background * feat: Update display,notification,deepinid,wacom,touchscreen translation * chore: update power and personalization translations * chore: keyboard visble tweak * chore: update datetime/accounts translations * feat: Update translations for Bluetooth, General, System Information, Sound, etc. * chore: update power translations * feat: Update translation * chore: datetime translation tweak * chore: init ts files * fix: Modify update description (#1832) * fix: Update workflows.yml * fix(build): display module arm64 build failed * fix: Hide menu without touchpad * fix: font size error * fix: font Combobox is empty * fix: update deepinid description * feat: Add display module * feat: Update workflows.yml * fix: language set failed * fix: Setting activity color invalid * fix: Personalization module starts slowly in Treeland * feat: dcc deepinid module * fix: Create a new object when calling getSectionItem * fix: zoom shortcut filter tweak * chore: use AP instead of ap/Ap * fix: system timezone setting error * feat: Added initial version update function * feat: Treeland adaptation of personalized modules * feat: add the StartupWMClass field to the desktop file * fix: ntp server list can not scroll * fix: The hoverEnabled of DccItem defaults to true * feat: add current acount page * feat: add account module * chore: time date tweak * fix: loading plugin crashed * chore: time date display tweak * fix: Add DCI search path -- Zhangkun Fri, 06 Dec 2024 16:25:17 +0800 dde-control-center (6.0.76.2) unstable; urgency=medium * release 6.0.76.2 -- Zhangkun Fri, 22 Nov 2024 11:18:36 +0800 dde-control-center (6.0.76.1) unstable; urgency=medium * fix: modify keyboard name(Task: 361721) -- caixiangrong Wed, 20 Nov 2024 16:09:40 +0800 dde-control-center (6.0.76) unstable; urgency=medium * feat: Implement notification module code(Task: 366517) * fix: Multiple creation issues with modifying plugin objects(Task: 361721) * feat: Improve the interface of the control center(Task: 361721) * fix: Add DccSetingsObject(Task: 361721) * fix: modify keyboard name(Task: 361721) -- Deepin Packages Builder Wed, 20 Nov 2024 13:39:40 +0800 dde-control-center (6.0.75) unstable; urgency=medium * release 6.0.75 -- xionglinlin Thu, 14 Nov 2024 10:00:17 +0800 dde-control-center (6.0.74) UNRELEASED; urgency=medium * release 6.0.74 -- Zhangkun Fri, 08 Nov 2024 14:26:12 +0800 dde-control-center (6.0.73) unstable; urgency=medium * release 6.0.73 -- Zhangkun Thu, 07 Nov 2024 15:58:29 +0800 dde-control-center (6.0.72) unstable; urgency=medium * release 6.0.72 -- Mike Chen Thu, 31 Oct 2024 13:36:34 +0800 dde-control-center (6.0.71) unstable; urgency=medium * Release 6.0.71 * fix: adapt to compact mode -- Zhang Kun Thu, 24 Oct 2024 19:09:05 +0800 dde-control-center (6.0.70) unstable; urgency=medium * chore: add translations about time format * chore: add the country feature * fix: Modify the style of the image source list widget * chore: Add 'qt6-declarative-private-dev' dependency in control * fix: Fixed the problem of obtaining the path of the boot menu theme image * feat: 蓝牙图标改成和dde-tray-loader一样的内建图标 * feat: Control Center-General Module Design and Transformation * feat: add dccrepeater * feat: implement personalized module -- Yutao Meng Wed, 16 Oct 2024 17:29:08 +0800 dde-control-center (6.0.69) unstable; urgency=medium * Display compact mode -- Zhang Kun Sat, 12 Oct 2024 10:28:49 +0800 dde-control-center (6.0.68) unstable; urgency=medium * release 6.0.68 -- Mike Chen Fri, 27 Sep 2024 14:11:00 +0800 dde-control-center (6.0.67) unstable; urgency=medium * fix: incorrect bluetooth device icon theme type -- xionglinlin Wed, 25 Sep 2024 17:58:11 +0800 dde-control-center (6.0.66) unstable; urgency=medium * release 6.0.66 * feat: remove linglong update * feat: add compact mode and hide it by default -- Zhang Kun Thu, 12 Sep 2024 15:49:46 +0800 dde-control-center (6.0.65) unstable; urgency=medium * fix: need click twice to set hidden dock plugin visible -- Yutao Meng Wed, 04 Sep 2024 16:47:38 +0800 dde-control-center (6.0.64) unstable; urgency=medium * bump version to 6.0.64 -- Deepin Packages Builder Thu, 29 Aug 2024 10:34:15 +0800 dde-control-center (6.0.63) unstable; urgency=medium * fix: set search popup distance from searchLineEdit to 8 (#1675)(Issue: 10398) -- Deepin Packages Builder Thu, 22 Aug 2024 11:02:02 +0800 dde-control-center (6.0.62) unstable; urgency=medium * bump version to 6.0.62 -- Deepin Packages Builder Wed, 14 Aug 2024 14:42:16 +0800 dde-control-center (6.0.61) unstable; urgency=medium * fix: dock panel min size error(Issue: 10069)(Influence: can adjust dock's min size) -- Deepin Packages Builder Tue, 06 Aug 2024 15:45:27 +0800 dde-control-center (6.0.60) unstable; urgency=medium * fix: Fixed the problem that the icon cannot be retrieved from the system monitor (#1661)(issue: 9833) * fix: Add screenshot plug-in icon (#1662)(Issue: 9944) -- zyz Wed, 31 Jul 2024 14:48:00 +0800 dde-control-center (6.0.59) unstable; urgency=medium * fix: module object name setting error (#1655)(Influence: module can jump normally) * fix: remove some shortcuts(Issue: 9599) * fix: Fix crash when switching Light/Dark theme(Issue: 9883) -- zyz Wed, 24 Jul 2024 14:16:00 +0800 dde-control-center (6.0.58) unstable; urgency=medium * chore: compatible to new dock -- Wang Fei Tue, 09 Jul 2024 11:41:02 +0800 dde-control-center (6.0.57) unstable; urgency=medium * feat: Add translations for dde-control-center in plymouth notifications(Issue: https://github.com/linuxdeepin/developer-center/issues/8998) * fix: The avatar selection interface is not adapted to dark mode(Issue: https://github.com/linuxdeepin/developer-center/issues/9440) * feat: add configuration for hidden icon themes(Issue: https://github.com/linuxdeepin/developer-center/issues/9024) * fix: Refresh dock plugins list when switch composite status(Issue: https://github.com/linuxdeepin/developer-center/issues/8995) * fix: crash when selecting custom avatar(Issue: https://github.com/linuxdeepin/developer-center/issues/9513) * fix: 规范地区名称(Issue: https://github.com/linuxdeepin/developer-center/issues/5997) -- Zhang kun Tue, 02 Jul 2024 10:05:16 +0800 dde-control-center (6.0.56) unstable; urgency=medium * chore: use GenericName if X-Deepin-Vendor is 'deepin' (linuxdeepin/developer-center#6692) -- zsien Thu, 30 May 2024 17:39:02 +0800 dde-control-center (6.0.55) unstable; urgency=medium * feat: add backup updates ui(Issue: https://github.com/linuxdeepin/developer-center/issues/8626) * fix: data of datetime is unintialized(Issue: https://github.com/linuxdeepin/developer-center/issues/8248) -- Zhang Kun Thu, 23 May 2024 16:08:10 +0800 dde-control-center (6.0.54) unstable; urgency=medium * release 6.0.54 -- Mike Chen Mon, 13 May 2024 15:15:21 +0800 dde-control-center (6.0.53) unstable; urgency=medium * fix: the config file of "showtimetofull" option has changed -- Yutao Meng Tue, 30 Apr 2024 13:14:53 +0800 dde-control-center (6.0.52) unstable; urgency=medium * fix: upgrade information mismatch with dark mode(Issue: https://github.com/linuxdeepin/developer-center/issues/7996) -- Zhang kun Fri, 26 Apr 2024 13:30:56 +0800 dde-control-center (6.0.51) unstable; urgency=medium * feat: Update performance mode listview style * fix: wrong time format -- Wang Fei Wed, 24 Apr 2024 19:07:10 +0800 dde-control-center (6.0.50) unstable; urgency=medium * release 6.0.50 -- Mike Chen Mon, 22 Apr 2024 09:36:57 +0800 dde-control-center (6.0.49) unstable; urgency=medium * fix: adjust configure for dock module temporarily * fix: space between lang and country -- Wang Fei Mon, 15 Apr 2024 17:40:26 +0800 dde-control-center (6.0.48) unstable; urgency=medium * chore: remove show recent apps in dock settings * fix: wrong long date format * chore: tab indicator radius tweak * fix: cannot search parenthese -- Wang Fei Tue, 02 Apr 2024 10:04:37 +0800 dde-control-center (6.0.47) unstable; urgency=medium * fix: ui flash when switching power subpage -- Wang Fei Wed, 20 Mar 2024 16:36:48 +0800 dde-control-center (6.0.46) unstable; urgency=medium * fix: ui flash when switching power subpage * Revert "fix: type(defult)" -- wangfei Fri, 15 Mar 2024 10:05:46 +0800 dde-control-center (6.0.45) unstable; urgency=medium * fix: grand search can not search dcc modules * fix: hover index not repaint * fix: type(defult) * fix: The width of bottom button is too long * fix: version info data source not consistent * fix(PersonalizationThemeList): wrong margins -- Yutao Meng Mon, 04 Mar 2024 16:46:01 +0800 dde-control-center (6.0.44) unstable; urgency=medium * fix: typo compositor * chore: remove code for gamma control * fix(CustomShortcut): file chooser is opened when Enter pressed * fix: wrong tab index * fix: listview not show item backgound when normal * fix: set all mime type * chore: mask linglong-upgrade.service together -- wangfei Wed, 31 Jan 2024 09:34:03 +0800 dde-control-center (6.0.43) unstable; urgency=medium * feat: make plugin-display works in treeland -- rewine Mon, 22 Jan 2024 23:23:44 +0800 dde-control-center (6.0.42) unstable; urgency=medium * chore: remove Cooperation in display plugin (https://github.com/linuxdeepin/developer-center/issues/7023) -- chenhongtao Mon, 22 Jan 2024 17:22:42 +0800 dde-control-center (6.0.41) unstable; urgency=medium * fix: time format error (https://github.com/linuxdeepin/developer-center/issues/6995) -- chenhongtao Mon, 22 Jan 2024 09:54:17 +0800 dde-control-center (6.0.40) unstable; urgency=medium * fix: block some plugins under treeland * fix: wait for http event finished when join internal channel * fix: extra button too wide * chore: record app added and removed event in notify plugin -- chenhongtao Thu, 18 Jan 2024 10:24:02 +0800 dde-control-center (6.0.39) unstable; urgency=medium * feat: add new custom date format * fix: after set password status, restart dde-lock * if dist space is full show the reason -- chenhongtao Mon, 15 Jan 2024 18:08:52 +0800 dde-control-center (6.0.38) unstable; urgency=medium * feat: make display of account list show in center * fix: ci with new dtk -- chenhongtao Thu, 11 Jan 2024 16:16:50 +0800 dde-control-center (6.0.37) unstable; urgency=medium * feat: set locale.conf when set region * fix: after set region, label value not update * fix: account icon count is wrong * fix: defaultapp program name is not displayed correctly * fix: unable to delete timezone continuously * feat: let avatarlistview can handle tab * fix: when there is a modal dialog, not switch pages * fix: language and locale not initialized -- chenhongtao Mon, 08 Jan 2024 09:55:12 +0800 dde-control-center (6.0.36) unstable; urgency=medium * fix: bring back close button for password dialog * fix: settingsgroup in scrollarea is not resized * feat: split plymouth scale settings * fix: atom upgrade status should not be stored * fix: use mask to handle linglong * fix: remembered size should not min than sizehint * chore: hide region feature * chore: add new shotcut * feat: use icu to translate region * chore: add log to plugin-commoninfo * feat: show tooltip when switchlabel text is elided * feat: check package in feature * fix: map dialog radius not follow system * chore: sync translation * chore: find icon from system first -- chenhongtao Tue, 12 Dec 2023 16:02:51 +0800 dde-control-center (6.0.35) unstable; urgency=medium * when there are no link, detailinfoitem hide the link widgets * fix: slider of battery should not have background * fix typo in datetime region * fix: read point/badge not clear * tidy up the cmake -- chenhongtao Tue, 28 Nov 2023 11:25:52 +0800 dde-control-center (6.0.34) unstable; urgency=medium * fix: is desktop is marked nodisplay, not show it * feat: switch defappplugin to new am * fix: crash when setting default application * chore: set defaultterminal with qgsettings * feat: add audio server switch support * chore: update translations -- bluesky Thu, 16 Nov 2023 15:46:10 +0800 dde-control-center (6.0.33) unstable; urgency=medium * chore: update translation about region * fix: fontsize icon is not clear enough -- chenhongtao Thu, 09 Nov 2023 10:04:32 +0800 dde-control-center (6.0.32) unstable; urgency=medium * feat: better cmake * feat: support balance_performance * fix: widgets will increase in vlistmodule -- chenhongtao Wed, 01 Nov 2023 18:04:41 +0800 dde-control-center (6.0.31) unstable; urgency=medium * feat: country and region format * fix: archlinux obs remove useless depencies * feat: special timezone on deepin * fix: ui error on zone map -- chenhongtao Thu, 26 Oct 2023 15:32:19 +0800 dde-control-center (6.0.30) unstable; urgency=medium * feat: add pausePlayer ability * fix: typo of "finger" * feat: when it is no password, set wakeupsetting to all false * feat: support configure low power percentage * feat(persionalization): always put custom to the end * feat: use DIconTheme instead * fix: when add custom avatar, page not change * feat: ability of showing battery percentage in bluetooth page -- chenhongtao Thu, 19 Oct 2023 10:18:40 +0800 dde-control-center (6.0.29) unstable; urgency=medium * fix: debian warning -- chenhongtao Mon, 25 Sep 2023 13:40:40 +0800 dde-control-center (6.0.28) unstable; urgency=medium * fix: tabbar height is too large cause page flash * fix: light theme text in discaimer is not clear * fix: listview is not in the center or grub page * fix sidebar expand/collapse status error -- chenhongtao Thu, 14 Sep 2023 13:56:40 +0800 dde-control-center (6.0.27) unstable; urgency=medium * resize window at frist to fit some pages -- chenhongtao Tue, 12 Sep 2023 09:53:30 +0800 dde-control-center (6.0.26) unstable; urgency=medium * fix alert message position error * update the tip of internal switcher * hide region-setting view * show hscrollbar when page width is too big * fix machineid is remembered when joining tesing -- chenhongtao Fri, 08 Sep 2023 11:04:30 +0800 dde-control-center (6.0.25) unstable; urgency=medium * bring back missing translations -- chenhongtao Wed, 06 Sep 2023 15:26:30 +0800 dde-control-center (6.0.24) unstable; urgency=medium * support linglong update * fix settings always be disabled -- chenhongtao Wed, 06 Sep 2023 10:27:05 +0800 dde-control-center (6.0.23) unstable; urgency=medium * fix avatarlistDialog is not modal * not to init filedialog when initialize a class, to speed up the plugin * use categrade log to show the log * fix opening the Control Center in the launcher or right-clicking to open the Control Center fails * disable edit btn when no customzonelist * fix the logic of the shown of description, and update description * bring back missing icon * remote setSelection of the tabbar, we not use it anymore * init device Combobox enable state when active -- chenhongtao Mon, 28 Aug 2023 10:55:03 +0800 dde-control-center (6.0.22) unstable; urgency=medium * when descption is empty, module will use the displayName of child to make a descption * fix the case that on archlinux, it shows uniontech in the module of systeminfo * fix the issue that dde-control-center coredump on opensuse * fix wrong usage of the dbus mouse speed * avoid hardcode of dbus service * dark png shown in personalization * fix dcc-update-plugin cannot initialize very fast * change account to user * region set in datetime plugin -- chenhongtao Tue, 08 Aug 2023 13:55:03 +0800 dde-control-center (6.0.21) unstable; urgency=medium * fix margin of page * a missing choice in power plugin * depercate DCCDBusInterface * fix the white place of titlebar in hlistmodule cannot be dragged -- chenhongtao Thu, 25 May 2023 15:01:03 +0800 dde-control-center (6.0.20) unstable; urgency=medium * 更新systeminfo文案 * 更新keyboard的布局,去除错误的实现,使用DCCListview * 修改错误的cmake写法 -- chenhongtao Thu, 11 May 2023 14:01:03 +0800 dde-control-center (6.0.19) unstable; urgency=medium * 修改繁体中文名称 -- zsien Sat, 06 May 2023 11:01:03 +0800 dde-control-center (6.0.18) unstable; urgency=medium * fix: wrong package for doc * chore: add a readme for doc * chore: adjust internal channel logic * fix: a lot of qt warning * feat: change logic to load translations -- chenhongtao Fri, 5 May 2023 10:23:35 +0800 dde-control-center (6.0.17) unstable; urgency=medium * fix: load plugin logic * chore: add document package * feat: read path form READ_DIR instead of INSTALL_DIR -- chenhongtao Sun, 23 Apr 2023 16:28:35 +0800 dde-control-center (6.0.16) unstable; urgency=medium * chore: 优化账户头像设置 * chore: change the display for wm radius -- dengbo Fri, 21 Apr 2023 13:28:35 +0800 dde-control-center (6.0.15) unstable; urgency=medium * fix: 控制中心新建用户时闪退 -- dengbo Wed, 19 Apr 2023 16:47:45 +0800 dde-control-center (6.0.14) unstable; urgency=medium * fix: 控制中心用户头像显示异常 * feat: add docs build -- dengbo Tue, 18 Apr 2023 13:39:45 +0800 dde-control-center (6.0.13) unstable; urgency=medium * Support Internal Channel * Support more account icon * Register Log to JournalAppender * Handle new sync load logic, use Eventloop to set a timeout -- chenhongtao Fri, 14 Apr 2023 10:22:04 +0800 dde-control-center (6.0.12) unstable; urgency=medium * Reflactor bluetooth page, use icon from system * Fix animate on sound page when choose sound effect * Reflactor notify Page * Add a plugindir flag for plugin developer * Fix wrong active color in personalization -- chenhongtao Tue, 28 Mar 2023 15:53:04 +0800 dde-control-center (6.0.11) unstable; urgency=medium * Fix slider item * Fix battery setting lost * Fix the bug of async -- chenhongtao Wed, 22 Feb 2023 14:53:04 +0800 dde-control-center (6.0.10) unstable; urgency=medium * fix align of center widget -- chenhongtao Fri, 17 Feb 2023 16:18:00 +0800 dde-control-center (6.0.9.1) unstable; urgency=medium [ TagBuilder ] * chore: 替换deepin下系统信息图标(Task: 185303)(Influence: 系统信息图标) -- chenhongtao Tue, 07 Feb 2023 18:00:00 +0800 dde-control-center (6.0.9) unstable; urgency=medium [ TagBuilder ] * chore: 修改deepin下系统信息图标(Task: 185303)(Influence: 系统信息图标) -- chenhongtao Tue, 07 Feb 2023 15:14:17 +0800 dde-control-center (6.0.8) unstable; urgency=medium [ TagBuilder ] * fix: 修改主题缩略图模糊问题(Bug: 182545)(Influence: 屏幕缩放不为1时,控制中心-个性化-图标主题-缩略图) * fix: 更新主题开发者文档(Bug: 182241)(Influence: 控制中心-个性化-主题-开发者文档) * fix: 屏蔽主题开发者文档按钮(Bug: 182241)(Influence: 控制中心-个性化-开发者文档按钮) * fix: 修改更新设置自动安装和清除软件包按钮状态不同步问题(Bug: 182923)(Influence: 控制中心-更新-自动安装和清除软件包按钮状态) -- zhaoyingzhen Fri, 13 Jan 2023 10:21:17 +0800 dde-control-center (6.0.7.1) unstable; urgency=medium [ Deepin Packages Builder ] * dde-control-center for v25 -- caixiangrong Fri, 05 Jul 2024 14:49:21 +0800 ================================================ FILE: debian/control ================================================ Source: dde-control-center Section: admin Priority: optional Maintainer: Deepin Sysdev Build-Depends: debhelper-compat (= 12), pkg-config, cmake, qt6-base-dev, qt6-declarative-dev, qt6-tools-dev, qt6-declarative-private-dev, qt6-multimedia-dev, libpolkit-qt6-1-dev, libdtkcommon-dev, libdtk6gui-dev(>=6.0.21), libdtk6core-dev, libdtk6core-bin, doxygen, libgtest-dev, extra-cmake-modules, libqt6svg6, deepin-gettext-tools, qml6-module-qtquick-layouts, qml6-module-qtquick-window, qml6-module-qt-labs-qmlmodels, qt6-wayland-dev, qt6-wayland-private-dev, qt6-wayland-dev-tools, wlr-protocols, treeland-protocols(>=0.4.1), systemd, libdareader-dev, libdeepin-pw-check-dev, libicu-dev, libwayland-dev, libssl-dev, libdde-shell-dev(>= 1.99.20), libdpkg-dev, dde-api-dev (>> 6.0.39) Standards-Version: 4.5.0 Homepage: https://github.com/linuxdeepin/dde-control-center Package: dde-control-center Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, qml6-module-qtquick-layouts, qml6-module-qtquick-window, qml6-module-qt-labs-qmlmodels, qml6-module-qtquick-dialogs, qml6-module-qtquick-effects, libdtk6declarative(>> 6.7.36), netselect, Recommends: uos-license-content, Conflicts: dde-control-center-dock Replaces: dde-control-center-dock Description: New control center for Deepin Desktop Environment, Integrated control center with rich functions,Besides providing rich system setting items, the function level is simple, the logic is clear, the user can easily set the system, and the learning cost is low, Provide users with automatic update system and developer mode to meet the various needs of users for the operating system. abrecovery -restore system, Determine whether the system is restored reboot-reminder-dialog -Update restart, Confirm whether to restart the system after the completion of the update. DDE Control Center is the control panel of Deepin Desktop Environment. Package: dde-control-center-dev Architecture: any Depends: dde-control-center (= ${binary:Version}), qt6-declarative-dev, qt6-tools-dev, ${misc:Depends}, Description: New control center for Deepin Desktop Environment - development files DDE Control Center is the control panel of Deepin Desktop Environment. Package: dde-control-center-doc Architecture: any Depends: dde-control-center (= ${binary:Version}), ${misc:Depends} Description: dde-control-center (document) This package contains the doc files of dde-control-center ================================================ FILE: debian/copyright ================================================ Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Upstream-Name: dde-control-center Files: * Copyright: 2015 Deepin Technology Co., Ltd. License: LGPL-3+ This package is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. . 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 Lesser General Public License for more details. . You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . On Debian systems, the complete text of the GNU Lesser General Public License version 3 can be found in "/usr/share/common-licenses/LGPL-3". ================================================ FILE: debian/dde-control-center-dev.install ================================================ usr/include usr/lib/*/cmake ================================================ FILE: debian/dde-control-center.install ================================================ usr/bin/ usr/lib/*/*.so* usr/lib/*/dde-control-center/ usr/share usr/lib/*/dde-grand-search-daemon/plugins/searcher/* usr/lib/systemd/user/ ================================================ FILE: debian/preinst ================================================ #!/bin/bash rm -rf /home/*/.cache/deepin/dde-control-center/qmlcache/ ================================================ FILE: debian/rules ================================================ #!/usr/bin/make -f include /usr/share/dpkg/default.mk export QT_SELECT = qt6 VERSION = $(DEB_VERSION_UPSTREAM) PACK_VER = $(shell echo $(VERSION) | awk -F'[+_~-]' '{print $$1}') export DEB_BUILD_MAINT_OPTIONS = hardening=+all export DEB_CFLAGS_MAINT_APPEND = -Wall -Wl,-E export DEB_CXXFLAGS_MAINT_APPEND = -Wall -Wl,-E export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack # reproducible编译参数 DEB_CMAKE_EXTRA_FLAGS += -DCMAKE_SKIP_BUILD_RPATH=ON %: dh $@ --parallel override_dh_auto_configure: dh_auto_configure -- $(DEB_CMAKE_EXTRA_FLAGS) -DCVERSION=$(DEB_VERSION_UPSTREAM) -DDVERSION=$(PACK_VER) -DUSE_DEEPIN_ZONE=ON ================================================ FILE: debian/source/format ================================================ 3.0 (native) ================================================ FILE: debian/source/lintian-overrides ================================================ dde-control-center source: source-is-missing [misc/developdocument.html] ================================================ FILE: docs/CMakeLists.txt ================================================ find_package(Doxygen REQUIRED) set(QCH_INSTALL_DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/qt6/doc CACHE STRING "QCH install location") find_program(QHelpGenerator_EXECUTABLE NAMES qt6-documentation-tools qhelpgenerator) set(DOXYGEN_GENERATE_HTML YES CACHE STRING "Doxygen HTML output") set(DOXYGEN_GENERATE_XML YES CACHE STRING "Doxygen XML output") set(DOXYGEN_GENERATE_QHP YES CACHE STRING "Doxygen QHP output") set(DOXYGEN_FILE_PATTERNS *.cpp *.h *.zh_CN.md *.zh_CN.dox CACHE STRING "Doxygen File Patterns") set(DOXYGEN_PROJECT_NUMBER ${CMAKE_PROJECT_VERSION} CACHE STRING "")# Should be the same as this project is using. set(DOXYGEN_EXTRACT_STATIC YES) set(DOXYGEN_OUTPUT_LANGUAGE "Chinese") set(DOXYGEN_QHG_LOCATION ${QHelpGenerator_EXECUTABLE}) set(DOXYGEN_QHP_NAMESPACE "org.deepin.dde-control-center") set(DOXYGEN_QCH_FILE "dde-control-center.qch") set(DOXYGEN_QHP_VIRTUAL_FOLDER "dde-control-center") set(DOXYGEN_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/docs/) set(DOXYGEN_HTML_EXTRA_STYLESHEET "" CACHE STRING "Doxygen custom stylesheet for HTML output") set(DOXYGEN_TAGFILES "qtcore.tags=qthelp://org.qt-project.qtcore/qtcore/" CACHE STRING "Doxygen tag files") set(DOXYGEN_IMAGE_PATH ${PROJECT_SOURCE_DIR}/docs/src) set(DOXYGEN_SOURCE_BROWSE "YES") set(BUILD_THEME OFF CACHE BOOL "Build doxgen theme") if(BUILD_THEME) if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/doxygen-theme") message(STATUS "doxygen-theme exists") else() execute_process(COMMAND git clone https://github.com/linuxdeepin/doxygen-theme.git --depth=1 WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR} TIMEOUT 60) execute_process(COMMAND bash themesetting.sh WORKING_DIRECTORY ${CMAKE_CURRENT_LIST_DIR}/doxygen-theme/) endif() set(DOXYGEN_HTML_EXTRA_STYLESHEET "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome.css" "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-sidebar-only.css" "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-sidebar-only-darkmode-toggle.css") set(DOXYGEN_HTML_EXTRA_FILES "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-darkmode-toggle.js" "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-fragment-copy-button.js" "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-paragraph-link.js" "docs/doxygen-theme/doxygen-awesome-css/doxygen-awesome-interactive-toc.js") set(DOXYGEN_GENERATE_TREEVIEW "YES") set(DOXYGEN_DISABLE_INDEX "NO") set(DOXYGEN_FULL_SIDEBAR "NO") set(DOXYGEN_HTML_HEADER "docs/doxygen-theme/doxygen-awesome-css/header.html") set(DOXYGEN_HTML_FOOTER "docs/doxygen-theme/doxygen-awesome-css/footer.html") endif() set(DOXYGEN_MACRO_EXPANSION "YES") # set(DOXYGEN_PREDEFINED "DCC_NAMESPACE=dccv23") doxygen_add_docs(doxygen ${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/docs ALL WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} COMMENT "Generate documentation via Doxygen") install(FILES ${PROJECT_BINARY_DIR}/docs/html/dde-control-center.qch DESTINATION ${QCH_INSTALL_DESTINATION}) ================================================ FILE: docs/v23-dcc-interface.zh_CN.md ================================================ # dde-control-center ## 接口变更记录 | 时间| 版本|说明| 控制中心版本号| |:----|:----|:----|:----| |2022.4.13|1.0|创建|6.0.0.0| |2022.6.1|1.1|1.接口增加版本号控制
2.增加布局类LayoutBase|6.0.0.1+u013| |2022.8.8|1.2|1.PluginInterface类里location返回值由int型改为QString,返回插件位置索引或前一个ModuleObject的name
2.去掉了ModuleObject类里的setChildType等函数。替代方案是用PageModule、VListModule、HListModule或其继承类
3.ModuleObject里的icon支持DDciIcon(DTK>5.6.0),icon接口兼容QIcon类型,同时可设置DDciIcon或QString。当为QString时,会在资源里查找对应图标
4.去掉了LayoutBase类,相关静态函数移到ModuleObject中,用PageModule等类替代其功能|6.0.3+u021| |2022.10.8|1.3|1.修改hidden拼写错误
2.扩展添加一些ModuleObject类|6.0.3+u043| |2022.12.12|1.4|1.规范插件IId名
2.扩展ModuleObject类不参与搜索接口|6.0.4.1+u039| ## V23控制中心新特性 1. V23控制中心只负责框架设计,具体功能全部由插件实现 2. V23控制中心支持多级插件系统,支持插件插入到任意位置中 3. 更方便、更精确的搜索功能 4. 高度可定制,可定制任意插件是否显示,若插件支持,可定制任意插件内容是否显示 ## V23控制中心插件安装路径必要说明 1. 控制中心会自动加载翻译,翻译目录需要严格放置在 `/${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/dde-control-center/translations`下,控制中心会自动加载,同时,插件的翻译和名称也有要求,命名为`${Plugin_name}_{locale}.ts`,locale 就是多语言的翻译,翻译文件必须控制和插件名称相同 2. 控制中心的so应该放置在`/${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}/dde-control-center/modules`下,请使用构建系统的提供的gnuinstall路径,上面举的例子是cmake, mesonbuild也有自己的逻辑 ## V23控制中心插件开发必要说明 控制中心有一个option,可以用来加载一个文件夹下的插件,比如一般插件会放置到`build`文件夹下,这时候可以 ```bash dde-control-center --spec ./build ``` 来加载单独一个插件进行调试。另外提醒,调试时候不要使用asan,因为没有使用asan的控制中心无法加载使用了asan编译的插件 ## V23控制中心开发接口说明 1. ModuleObject类用于构建每个页面元素,其是插件的核心 2. PluginInterface类用于规范插件信息,每个插件必须提供一个ModuleObject对象。 ### ModuleObject基本信息说明 |名称|数据类型|说明| |:----|:----|:----| |name|QString|名称,作为每个模块的唯一标识,**必须设置**| |displayName|QString|显示名称,如菜单的名称,页面的标题等,为空则不显示| |description|QString|描述,如主菜单的描述信息| |contentText|QStringList|上下文数据,参与搜索,只可用于终结点| |icon|QVariant|图标,如主菜单的图标,可以为QIcon、DDciIcon、QString(会根据资源路径去找)| |badge|int|主菜单中的角标, 默认为0不显示,大于0显示| 基本信息都有对应的set函数,修改时有moduleDataChanged信号 ### ModuleObject接口说明 * ModuleObject虚函数 |名称|说明| |:----|:----| |active()|模块激活时被调用,可重写此方法实现后端数据获取| |deactive()|离开模块时被调用,可用于释放资源| |page()|终结点的模块必须实现此方法,用于显示页面,并且每次调用需new新的Widget ***注意: page返回的widget生命周期只是对应窗口显示的时候,即模块切换时就会被析构。ModuleObject的生命周期是从控制中心启动到关闭***| |activePage(autoActive)|激活并返回page,控制激活流程,不建议重写| * ModuleObject公有方法 |名称|说明| |:----|:----| |trigger()|触发该ModuleObject,该函数会触发triggered信号,框架收到信号会切换到该ModuleObject页| |currentModule()|当前激活的子项| |setCurrentModule(child)|设置当前激活项,由框架调用。子项变化时会触发currentModuleChanged信号| |defultModule()|默认激活的子项(如第二级激活时,会根据该值展开到第三级、第四级),如果返回为nullptr则不向下展开| |isHidden()|是否为隐藏,默认不隐藏| |setHidden(hidden)|设置为隐藏,对应ModuleObject隐藏应通过该函数设置,不要自行设置QWidget的隐藏| |isDisabled()|是否为禁用,默认为启用| |setDisabled(disabled)|设置为禁用,对应ModuleObject禁用应通过该函数设置,不要自行设置QWidget的禁用| |findChild(child)|查找子项,广度搜索优先,返回子项相对于当前模块所在的层级,-1为未找到,0为自己,>0为子项层级| |hasChildrens()|是否拥有子项| |childrens()|子项列表,由ModuleObject组成| |getChildrenSize()|获取子项列表大小| |appendChild(child)|添加子项| |removeChild(child/index)|删除子项| |insertChild(before/index, child)|插入子项| |getFlagState/getFlag
/*setFlagState*|处理状态标志,状态标志为uint32_t型,高16位(0xFFFF0000)为控制中心定义,低16位(0x0000FFFF)可由用户设置| |extra/setExtra|*扩展标志,在VList和Page布局中放在最下面,横向排列*| |noSearch/setNoSearch|*是否参与搜索,默认参与搜索*| * ModuleObject信号 |名称|说明| |:----|:----| |moduleDataChanged()|基本信息改变后发送此信号| |displayNameChanged(const QString &displayName)|displayName改变后发送此信号| |stateChanged(uint32_t flag, bool state)|状态标志变化| |childStateChanged(ModuleObject *const child, uint32_t flag, bool state)|子项状态标志变化| |removedChild(ModuleObject *const module)|删除child前触发| |insertedChild(ModuleObject *const module)|插入child后触发| |childrenSizeChanged(const int size)|childrens改变后必须发送此信号| |triggered()|trigger触发该信号,框架收到信号会切换到该ModuleObject页| |currentModuleChanged(ModuleObject *currentModule)|当前激活的子项改变时会触发此信号| * ModuleObject静态方法 |名称|说明| |:----|:----| |IsHidden|返回module是否显示,判断了配置项和程序设置项| |IsHiddenFlag|判断标志是否为隐藏标志| |IsDisabled|返回module是否可用,判断了配置项和程序设置项| |IsDisabledFlag|判断标志是否为禁用标志| ```plain 小提示:当模块无需实现虚函数时,可不用继承,直接设置其基本信息即可。 ``` ### PluginInterface接口说明 * PluginInterface虚函数列表: |名称|说明| |:----|:----| |module()|模块对象,每个插件必须提供一个根模块,该模块管理插件中所有子项| |name()|插件名称,插件标识,需具有唯一性| |follow()|插件必须知道其需要跟随的父ModuleObject的url ,默认为空则为一级插件| |location()|插件位置索引或前一个ModuleObject的name,相同索引则按加载顺序进行排序,先加载的往后顺延,默认追加到最后| 一个标准的插件开发流程: 1. 继承PluginInterface,实现其虚函数。 2. 实例化一个根模块,根模块在初始化时不允许有耗时操作,若有耗时操作,应继承ModuleObject然后实现active方法,将耗时操作放入其中。 3. 若根模块的子项是横向菜单列表,则可使用List储存其基础信息,继承或使用HListModule类,然后循环使用appendChild方法将菜单添加到根模块中。 4. 若根模块的子项是纵向菜单列表,则可使用List储存其基础信息,继承或使用VListModule类,然后循环使用appendChild方法将菜单添加到根模块中。 5. 以此类推,具体的某个子项菜单同样再次添加菜单列表,直到菜单列表的子项为PageModule时为止。 6. 准备一个以上的Module继承自ModuleObject,并实现其page()方法,然后添加到PageModule中,注意,page()方法中需返回新的QWidget对象。 7. 当某个菜单为PageModule时,使用其appendChild方法将上方的Module添加到其子项中,此时,控制中心会根据page的大小添加滚动条,并将多个page进行垂直排列进行显示。PageModule持支嵌套,并且其有默认边距,如果嵌套使用,嵌套的PageModule边距建议设置为0( getContentsMargins(0, 0, 0, 0)) 8. 若某个VListModule或PageModule页面需要附加按钮时,可调其子项ModuleObject的setExtra,该ModuleObject的page提供按钮,这样该ModuleObject将显示在VListModule或PageModule页面的最下方。 ***注意:插件加载是在线程中进行的,在加载完成后会随ModuleObject移到主线程中。加载时(ModuleObject的构造函数中)创建的对象******必须******将ModuleObject设置为父对象,否则会导致没有父对象的对象不会被移到主线程中,其中的信号槽等不到对应的线程而一直不执行。*** ### 代码示例: * 准备Page,LabelModule继承自ModuleObject ```cpp QWidget *LabelModule::page() { return new QLabel(text()); } void LabelModule::setText(const QString &text) { m_text = text; } ``` * 准备附加按钮,ButtonModule继承自ModuleObject ```cpp QWidget *ButtonModule::page() { QPushButton *button = new QPushButton(text()); button->setMaximumWidth(200); connect(button, &QPushButton::clicked, this, &ButtonModule::onButtonClicked); return button; } void ButtonModule::setText(const QString &text) { m_text = text; } ``` * 实现PluginInterface接口 ```cpp class Plugin : public PluginInterface { Q_OBJECT // IID会用于去重,需唯一 Q_PLUGIN_METADATA(IID "com.deepin.dde.ControlCenter.Plugin_test" FILE "plugin-test.json") Q_INTERFACES(DCC_NAMESPACE::PluginInterface) public: virtual QString name() const override; virtual ModuleObject *module() override; }; QString Plugin::name() const { return QStringLiteral("plugin1"); } ModuleObject *Test1Plugin::module() { // 返回模块根节点 return new Test1ModuleObject(); } Test1ModuleObject::Test1ModuleObject() : HListModule("firstmenu", tr("主菜单"), tr("我是主菜单"), DIconTheme::findQIcon("preferences-system")) { // 根节点继承于HListModule //-----------正常树构建---------- { // LabelModule页面 int i = 1; ModuleObject *module = new PageModule(QString("menu%1").arg(i), tr("菜单%1").arg(i), this); for (int j = 0; j < 5; j++) { LabelModule *labelModule = new LabelModule(QString("main%1menu%2").arg(i).arg(j), QString("具体页面%1的第%2个page的标题").arg(i).arg(j), module); labelModule->setText(QString("我是具体页面%1的第%2个page").arg(i).arg(j)); module->appendChild(labelModule); } appendChild(module); } { // ButtonModule页面 int i = 2; ModuleObject *module = new PageModule(QString("menu%1").arg(i), tr("菜单%1").arg(i), this); for (int j = 0; j < 30; j++) { ButtonModule *buttonModule = new ButtonModule(QString("main%1menu%2").arg(i).arg(j), QString("具体页面%1的第%2个page的标题").arg(i).arg(j), module); buttonModule->setText(QString("我是具体页面%1的第%2个page").arg(i).arg(j)); module->appendChild(buttonModule); } appendChild(module); } //-----------自定义布局页面---------- { // ButtonModule页面,同上面ButtonModule页面,但使用自定义布局,显示效果和上面不同 int i = 4; ModuleObject *module = new PageModule(QString("menu%1").arg(i), tr("菜单%1").arg(i), this); for (int j = 0; j < 30; j++) { ButtonModule *buttonModule = new ButtonModule(QString("main%1menu%2").arg(i).arg(j), QString("自定义布局页面%1的第%2个page的标题").arg(i).arg(j), module); buttonModule->setText(QString("我是页面%1的第%2个按钮").arg(i).arg(j)); module->appendChild(buttonModule); } module->children(1)->setHidden(true); module->children(2)->setDisabled(true); appendChild(module); } //-------特殊按钮及多及嵌套示例----------- VListModule *module = new VListModule(QString("menu%1").arg(5), tr("菜单%1").arg(5)); appendChild(module); // 主菜单添加带有附加按钮的菜单 // 添加VList子项,先添加一个正常子项 ModuleObject *lstModule1 = new PageModule(QString("menuSpeci1"), tr("特殊菜单1"), module); module->appendChild(lstModule1); // 正常子项的Page LabelModule *labelModule1 = new LabelModule(QString("pageSpeci1"), QString("特殊页面1"), lstModule1); labelModule1->setText("特殊页面内容1"); lstModule1->appendChild(labelModule1); // 添加VList子项,再添加一个带有附加按钮的子项 PageModule *lstModule2 = new PageModule("menuSpeci2", "特殊菜单2", module); module->appendChild(lstModule2); LabelModule *module2_1 = new LabelModule(QString("pageSpeci2"), QString("特殊页面2"), lstModule2); module2_1->setText("特殊页面内容2"); lstModule2->appendChild(module2_1); ButtonModule *module2_2 = new ButtonModule(QString("pageSpeci2"), QString("特殊页面2"), lstModule2); module2_2->setText("Page中的测试按钮"); module2_2->setExtra(); // 设置为附加按钮,父ChildType为ModuleObject::Page lstModule2->appendChild(module2_2); ButtonModule *ButtonModule3 = new ButtonModule(QString("pageSpeci3"), QString("特殊页面3"), lstModule2); ButtonModule3->setText("测试按钮"); ButtonModule3->setExtra(); // 设置为附加按钮,父ChildType为ModuleObject::VList module->appendChild(ButtonModule3); connect(ButtonModule3, &ButtonModule::onButtonClicked, ButtonModule3, &ModuleObject::triggered); PageModule *page3 = new PageModule(QString("pageSpeci3"), QString("特殊页面3"), ButtonModule3); ButtonModule3->appendChild(page3); // extra项激活时,会激活其第一个子项的page ButtonModule *module3_1 = new ButtonModule("testPage", "测试页面", module); module3_1->setText("附加按钮测试页面"); page3->appendChild(module3_1); ButtonModule *module3_2 = new ButtonModule("buttonClose", "关闭", module); module3_2->setText("关闭"); module3_2->setExtra(); page3->appendChild(module3_2); connect(module3_2, &ButtonModule::onButtonClicked, lstModule1, &ModuleObject::triggered); } ``` * 二级插件与一级插件不同的是,需要实现其follow方法 ```cpp QString Plugin::name() const { return QStringLiteral("plugin-test2"); } ModuleObject* Plugin::module() { //-----------创建根节点---------- ModuleObject *moduleRoot = new ModuleObject("menu3", tr("菜单3"), tr("我是菜单3"), DIconTheme::findQIcon("preferences-system"), this); moduleRoot->setChildType(ModuleObject::ChildType::Page); for (int j = 0; j < 4; j++) { LabelModule *labelModule = new LabelModule(QString("main%1menu%2").arg(3).arg(j), QString("具体页面%1的第%2个page的标题").arg(3).arg(j), moduleRoot); labelModule->setText(QString("我是具体页面%1的第%2个page").arg(3).arg(j)); moduleRoot->appendChild(labelModule); } return moduleRoot; } QString Plugin::follow() const { // 注意这里返回的是上级的url return QStringLiteral("firstmenu"); } QString Plugin::location() const { // 返回对应位置或前一个兄弟节点的name return "2"; } ``` * 自定义布局 要实现类似PageModule的自定义布局,需继承ModuleObject类实现其page函数 ```cpp #include "interface/moduleobject.h" class QFormLayout; class QScrollArea; class FormModule : public DCC_NAMESPACE::ModuleObject { Q_OBJECT public: explicit FormModule(const QString &name, const QString &displayName = {}, QObject *parent = nullptr); QWidget *page() override; private Q_SLOTS: void onCurrentModuleChanged(ModuleObject *child); private: void onAddChild(DCC_NAMESPACE::ModuleObject *const childModule); void onRemoveChild(DCC_NAMESPACE::ModuleObject *const childModule); void clearData(); private: QMap m_mapWidget; QScrollArea *m_area; QFormLayout *m_layout; }; FormModule::FormModule(const QString &name, const QString &displayName, QObject *parent) : ModuleObject(name, displayName, parent) , m_area(nullptr) , m_layout(nullptr) { // 响应子类激活信号 connect(this, &FormModule::currentModuleChanged, this, &FormModule::onCurrentModuleChanged); } QWidget *FormModule::page() { // page函数在parentWidget上布局窗口并返回 QWidget *parentWidget = new QWidget(); QVBoxLayout *mainLayout = new QVBoxLayout; mainLayout->setContentsMargins(0, 0, 0, 0); parentWidget->setLayout(mainLayout); m_layout = new QFormLayout(); // 在parentWidget析构后需要清理缓存数据,可以监听信号处理,或放deactive函数中 connect(parentWidget, &QObject::destroyed, this, [this]() { clearData(); }); QWidget *areaWidget = new QWidget(); m_area = new QScrollArea(parentWidget); m_area->setFrameShape(QFrame::NoFrame); m_area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); m_area->setWidgetResizable(true); areaWidget->setParent(m_area); m_area->setWidget(areaWidget); mainLayout->addWidget(m_area); areaWidget->setLayout(m_layout); for (auto &&tmpChild : childrens()) { auto page = tmpChild->activePage(); if (page) { m_layout->addRow(tmpChild->displayName(), page); m_mapWidget.insert(tmpChild, page); } } auto addModuleSlot = [this](ModuleObject *const tmpChild) { onAddChild(tmpChild); }; // 监听子项的添加、删除、状态变更,动态的更新界面 connect(this, &ModuleObject::insertedChild, areaWidget, addModuleSlot); connect(this, &ModuleObject::appendedChild, areaWidget, addModuleSlot); connect(this, &ModuleObject::removedChild, areaWidget, [this](ModuleObject *const childModule) { onRemoveChild(childModule); }); connect(this, &ModuleObject::childStateChanged, areaWidget, [this](ModuleObject *const tmpChild, uint32_t flag, bool state) { if (ModuleObject::IsHiddenFlag(flag)) { // 显示隐藏同增加删除处理 if (state) onRemoveChild(tmpChild); else onAddChild(tmpChild); } }); // 处理子激活项 onCurrentModuleChanged(currentModule()); return parentWidget; } // 处理子激活项 void FormModule::onCurrentModuleChanged(dccV23::ModuleObject *child) { // 激活子项处理是删除之前激活项的QWidget,并用当前激活项的activePage替代 // 该例子中子项都为叶子节点,此处为滚动到对应项 // 获取窗口坐标需要在窗口显示后,所以此处稍作延时 QTimer::singleShot(10, m_area, [this, child]() { if (m_area && m_mapWidget.contains(child)) { QWidget *w = m_mapWidget.value(child); if (-1 != m_layout->indexOf(w)) { QPoint p = w->mapTo(w->parentWidget(), QPoint()); m_area->verticalScrollBar()->setSliderPosition(p.y()); } } }); } // 动态的添加子项 void FormModule::onAddChild(dccV23::ModuleObject *const childModule) { if (ModuleObject::IsHidden(childModule) || m_mapWidget.contains(childModule)) return; int index = 0; for (auto &&child : childrens()) { if (child == childModule) break; if (!ModuleObject::IsHidden(child)) index++; } auto newPage = childModule->activePage(); if (newPage) { m_layout->insertRow(index, childModule->displayName(), newPage); m_mapWidget.insert(childModule, newPage); } } // 动态的删除子项 void FormModule::onRemoveChild(dccV23::ModuleObject *const childModule) { if (m_mapWidget.contains(childModule)) { QWidget *w = m_mapWidget.value(childModule); int index = m_layout->indexOf(w); if (-1 != index) { w->deleteLater(); delete m_layout->takeAt(index); m_mapWidget.remove(childModule); return; } } } // 清理缓存数据 void FormModule::clearData() { m_layout = nullptr; m_area = nullptr; m_mapWidget.clear(); } ``` * 扩展ModuleObject 为了方便开发,**dcc-widgets里提供了一些实用的ModuleObject**,具体可以参考对应的头文件 ```cpp void Test1ModuleObject::addTestModule(ModuleObject *parent) { // ItemModule测试 // ItemModule提供一个回调函数接口,方便窗口与ModuleObject结合 // 左边是displayName字符串,右则是回调函数返回的widget,回调函数可以是匿名函数,也可以是成员函数。其参数是ModuleObject*,返回值为创建的QWidget* // 同时ItemModule提供一些接口如setLeftVisible设置左则是否显示,setClickable是否处理点击。具体参考ItemModule头文件 // @warning 回调函数返回的widget生命周期只是对应窗口显示的时候,即模块切换时就会被析构。ItemModule的生命周期是从控制中心启动到关闭。 ItemModule *item = new ItemModule("item", tr("Title")); item->setRightWidget([](ModuleObject *item) { return new QPushButton(Dtk::Widget::DStyle::standardIcon(qApp->style(), Dtk::Widget::DStyle::SP_EditElement), ""); }); parent->appendChild(item); ItemModule *itemButton = new ItemModule("itemButton", tr("Button:"), false); itemButton->setRightWidget(this, &Test1ModuleObject::initButton); itemButton->setBackground(true); parent->appendChild(itemButton); // SettingsGroupModule测试 // SettingsGroupModule提供一个基于SettingsGroup的ModuleObject,可实现SettingsGroup的窗口背景处理 SettingsGroupModule *groupModule = new SettingsGroupModule("group", tr("group Module")); groupModule->appendChild(new ItemModule("groupItem1", tr("group PushButton"), [](ModuleObject *module) { return new QPushButton(); })); groupModule->appendChild(new ItemModule("groupItem2", tr("group LineEdit"), [](ModuleObject *module) { return new QLineEdit(); })); groupModule->appendChild(new ItemModule("groupItem3", tr("group ComboBox"), [](ModuleObject *module) { return new QComboBox(); })); parent->appendChild(groupModule); // HorizontalModule测试 // HorizontalModule提供一个横向布局的ModuleObject,与PageModule(纵向布局)类似 HorizontalModule *hor = new HorizontalModule("hor", tr("Horizontal Module")); hor->setStretchType(HorizontalModule::AllStretch); parent->appendChild(hor); ItemModule *hlabel = new ItemModule( "hlabel", tr("Horizontal Edit"), [](ModuleObject *module) { QLabel *label = new QLabel(module->displayName()); connect(module, &ModuleObject::displayNameChanged, label, &QLabel::setText); return label; }, false); connect(hlabel, &ModuleObject::displayNameChanged, hlabel, [hlabel]() { hlabel->setHidden(false); }); ItemModule *hedit = new ItemModule( "hedit", tr("Horizontal Edit"), [hlabel](ModuleObject *module) { QLineEdit *edit = new QLineEdit(module->displayName()); edit->setFixedHeight(32); connect(module, &ModuleObject::displayNameChanged, edit, &QLineEdit::setText); connect(edit, &QLineEdit::editingFinished, [edit, hlabel, module]() { QString text = edit->text(); if (!text.isEmpty()) { hlabel->setDisplayName(text); module->setDisplayName(text); } module->setHidden(true); }); return edit; }, false); hedit->setHidden(true); ItemModule *hbutton = new ItemModule( "hbutton", tr("Horizontal QPushButton"), [hlabel, hedit](ModuleObject *module) { QPushButton *but = new QPushButton(); but->setIcon(Dtk::Widget::DStyle::standardIcon(qApp->style(), Dtk::Widget::DStyle::SP_EditElement)); but->setFixedSize(32, 32); connect(but, &QPushButton::clicked, module, [hlabel, hedit, module]() { hlabel->setHidden(true); hedit->setHidden(false); module->setHidden(true); }); return but; }, false); connect(hedit, &ModuleObject::stateChanged, hedit, [hlabel, hbutton, hedit]() { hlabel->setHidden(!hedit->isHidden()); hbutton->setHidden(!hedit->isHidden()); }); hor->appendChild(hlabel); hor->appendChild(hedit); hor->appendChild(hbutton); // ListViewModule测试 // ListViewModule提供一个以DListView为界面的ModuleObject,子项可用ModuleObjectItem或ModuleObject ListViewModule *listmodule = new ListViewModule("listView", tr("List View")); connect(listmodule, &ListViewModule::clicked, this, [](ModuleObject *module) { qInfo() << __FILE__ << __LINE__ << "clicked:" << module->displayName(); QString display = module->displayName(); if (display.contains("click")) { display.remove("click"); module->setDisplayName(display); } else { module->setDisplayName(display + "click"); } }); parent->appendChild(listmodule); ModuleObjectItem *listitem0 = new ModuleObjectItem("item0", tr("listitem 0")); listmodule->appendChild(listitem0); ModuleObjectItem *item1 = new ModuleObjectItem("item1", tr("listitem 1")); item1->setRightIcon(Dtk::Widget::DStyle::SP_ArrowEnter); listmodule->appendChild(item1); ModuleObjectItem *item2 = new ModuleObjectItem("item2", tr("listitem 2")); item2->setRightText("right Text", -2); item2->setRightIcon(Dtk::Widget::DStyle::SP_ArrowEnter); listmodule->appendChild(item2); connect(item2, &ModuleObjectItem::clicked, this, [item1]() { qInfo() << __FILE__ << __LINE__ << "clicked ModuleObjectItem:" << tr("listitem 2"); item1->setHidden(!item1->isHidden()); static int pix = Dtk::Widget::DStyle::SP_ForkElement; item1->setRightIcon((Dtk::Widget::DStyle::StandardPixmap)(pix)); pix++; if (pix >= (int)(Dtk::Widget::DStyle::SP_Title_SS_ShowNormalButton)) pix = Dtk::Widget::DStyle::SP_ForkElement; }); ModuleObject *listitem03 = new ModuleObject("listitem03", tr("listitem 3")); listmodule->appendChild(listitem03); } ``` ## Debug 说明 控制中心有一个参数 `--spec`,这个参数接受一个path的变量,用于加载当前文件夹下所有插件,控制中心此时为一个runtime。如果是加载一个子插件,需要将父插件软连接到这个该目录,之后可以调试。 ## CMake 控制中心导出两个target `Dde::DCCWidget`和`Dde::DCCInterface`,在`find_package(DdeControlCenter)`后直接在`target_link_libraries`中连接这两个target就可以使用控制中心的库和头文件了。 ================================================ FILE: docs/v25-dcc-interface.zh_CN.md ================================================ \mainpage dde-control-center @brief dde-control-center # dde-control-center ## 接口变更记录 | 时间 | 版本 | 说明 | 控制中心版本号 | |---|---|---|---| | 2024.11.8 | 1.0 | 创建 | 6.0.71 | | 2024.12.2 | 1.0 | 修改main.qml为{name}Main.qml(防止翻译冲突,兼容以前命名) | 6.0.77 | | 2026.1.14 | 1.1 | 修改{name}.qml为{Name}.qml(qml命名规范) | 6.1.71 | ## V25控制中心新特性 1. V25控制中心只负责框架设计,具体功能全部由插件实现 2. V25控制中心支持多级插件系统,支持插件插入到任意位置中 3. 更方便、更精确的搜索功能,更好的搜索交互 4. 高度可定制,可定制任意插件是否显示,若插件支持,可定制任意插件内容是否显示 5. 界面采用qml实现,更灵活,更易维护 6. 插件数据采用C++实现,更高效,与界面完全解偶 7. 插件支持多语言,支持多语言切换 8. 插件显示禁用支持统一配置。配置修改立即生效 ## V25控制中心插件安装路径必要说明 1. V25控制中心插件安装路径为`${CMAKE_INSTALL_LIBDIR}/dde-control-center/plugins_v1.1` 2. 该路径下插件以单个文件夹形式存在,文件夹名为插件名,文件夹内为插件文件,假设插件名为example,则插件文件夹内容为: ```bash ${CMAKE_INSTALL_LIBDIR}/dde-control-center/plugins_v1.1/example/ ├── qmldir ├── libexample_qml.so └── example.so ``` 1. example.so、qmldir为qml插件c++导出的动态库 2. libexample_qml.so为qml资源文件编译成的动态库。包含资源有: 1) Example.qml为插件元数据文件,包含一个DccObject对象。通常该对象只是插件入口菜单。为了让主界面快速显示出来 2) ExampleMain.qml为插件入口文件,插件启动时,会自动加载该文件,该文件中根对象为一个DccObject对象,该对象可以包含任意qml对象,并且该文件中可以用到example.so导出的函数,使用方式为:dccData.xxx(),dccData为example.so导出的对象 3) Xxx.qml为插件其他文件,在ExampleMain.qml中使用 ## V25控制中心插件开发说明 1. V25控制中心插件开发需要安装dde-control-center-dev包,该包中包含V25控制中心插件开发所需头文件和库文件 2. V25控制中心使用的是qt6,qt6与qt5混用会导致程序崩溃。因此插件需要使用qt6进行开发 ## V25控制中心插件加载顺序说明 1. 插件加载时,会先根据配置判断该插件是否显示,若不显示,则加载结束。查看配置命令:`dde-dconfig get org.deepin.dde.control-center -r org.deepin.dde.control-center hideModule` 2. 以Qt的qml插件形式加载example模块 3. 加载Example.qml,若Example.qml中根对象DccObject对象visible属性为false,则加载结束 4. 在线程中加载example.so,最后会将example.so导出的对象移动到主线程 5. 将example.so导出的对象设置为dccData,加载ExampleMain.qml。此时,ExampleMain.qml中可以使用dccData.xxx()调用example.so导出的函数 6. 加载完成,将DccObject对象插入到模块树中 ## V25控制中心插件开发必要说明 1. 控制中心有一个option,可以用来加载一个文件夹下的插件,比如一般插件会放置到`build`文件夹下,这时候可以`dde-control-center --spec ./lib/plugins_v1.1/`来加载单独一个插件进行调试。另外提醒,调试时候不要使用asan,因为没有使用asan的控制中心无法加载使用了asan编译的插件 2. 控制中心插件加载是在线程中,但最终会将插件对象移到主线程。所以example.so构造函数中创建的对象需要在example.so导出类的树结构中(即子对象的父对象或祖先对象是example.so导出类),否则不会被移动到主线程,导致其中信号槽线程等不到,无法正常使用。 3. example.so导出类是唯一的,插件中不建议使用单例,可在example.so导出类中创建一个单例对象 ## V25控制中心开发接口说明 控制中心导出的qml类有: ### 关键类 #### DccObject 控制中心的树形结构的数据节点,可表示界面的一个菜单项或功能项。 | 属性名称 | 说明 | 备注 | |---|---|---| | name | 名称 | 作为唯一id使用,结合父项的name组成url,用于定位跳转、配置隐藏禁用等,由字符、数字组成,不建议有符号空格,不可有‘/’(url分隔符,会影响解析) | | parentName | 父项名称 | 父项的url,表示该项是哪个项的子项。此处可以是一个url,如:“aa/bb/cc” | | weight | 权重 | 权重越高,该项所插入的位置越靠后。取值范围:0-65535,建议取值用10、20、30的方式,方便有需求要从中间插入控件 | | displayName | 显示名称 | 用于搜索、显示,需支持翻译 | | description | 描述 | 用于显示 | | icon | 图标 | 图标名 | | badge | 标识 | 用于显示红色圆点等,如:更新的红点提示,取值范围:0-255 | | visible | 可见 | 与控件显示关联,默认true | | enabled | 启用 | 与控件状态关联,默认true | | visibleToApp | 可见 | 只读,包含配置与visible的结果,与控件显示关联 | | enabledToApp | 启用 | 只读,包含配置与enabled的结果,与控件状态关联 | | canSearch | 可搜索 | 默认true | | children | 子对象 | 只读,获取子控件列表 | | backgroundType | 背景样式 | 默认AutoBg | | pageType | 界面类型 | Menu、Editor、Item等,影响page显示方式,取值范围:0-255 | | page | 界面控件 | | | parentItem | 控件父项 | | | 信号 | 说明 | 备注 | |---|---|---| | active | 激活 | backgroundType为Clickable时,点击控件出发,参数为空。DBus的ShowPage方法出发,如:ShowPage("aa/bb?param=1"),则aa/bb项会收到active("param=1")信号 | | deactive | 停用 | 页面退出时触发 | #### DccApp 全局单例,管理控制中心的整个模块树 | 函数 | 说明 | 备注 | |---|---|---| | root | 根结点 | 属性 | | activeObject | 当前菜单项 | 属性 | | addObject | 添加Object | 将DccObject加到模块树上,方法 | | removeObject | 移除Object | 将DccObject从模块树上移除,动态创建的Object需要手动destroy,方法 | | showPage | 跳转页面 | 若url参数为空,会按Object的父项查找,直到找到Menu类型的Object,将其设置为当前页面。url参数不为空,则找到对应项触发active信号,方法 | | mainWindow | 主窗口 | 方法 | | activeItemChanged | 搜索或showPage对应的控件,常用于强提醒显示 | 信号 | ### 辅助类 #### DccModel 以根结点的子项组成一个ListModel | 属性名称 | 说明 | 备注 | |---|---|---| | root | 根结点 | | #### DccRepeater 使用提供的model实例化多个基于DccObject的对象,并添加到父项中,与Repeater类似 | 属性 | 说明 | 备注 | |---|---|---| | model | 数据源 | 对象的数据源,为QVariant类型,支持多种数据类型 | | delegate | 模板 | 用于生成对象的模板,为model中的每一项数据生成一个DccObject对象 | | count | model生成对象的数量 | 只读 | | 信号 | 说明 | 备注 | |---|---|---| | objAdded | 添加DccObject对象 | model实例化新对象时触发 | | objRemoved | 移除DccObject对象 | model移除对象时触发 | #### DccDBusInterface 与DBus交互的类,支持属性、信号、方法 | 属性 | 说明 | 备注 | |---|---|---| | service | 服务名 | D-Bus 服务的唯一标识符 | | path | 路径 | D-Bus 服务的对象路径 | | inter | 接口名 | D-Bus 服务的对象接口 | | connection | 总线类型 | SystemBus系统总线/SessionBus会话总线 | | suffix | 属性前缀 | 为动态属性添加前缀,避免与QML保留字冲突 | | 函数 | 说明 | 备注 | |---|---|---| | callWithCallback | 异步调用 D-Bus 方法,并通过JS回调处理结果 | | ### 界面类 #### DccLoader 用于加载DccObject的page控件的加载器,继承自Qt Quick的Loader。 | 属性 | 说明 | 备注 | |---|---|---| | dccObj | 要加载的DccObject | var | | dccObjItem | 控件父项 | Item | #### DccGroupView 一个组样式的控件,根据子项DccObject的pageType进行渲染,并将所有子项放在一个组容器中。可通过 DccRepeater 批量创建子项。 | 属性 | 说明 | 备注 | |---|---|---| | isGroup | 是否显示组样式,默认为true | 值为true:子项无间距,显示分隔线;值为false:子项有间距,无分隔线 | #### DccRightView 控制中心右侧样式控件,用于展示菜单项的子页面内容,支持滚动、拖动。Menu类型的DccObject未指定page时,page会自动使用该控件 #### DccRowView 横向排列子项的行布局容器,通过DccLoader加载子项的page控件,将子项水平排列 #### DccSettingsView 与DccRightView类似,但可以显示一个下方悬浮区域。需要其对应的DccObject有两个子项,一个为主内容区域,未指定page时默认使用DccGroupView,一个为下方悬浮区域,未指定page时默认使用DccRowView #### DccSettingsObject 封装了DccSettingsView所需结构的DccObject模板,预创建了所需的两个子项 | 属性 | 说明 | 备注 | |---|---|---| | bodyUrl | 子项body的 URL | 用于向body中添加子项 | | footerUrl | 子项footer的 URL | 用于向footer中添加子项 | #### DccItemBackground 处理控件背景的控件,在DccRightView中用到 #### DccCheckIcon 显示勾选图标的控件,用于显示和切换选中状态 #### DccLabel 支持自动省略和悬浮提示的Label #### DccTitleObject 包含标题和描述的分组标题控件 #### SearchBar 搜索框控件,支持搜索、搜索结果弹窗显示和键盘导航 #### DccTimeRange 选择或编辑时间范围的控件,显示格式为"时:分" | 属性 | 说明 | 备注 | |---|---|---| | hour | 时 | | | minute | 分 | | ## 代码示例: ### 代码文件夹结构 假设插件名为example,代码文件夹内容为: ```plain plugin-example ├── CMakeLists.txt # CMake构建脚本,用于编译和构建插件 ├── qml # QML文件目录 │ ├── dcc_example.dci # 图标文件 │ ├── ExamplePage1.qml # 第一个示例页面的QML文件,在exampleMain.qml中加载 │ ├── ExamplePage2.qml # 第二个示例页面的QML文件,在exampleMain.qml中加载 │ ├── Example.qml # 主QML文件,包含简单的插件信息 │ └── ExampleMain.qml # 主QML文件,包含插件所有页面 └── src # 源文件目录,存放C++源文件和相关头文件 ├── pluginexample.cpp # 插件的C++实现文件,包含功能实现和QML与C++的交互 ├── pluginexample.h # 插件的头文件,定义类、函数和QML中可能用到的接口 └── resources.qrc # qrc资源文件(可选) ``` (文件说明按模块加载顺序说明) ### CMakeLists.txt ```bash cmake_minimum_required(VERSION 3.23) # qt_add_qml_module函数支持最小版本3.18,建议版本3.23+ # 该name会设置为插件名,只支持字母加数字,需要与{Name}.qml中DccObject的name相同,用于插件禁用操作 set(PLUGIN_NAME "example") find_package(Qt6 COMPONENTS Core LinguistTools REQUIRED) # dcc_handle_plugin_translation中用到LinguistTools的函数 find_package(DdeControlCenter REQUIRED) # 查找dde-control-center库 file(GLOB_RECURSE PLUGIN_SRCS "src/*.cpp" "src/*.h" # "src/qrc/example.qrc" ) add_library(${PLUGIN_NAME} MODULE ${PLUGIN_SRCS} ) # target_include_directories(${PLUGIN_NAME} PUBLIC # Dde::Control-Center # ) target_link_libraries(${PLUGIN_NAME} PRIVATE Dde::Control-Center # 添加dde-control-center库 Qt6::Core ) # 处理插件安装 dcc_install_plugin(NAME ${PLUGIN_NAME} TARGET ${PLUGIN_NAME}) # 处理翻译和安装,如果自己处理翻译,可以不调用该函数 dcc_handle_plugin_translation(NAME ${PLUGIN_NAME} ) ``` ### Example.qml ```javascript import org.deepin.dcc 1.0 // 该文件中不能使用dccData,根对象为DccObject DccObject { id: root name: "example" // 与插件名相同 parentName: "root" displayName: qsTr("Example") icon: "dcc_example" weight: 1000 visible: false // 控制模块显示,如果模块不显示,则不会加载example.so和example.qml DccDBusInterface { // 控制中心导致的qml类,可使用DBus。如果是用DConfig,dtk有导出D.Config类,可以直接使用 property var windowRadius // 关注的dbus属性 service: "org.deepin.dde.Appearance1" path: "/org/deepin/dde/Appearance1" inter: "org.deepin.dde.Appearance1" connection: DccDBusInterface.SessionBus onWindowRadiusChanged: { // dbus属性变化信号 root.visible = windowRadius > 0 } // on为关键字,关联DBus信号 function onChanged(type, value) { // dbus信号 console.log("Changed signal received, type: ", type, ", value: ", value) // 调用DBus的List方法,["gtk"]为参数,多个参数示例:["str",1,"str"],listSlot为处理DBus调用返回,参数个数为DBus返回的参数个数。listErrorSlot为处理DBus错误返回,1个参数,为错误字符串 callWithCallback("List", ["gtk"], listSlot, listErrorSlot) } function listSlot(ty) { console.log("List slot received, type: " + ty) } function listErrorSlot(error) { console.log("error", error) } } } ``` ### pluginexample.h ```cpp class PluginExample : public QObject { Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL) public: explicit PluginExample(QObject *parent = nullptr); QString name() const; void setName(const QString &name); // 属性、Q_INVOKABLE、信号、槽等可在qml中直接使用 Q_INVOKABLE int calc(int a, int b); public Q_SLOTS: void setCalcType(int type); Q_SIGNALS: void nameChanged(const QString &name); void calcTypeChanged(int calcType); private: QString m_name; int m_calcType; }; ``` ### pluginexample.cpp pluginexample.cpp为PluginExample类实现,与控制中心插件相关内容为: ```cpp #include "dccfactory.h" DCC_FACTORY_CLASS(PluginExample) // DCC_FACTORY_CLASS在dccfactory.h中定义,用于注册插件,该宏会自动生成PluginExampleFactory类,并实现create函数。PluginExampleFactory类为Qt类,所以需要包含pluginexample.moc #include "pluginexample.moc" ``` ### ExampleMain.qml ```javascript import org.deepin.dcc 1.0 // 该文件中可以使用dccData,根对象为DccObject DccObject { ExamplePage1 { name: "example_1" parentName: "example" displayName: qsTr("Normal Page") icon: "dcc_example" weight: 10 } ExamplePage2 { name: "example_2" parentName: "example" displayName: qsTr("Settings Page") icon: "dcc_example" weight: 20 } } ``` ### ExamplePage1.qml ```javascript import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 DccObject { id: root property real calcValue property real calcType: 0 DccObject { name: "calc" parentName: root.name displayName: qsTr("calc") icon: "dcc_example" weight: 10 backgroundType: DccObject.Normal // 设置背景样式 pageType: DccObject.Editor // Editor为page是右边的控件,左边显示displayName、icon等 page: Button { text: dccObj.displayName onClicked: { calcValue = dccData.calc(calcValue, 2) } } } DccObject { name: "value" parentName: root.name displayName: qsTr("value") weight: 20 pageType: DccObject.Editor backgroundType: DccObject.ClickStyle // ClickStyl表示有点击效果,点击时会发出active信号 page: RowLayout { Text { text: calcValue } ComboBox {} } onActive: cmd => console.log(this, "onActive:", cmd) } DccObject { name: "group" parentName: root.name displayName: qsTr("group") weight: 30 pageType: DccObject.Item page: DccGroupView {} // 组效果,其子项会放在一个组里 DccObject { name: "item2" // name要求当前组内唯一 parentName: root.name + "/group" // parentName要求可定位到对应项,可用多个DccObject的name组合 displayName: qsTr("value") weight: 20 pageType: DccObject.Item // Item的page将占整个区域 page: Text { text: calcValue } } DccObject { name: "item1" parentName: root.name + "/group" displayName: qsTr("value") weight: 10 pageType: DccObject.Editor page: Text { text: calcValue } } DccObject { id: calcTypeObj name: "calcType" parentName: root.name displayName: qsTr("calc type") description: qsTr("description") icon: "dcc_example" weight: 30 backgroundType: DccObject.Normal pageType: DccObject.Editor page: Button { text: dccObj.displayName onClicked: { calcType++ if (calcType >= 4) { calcType = 0 } dccData.setCalcType(calcType) } } Connections { target: dccData function onCalcTypeChanged(cType) { calcTypeObj.displayName = cType } } } } DccObject { name: "group2" parentName: root.name displayName: qsTr("group2") weight: 40 pageType: DccObject.Item page: DccGroupView {} DccRepeater { // DccRepeater配合model可实现多个DccObject model: 3 delegate: DccObject { name: "item" + (index + 1) parentName: root.name + "/group2" displayName: qsTr("Item") + (index + 1) weight: 30 + index pageType: DccObject.Editor page: Switch {} } } } } ``` ### ExamplePage2.qml ```javascript import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 DccObject { id: root property real calcValue property real calcType: 0 weight: 10 page: DccSettingsView {} // 设置界面,此DccObject的pageType为Menu,page为DccSettingsView DccObject { name: "body" // DccSettingsView里的限制,其子项必须是两个DccObject,第一个为主界面,第二个为下方按钮区域 parentName: root.name weight: 10 pageType: DccObject.Item DccObject { name: "calc" parentName: root.name + "/body" displayName: qsTr("calc") icon: "dcc_example" weight: 10 backgroundType: DccObject.Normal pageType: DccObject.Editor page: Button { text: dccObj.displayName onClicked: { calcValue = dccData.calc(calcValue, 2) } } } DccObject { name: "value" parentName: root.name + "/body" displayName: qsTr("no Search") canSearch: false // 设置界面通常不搜索,可设置canSearch weight: 20 pageType: DccObject.Item page: Text { text: calcValue } } DccObject { name: "menuEditor" parentName: root.name + "/body" displayName: qsTr("no Search") canSearch: false // 设置界面通常不搜索,可设置canSearch weight: 30 pageType: DccObject.MenuEditor // 菜单加编辑控件,子项是一个菜单项 page: Switch { } DccObject { name: "menu" parentName: root.name + "/body/menuEditor" weight: 10 DccRepeater { model: 8 delegate: DccObject { name: "item" + (index + 1) parentName: "menuEditor/menu" displayName: qsTr("Item") + (index + 1) weight: 30 + index backgroundType: DccObject.Normal pageType: DccObject.Editor page: Switch {} } } } } DccObject { name: "calcType" // 该DccObject会显示在example_2中 parentName: "example_2/body" // DccObject位置只与parentName和weight有关,与其自身位置无关 weight: 80 displayName: qsTr("calc type") pageType: DccObject.Editor backgroundType: DccObject.Normal page: Text { text: calcType } } DccObject { name: "group2" parentName: root.name + "/body" displayName: qsTr("group2") weight: 100 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "item0" parentName: root.name + "/body/group2" displayName: qsTr("value") weight: 20 pageType: DccObject.Item page: Rectangle { implicitHeight: 50 Text { anchors.centerIn: parent text: calcValue } } } // DccRepeater类可配合model实现多个DccObject DccRepeater { model: 23 delegate: DccObject { name: "item" + (index + 1) parentName: root.name + "/body/group2" displayName: qsTr("Item") + (index + 1) weight: 30 + index pageType: DccObject.Editor page: Switch {} } } } } DccObject { name: "footer" parentName: root.name weight: 20 pageType: DccObject.Item DccObject { name: "delete" parentName: root.name + "/footer" weight: 10 pageType: DccObject.Item page: Button { text: qsTr("Delete") onClicked: { deleteDialog.createObject(this).show() } } } Component { id: deleteDialog D.DialogWindow { modality: Qt.ApplicationModal width: 380 icon: "preferences-system" onClosing: destroy(10) ColumnLayout { width: parent.width Label { Layout.fillWidth: true Layout.leftMargin: 50 Layout.rightMargin: 50 text: qsTr("Are you sure you want to delete this configuration?") font.bold: true wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter } RowLayout { Layout.topMargin: 10 Layout.bottomMargin: 10 Button { Layout.fillWidth: true text: qsTr("Cancel") onClicked: close() } Rectangle { implicitWidth: 2 Layout.fillHeight: true color: this.palette.button } Button { Layout.fillWidth: true text: qsTr("Delete") onClicked: { close() } } } } } } DccObject { // 按钮区域可加个空项处理右对齐问题 name: "spacer" parentName: root.name + "/footer" weight: 20 pageType: DccObject.Item page: Item { Layout.fillWidth: true } } DccObject { name: "cancel" parentName: root.name + "/footer" weight: 30 pageType: DccObject.Item page: Button { text: qsTr("Cancel") onClicked: { DccApp.showPage(root.parentName) } } } DccObject { name: "save" parentName: root.name + "/footer" weight: 40 pageType: DccObject.Item page: Button { text: qsTr("Save") onClicked: { calcValue = dccData.calc(calcValue, 3) } } } } } ``` ================================================ FILE: examples/CMakeLists.txt ================================================ add_subdirectory(plugin-example) ================================================ FILE: examples/plugin-example/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.23) # qt_add_qml_module函数支持最小版本3.18,建议版本3.23+ # 该name会设置为插件名,只支持字母加数字,需要与{Name}.qml中DccObject的name相同,用于插件禁用操作 set(PLUGIN_NAME "example") find_package(Qt6 COMPONENTS Core LinguistTools REQUIRED) # dcc_handle_plugin_translation中用到LinguistTools的函数 find_package(DdeControlCenter REQUIRED) file(GLOB_RECURSE PLUGIN_SRCS "src/*.cpp" "src/*.h" # "src/qrc/example.qrc" ) add_library(${PLUGIN_NAME} MODULE ${PLUGIN_SRCS} ) # target_include_directories(${PLUGIN_NAME} PUBLIC # Dde::Control-Center # ) target_link_libraries(${PLUGIN_NAME} PRIVATE Dde::Control-Center # 添加dde-control-center库 Qt6::Core ) # 处理插件安装 dcc_install_plugin(NAME ${PLUGIN_NAME} TARGET ${PLUGIN_NAME}) # 处理翻译和安装,如果自己处理翻译,可以不调用该函数 dcc_handle_plugin_translation(NAME ${PLUGIN_NAME} ) ================================================ FILE: examples/plugin-example/qml/Example.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 // 该文件中不能使用dccData,根对象为DccObject DccObject { id: root name: "example" // 与插件名相同 parentName: "root" displayName: qsTr("Example") icon: "dcc_example" weight: 1000 visible: false // 控制模块显示 DccDBusInterface { property var windowRadius service: "org.deepin.dde.Appearance1" path: "/org/deepin/dde/Appearance1" inter: "org.deepin.dde.Appearance1" connection: DccDBusInterface.SessionBus onWindowRadiusChanged: { root.visible = windowRadius > 0 } } } ================================================ FILE: examples/plugin-example/qml/ExampleMain.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 // 该文件中可以使用dccData,根对象为DccObject DccObject { ExamplePage1 { name: "example_1" parentName: "example" displayName: qsTr("Normal Page") icon: "dcc_example" weight: 10 } ExamplePage2 { name: "example_2" parentName: "example" displayName: qsTr("Settings Page") icon: "dcc_example" weight: 20 } ExamplePage3 { name: "example_3" parentName: "example" displayName: qsTr("Settings Page") icon: "dcc_example" weight: 30 } } ================================================ FILE: examples/plugin-example/qml/ExamplePage1.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 DccObject { id: root property real calcValue property real calcType: 0 DccObject { name: "calc" parentName: root.name displayName: qsTr("calc") icon: "dcc_example" weight: 10 backgroundType: DccObject.Normal // 设置背景样式 pageType: DccObject.Editor // Editor为page是右边的控件,左边显示displayName、icon等 page: Button { text: dccObj.displayName onClicked: { calcValue = dccData.calc(calcValue, 2) } } } DccObject { name: "value" parentName: root.name displayName: qsTr("value") weight: 20 pageType: DccObject.Editor backgroundType: DccObject.ClickStyle // ClickStyl表示有点击效果,点击时会发出active信号 page: RowLayout { Text { text: calcValue } ComboBox {} } onActive: cmd => console.log(this, "onActive:", cmd) } DccObject { name: "group" parentName: root.name displayName: qsTr("group") weight: 30 pageType: DccObject.Item page: DccGroupView {} // 组效果,其子项会放在一个组里 DccObject { name: "item2" // name要求当前组内唯一 parentName: root.name + "/group" // parentName要求可定位到对应项,可用多个DccObject的name组合 displayName: qsTr("value") weight: 20 pageType: DccObject.Item // Item的page将占整个区域 page: Text { text: calcValue } } DccObject { name: "item1" parentName: root.name + "/group" displayName: qsTr("value") weight: 10 pageType: DccObject.Editor page: Text { text: calcValue } } DccObject { id: calcTypeObj name: "calcType" parentName: root.name displayName: qsTr("calc type") description: qsTr("description") icon: "dcc_example" weight: 30 backgroundType: DccObject.Normal pageType: DccObject.Editor page: Button { text: dccObj.displayName onClicked: { calcType++ if (calcType >= 4) { calcType = 0 } dccData.setCalcType(calcType) } } Connections { target: dccData function onCalcTypeChanged(cType) { calcTypeObj.displayName = cType } } } } DccObject { name: "group2" parentName: root.name displayName: qsTr("group2") weight: 40 pageType: DccObject.Item page: DccGroupView {} DccRepeater { // DccRepeater配合model可实现多个DccObject model: 3 delegate: DccObject { name: "item" + (index + 1) parentName: root.name + "/group2" displayName: qsTr("Item") + (index + 1) weight: 30 + index pageType: DccObject.Editor page: Switch {} } } } } ================================================ FILE: examples/plugin-example/qml/ExamplePage2.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 DccObject { id: root property real calcValue property real calcType: 0 weight: 10 page: DccSettingsView {} // 设置界面,此DccObject的pageType为Menu,page为DccSettingsView DccObject { name: "body" // DccSettingsView里的限制,其子项必须是两个DccObject,第一个为主界面,第二个为下方按钮区域 parentName: root.name weight: 10 pageType: DccObject.Item DccObject { name: "calc" parentName: root.name + "/body" displayName: qsTr("calc") icon: "dcc_example" weight: 10 backgroundType: DccObject.Normal pageType: DccObject.Editor page: Button { text: dccObj.displayName onClicked: { calcValue = dccData.calc(calcValue, 2) } } } DccObject { name: "value" parentName: root.name + "/body" displayName: qsTr("no Search") canSearch: false // 设置界面通常不搜索,可设置canSearch weight: 20 pageType: DccObject.Item page: Text { text: calcValue } } DccObject { name: "menuEditor" parentName: root.name + "/body" displayName: qsTr("no Search") canSearch: false // 设置界面通常不搜索,可设置canSearch weight: 30 pageType: DccObject.MenuEditor // 菜单加编辑控件,子项是一个菜单项 page: Switch {} DccObject { name: "menu" parentName: root.name + "/body/menuEditor" weight: 10 DccRepeater { model: 8 delegate: DccObject { name: "item" + (index + 1) parentName: "menuEditor/menu" displayName: qsTr("Item") + (index + 1) weight: 30 + index backgroundType: DccObject.Normal pageType: DccObject.Editor page: Switch {} } } } } DccObject { name: "calcType" // 该DccObject会显示在example_2中 parentName: "example_2/body" // DccObject位置只与parentName和weight有关,与其自身位置无关 weight: 80 displayName: qsTr("calc type") pageType: DccObject.Editor backgroundType: DccObject.Normal page: Text { text: calcType } } DccObject { name: "group2" parentName: root.name + "/body" displayName: qsTr("group2") weight: 100 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "item0" parentName: root.name + "/body/group2" displayName: qsTr("value") weight: 20 pageType: DccObject.Item page: Rectangle { implicitHeight: 50 Text { anchors.centerIn: parent text: calcValue } } } // DccRepeater类可配合model实现多个DccObject DccRepeater { model: 23 delegate: DccObject { name: "item" + (index + 1) parentName: root.name + "/body/group2" displayName: qsTr("Item") + (index + 1) weight: 30 + index pageType: DccObject.Editor page: Switch {} } } } } DccObject { name: "footer" parentName: root.name weight: 20 pageType: DccObject.Item DccObject { name: "delete" parentName: root.name + "/footer" weight: 10 pageType: DccObject.Item page: Button { text: qsTr("Delete") onClicked: { deleteDialog.createObject(this).show() } } } Component { id: deleteDialog D.DialogWindow { modality: Qt.ApplicationModal width: 380 icon: "preferences-system" onClosing: destroy(10) ColumnLayout { width: parent.width Label { Layout.fillWidth: true Layout.leftMargin: 50 Layout.rightMargin: 50 text: qsTr("Are you sure you want to delete this configuration?") font.bold: true wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter } RowLayout { Layout.topMargin: 10 Layout.bottomMargin: 10 Button { Layout.fillWidth: true text: qsTr("Cancel") onClicked: close() } Rectangle { implicitWidth: 2 Layout.fillHeight: true color: this.palette.button } Button { Layout.fillWidth: true text: qsTr("Delete") onClicked: { close() } } } } } } DccObject { // 按钮区域可加个空项处理右对齐问题 name: "spacer" parentName: root.name + "/footer" weight: 20 pageType: DccObject.Item page: Item { Layout.fillWidth: true } } DccObject { name: "cancel" parentName: root.name + "/footer" weight: 30 pageType: DccObject.Item page: Button { text: qsTr("Cancel") onClicked: { DccApp.showPage(root.parentName) } } } DccObject { name: "save" parentName: root.name + "/footer" weight: 40 pageType: DccObject.Item page: Button { text: qsTr("Save") onClicked: { calcValue = dccData.calc(calcValue, 3) } } } function parseP(msgtext) { const param_reg = /<([^\]]+)>/ const parameters = [] let match = msgtext ? msgtext.match(param_reg) : null if (match) { const param = match[1].split(",").map(p => p.trim()) for (let par of param) { let num = parseInt(par, 10) if (!isNaN(num)) { parameters.push(num) // parameters.push(par) } } } return parameters } } } ================================================ FILE: examples/plugin-example/qml/ExamplePage3.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 DccSettingsObject { id: root DccRepeater { model: 13 delegate: DccObject { name: "item" + (index + 1) parentName: root.bodyUrl displayName: qsTr("Item") + (index + 1) weight: 30 + index backgroundType: DccObject.Normal pageType: DccObject.Editor page: Switch {} } } DccObject { name: "delete" parentName: root.footerUrl weight: 10 pageType: DccObject.Item page: Button { text: qsTr("Delete") } } } ================================================ FILE: examples/plugin-example/src/pluginexample.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "pluginexample.h" #include "dccfactory.h" PluginExample::PluginExample(QObject *parent) : QObject(parent) , m_calcType(0) { } QString PluginExample::name() const { return m_name; } void PluginExample::setName(const QString &name) { if (m_name != name) { m_name = name; Q_EMIT nameChanged(m_name); } } int PluginExample::calc(int a, int b) { switch (m_calcType) { case 0: // + return a + b; break; case 1: // - return a - b; break; case 2: // * return a * b; break; case 3: // / return a / b; break; default: return a + b; break; } } void PluginExample::setCalcType(int type) { if (m_calcType != type) { m_calcType = type; Q_EMIT calcTypeChanged(m_calcType); } } DCC_FACTORY_CLASS(PluginExample)// DCC_FACTORY_CLASS在dccfactory.h中定义,用于注册插件,该宏会自动生成PluginExampleFactory类,并实现create函数。PluginExampleFactory类为Qt类,所以需要包含pluginexample.moc #include "pluginexample.moc" ================================================ FILE: examples/plugin-example/src/pluginexample.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef PLUGINEXAMPLE_H #define PLUGINEXAMPLE_H #include class PluginExample : public QObject { Q_OBJECT Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL) public: explicit PluginExample(QObject *parent = nullptr); QString name() const; void setName(const QString &name); Q_INVOKABLE int calc(int a, int b); public Q_SLOTS: void setCalcType(int type); Q_SIGNALS: void nameChanged(const QString &name); void calcTypeChanged(int calcType); private: QString m_name; int m_calcType; }; #endif // PLUGINEXAMPLE_H ================================================ FILE: examples/plugin-example/translations/example.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_az.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_bo.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_ca.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_es.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_fi.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_fr.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_hu.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_it.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_ja.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_ko.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_nb_NO.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_pl.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_pt_BR.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_ru.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_uk.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_zh_CN.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_zh_HK.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/example_zh_TW.ts ================================================ AdapterModule Allow other Bluetooth devices to find this device Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) My Devices Other Devices Show Bluetooth devices without names Connect Disconnect Rename Send Files Ignore this device Connecting Disconnecting AddButtonWidget Add Application Open Desktop file Apps (*.desktop) All files (*) AddFaceInfoDialog Enroll Face Make sure all parts of your face are not covered by objects and are clearly visible. Your face should be well-lit as well. Cancel Next Face enrolled Use your face to unlock the device and make settings later Done Failed to enroll your face Try Again Close AddFingerDialog Cancel Done Scan Again Scan Suspended AddIrisInfoDialog Enroll Iris Cancel Next Iris enrolled Done Failed to enroll your iris Try Again AdvancedSettingModule Advanced Setting Audio Framework Different audio frameworks have their own advantages and disadvantages, and you can choose the one that best matches you to use AuthenticationInfoItem No more than 15 characters Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only AuthenticationModule Biometric Authentication AuthenticationPlugin Fingerprint Face Iris BlueToothAdaptersModel Bluetooth is turned on, and the namcde is displayed as %1 Enable Bluetooth to find nearby devices (speakers, keyboard, mouse) BluetoothDeviceModel Connected Not connected BluetoothModule Bluetooth Bluetooth device manager CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Device crashed, please scan again! Cancel CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system CooperationSettingsDialog Collaboration Settings Share mouse and keyboard Share your mouse and keyboard across devices Share clipboard Storage path for shared files Share the copied content across devices Cancel button Confirm button DCC_NAMESPACE::AccountSpinBox Always DCC_NAMESPACE::AccountsModule Users User management Create User Username Change Password Delete User User Type Auto Login Login Without Password Validity Days Group The full name is too long Standard User Administrator Reset Password The full name has been used by other user accounts Full Name Go to Settings Cancel OK "Auto Login" can be enabled for only one account, please disable it for the account "%1" first DCC_NAMESPACE::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match DCC_NAMESPACE::AppNotifyWidget Show notifications from %1 on desktop and in the notification center. Play a sound Show messages on lockscreen Show in notification center Show message preview DCC_NAMESPACE::AvatarListDialog Person Animal Illustration Expression Custom Picture Cancel Save DCC_NAMESPACE::AvatarListFrame Dimensional Style Flat Style DCC_NAMESPACE::AvatarListView Images DCC_NAMESPACE::BootWidget Updating... Startup Delay Theme Click the option in boot menu to set it as the first boot, and drag and drop a picture to change the background Click the option in boot menu to set it as the first boot Switch theme on to view it in boot menu GRUB Authentication GRUB password is required to edit its configuration Change Password Boot Menu Change GRUB password Username: root New password: Repeat password: Required Cancel button Confirm button Password cannot be empty Passwords do not match DCC_NAMESPACE::BrightnessWidget Brightness Color Temperature Auto Brightness Night Shift The screen hue will be auto adjusted according to your location Change Color Temperature Cool Warm DCC_NAMESPACE::CommonInfoPlugin General Settings Boot Menu Developer Mode User Experience Program DCC_NAMESPACE::CommonInfoWork Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system DCC_NAMESPACE::CreateAccountPage Group Cancel Create New User User Type Username Full Name Password Repeat Password Password Hint The full name is too long Passwords do not match Standard User Administrator Customized Required optional The hint is visible to all users. Do not include the password here. Policykit authentication failed Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name has been used by other user accounts DCC_NAMESPACE::CustomAddAvatarWidget You have not uploaded a picture, you can click or drag to upload a picture Uploaded file type is incorrect, please upload again Images DCC_NAMESPACE::CustomContentDialog Add Custom Shortcut Name Required Command Cancel Add This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomEdit Required Cancel Save Shortcut Name Command This shortcut conflicts with %1, click on Add to make this shortcut effective immediately DCC_NAMESPACE::CustomItem Shortcut Please enter a shortcut DCC_NAMESPACE::CustomRegionFormatDialog Custom Format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::DetailInfoItem For more details, visit: DCC_NAMESPACE::DeveloperModeDialog Request Root Access Online Offline Please sign in to your Union ID first and continue Next Export PC Info Import Certificate 1. Export your PC information 2. Go to https://www.chinauos.com/developMode to download an offline certificate 3. Import the certificate DCC_NAMESPACE::DeveloperModeWidget Request Root Access Developer mode enables you to get root privileges, install and run unsigned apps not listed in app store, but your system integrity may also be damaged, please use it carefully. The feature is not available at present, please activate your system first Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access To make some features effective, a restart is required. Restart now? Cancel Restart Now Root Access Allowed DCC_NAMESPACE::DisplayPlugin Display Light, resolution, scaling and etc DCC_NAMESPACE::DouTestWidget Double-click Test DCC_NAMESPACE::GeneralKBSettingWidget Keyboard Settings Repeat Delay Short Long Repeat Rate Slow Fast Test here Numeric Keypad Caps Lock Prompt DCC_NAMESPACE::GeneralSettingWidget Left Hand Disable touchpad while typing Scrolling Speed Double-click Speed Slow Fast DCC_NAMESPACE::KBLayoutSettingWidget Keyboard Layout Edit Add Keyboard Layout Done DCC_NAMESPACE::KeyboardLayoutDialog Cancel Add Add Keyboard Layout DCC_NAMESPACE::KeyboardPlugin Keyboard and Language Keyboard Keyboard Settings keyboard Layout Keyboard Layout Language Shortcuts DCC_NAMESPACE::MainWindow Help DCC_NAMESPACE::ModifyPasswdPage Change Password Reset Password Resetting the password will clear the data stored in the keyring. Current Password Forgot password? New Password Repeat Password Password Hint Cancel Save Passwords do not match Required Optional Password cannot be empty The hint is visible to all users. Do not include the password here. Wrong password New password should differ from the current one System error Network error DCC_NAMESPACE::MonitorControlWidget Identify Gather Windows Screen rearrangement will take effect in %1s after changes DCC_NAMESPACE::MousePlugin Mouse General Touchpad TrackPoint DCC_NAMESPACE::MouseSettingWidget Pointer Speed Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Slow Fast DCC_NAMESPACE::MultiScreenWidget Multiple Displays /display/Multiple Displays Mode /display/Mode Main Screen /display/Main Scree Duplicate Extend Only on %1 DCC_NAMESPACE::NotificationModule AppNotify Notification SystemNotify DCC_NAMESPACE::PalmDetectSetting Palm Detection Minimum Contact Surface Minimum Pressure Value Disable the option if touchpad doesn't work after enabled DCC_NAMESPACE::PlyMouthModule Boot Animation Small Size Big Size DCC_NAMESPACE::PrivacyPolicyWidget Privacy Policy https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> DCC_NAMESPACE::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules DCC_NAMESPACE::RefreshRateWidget Refresh Rate Hz Recommended DCC_NAMESPACE::RegionFormatDialog Region Format Default format First of day Short date Long date Short time Long time Currency symbol Numbers Paper Cancel Save DCC_NAMESPACE::RemoveUserDialog Are you sure you want to delete this account? Delete account directory Cancel Delete DCC_NAMESPACE::ResolutionWidget Resolution /display/Resolution Resize Desktop /display/Resize Desktop Default Fit Stretch Center Recommended DCC_NAMESPACE::RotateWidget Rotation /display/Rotation Standard 90° 180° 270° DCC_NAMESPACE::ScalingWidget The monitor only supports 100% display scaling Display Scaling DCC_NAMESPACE::SearchInput Search DCC_NAMESPACE::SecondaryScreenDialog Brightness DCC_NAMESPACE::SecurityLevelItem Weak Medium Strong DCC_NAMESPACE::SecurityQuestionsPage Security Questions These questions will be used to help reset your password in case you forget it. Security question 1 Security question 2 Security question 3 Cancel Confirm Keep the answer under 30 characters Do not choose a duplicate question please Please select a question What's the name of the city where you were born? What's the name of the first school you attended? Who do you love the most in this world? What's your favorite animal? What's your favorite song? What's your nickname? It cannot be empty DCC_NAMESPACE::SettingsHead Edit Done DCC_NAMESPACE::ShortCutSettingWidget System Management Window Workspace Assistive Tools Custom Shortcut Restore Defaults Shortcut DCC_NAMESPACE::ShortcutContentDialog Please Reset Shortcut Cancel Replace This shortcut conflicts with %1, click on Replace to make this shortcut effective immediately DCC_NAMESPACE::ShortcutItem Enter a new shortcut DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoModule About This PC Computer Name systemInfo OS Name Version Edition Type Authorization Processor Memory Graphics Platform Kernel Agreements and Privacy Policy Edition License End User License Agreement Privacy Policy %1-bit DCC_NAMESPACE::SystemInfoPlugin System Info DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: support@uniontech.com.</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> Agree and Join User Experience Program DCC_NAMESPACE::SystemLanguageSettingDialog Cancel Add Add System Language DCC_NAMESPACE::SystemLanguageWidget Edit Language List Add Language Done DCC_NAMESPACE::SystemNotifyWidget Do Not Disturb System Notifications /notification/System Notifications App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. When the screen is locked DCC_NAMESPACE::TimeSlotItem From To DCC_NAMESPACE::TouchScreenModule Touch Screen Select your touch screen when connected or set it here. Confirm Cancel DCC_NAMESPACE::TouchpadSettingWidget Pointer Speed Enable TouchPad Tap to Click Natural Scrolling Slow Fast DCC_NAMESPACE::TrackPointSettingWidget Pointer Speed Slow Fast DCC_NAMESPACE::UserExperienceProgramWidget Join User Experience Program User Experience Program /commoninfo/User Experience Program https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. To know more about the management of your data, please refer to UnionTech OS Privacy Policy (<a href="%1"> %1</a>).</p> DCC_NAMESPACE::update::MirrorSourceItem Untested Timeout Slow Medium Fast DCC_NAMESPACE::update::MirrorsWidget Mirror List Test Speed Untested Retest DateWidget Year Month Day DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size DatetimeModule Time and Format DatetimeWorker Authentication is required to change NTP server DeepinIDInterface deepin UOS DeepinidModel Mainland China Other regions DefAppModule Default Applications DefAppPlugin Webpage Mail Text Music Video Picture Terminal DisclaimersDialog Disclaimer Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UnionTech OS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UnionTech OS. Cancel Next DisclaimersItem I have read and agree to the Disclaimer DockModuleObject Dock Multiple Displays Show Dock Alignment Position Status Size Plugin Area Select which icons appear in the Dock Align center Align left Top Bottom Left Right Location Keep shown Keep hidden Smart hide Small Large On screen where the cursor is Only on main screen ExamplePage1 calc value group calc type description group2 Item ExamplePage2 calc no Search Item group2 value Delete Are you sure you want to delete this configuration? Cancel Save ExamplePage3 Item Delete FaceInfoDialog Enroll Face Position your face inside the frame FaceWidget Edit Manage Faces You can add up to 5 faces Done Add Face The name already exists Faceprint FaceidDetailWidget No supported devices found FingerDetailWidget No supported devices found FingerDisclaimer Add Fingerprint Cancel Next FingerInfoWidget Place your finger Place your finger firmly on the sensor until you're asked to lift it Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Lift your finger Lift your finger and place it on the sensor again Adjust the position to scan the edges of your fingerprint Lift your finger and do that again Fingerprint added FingerWidget Edit Fingerprint Password You can add up to 10 fingerprints Done The name already exists Add Fingerprint GeneralModule General Balanced Balance Performance High Performance Power Saver Power Plans Power Saving Settings Auto power saving on low battery Decrease Brightness Low battery threshold Auto power saving on battery Wakeup Settings Unlocking is required to wake up the computer Unlocking is required to wake up the monitor HostNameItem It cannot start or end with dashes 1~63 characters please InternalButtonItem Internal testing channel click here open the link IrisDetailWidget No supported devices found IrisWidget Edit Manage Irises You can add up to 5 irises Done Add Iris The name already exists Iris KeyLabel None LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Input Device Automatic Noise Suppression Input Volume Input Level PersonalizationDesktopModule Desktop Window Window Effect Window Minimize Effect Compact Display If enabled, more content is displayed in the window. Transparency Rounded Corner Opacity Scale Magic Lamp Small Middle Large PersonalizationInterface Light Auto Dark PersonalizationModule Personalization PersonalizationThemeList Cancel Save Light Dark Auto Default PersonalizationThemeModule Theme Appearance Accent Color Icon Settings Icon Theme Cursor Theme Text Settings Font Size Standard Font Monospaced Font Light Auto Dark PersonalizationThemeWidget Light General /personalization/General Dark General /personalization/General Auto General /personalization/General Default PersonalizationWorker Custom PinCodeDialog The PIN for connecting to the Bluetooth device is: Cancel Confirm PowerModule Power Battery low, please plug in Battery critically low PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerWorker Never PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject , Control Center Activated View To be activated Activate Expired In trial period Trial expired Auto adjust CPU operating frequency based on CPU load condition Aggressively adjust CPU operating frequency based on CPU load condition Be good to imporving performance, but power consumption and heat generation will increase CPU always works under low frequency, will reduce power consumption dde-control-center Error occurred when reading the configuration files of password rules! Checking system versions, please wait... Leave Cancel Touch Screen Settings The settings of touch screen changed RegionModule Region and Format Country or Region Format Operating system and applications may provide you with local content based on your country and region. Area Operating system and applications may set date and time formats based on regional formats. Region format First day of week Short date Long date Short time Long time Currency symbol Numbers Paper Custom Format ResultItem Your system is not authorized, please activate first Update successful Failed to update SearchInput Search SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SoundModule Sound SoundPlugin Output Auto pause Whether the audio will be automatically paused when the current audio device is unplugged Input Sound Effects Devices Input Devices Output Devices SpeakerPage Output Device Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left/Right Balance Left Right TimeSettingModule Time Settings Time Auto Sync Reset Save Server Address Required Customize Year Month Day TimeZoneChooser Cancel Confirm Add Timezone Add Change Timezone TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneItem Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local TimezoneModule Timezone List System Timezone Add Timezone TreeCombox Collaboration Settings UnionIDBindReminderDialog The user account is not linked to Union ID To reset passwords, you should authenticate your Union ID first. Click "Go to Link" to finish the settings. Cancel Go to Link UnknownUpdateItem Release date: UpdateCtrlWidget Check Again Update failed: insufficient disk space Dependency error, failed to detect the updates Restart the computer to use the system and the applications properly Network disconnected, please retry after connected Your system is not authorized, please activate first This update may take a long time, please do not shut down or reboot during the process Updates Available Updating... Download Updates Last checking time: Your system is up to date Check for Updates Checking for updates, please wait... The newest system installed, restart to take effect %1% downloaded (Click to pause) %1% downloaded (Click to continue) Your battery is lower than 50%, please plug in to continue Please ensure sufficient power to restart, and don't power off or unplug your machine Current Edition The backup update function is currently disabled. If the upgrade fails, the system cannot be rolled back! Cancel Update Now Size UpdateModel Updates Available Installing updates… Update installed successfully Update download failed Checking for updates, please wait… Your system is up to date UpdateModule Updates UpdatePlugin Check for Updates UpdateSettingItem Insufficient disk space Update failed: insufficient disk space Update failed Network error Network error, please check and try again Packages error Packages error, please try again Dependency error Unmet dependencies The newest system installed, restart to take effect Waiting Backing up System backup failed System backup failed, space is full Release date: Server Desktop Version UpdateSettingsModule Update Settings System Security Updates Only Switch it on to only update security vulnerabilities and compatibility issues Third-party Repositories Other settings Auto Check for Updates Auto Download Updates Switch it on to automatically download the updates in wireless or wired network Auto Install Updates Backup updates Ensuring normal system rollback in case of upgrade failure Updates Notification Clear Package Cache Smart Mirror Switch Switch it on to connect to the quickest mirror site automatically Mirror List Updates from Internal Testing Sources internal update Join the internal testing channel to get deepin latest updates System Updates Security Updates Install updates automatically when the download is complete Install "%1" automatically when the download is complete UpdateWidget Current Edition UpdateWork An update has been detected. UpdateWorker System Updates Fixed some known bugs and security vulnerabilities Security Updates Third-party Repositories It may be unsafe for you to leave the internal testing channel now, do you still want to leave? Your are safe to leave the internal testing channel Cannot find machineid Cannot Uninstall package Error when exit testingChannel try to manually uninstall package Cannot install package UseBatteryModule On Battery Never Shut down Suspend Hibernate Turn off the monitor Do nothing 1 Minute %1 Minutes 1 Hour Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after Computer will suspend after When the lid is closed When the power button is pressed Low Battery Low battery notification Low battery level Auto suspend battery level Battery Management Display remaining using and charging time Maximum capacity Show the shutdown Interface UseElectricModule Plugged In 1 Minute %1 Minutes 1 Hour Never Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing WacomModule Drawing Tablet Mode Pressure Sensitivity Pen Mouse Light Heavy dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::DccRepeater Delegate must be of `DccObject` type dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None example Example exampleMain Normal Page Settings Page main Control Center provides the options for system settings. updateControlPanel Downloading Waiting Installing Backing up Learn more ================================================ FILE: examples/plugin-example/translations/examples.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_az.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_bo.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_ca.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_es.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_fi.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_fr.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_hu.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_it.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_ja.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_ko.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_nb_NO.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_pl.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_pt_BR.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_ru.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_uk.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_zh_CN.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_zh_HK.ts ================================================ ================================================ FILE: examples/plugin-example/translations/examples_zh_TW.ts ================================================ ================================================ FILE: include/dccfactory.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCFACTORY_H #define DCCFACTORY_H #include namespace dccV25 { #define DccFactory_iid "org.deepin.dde.dcc-factory/v1.0" class DccObject; class DccFactory : public QObject { Q_OBJECT public: using QObject::QObject; // 作为数据返回,会导出为dccData供main.qml使用 virtual QObject *create(QObject * = nullptr) { return nullptr; } // 未提供qml的,可在此自己加载qml返回DccObject对象 virtual DccObject *dccObject(QObject * = nullptr) { return nullptr; } }; } // namespace dccV25 Q_DECLARE_INTERFACE(dccV25::DccFactory, DccFactory_iid) #define DCC_FACTORY_CLASS(classname) \ namespace { \ class Q_DECL_EXPORT classname##DccFactory : public dccV25::DccFactory \ { \ Q_OBJECT \ Q_PLUGIN_METADATA(IID DccFactory_iid) \ Q_INTERFACES(dccV25::DccFactory) \ public: \ using dccV25::DccFactory::DccFactory; \ QObject *create(QObject *parent = nullptr) override \ { \ return new classname(parent); \ } \ }; \ } #endif // DCCFACTORY_H ================================================ FILE: misc/DdeControlCenterConfig.cmake.in ================================================ @PACKAGE_INIT@ include(CMakeFindDependencyMacro) include(${CMAKE_CURRENT_LIST_DIR}/DdeControlCenterTargets.cmake) set(DDE_CONTROL_CENTER_PLUGIN_VERSION @DCC_PLUGINS_VERSION@) set(DDE_CONTROL_CENTER_PLUGIN_DIR @DCC_PLUGINS_DIR@) set(DDE_CONTROL_CENTER_PLUGIN_INSTALL_DIR @CMAKE_INSTALL_PREFIX@/@DCC_PLUGINS_INSTALL_DIR@) set(DDE_CONTROL_CENTER_TRANSLATION_INSTALL_DIR @CMAKE_INSTALL_PREFIX@/@DCC_TRANSLATION_INSTALL_DIR@) include("${CMAKE_CURRENT_LIST_DIR}/DdeControlCenterPluginMacros.cmake") ================================================ FILE: misc/DdeControlCenterConfigOld.cmake.in ================================================ @PACKAGE_INIT@ include(CMakeFindDependencyMacro) include(${CMAKE_CURRENT_LIST_DIR}/DdeControlCenterTargets.cmake) set(DDE_CONTROL_CENTER_PLUGIN_DIR @DCC_PLUGINS_DIR@) set(DDE_CONTROL_CENTER_PLUGIN_INSTALL_DIR @CMAKE_INSTALL_PREFIX@/@DCC_PLUGINS_INSTALL_DIR@) set(DDE_CONTROL_CENTER_TRANSLATION_INSTALL_DIR @CMAKE_INSTALL_PREFIX@/@DCC_TRANSLATION_INSTALL_DIR@) include("${CMAKE_CURRENT_LIST_DIR}/DdeControlCenterPluginMacros.cmake") # dcc-old set_and_check(DdeControlCenter_INCLUDE_DIR "@PACKAGE_INCLUDE_INSTALL_DIR@") set(DCC_INTERFACE_LIBRARIES dcc-interface) set(DCC_WIDGETS_LIBRARIES dcc-widgets) set(DCC_MODULE_INSTALL_DIR "@MODULE_INSTALL_DIR@") check_required_components(DdeControlCenter) include("${CMAKE_CURRENT_LIST_DIR}/DdeControlCenterInterfaceTargets.cmake") include("${CMAKE_CURRENT_LIST_DIR}/DdeControlCenterWidgetTargets.cmake") ================================================ FILE: misc/DdeControlCenterPluginMacros.cmake ================================================ cmake_minimum_required(VERSION 3.23) include(CMakeParseArguments) function(dcc_to_capitalized_string input_string output_variable) if(NOT input_string STREQUAL "") string(SUBSTRING ${input_string} 0 1 first_char) string(SUBSTRING ${input_string} 1 -1 rest_chars) string(TOUPPER ${first_char} capitalized_first_char) set(result "${capitalized_first_char}${rest_chars}") else() set(result "") endif() set(${output_variable} ${result} PARENT_SCOPE) endfunction() macro(dcc_build_plugin) set(oneValueArgs NAME TARGET QML_ROOT_DIR) set(multiValueArgs QML_FILES RESOURCE_FILES) set(QML_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/qml) find_package(Qt6 COMPONENTS Qml) cmake_parse_arguments(_config "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if(NOT "${_config_NAME}" MATCHES "^[A-Za-z0-9]+$") message(FATAL_ERROR "Error: The name '${_config_NAME}' contains invalid characters. Only alphanumeric characters are allowed.") endif() if (DEFINED _config_QML_ROOT_DIR) set(QML_ROOT_DIR ${_config_QML_ROOT_DIR}) endif() if(NOT _config_QML_FILES) file(GLOB_RECURSE _config_QML_FILES ${QML_ROOT_DIR}/*.qml ${QML_ROOT_DIR}/*.js) endif() if(NOT _config_RESOURCE_FILES) file(GLOB_RECURSE _config_RESOURCE_FILES ${QML_ROOT_DIR}/*.dci ${QML_ROOT_DIR}/*.svg ${QML_ROOT_DIR}/*.png ${QML_ROOT_DIR}/*.jpg ${QML_ROOT_DIR}/*.webp) endif() set(plugin_dirs ${PROJECT_BINARY_DIR}/lib/${DDE_CONTROL_CENTER_PLUGIN_DIR}/${_config_NAME}/) foreach(FILE_PATH ${_config_QML_FILES}) file(RELATIVE_PATH FILE_NAME ${CMAKE_CURRENT_SOURCE_DIR} ${FILE_PATH}) list(APPEND QML_PATHS ${FILE_NAME}) file(RELATIVE_PATH F_NAME ${QML_ROOT_DIR} ${FILE_PATH}) if(${F_NAME} STREQUAL "main.qml") dcc_to_capitalized_string(${_config_NAME} UPPERNAME) message(FATAL_ERROR "Error: The filename '${F_NAME}' is deprecated. Please rename it to ${UPPERNAME}Main.qml. path:${FILE_PATH}") endif() if(NOT "${F_NAME}" MATCHES "^[A-Z]") dcc_to_capitalized_string(${F_NAME} UPPERNAME) message(FATAL_ERROR "Error: The filename '${F_NAME}' must start with an uppercase letter. Please rename it to ${UPPERNAME}. path:${FILE_PATH}") endif() set_source_files_properties(${FILE_NAME} PROPERTIES QT_RESOURCE_ALIAS ${F_NAME} ) endforeach(FILE_PATH) foreach(FILE_PATH ${_config_RESOURCE_FILES}) file(RELATIVE_PATH FILE_NAME ${CMAKE_CURRENT_SOURCE_DIR} ${FILE_PATH}) list(APPEND RESOURCE_PATHS ${FILE_NAME}) file(RELATIVE_PATH F_NAME ${QML_ROOT_DIR} ${FILE_PATH}) set_source_files_properties(${FILE_NAME} PROPERTIES QT_RESOURCE_ALIAS ${F_NAME} ) endforeach(FILE_PATH) qt_policy(SET QTP0001 NEW) qt_policy(SET QTP0004 NEW) cmake_policy(SET CMP0071 NEW) qt_add_qml_module(${_config_NAME}_qml PLUGIN_TARGET ${_config_NAME}_qml URI ${_config_NAME} VERSION 1.0 QML_FILES ${QML_PATHS} RESOURCES ${RESOURCE_PATHS} OUTPUT_DIRECTORY ${plugin_dirs} ) install(TARGETS ${_config_NAME}_qml DESTINATION ${DDE_CONTROL_CENTER_PLUGIN_INSTALL_DIR}/${_config_NAME}) install(FILES ${plugin_dirs}/qmldir DESTINATION ${DDE_CONTROL_CENTER_PLUGIN_INSTALL_DIR}/${_config_NAME}) if (DEFINED _config_TARGET) set_target_properties(${_config_TARGET} PROPERTIES PREFIX "" OUTPUT_NAME ${_config_NAME} LIBRARY_OUTPUT_DIRECTORY ${plugin_dirs} ) # avoid warning when `DCC_FACTORY_CLASS` used in .cpp set_property(TARGET ${_config_TARGET} APPEND PROPERTY AUTOMOC_MACRO_NAMES "DCC_FACTORY_CLASS") endif() endmacro() function(dcc_install_plugin) dcc_build_plugin(${ARGN}) if (DEFINED _config_TARGET) install(TARGETS ${_config_TARGET} DESTINATION ${DDE_CONTROL_CENTER_PLUGIN_INSTALL_DIR}/${_config_NAME}) endif() endfunction() function(dcc_handle_plugin_translation) set(oneValueArgs NAME SOURCE_DIR) set(multiValueArgs QML_FILES SOURCE_FILES ) cmake_parse_arguments(_config "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}) if(NOT _config_SOURCE_DIR) set(_config_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) endif() if(NOT _config_QML_FILES) file(GLOB_RECURSE _config_QML_FILES ${_config_SOURCE_DIR}/*.qml ${_config_SOURCE_DIR}/*.js) endif() if(NOT _config_SOURCE_FILES) file(GLOB_RECURSE _config_SOURCE_FILES ${_config_SOURCE_DIR}/*.cpp ${_config_SOURCE_DIR}/*.h) endif() file(GLOB TRANSLATION_FILES ${_config_SOURCE_DIR}/translations/${_config_NAME}_*.ts) if( NOT TRANSLATION_FILES) set(TRANSLATION_FILES ${_config_SOURCE_DIR}/translations/${_config_NAME}_en.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_en_US.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_az.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_bo.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_ca.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_es.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_fi.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_fr.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_hu.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_it.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_ja.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_ko.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_nb_NO.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_pl.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_pt_BR.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_ru.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_uk.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_zh_CN.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_zh_HK.ts ${_config_SOURCE_DIR}/translations/${_config_NAME}_zh_TW.ts ) endif() # set(plugin_dirs ${PROJECT_BINARY_DIR}/plugins/${_config_NAME}/) # FIXME: not working on Qt 6.7 # set_source_files_properties(${TRANSLATION_FILES} # PROPERTIES OUTPUT_LOCATION "${plugin_dirs}/translations" # ) add_custom_target(${_config_NAME}_translation ALL SOURCES ${TRANSLATION_FILES} ) qt_add_translations(${_config_NAME}_translation TS_FILES ${TRANSLATION_FILES} SOURCES ${_config_QML_FILES} ${_config_SOURCE_FILES} LUPDATE_OPTIONS -no-obsolete -no-ui-lines -locations none QM_FILES_OUTPUT_VARIABLE TRANSLATED_FILES ) # /usr/share/dde-control-center/translations/xxx.qm file(GLOB QM_FILES "${CMAKE_CURRENT_BINARY_DIR}/*.qm") list(APPEND QM_FILES ${TRANSLATED_FILES}) install(FILES ${QM_FILES} DESTINATION ${DDE_CONTROL_CENTER_TRANSLATION_INSTALL_DIR}) endfunction() ================================================ FILE: misc/configs/common/org.deepin.region-format.json ================================================ { "magic": "dsg.config.meta", "version": "1.0", "contents": { "country": { "value": "", "serial": 0, "flags": ["user-public"], "name": "country", "name[zh_CN]": "国家/地区", "description": "config country", "description[zh_CN]": "配置国家/地区", "permissions": "readwrite", "visibility": "public" }, "languageRegion": { "value": "", "serial": 0, "flags": ["user-public"], "name": "language and region", "name[zh_CN]": "语言和区域", "description": "config language and region", "description[zh_CN]": "配置语言和区域", "permissions": "readwrite", "visibility": "public" }, "localeName": { "value": "", "serial": 0, "flags": ["user-public"], "name": "language[_script][_country][.codeset][@modifier]", "name[zh_CN]": "本地", "description": "config locale name", "description[zh_CN]": "配置本地", "permissions": "readwrite", "visibility": "public" }, "firstDayOfWeek": { "value": 0, "serial": 0, "flags": ["user-public"], "name": "First day of week", "name[zh_CN]": "一周第一天", "description": "config region format first day of week", "description[zh_CN]": "配置区域格式一周第一天", "permissions": "readwrite", "visibility": "public" }, "shortDateFormat": { "value": "", "serial": 0, "flags": ["user-public"], "name": "short date format", "name[zh_CN]": "短日期格式", "description": "config region format short date", "description[zh_CN]": "配置区域格式短日期格式", "permissions": "readwrite", "visibility": "public" }, "longDateFormat": { "value": "", "serial": 0, "flags": ["user-public"], "name": "long date format", "name[zh_CN]": "长日期格式", "description": "config region format long date", "description[zh_CN]": "配置区域格式长日期格式", "permissions": "readwrite", "visibility": "public" }, "shortTimeFormat": { "value": "", "serial": 0, "flags": ["user-public"], "name": "short time format", "name[zh_CN]": "短时间格式", "description": "config region format short time", "description[zh_CN]": "配置区域格式短时间格式", "permissions": "readwrite", "visibility": "public" }, "longTimeFormat": { "value": "", "serial": 0, "flags": ["user-public"], "name": "long time", "name[zh_CN]": "长时间格式", "description": "config region format long time", "description[zh_CN]": "配置区域格式长时间格式", "permissions": "readwrite", "visibility": "public" }, "currencyFormat": { "value": "", "serial": 0, "flags": [], "name": "currency symbol", "name[zh_CN]": "货币符号", "description": "config region format currency symbol", "description[zh_CN]": "配置区域货币符号", "permissions": "readwrite", "visibility": "public" }, "numberFormat": { "value": "", "serial": 0, "flags": [], "name": "number format", "name[zh_CN]": "数字格式", "description": "config region format number format", "description[zh_CN]": "配置区域格式数字格式", "permissions": "readwrite", "visibility": "public" }, "paperFormat": { "value": "", "serial": 0, "flags": [], "name": "paper format", "name[zh_CN]": "纸张格式", "description": "config region format paper format", "description[zh_CN]": "配置区域格式纸张格式", "permissions": "readwrite", "visibility": "public" } } } ================================================ FILE: misc/configs/org.deepin.dde.control-center.accounts.json ================================================ { "magic": "dsg.config.meta", "version": "1.0", "contents": { "avatarPath": { "value": "", "serial": 0, "flags": [], "name": "avatarPath", "name[zh_CN]": "图像路径", "description": "config accounts avatar path", "description[zh_CN]": "控制中心账户图像路径配置", "permissions": "readwrite", "visibility": "public" } } } ================================================ FILE: misc/configs/org.deepin.dde.control-center.commoninfo.json ================================================ { "magic": "dsg.config.meta", "version": "1.0", "contents": { "showReadOnlyProtection": { "value": true, "serial": 0, "flags": [], "name": "show read-only protection", "name[zh_CN]": "显示只读保护", "description": "Whether to show the read-only protection option in the developer mode", "description[zh_CN]": "是否在开发者模式中显示只读保护选项", "permissions": "readwrite", "visibility": "public" }, "bootWallpaperEnabled": { "value": true, "serial": 0, "flags": [], "name": "edit boot wallpaper", "name[zh_CN]": "拖拽图片改变背景", "description": "Is the GRUB \"boot menu\" wallpaper editable?", "description[zh_CN]": "\"启动菜单\"grub背景图片可否编辑", "permissions": "readwrite", "visibility": "public" }, "bootGrubUserNameVisible": { "value": true, "serial": 0, "flags": [], "name": "boot grub userName visible", "name[zh_CN]": "显示用户名", "description": "Whether to show the username in the verification password pop-up window of \"Startup Menu Verification\"", "description[zh_CN]": "是否在\"启动菜单验证\"的验证密码弹窗中显示用户名", "permissions": "readwrite", "visibility": "public" } } } ================================================ FILE: misc/configs/org.deepin.dde.control-center.datetime.json ================================================ { "magic": "dsg.config.meta", "version": "1.0", "contents": { "customNtpServer": { "value": "", "serial": 0, "flags": [], "name": "custom NTP server", "name[zh_CN]": "自定义NTP服务器", "description": "custom NTP server address for time synchronization", "description[zh_CN]": "用于时间同步的自定义NTP服务器地址", "permissions": "readwrite", "visibility": "public" } } } ================================================ FILE: misc/configs/org.deepin.dde.control-center.display.json ================================================ { "magic": "dsg.config.meta", "version": "1.0", "contents": { "minBrightnessValue": { "value": 0.1, "serial": 0, "flags": [], "name": "minBrightnessValue", "name[zh_CN]": "亮度调节最小值", "description": "config brightness min value", "description[zh_CN]": "控制中心显示亮度调节最小值", "permissions": "readwrite", "visibility": "public" } } } ================================================ FILE: misc/configs/org.deepin.dde.control-center.json ================================================ { "magic": "dsg.config.meta", "version": "1.0", "contents": { "width": { "value": 800, "serial": 0, "flags": [], "name": "width", "name[zh_CN]": "宽度", "description": "config dde-control-center width", "description[zh_CN]": "控制中心宽度配置", "permissions": "readwrite", "visibility": "public" }, "height": { "value": 600, "serial": 0, "flags": [], "name": "height", "name[zh_CN]": "高度", "description": "config dde-control-center height", "description[zh_CN]": "控制中心高度配置", "permissions": "readwrite", "visibility": "public" }, "sidebarWidth": { "value": -1, "serial": 0, "flags": true, "name": "sidebarWidth", "name[zh_CN]": "侧边栏宽度", "description": "config dde-control-center sidebar width", "description[zh_CN]": "控制中心侧边栏宽度", "permissions": "readwrite", "visibility": "public" }, "hideModule": { "value": [], "serial": 0, "flags": [], "name": "hide module", "name[zh_CN]": "隐藏模块", "description": "config dde-control-center hide module", "description[zh_CN]": "控制中心隐藏模块配置", "permissions": "readwrite", "visibility": "public" }, "disableModule": { "value": [], "serial": 0, "flags": [], "name": "disable module", "name[zh_CN]": "禁用模块", "description": "config dde-control-center disable module", "description[zh_CN]": "控制中心禁用模块配置", "permissions": "readwrite", "visibility": "public" } } } ================================================ FILE: misc/configs/org.deepin.dde.control-center.personalization.json ================================================ { "magic": "dsg.config.meta", "version": "1.0", "contents": { "hideIconThemes": { "value": ["Papirus", "Papirus-Dark", "Papirus-Light", "ePapirus", "ePapirus-Dark"], "serial": 0, "flags": ["global"], "name": "hide icon theme", "name[zh_CN]": "隐藏图标主题", "description[zh_CN]": "配置需要隐藏的图标主题", "description": "Configure icon themes that need to be hidden", "permissions": "readonly", "visibility": "public" }, "titleBarHeightStatus": { "value": "Enabled", "serial": 0, "flags": [], "name": "titleBarHeightStatus", "name[zh_CN]": "标题栏高度的状态", "description[zh_CN]": "标题栏高度的状态", "description": "", "permissions": "readwrite", "visibility": "private" }, "titleBarHeightSupportCompactDisplay": { "value": true, "serial": 0, "flags": [], "name": "titleBarHeightSupportCompactDisplay", "name[zh_CN]": "标题栏高度是否支持紧凑模式", "description[zh_CN]": "标题栏高度是否支持紧凑模式,默认为是。开启配置时,开/关紧凑模式标题栏高度减/增一档。关闭配置时,标题栏高度不联动。当用户手动设置过一次标题栏高度后,会关闭配置。", "description": "", "permissions": "readwrite", "visibility": "private" }, "scrollbarPolicyStatus": { "value": "Enabled", "serial": 0, "flags": [], "name": "scrollbarPolicyStatus", "name[zh_CN]": "滚动条显示策略的状态", "description[zh_CN]": "滚动条显示策略的状态", "description": "", "permissions": "readwrite", "visibility": "private" }, "compactDisplayStatus": { "value": "Enabled", "serial": 0, "flags": [], "name": "compactDisplayStatus", "name[zh_CN]": "紧凑模式的状态", "description[zh_CN]": "紧凑模式的状态", "description": "", "permissions": "readwrite", "visibility": "private" } } } ================================================ FILE: misc/configs/org.deepin.dde.control-center.power.json ================================================ { "magic": "dsg.config.meta", "version": "1.0", "contents": { "linePowerScreenBlackDelay": { "value": ["1m","5m","10m","15m","30m","1h"], "serial": 0, "flags": [], "name": "Control-center_LinePowerScreenBlackDelay", "name[zh_CN]": "使用电源-关闭显示器", "description[zh_CN]": "此配置用于设置插入电源关闭显示器的时间", "description": "", "permissions": "readwrite", "visibility": "private" }, "linePowerSleepDelay": { "value": ["10m","15m","30m","1h","2h","3h"], "serial": 0, "flags": [], "name": "Control-center_LinePowerSleepDelay", "name[zh_CN]": "使用电源-进入待机时间", "description[zh_CN]": "此配置用于设置插入电源进入待机的时间", "description": "", "permissions": "readwrite", "visibility": "private" }, "linePowerLockDelay": { "value": ["1m","5m","10m","15m","30m","1h"], "serial": 0, "flags": [], "name": "Control-center_LinePowerLockDelay", "name[zh_CN]": "使用电源-自动锁屏时间", "description[zh_CN]": "此配置用于设置插入电源自动锁屏的时间", "description": "", "permissions": "readwrite", "visibility": "private" }, "batteryScreenBlackDelay": { "value": ["1m","5m","10m","15m","30m","1h"], "serial": 0, "flags": [], "name": "Control-center_BatteryScreenBlackDelay", "name[zh_CN]": "使用电池-关闭显示器", "description[zh_CN]": "此配置用于设置使用电池关闭显示器的时间", "description": "", "permissions": "readwrite", "visibility": "private" }, "batterySleepDelay": { "value": ["10m","15m","30m","1h","2h","3h"], "serial": 0, "flags": [], "name": "Control-center_BatterySleepDelay", "name[zh_CN]": "使用电池-进入待机时间", "description[zh_CN]": "此配置用于设置使用电池进入待机的时间", "description": "", "permissions": "readwrite", "visibility": "private" }, "batteryLockDelay": { "value": ["1m","5m","10m","15m","30m","1h"], "serial": 0, "flags": [], "name": "Control-center_BatteryLockDelay", "name[zh_CN]": "使用电池-自动锁屏时间", "description[zh_CN]": "此配置用于设置使用电池自动锁屏的时间", "description": "", "permissions": "readwrite", "visibility": "private" }, "showHibernate": { "value": true, "serial": 0, "flags": [], "name": "show hibernate", "name[zh_CN]": "下拉框显示休眠选项", "description[zh_CN]": "笔记本合盖或按下电源键的下拉框中是否显示休眠", "description": "", "permissions": "readwrite", "visibility": "private" }, "showShutdown": { "value": true, "serial": 0, "flags": [], "name": "show shutdown", "name[zh_CN]": "下拉框显示关机选项", "description[zh_CN]": "笔记本合盖或按下电源键的下拉框中是否显示关机", "description": "", "permissions": "readwrite", "visibility": "private" }, "showSuspend": { "value": true, "serial": 0, "flags": [], "name": "show suspend", "name[zh_CN]": "下拉框显示待机选项", "description[zh_CN]": "笔记本合盖或按下电源键的下拉框中是否显示待机", "description": "", "permissions": "readwrite", "visibility": "private" }, "enableScheduledShutdown": { "value": "Enabled", "serial": 0, "flags": [], "name": "enableScheduledShutdown", "name[zh_CN]": "定时关机", "description[zh_CN]": "", "description": "控制中心-电源管理-关机设置中`定时关机`的显示状态 \n 值为 Enabled 时在控制中心正常显示 \n 值为 Disabled 时在控制中心显示禁用状态 \n 值为 Hidden 时不在控制中心显示", "permissions": "readwrite", "visibility": "private" } } } ================================================ FILE: misc/configs/org.deepin.dde.control-center.sound.json ================================================ { "magic": "dsg.config.meta", "version": "1.0", "contents": { "showDeviceManager": { "value": true, "serial": 0, "flags": [], "name": "Whether to display device management", "name[zh_CN]": "是否显示设备管理", "description": "Whether to display device management, mainly to enable automatic port switching for use", "description[zh_CN]": "是否显示设备管理,主要是开启端口自动切换使用", "permissions": "readwrite", "visibility": "public" } } } ================================================ FILE: misc/deepin-debug-config/org.deepin.dde.control-center.json ================================================ { "name": "dde-control-center", "group": "dde", "submodules": [ { "name": "org.deepin.dde.control-center", "exec": "org.deepin.dde.control-center.sh" } ], "version": "V1.0" } ================================================ FILE: misc/deepin-log-config/org.deepin.dde.control-center.json ================================================ { "name": "dde-control-center", "group": "dde", "submodules": [ { "name": "control-center.app", "filter": "org.deepin.dde.control-center.app", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.accounts", "filter": "org.deepin.dde.control-center.accounts", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.bluetooth", "filter": "org.deepin.dde.control-center.bluetooth", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.datetime", "filter": "org.deepin.dde.control-center.datetime", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.defaultapp", "filter": "org.deepin.dde.control-center.defaultapp", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.display", "filter": "org.deepin.dde.control-center.display", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.keyboard", "filter": "org.deepin.dde.control-center.keyboard", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.mouse", "filter": "org.deepin.dde.control-center.mouse", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.notification", "filter": "org.deepin.dde.control-center.notification", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.personalization", "filter": "org.deepin.dde.control-center.personalization", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.power", "filter": "org.deepin.dde.control-center.power", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.privacy", "filter": "org.deepin.dde.control-center.privacy", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.sound", "filter": "org.deepin.dde.control-center.sound", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.cloudsync", "filter": "org.deepin.dde.control-center.cloudsync", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.systeminfo", "filter": "org.deepin.dde.control-center.systeminfo", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.", "filter": "org.deepin.dde.control-center.", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.commoninfo", "filter": "org.deepin.dde.control-center.commoninfo", "exec": "/usr/bin/dde-control-center", "logType": "journal" }, { "name": "control-center.update", "filter": "org.deepin.dde.control-center.update", "exec": "/usr/bin/dde-control-center", "logType": "journal" } ], "visible": 1, "version": "V1.0" } ================================================ FILE: misc/developdocument.html ================================================ 主题开发者文档

主题开发者文档

主题说明

用户可以根据自己需求进行主题切换。也可以开发出自己的主题。

主题支持定义修改:桌面壁纸、应用图标、光标、系统字体、字体大小、活动用色、控件底色、窗口圆角大小等。同时支持分别定义深浅色主题,可设置为按当地日出日落时间自动切换深浅色主题。

主题文件

系统主题安装在/usr/share/deepin-themes/目录下

主题文件最最要的是主题目录下的index.theme文件,index.theme文件记录了主题中桌面壁纸、应用图标、光标、系统字体、字体大小、活动用色、控件底色、窗口圆角大小等的值,以及深浅色主题。

index.theme文件示例如下:

index.theme文件说明

Deepin Theme节点

Deepin Theme节点是必须的,且节点名固定

描述类型必需
Name主题名string
Name[zh_CN]本地化主题名localestring
Comment主题描述string
Comment[zh_CN]本地化主题描述localestring
DefaultTheme默认主题节点(浅色主题节点)string
DarkTheme深色主题节点string
Hidden是否在用户界面隐藏,默认为falseboolean
Example示例图片,用','分隔strings

默认主题节点

默认主题节点名是Deepin Theme节点下DefaultTheme的值

描述类型必需
Wallpaper桌面壁纸file
LockBackground锁屏壁纸file
IconTheme应用图标string
CursorTheme鼠标样式string
AppTheme应用主题string
StandardFont标准字体string
MonospaceFont等宽字体string
FontSize字体大小float
ActiveColor活动色color
DockBackground任务栏底色色值color
DockOpacity任务栏透明度float
LauncherBackground启动器底色色值color
LauncherOpacity启动器透明度float
WindowRadius窗口圆角大小integer
WindowOpacity窗口透明度float
WindowShadow窗口阴影string
  • Wallpaper、LockBackground值为图片文件路径,支持相对路径(以当前主题路径开始)和绝对路径
  • IconTheme、CursorTheme值为/usr/share/icons/下的图标和光标主题,如果开发者有自定义图标光标主题,可在主题包里加依赖,或直接把图标光标主题加到主题包中。
  • AppTheme为应用主题,为/usr/share/themes/下的主题。会影响应用程序的配色,兼容GTK主题包。若开发者未开发AppTheme主题包,建议使用系统自带的主题,即浅色主题AppTheme值为deepin,深色主题为deepin-dark
  • StandardFont、MonospaceFont为字体,值为对应的字体名。
  • FontSize为字体大小,与控制中心中字体大小不同,换算为其的0.75,即这里的10.5对应控制中心显示的14。取值可为8.25、9.0、9.75、10.5、11.25、12、13.5、15.0,分别对应控制中心显示的11、12、13、14、15、16、18、20
  • ActiveColor为活动色,颜色类值同CSS中颜色写法,例:#0081FF为控制中心设置界面的蓝色

深色主题节点

深色主题节点名是Deepin Theme节点下DarkTheme的值,键同默认主题。

当深色主题的键未指定时,会使用默认主题对应的键值。所以深色主题只需定义与默认主题不同的项即可

 

================================================ FILE: misc/gen_report.sh ================================================ #!/bin/bash # 需要先安装lcov,打开./unittest/CMakeLists.txt 测试覆盖率的编译条件 # 将该脚本放置到dde-control-center-unittest二进制文件同级目录运行 lcov -c -i -d ./ -o init.info ./dde-control-center-unittest lcov -c -d ./ -o cover.info lcov -a init.info -a cover.info -o total.info lcov --remove total.info '*/usr/include/*' '*/usr/lib/*' '*/usr/lib64/*' '*/usr/local/include/*' '*/usr/local/lib/*' '*/usr/local/lib64/*' '*/third/*' 'testa.cpp' -o final.info # 生成报告 genhtml -o cover_report --legend --title "lcov" --prefix=./ final.info #打开报告 nohup x-www-browser ./cover_report/index.html & exit 0 ================================================ FILE: misc/org.deepin.dde-grand-search.dde-control-center-setting.conf ================================================ [Grand Search] Name=com.deepin.dde-grand-search.dde-control-center-setting Mode=Trigger DBusService=org.deepin.dde.ControlCenter1 DBusAddress=/org/deepin/dde/ControlCenter1 DBusInterface=org.deepin.dde.ControlCenter1.GrandSearch InterfaceVersion=1.0 ================================================ FILE: misc/org.deepin.dde.ControlCenter1.service.in ================================================ [D-BUS Service] Name=org.deepin.dde.ControlCenter1 Exec=@CMAKE_INSTALL_FULL_BINDIR@/dde-control-center -d SystemdService=org.deepin.dde.control-center.service ================================================ FILE: misc/org.deepin.dde.control-center.desktop ================================================ [Desktop Entry] Categories=Application;System;Settings Comment=Deepin Desktop Environment Control Center Exec=dde-control-center --show %f GenericName=Control Center Icon=preferences-system Name=Deepin Control Center StartupNotify=false StartupWMClass=dde-control-center Terminal=false Type=Application X-Deepin-TurboType=dtkwidget X-Deepin-Vendor=deepin X-MultipleArgs=false # Translations: # Do not manually modify! Comment[ar]=مركز تحكم بيئة سطح مكتب Deepin Comment[az]=Deepin İş Masası Mühiti İdarəetmə Mərkəzi Comment[bg]=Контролен център на работната среда Deepin Comment[bn]=ডিপিন ডেস্কটপ এনভাইরনমেন্ট নিয়ন্ত্রণ কেন্দ্র Comment[bo]=གཏིང་ཚད་ཅོག་ངོས་ཁོར་ཡུག་ཚོད་འཛིན་ལྟེ་གནས། Comment[ca]=Centre de control de l'entorn d'escriptori del Deepin Comment[cs]=Ovládací panely pracovního prostředí Deepin Comment[da]=Kontrolcenter for Deepin-skrivebordsmiljø Comment[de]=Deepin Desktop-Umgebung Kontrollzentrum Comment[el]=Κέντρο Ελέγχου Περιβάλλοντος Εγασίας Deepin Comment[en]=Deepin Desktop Environment Control Center Comment[en_AU]=Deepin Desktop Environment Control Center Comment[en_GB]=Deepin Desktop Environment Control Center Comment[en_US]=Deepin Desktop Environment Control Center Comment[es]=Centro de control del entorno de escritorio Deepin Comment[et]=Deepin töölaua juhtpaneel Comment[fa]=مرکز کنترل محیط دسکتاپ دیپین Comment[fi]=Deepin ohjauspaneeli Comment[fr]=Centre de contrôle de l’environnement de bureau Deepin Comment[gl_ES]=Centro de control de ambiente de escritorio Deepin Comment[he]=מרכז управления סביבת שולחן העבודה Deepin Comment[hi_IN]=डीपिन डेस्कटॉप वातावरण नियंत्रण केंद्र Comment[hr]=Kontrolni centar Deepin radnog okruženja Comment[hu]=Deepin® Asztali Környezet Vezérlőpult Comment[id]=Pusat Kontrol Lingkungan Desktop Deepin Comment[it]=Centro di Controllo del Deepin Desktop Environment Comment[ja]=Deepin デスクトップ環境のコントロールセンター Comment[kab]=Ammas n usenqed n twennaḍt n tnarit n Deepin Comment[kk]=Deepin Аreamаялық міндеттерінің Көрсөткүч центрі Comment[km_KH]=មជ្ឈមណ្ឌលបញ្ជាបរិស្ថានផ្ទៃតុ Deepin Comment[ko]=Deepin 바탕화면 환경 제어 센터 Comment[lo]=deepin ສູນຄວບຄຸມສະພາບແວດລ້ອມ desktop Comment[lt]=Deepin darbalaukio aplinkos valdymo centras Comment[ms]=Pusat Kawalan Persekitaran Atas Meja Deepin Comment[nb]=Deepin Desktop Environment Kontrollsenter Comment[ne]=डीपिन डेस्कटप वातावरण नियन्त्रण केन्द्र Comment[nl]=Deepin Systeeminstellingen Comment[pa]=ਡੀਪਿਨ ਡੈਸਕਟਾਪ ਇੰਵਾਇਰਨਮੈਂਟ ਕੰਟਰੋਲ ਸੈਂਟਰ Comment[pl]=Centrum kontroli środowiska Deepin Comment[pt]=Centro de Controlo do Ambiente de trabalho Deepin Comment[pt_BR]=Central de Controle do Deepin Desktop Environment Comment[ro]=Centru Control Mediu Desktop Deepin Comment[ru]=Центр управления окружением рабочего стола Deepin Comment[si]=Deepin ඩෙස්ක්ටොප් පරිසර පාලන මධ්‍යස්ථානය Comment[sk]=Ovládacie centrum Deepin Desktop Environment Comment[sl]=Deepin Desktop Enviroment nadzorni center Comment[sq]=Qendër Kontrolli e Mjedisit Desktop Deepin Comment[sr]=Дипин Радно Окружење Контролни Центар Comment[sv]=Deepin Desktop Environment Kontrollcenter Comment[sw]=Kituo cha ulinzi za eneo la kazi ya Deepin Comment[tr]=Deepin Masaüstü Ortamı Kontrol Merkezi Comment[ug]=ئېكران مۇھىتى كونترول قىلىش مەركىزى Comment[uk]=Центр керування стільничним середовищем Deepin Comment[vi]=Điều khiển Deepin Desktop Environment Comment[zh_CN]=深度桌面环境控制中心 Comment[zh_HK]=Deepin 控制中心 Comment[zh_TW]=Deepin 桌面環境的控制中心 GenericName[af]=Beheersentrum GenericName[am_ET]=መቆጣጠሪያ ማእከል GenericName[ar]=مركز التحكم GenericName[ast]=Centru de control GenericName[az]=İdarə Etmə Mərkəzi GenericName[bg]=Контролен център GenericName[bn]=নিয়ন্ত্রণ কেন্দ্র GenericName[bo]=ཚོད་འཛིན་ལྟེ་གནས། GenericName[ca]=Centre de control GenericName[cs]=Ovládací panely GenericName[da]=Kontrolcenter GenericName[de]=Kontrollzentrum GenericName[el]=Κέντρο Ελέγχου GenericName[en]=Control Center GenericName[en_AU]=Control Center GenericName[en_GB]=Control Center GenericName[en_US]=Control Center GenericName[eo]=kontroloj centro GenericName[es]=Centro de control GenericName[et]=Juhtpaneel GenericName[fa]=مرکز کنترل GenericName[fi]=Ohjauspaneli GenericName[fr]=Centre de contrôle GenericName[gl_ES]=Centro de Control GenericName[he]=מרכז בקרה GenericName[hi_IN]=नियंत्रण केंद्र GenericName[hr]=Središte upravljanja GenericName[hu]=Vezérlőpult GenericName[hy]=Ղեկավարման Կենտրոն GenericName[id]=Pusat Kontrol GenericName[it]=Centro di Controllo GenericName[ja]=コントロールセンター GenericName[ka]=მართვის ცენტრი GenericName[kab]=Ammas n usenqed GenericName[kk]=Көрсөткүч центрі GenericName[km_KH]=មជ្ឈមណ្ឌលបញ្ជា GenericName[ko]=제어 센터 GenericName[lo]=ສູນຄວບຄຸມ GenericName[lt]=Valdymo centras GenericName[mn]=Удирдлагын хэсэг GenericName[ms]=Pusat Kawalan GenericName[nb]=Kontrollsenter GenericName[ne]=नियन्त्रण केन्द्र GenericName[nl]=Instellingencentrum GenericName[pa]=ਕੰਟਰੋਲ ਸੈਂਟਰ GenericName[pl]=Centrum kontroli GenericName[pt]=Centro de Controlo GenericName[pt_BR]=Central de Controle GenericName[ro]=Centru Control GenericName[ru]=Центр Управления GenericName[si]=පාලන මධ්‍යස්ථානය GenericName[sk]=Ovládacie centrum GenericName[sl]=Nadzorni center GenericName[sq]=Qendër Kontrolli GenericName[sr]=Контролни Центар GenericName[sv]=Kontrollcenter GenericName[sw]=Kituo cha ulinzi GenericName[ta]=கட்டுப்பாட்டு மையம் GenericName[tr]=Kontrol Merkezi GenericName[ug]=كونترول مەركىزى GenericName[uk]=Центр керування GenericName[vi]=Trung tâm kiểm soát GenericName[zh_CN]=控制中心 GenericName[zh_HK]=控制中心 GenericName[zh_TW]=控制中心 Name[am_ET]=ዲፕኢን መቆጣጠሪያ ማእከል Name[ar]=مركز تحكم ديبين Name[ast]=Centru de control Deepin Name[az]=Deepin İdarəetmə Mərkəzi Name[bg]=Контролен център на Deepin Name[bn]=ডিপিন কন্ট্রোল সেন্টার Name[bo]=གཏིང་ཚད་ཚོད་འཛིན་ལྟེ་གནས། Name[ca]=Centre de control del Deepin Name[cs]=Ovládací panely pro Deepin Name[da]=Deepin kontrolcenter Name[de]=Deepin Kontrollzentrum Name[el]=Deepin Κέντρο Ελέγχου Name[en]=Deepin Control Center Name[en_AU]=Deepin Control Center Name[en_GB]=Deepin Control Center Name[en_US]=Deepin Control Center Name[es]=Centro de control de Deepin Name[et]=Deepin juhtpaneel Name[fa]=مرکز کنترل دیپین Name[fi]=Deepin ohjauspaneeli Name[fil]=Deepin Control Center Name[fr]=Centre de contrôle Deepin Name[gl_ES]=Centro de control de Deepin Name[he]=מרכז הבקרה של Deepin Name[hi_IN]=डीपइन नियंत्रण केंद्र Name[hr]=Deepin kontrolni centar Name[hu]=Deepin® Vezérlőpult Name[id]=Pusat Kontrol Deepin Name[it]=Centro di Controllo di Deepin Name[ja]=Deepin コントロールセンター Name[kab]=Ammas n usenqed n Deepin Name[kk]=Deepin Көрсөткүч центрі Name[km_KH]=មជ្ឈមណ្ឌលបញ្ជា Deepin Name[ko]=Deepin 제어 센터 Name[lo]=ສູນຄວບຄຸມ Deepin Name[lt]=Deepin valdymo centras Name[ms]=Pusat Kawalan Deepin Name[nb]=Deepin kontrollsenter Name[ne]=Desktop Control Center Name[nl]=Deepin Systeeminstellingen Name[pl]=Centrum kontroli Deepin Name[pt]=Centro de Controlo Deepin Name[pt_BR]=deepin Central de Controle Name[ro]=Panou de Control Deepin Name[ru]=Центр Управления Deepin Name[si]=Deepin පාලන මධ්‍යස්ථානය Name[sk]=Deepin Ovládacie centrum Name[sl]=Nadzorni center Deepin Name[sq]=Qendër Kontrolli Deepin Name[sr]=Дипин Контролни Центар Name[sv]=Deepin Kontrollcenter Name[tr]=Deepin Kontrol Merkezi Name[ug]=Deepin كونترول مەركىزى Name[uk]=Центр керування Deepin Name[vi]=Trung tâm Điều khiển Deepin Name[zh_CN]=深度控制中心 Name[zh_HK]=Deepin 控制中心 Name[zh_TW]=Deepin 控制中心 ================================================ FILE: misc/org.deepin.dde.controlcenter.metainfo.xml ================================================ org.deepin.dde.control-center org.deepin.dde.control-center.desktop DDE DDE CC0-1.0 GPL-3.0+ DDE Qt Settings DDE Control Center 深度控制中心 Deepin 控制中心 Configuration tools for your computer أدوات لضبط حاسبك Kompyuteriniz üçün tənzimləmə alətləri Інструменты для наладжвання вашага камп'ютара Конфигурационни инструменти за вашия компютър Eines de configuració per a l'ordinador Eines de configuració per a l'ordinador Konfigurační nástroje pro váš počítač Konfigurationsværktøjer til din computer Einstellungen für Ihren Rechner Εργαλεία διαμόρφωσης για τον υπολογιστή σας Configuration tools for your computer Agordiloj por via komputilo Herramientas de configuración para su equipo Oma arvuti tööriistade seadistamine Zure ordenagailua konfiguratzeko tresnak Tietokoneen ylläpitotyökalut Outils de configuration pour votre ordinateur Ferramentas de configuración para o computador. כלי הגדרה למחשב שלך आपके कंप्यूटर के लिए विन्यास साधन Beállítóeszközök számítógépéhez Instrumentos de configuration per tu computator Peralatan konfigurasi untuk komputermu Grunnstillingaverkfæri fyrir tölvuna þína Strumenti di configurazione per il tuo computer コンピュータ設定ツール თქვენი კომპიუტერის თქვენზე მორგების ხელსაწყოები 컴퓨터 설정 도구 Jūsų kompiuterio konfigūravimo įrankiai നിങ്ങളുടെ കമ്പ്യൂട്ടറിനുള്ള ക്രമീകരണങ്ങൾ သင့်ကွန်ပြူတာအတွက် ပြင်ဆင်ရေးကိရိယာများ Oppsettsverktøy for datamaskinen Hulpmiddelen voor configuratie van uw computer Oppsettverktøy for datamaskina ਤੁਹਾਡੇ ਕੰਪਿਊਟਰ ਲਈ ਸੰਰਚਨਾ ਟੂਲ Narzędzia ustawień dla twojego komputera Ferramentas de configuração do seu computador Ferramentas de configuração para seu computador Unelte de configurare pentru calculator Инструменты для настройки компьютера भवतः सङ्गणकस्य कृते समायोजनानिसाधनम् Koniguračné nástroje pre váš počítač Orodja za nastavitve vašega računalnika Inställningsverktyg för datorn உங்கள் கணினியை அமைக்க உதவும் கருவிகள் Абзорҳои танзимотӣ барои компютери шумо Bilgisayarınız için yapılandırma araçları Інструменти для налаштовування вашого комп'ютера Các công cụ cấu hình cho máy tính của bạn xxConfiguration tools for your computerxx 您的计算机的配置工具 適用於您電腦的設定工具 systemsettings

DDE Control Center allows you to configure and tweak your DDE desktop to make it better meet your needs.

深度控制中心让您可以按需配置和调整 DDE 桌面环境。

https://github.com/linuxdeepin/developer-center/issues/ https://github.com/linuxdeepin/developer-center/issues/ https://bbs.deepin.org/
================================================ FILE: misc/systemd/dde-control-center.service.in ================================================ [Unit] Description=DDE Control Center background service [Service] ExecStart=@CMAKE_INSTALL_FULL_BINDIR@/dde-control-center -d Type=dbus BusName=org.deepin.dde.ControlCenter1 Slice=app.slice ================================================ FILE: misc/translate_desktop2ts.sh ================================================ #!/bin/bash DESKTOP_SOURCE_FILE=org.deepin.dde.control-center.desktop DESKTOP_TS_DIR=../translations/desktop/ /usr/bin/deepin-desktop-ts-convert desktop2ts $DESKTOP_SOURCE_FILE $DESKTOP_TS_DIR ================================================ FILE: misc/translate_generation.sh ================================================ #!/bin/bash # this file is used to auto-generate .qm file from .ts file. # author: shibowen at linuxdeepin.com export PATH=/usr/lib/qt6/bin:$PATH cd translations ts_list=(`ls *.ts`) OUT_DIR=${1} echo OUT_DIR: ${OUT_DIR} mkdir -p ${OUT_DIR} for ts in "${ts_list[@]}" do printf "\nprocess ${ts}\n" lrelease "${ts}" -qm ${OUT_DIR}/${ts:0:-2}qm done ================================================ FILE: misc/translate_ts2desktop.sh ================================================ #!/bin/bash DESKTOP_TEMP_FILE=misc/org.deepin.dde.control-center.desktop.tmp DESKTOP_SOURCE_FILE=misc/org.deepin.dde.control-center.desktop DESKTOP_TS_DIR=translations/desktop/ /usr/bin/deepin-desktop-ts-convert ts2desktop $DESKTOP_SOURCE_FILE $DESKTOP_TS_DIR $DESKTOP_TEMP_FILE mv $DESKTOP_TEMP_FILE $DESKTOP_SOURCE_FILE ================================================ FILE: src/dde-control-center/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) #--------------------------frame-------------------------- set(DCCFrame_Name ${DCC_FRAME_Library}) add_library(${DCCFrame_Name} SHARED "${DCC_PROJECT_ROOT_DIR}/include/dccfactory.h" ) find_package(${QT_NS} COMPONENTS QmlModels REQUIRED) if(${QT_NS}_VERSION VERSION_GREATER_EQUAL 6.10) find_package(${QT_NS} COMPONENTS QmlModelsPrivate QuickPrivate REQUIRED) endif() target_link_libraries(${DCCFrame_Name} PRIVATE ${QT_NS}::Core ) set_target_properties(${DCCFrame_Name} PROPERTIES VERSION ${CMAKE_PROJECT_VERSION} SOVERSION ${CMAKE_PROJECT_VERSION_MAJOR} OUTPUT_NAME dde-control-center EXPORT_NAME Control-Center ) install(TARGETS ${DCCFrame_Name} EXPORT DdeControlCenterTargets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/dde-control-center ) install(EXPORT DdeControlCenterTargets FILE DdeControlCenterTargets.cmake NAMESPACE Dde:: DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DdeControlCenter ) #--------------------------qml-plugin-------------------------- add_subdirectory(plugin) #--------------------------dde-control-center-------------------------- set(Control_Center_Name dde-control-center) file(GLOB Control_Center_SRCS "*.h" "*.cpp" ) add_executable(${Control_Center_Name} ${Control_Center_SRCS} qrc/dcc.qrc ) target_compile_definitions(${Control_Center_Name} PRIVATE CVERSION="${CMAKE_PROJECT_VERSION}") target_include_directories(${Control_Center_Name} PRIVATE include plugin ) set(Control_Center_Libraries ${DCC_FRAME_Library} ${DTK_NS}::Gui ${QT_NS}::Gui ${QT_NS}::DBus ${QT_NS}::Concurrent ${QT_NS}::Quick dde-control-center-lib ) target_link_libraries(${Control_Center_Name} PRIVATE ${Control_Center_Libraries} ) if (HAVE_DDE_API_EVENTLOGGER) target_compile_definitions(${Control_Center_Name} PRIVATE HAVE_DDE_API_EVENTLOGGER) target_link_libraries(${Control_Center_Name} PRIVATE DDEAPI::EventLogger) endif() file(GLOB_RECURSE DCC_Translation_QML_FILES ${DCC_PROJECT_ROOT_DIR}/qml/*.qml ${DCC_PROJECT_ROOT_DIR}/src/*.qml) file(GLOB_RECURSE DCC_Translation_SOURCE_FILES ${DCC_PROJECT_ROOT_DIR}/src/*.cpp ${DCC_PROJECT_ROOT_DIR}/src/*.h) dcc_handle_plugin_translation(NAME ${Control_Center_Name} SOURCE_DIR ${DCC_PROJECT_ROOT_DIR} QML_FILES ${DCC_Translation_QML_FILES} SOURCE_FILES ${DCC_Translation_SOURCE_FILES}) # bin install(TARGETS ${Control_Center_Name} DESTINATION ${CMAKE_INSTALL_BINDIR}) #----------------------------install config------------------------------ #desktop install(FILES ${DCC_PROJECT_ROOT_DIR}/misc/org.deepin.dde.control-center.desktop DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications) #service configure_file( ${DCC_PROJECT_ROOT_DIR}/misc/org.deepin.dde.ControlCenter1.service.in ${CMAKE_CURRENT_BINARY_DIR}/org.deepin.dde.ControlCenter1.service @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.deepin.dde.ControlCenter1.service DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/dbus-1/services) # systemd service if (NOT DEFINED SYSTEMD_USER_UNIT_DIR) find_package(PkgConfig REQUIRED) pkg_check_modules(Systemd REQUIRED systemd) pkg_get_variable(SYSTEMD_USER_UNIT_DIR systemd systemduserunitdir) endif() configure_file( ${CMAKE_SOURCE_DIR}/misc/systemd/dde-control-center.service.in ${CMAKE_CURRENT_BINARY_DIR}/org.deepin.dde.control-center.service @ONLY) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/org.deepin.dde.control-center.service DESTINATION ${SYSTEMD_USER_UNIT_DIR}) # dev files file(GLOB HEADERS "${DCC_PROJECT_ROOT_DIR}/include/*") set(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR}/dde-control-center) install(FILES ${HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}) configure_package_config_file(${DCC_PROJECT_ROOT_DIR}/misc/DdeControlCenterConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/DdeControlCenterConfig.cmake INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DdeControlCenter PATH_VARS INCLUDE_INSTALL_DIR INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}) write_basic_package_version_file( "${CMAKE_CURRENT_BINARY_DIR}/DdeControlCenterConfigVersion.cmake" VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion ) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/DdeControlCenterConfig.cmake ${CMAKE_CURRENT_BINARY_DIR}/DdeControlCenterConfigVersion.cmake DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DdeControlCenter) install(FILES "${DCC_PROJECT_ROOT_DIR}/misc/DdeControlCenterPluginMacros.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/DdeControlCenter) install(FILES ${DCC_PROJECT_ROOT_DIR}/misc/org.deepin.dde.controlcenter.metainfo.xml DESTINATION ${CMAKE_INSTALL_DATADIR}/metainfo) #dde-grand-search-daemon conf install(FILES ${DCC_PROJECT_ROOT_DIR}/misc/org.deepin.dde-grand-search.dde-control-center-setting.conf DESTINATION ${CMAKE_INSTALL_LIBDIR}/dde-grand-search-daemon/plugins/searcher) # debug config file install(FILES ${DCC_PROJECT_ROOT_DIR}/misc/deepin-debug-config/org.deepin.dde.control-center.json DESTINATION ${CMAKE_INSTALL_DATADIR}/deepin-debug-config/deepin-debug-config.d) install(FILES ${DCC_PROJECT_ROOT_DIR}/misc/deepin-log-config/org.deepin.dde.control-center.json DESTINATION ${CMAKE_INSTALL_DATADIR}/deepin-log-viewer/deepin-log.conf.d) ================================================ FILE: src/dde-control-center/controlcenterdbusadaptor.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "controlcenterdbusadaptor.h" #include "dccmanager.h" #include #include #include #include #include #include #include #include #include #include using namespace dccV25; static Q_LOGGING_CATEGORY(dccLog, "dde.dcc.DBusAdaptor"); const QString DBusProperties = "org.freedesktop.DBus.Properties"; const QString DBusPropertiesChanged = "PropertiesChanged"; /* * Implementation of adaptor class DBusControlCenter */ ControlCenterDBusAdaptor::ControlCenterDBusAdaptor(DccManager *parent) : QDBusAbstractAdaptor(parent) { parent->mainWindow()->installEventFilter(this); connect(parent, &DccManager::activeObjectChanged, this, &ControlCenterDBusAdaptor::updatePage); } ControlCenterDBusAdaptor::~ControlCenterDBusAdaptor() { } DccManager *ControlCenterDBusAdaptor::parent() const { return static_cast(QObject::parent()); } const QRect ControlCenterDBusAdaptor::rect() const { return parent()->mainWindow()->geometry(); } const QString ControlCenterDBusAdaptor::page() const { QStringList path; for (auto obj : parent()->currentObjects()) { path.append(obj->name()); } path.takeFirst(); return path.join("/"); } const QString ControlCenterDBusAdaptor::path() const { QStringList path; for (auto obj : parent()->currentObjects()) { if (!obj->displayName().isEmpty()) { path.append(obj->displayName()); } } return path.join("/"); } void ControlCenterDBusAdaptor::Exit() { qCDebug(dccLog()) << "exit pid:" << QCoreApplication::applicationPid(); QCoreApplication::exit(); } void ControlCenterDBusAdaptor::Hide() { parent()->mainWindow()->hide(); } void ControlCenterDBusAdaptor::Show() { parent()->show(); } void ControlCenterDBusAdaptor::ShowHome() { parent()->showPage(QString()); } void ControlCenterDBusAdaptor::ShowPage(const QString &url) { parent()->showPage(url); } void ControlCenterDBusAdaptor::Toggle() { QWindow *w = parent()->mainWindow(); w->setVisible(!w->isVisible()); if (w->isVisible()) w->requestActivate(); } QString ControlCenterDBusAdaptor::GetAllModule() { return parent()->GetAllModule(); } void ControlCenterDBusAdaptor::ShowPage(const QString &module, const QString &page) { page.isEmpty() ? ShowPage(module) : ShowPage(module + "/" + page); } void ControlCenterDBusAdaptor::ShowModule(const QString &module) { ShowPage(module); } bool ControlCenterDBusAdaptor::eventFilter(QObject *obj, QEvent *event) { switch (event->type()) { case QEvent::Move: case QEvent::Resize: updateRect(); break; default: break; } return QDBusAbstractAdaptor::eventFilter(obj, event); } void ControlCenterDBusAdaptor::updatePage() { QDBusMessage msg = QDBusMessage::createSignal(DccDBusPath, DBusProperties, DBusPropertiesChanged); msg << DccDBusInterface << QVariantMap({ { "Page", page() }, { "Path", path() } }) << QStringList(); QDBusConnection::sessionBus().asyncCall(msg); } void ControlCenterDBusAdaptor::updateRect() { QDBusMessage msg = QDBusMessage::createSignal(DccDBusPath, DBusProperties, DBusPropertiesChanged); msg << DccDBusInterface << QVariantMap({ { "Rect", rect() } }) << QStringList(); QDBusConnection::sessionBus().asyncCall(msg); } DBusControlCenterGrandSearchService::DBusControlCenterGrandSearchService(DccManager *parent) : QDBusAbstractAdaptor(parent) , m_autoExitTimer(new QTimer(this)) { m_autoExitTimer->setInterval(10000); m_autoExitTimer->setSingleShot(true); connect(m_autoExitTimer, &QTimer::timeout, this, [this]() { // 当主界面show出来之后不再执行自动退出 if (!this->parent()->mainWindow()->isVisible()) QCoreApplication::quit(); }); m_autoExitTimer->start(); } DBusControlCenterGrandSearchService::~DBusControlCenterGrandSearchService() { } DccManager *DBusControlCenterGrandSearchService::parent() const { return static_cast(QObject::parent()); } // 匹配搜索结果 QString DBusControlCenterGrandSearchService::Search(const QString &json) { if (json == m_jsonCache) { return QString(); } m_jsonCache = json; const QString &val = parent()->searchProxy(json); m_autoExitTimer->start(); return val; } // 停止搜索 bool DBusControlCenterGrandSearchService::Stop(const QString &json) { m_jsonCache.clear(); bool val = parent()->stop(json); m_autoExitTimer->start(); return val; } // 执行搜索 bool DBusControlCenterGrandSearchService::Action(const QString &json) { m_jsonCache.clear(); bool val = parent()->action(json); m_autoExitTimer->start(); return val; } ================================================ FILE: src/dde-control-center/controlcenterdbusadaptor.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include QT_BEGIN_NAMESPACE class QTimer; QT_END_NAMESPACE /* * Adaptor class for interface com.deepin.dde.ControlCenter */ #define DccDBusService "org.deepin.dde.ControlCenter1" #define DccDBusInterface "org.deepin.dde.ControlCenter1" #define DccDBusPath "/org/deepin/dde/ControlCenter1" namespace dccV25 { class DccManager; class ControlCenterDBusAdaptor : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", DccDBusInterface) public: Q_PROPERTY(QRect Rect READ rect) Q_PROPERTY(QString Page READ page) Q_PROPERTY(QString Path READ path) explicit ControlCenterDBusAdaptor(DccManager *parent); virtual ~ControlCenterDBusAdaptor(); inline DccManager *parent() const; public: const QRect rect() const; const QString page() const; const QString path() const; public Q_SLOTS: // METHODS void Exit(); void Hide(); void Show(); void ShowHome(); void ShowPage(const QString &url); void Toggle(); QString GetAllModule(); Q_DECL_DEPRECATED_X("Use ShowPage") void ShowPage(const QString &module, const QString &page); Q_DECL_DEPRECATED_X("Use ShowPage") void ShowModule(const QString &module); private: bool eventFilter(QObject *obj, QEvent *event) override; void updatePage(); void updateRect(); }; class DBusControlCenterGrandSearchService : public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", DccDBusInterface ".GrandSearch") public: explicit DBusControlCenterGrandSearchService(DccManager *parent); virtual ~DBusControlCenterGrandSearchService(); inline DccManager *parent() const; public Q_SLOTS: // METHODS QString Search(const QString &json); bool Stop(const QString &json); bool Action(const QString &json); private: QTimer *m_autoExitTimer; QString m_jsonCache; // 缓存下对重复请求不处理(规避全局搜索会调两次Search) }; } // namespace dccV25 ================================================ FILE: src/dde-control-center/dccmanager.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dccmanager.h" #include "dccapp.h" #include "dccimageprovider.h" #include "dccobject_p.h" #include "navigationmodel.h" #include "pluginmanager.h" #include "searchmodel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_DDE_API_EVENTLOGGER #include // Event ID for control center page stay (10-digit number) constexpr qint64 EVENT_LOGGER_CONTROL_CENTER_STAY = 1000600012; #endif DCORE_USE_NAMESPACE namespace dccV25 { static Q_LOGGING_CATEGORY(dccLog, "dde.dcc.manager"); const QString WidthConfig = QStringLiteral("width"); const QString HeightConfig = QStringLiteral("height"); const QString HideConfig = QStringLiteral("hideModule"); const QString DisableConfig = QStringLiteral("disableModule"); const QString ControlCenterIcon = QStringLiteral("preferences-system"); const QString ControlCenterGroupName = "com.deepin.dde-grand-search.group.dde-control-center-setting"; DccManager::DccManager(QObject *parent) : DccApp(parent) , m_root(new DccObject()) , m_activeObject(nullptr) , m_hideObjects(new DccObject(this)) , m_noAddObjects(new DccObject(this)) , m_noParentObjects(new DccObject(this)) , m_plugins(new PluginManager(this)) , m_window(nullptr) , m_dconfig(DConfig::create("org.deepin.dde.control-center", "org.deepin.dde.control-center", QString(), this)) , m_engine(nullptr) , m_navModel(new NavigationModel(this)) , m_searchModel(new SearchModel(this)) , m_imageProvider(nullptr) , m_sidebarWidth(-1) , m_showTimer(nullptr) , m_showFallbackTimer(nullptr) #ifdef HAVE_DDE_API_EVENTLOGGER , m_pageStayTimer(nullptr) #endif { m_hideObjects->setName("_hide"); m_noAddObjects->setName("_noAdd"); m_noParentObjects->setName("_noParent"); m_root->setName("root"); m_root->setCanSearch(false); m_currentObjects.append(m_root); onObjectAdded(m_root); m_objMap.insert(m_root->name(), { m_root }); QJSEngine::setObjectOwnership(m_root, QQmlEngine::CppOwnership); QJSEngine::setObjectOwnership(m_hideObjects, QQmlEngine::CppOwnership); QJSEngine::setObjectOwnership(m_noAddObjects, QQmlEngine::CppOwnership); QJSEngine::setObjectOwnership(m_noParentObjects, QQmlEngine::CppOwnership); #ifdef HAVE_DDE_API_EVENTLOGGER qCInfo(dccLog) << "EventLogger initialized"; m_pageStayTimer = new QTimer(this); m_pageStayTimer->setSingleShot(true); m_pageStayTimer->setInterval(2000); // 2 seconds connect(m_pageStayTimer, &QTimer::timeout, this, &DccManager::onPageStayTimeout); #endif initConfig(); connect(m_plugins, &PluginManager::addObject, this, &DccManager::addObject); connect(m_plugins, &PluginManager::loadAllFinished, this, &DccManager::handleShowReady, Qt::QueuedConnection); m_showTimer = new QTimer(this); m_showTimer->setInterval(60); m_showTimer->setSingleShot(true); connect(m_showTimer, &QTimer::timeout, this, &DccManager::tryShow); m_showFallbackTimer = new QTimer(this); m_showFallbackTimer->setSingleShot(true); connect(m_showFallbackTimer, &QTimer::timeout, this, &DccManager::tryShowFallback); m_showFallbackTimer->start(5000); // 防止插件卡死不显示界面 } DccManager::~DccManager() { qCDebug(dccLog()) << "delete dccManger"; clearData(); delete m_plugins; qCDebug(dccLog()) << "delete dccManger end"; } bool DccManager::installTranslator(const QString &name) { const QStringList translateDirs = { TRANSLATE_READ_DIR, TRANSLATE_READ_DIR "/../v1.0", // 兼容旧版位置 TRANSLATE_READ_DIR "/.." }; return Dtk::Gui::DGuiApplicationHelper::loadTranslator(name, translateDirs, { QLocale() }); } void DccManager::init() { if (m_engine) return; QQmlEngine::setObjectOwnership(dccV25::DccApp::instance(), QQmlEngine::CppOwnership); qmlRegisterSingletonInstance("org.deepin.dcc", 1, 0, "DccApp", dccV25::DccApp::instance()); m_engine = new QQmlApplicationEngine(this); m_imageProvider = new DccImageProvider(); m_engine->addImageProvider("DccImage", m_imageProvider); } QQmlApplicationEngine *DccManager::engine() { return m_engine; } void DccManager::setMainWindow(QWindow *window) { m_window = window; connect(m_window, &QWindow::widthChanged, this, &DccManager::saveSize); connect(m_window, &QWindow::heightChanged, this, &DccManager::saveSize); connect(m_window, &QWindow::windowStateChanged, this, &DccManager::saveSize); connect(qGuiApp, &QGuiApplication::screenAdded, this, &DccManager::handleScreenAdded); m_window->installEventFilter(this); } void DccManager::loadModules(bool async, const QStringList &dirs) { // onAddModule(m_rootModule); m_plugins->loadModules(m_root, async, dirs, m_engine); // showModule(m_rootModule); } int DccManager::width() const { auto w = m_dconfig->value(WidthConfig).toInt(); return w >= 520 ? w : 780; } int DccManager::height() const { auto h = m_dconfig->value(HeightConfig).toInt(); return h >= 400 ? h : 530; } int DccManager::sidebarWidth() const { return m_sidebarWidth; } void DccManager::setSidebarWidth(int width) { if (width > 0 && m_sidebarWidth != width) { m_sidebarWidth = width; m_dconfig->setValue("sidebarWidth", m_sidebarWidth); Q_EMIT sidebarWidthChanged(m_sidebarWidth); } } DccApp::UosEdition DccManager::uosEdition() const { DSysInfo::UosEdition edition = DSysInfo::uosEditionType(); return DccApp::UosEdition(edition); } Q_INVOKABLE Dtk::Core::DSysInfo::ProductType DccManager::productType() const { return DSysInfo::productType(); } bool DccManager::isTreeland() const { return Dtk::Gui::DGuiApplicationHelper::testAttribute(Dtk::Gui::DGuiApplicationHelper::IsWaylandPlatform); } DccObject *DccManager::object(const QString &name) { return findObject(name); } inline void noRepeatAdd(QVector &list, DccObject *obj) { if (!list.contains(obj)) { list.append(obj); } } void DccManager::addObject(DccObject *obj) { if (!obj) return; QVector objs; objs.append(obj); while (!objs.isEmpty()) { DccObject *o = objs.takeFirst(); if (!o->name().isEmpty()) { m_objMap[o->name()].append(o); connect(o, &DccObject::objectDestroyed, this, &DccManager::onDccObjectDestroyed, Qt::UniqueConnection); } connect(o, &DccObject::addObject, this, &DccManager::addObject); connect(o, &DccObject::removeObject, this, qOverload(&DccManager::removeObject)); if (o->parentName().isEmpty()) { DccObject::Private::FromObject(m_noParentObjects)->addChild(o, false); } else { if (contains(m_hideModule, o)) { DccObject::Private::FromObject(o)->setFlagState(DCC_CONFIG_HIDDEN, true); } if (contains(m_disableModule, o)) { DccObject::Private::FromObject(o)->setFlagState(DCC_CONFIG_DISABLED, true); } if (!o->isVisibleToApp()) { connect(o, &DccObject::visibleToAppChanged, this, &DccManager::onVisible, Qt::ConnectionType(Qt::QueuedConnection | Qt::UniqueConnection)); DccObject::Private::FromObject(m_hideObjects)->addChild(o, false); } else if (!addObjectToParent(o)) { DccObject::Private::FromObject(m_noAddObjects)->addChild(o, false); } } objs.append(DccObject::Private::FromObject(o)->getObjects()); } // 处理m_noAddObject objs.append(m_noAddObjects->getChildren()); while (!objs.isEmpty()) { DccObject *o = objs.takeFirst(); if (const DccObject *parentObj = findParent(o)) { DccObject::Private::FromObject(m_noAddObjects)->removeChild(o); DccObject::Private::FromObject(parentObj)->addChild(o); objs = m_noAddObjects->getChildren(); } } } void DccManager::removeObject(DccObject *obj) { if (!obj) return; removeObjectFromParent(obj); } void DccManager::removeObject(const QString &name) { removeObject(findObject(name)); } void DccManager::showPage(const QString &url) { if (this->calledFromDBus()) { // show(); // 先查找再显示则注释掉此处 int i = url.indexOf('?'); QString cmd = i != -1 ? url.mid(i + 1) : QString(); if (cmd.isEmpty() || isIndicatorShown(cmd)) { show(); } auto message = this->message(); setDelayedReply(true); QMetaObject::invokeMethod(this, &DccManager::waitShowPage, Qt::QueuedConnection, url, message); } else { QMetaObject::invokeMethod(this, &DccManager::waitShowPage, Qt::QueuedConnection, url, QDBusMessage()); } } void DccManager::showPage(DccObject *obj) { QMetaObject::invokeMethod(this, "doShowPage", Qt::QueuedConnection, QPointer(obj), QString()); } void DccManager::showPage(DccObject *obj, const QString &cmd) { QMetaObject::invokeMethod(this, "doShowPage", Qt::QueuedConnection, QPointer(obj), cmd); } void DccManager::toBack() { int row = m_navModel->rowCount() - 2; if (row < 0) { showPage(m_root); } else { QString url = m_navModel->data(m_navModel->index(row, 0), NavigationModel::NavUrlRole).toString(); if (!url.isEmpty()) { showPage(url); } } } QWindow *DccManager::mainWindow() const { return m_window; } void DccManager::showHelp() { QString helpTitle; if (1 < m_currentObjects.count()) helpTitle = m_currentObjects.last()->name(); if (helpTitle.isEmpty()) helpTitle = "controlcenter"; const QString &dmanInterface = "com.deepin.Manual.Open"; QDBusMessage message = QDBusMessage::createMethodCall(dmanInterface, "/com/deepin/Manual/Open", dmanInterface, "OpenTitle"); message << "dde" << helpTitle; QDBusConnection::sessionBus().asyncCall(message); } QString DccManager::search(const QString &json) const { QJsonDocument jsonDocument = QJsonDocument::fromJson(json.toLocal8Bit().data()); if (!jsonDocument.isNull()) { QJsonObject jsonObject = jsonDocument.object(); // 处理搜索任务, 返回搜索结果 QJsonArray items; m_searchModel->setFilterRegularExpression(jsonObject.value("cont").toString()); qCDebug(dccLog()) << "search key:" << jsonObject.value("cont").toString(); for (int i = 0; i < m_searchModel->rowCount(); ++i) { QJsonObject jsonObj; jsonObj.insert("item", m_searchModel->data(m_searchModel->index(i, 0), SearchModel::SearchUrlRole).toString()); jsonObj.insert("name", m_searchModel->data(m_searchModel->index(i, 0), SearchModel::SearchPlainTextRole).toString()); jsonObj.insert("icon", ControlCenterIcon); jsonObj.insert("type", "application/x-dde-control-center-xx"); qCDebug(dccLog()) << "search results:" << jsonObj["name"].toString(); items.insert(i, jsonObj); } QJsonObject objCont; objCont.insert("group", ControlCenterGroupName); objCont.insert("items", items); QJsonArray arrConts; arrConts.insert(0, objCont); QJsonObject jsonResults; jsonResults.insert("ver", jsonObject.value("ver")); jsonResults.insert("mID", jsonObject.value("mID")); jsonResults.insert("cont", arrConts); QJsonDocument document; document.setObject(jsonResults); return document.toJson(QJsonDocument::Compact); } return QString(); } QString DccManager::searchProxy(const QString &json) const { if (this->calledFromDBus()) { if (!m_plugins->loadFinished()) { qDebug(dccLog) << "Delay to get searching due to plugins unloaded."; auto message = this->message(); setDelayedReply(true); QObject::connect( m_plugins, &PluginManager::loadAllFinished, this, [this, json, message]() { const auto &ret = this->search(json); qDebug(dccLog) << "Searching finished, result size:" << ret.size(); QDBusConnection::sessionBus().send(message.createReply(ret)); }, Qt::SingleShotConnection); return {}; } } return search(json); } bool DccManager::stop(const QString &) { return true; } bool DccManager::action(const QString &json) { QString searchName; QJsonDocument jsonDocument = QJsonDocument::fromJson(json.toLocal8Bit().data()); if (!jsonDocument.isNull()) { QJsonObject jsonObject = jsonDocument.object(); if (jsonObject.value("action") == "openitem") { // 打开item的操作 searchName = jsonObject.value("item").toString(); } } show(); showPage(searchName); return true; } QString DccManager::GetAllModule() { auto message = this->message(); setDelayedReply(true); QMetaObject::invokeMethod(this, &DccManager::doGetAllModule, Qt::QueuedConnection, message); return QString(); } void DccManager::onDccObjectDestroyed(DccObject *obj) { if (m_plugins->isDeleting()) { return; } const QString &name = obj->name(); if (name.isEmpty()) { return; } auto it = m_objMap.find(name); if (it == m_objMap.end()) { return; } it->removeOne(obj); if (it->isEmpty()) { m_objMap.erase(it); } } QAbstractItemModel *DccManager::navModel() const { return m_navModel; } QSortFilterProxyModel *DccManager::searchModel() const { return m_searchModel; } void DccManager::cacheImage(const QString &id, const QSize &thumbnailSize) { if (m_imageProvider) { m_imageProvider->cacheImage(id, thumbnailSize); } } void DccManager::show() { QWindow *w = DccManager::mainWindow(); if (!w) { return; } if (w->windowStates() == Qt::WindowMinimized || !w->isVisible()) { w->showNormal(); } w->requestActivate(); } void DccManager::initConfig() { if (!m_dconfig->isValid()) { qCWarning(dccLog()) << QString("DConfig is invalide, name:[%1], subpath[%2].").arg(m_dconfig->name(), m_dconfig->subpath()); return; } updateModuleConfig(HideConfig); updateModuleConfig(DisableConfig); m_sidebarWidth = m_dconfig->value("sidebarWidth", -1).toInt(); if (m_sidebarWidth <= 0) { // 英文环境做特殊处理,加宽侧边栏 QLocale locale; m_sidebarWidth = locale.language() == QLocale::English ? 210 : 180; } connect(m_dconfig, &DConfig::valueChanged, this, &DccManager::updateModuleConfig); } bool DccManager::contains(const QSet &urls, const DccObject *obj) { for (auto &&url : urls) { if (url.contains("*")) { if (isMatch(url, obj)) { return true; } } else { if (isEqual(url, obj)) { return true; } } } return false; } QStringList DccManager::splitUrl(const QString &url, QString &targetName) { QStringList paths = url.split("/", Qt::SkipEmptyParts); if (!paths.isEmpty()) { targetName = paths.takeLast(); } return paths; } bool DccManager::isMatchByName(const QString &url, const QString &name) { Q_ASSERT(!url.isEmpty()); QString objPath = "/" + name; int urlPos = url.size() - 1; int objPos = objPath.size() - 1; bool inWildcard = false; // 包含* while (urlPos >= 0 && objPos >= 0) { if (url[urlPos] == objPath[objPos]) { urlPos--; objPos--; inWildcard = false; } else if (url[urlPos] == '*') { inWildcard = true; urlPos--; } else if (inWildcard && objPath[objPos] != '/') { objPos--; } else { return false; } } if (inWildcard) { return true; } if (urlPos >= 0) { return true; // 等价于 objPath[0] == '/' || url[urlPos] == '/'; } if (objPos >= 0) { return objPath[objPos] == '/' || url[0] == '/'; } return true; } // url需要在调用处保证非空 bool DccManager::isMatch(const QString &url, const DccObject *obj) { return isMatchByName(url, obj->parentName() + "/" + obj->name()); } bool DccManager::isEqualByName(const QString &url, const QString &name) { for (auto it = url.crbegin(), itObj = name.crbegin();; ++it, ++itObj) { if (it == url.crend()) { return itObj == name.crend() || (*itObj) == '/'; } if (itObj == name.crend()) { return (*it) == '/'; } if (*it != *itObj) { return false; } } return true; } bool DccManager::isEqual(const QString &url, const DccObject *obj) { return isEqualByName(url, obj->parentName() + "/" + obj->name()); } DccObject *DccManager::findObject(const QString &url) { if (!m_root || url.isEmpty()) { return nullptr; } QString targetName; QStringList paths = splitUrl(url, targetName); if (targetName.isEmpty()) { return nullptr; } auto it = m_objMap.find(targetName); if (it == m_objMap.end()) { return nullptr; } if (paths.isEmpty()) { return it.value().first(); } QString parentPath = paths.join("/"); for (const auto &obj : it.value()) { if (isEqualByName(parentPath, obj->parentName())) { return obj; } } return nullptr; } QVector DccManager::findObjects(const QString &url, bool one) { if (!m_root || url.isEmpty()) { return {}; } QString targetName; QStringList paths = splitUrl(url, targetName); if (targetName.isEmpty()) { return {}; } QVector rets; QVector objs; if (!targetName.contains("*")) { auto it = m_objMap.find(targetName); if (it == m_objMap.end()) { return {}; } objs = it.value(); } else { targetName = "/" + targetName; for (auto it = m_objMap.begin(); it != m_objMap.end(); it++) { if (isMatchByName(targetName, it.key())) { objs.append(it.value()); } } } if (paths.isEmpty()) { return objs; } QString parentPath = "/" + paths.join("/"); for (auto &&obj : objs) { if (isMatchByName(parentPath, obj->parentName())) { rets.append(obj); if (one) { break; } } } return rets; } const DccObject *DccManager::findParent(const DccObject *obj) { const QString &path = obj->parentName(); const DccObject *p = DccObject::Private::FromObject(obj)->getRecommendedParent(); const QObject *op = obj; if (p && !p->name().isEmpty() && isEqual(path, p)) { return p; } while (op) { op = op->parent(); p = qobject_cast(op); if (p && !p->name().isEmpty() && isEqual(path, p)) { return p; } } qCDebug(dccLog()) << obj->name() << "find parent:" << path << ".Parent-child position error, traverse all objects to find."; p = findObject(path); return p; } bool DccManager::eventFilter(QObject *watched, QEvent *event) { if (event->type() == QEvent::MouseButtonPress && watched == m_window && m_window) { QMouseEvent *e = static_cast(event); if (e->buttons() == Qt::LeftButton) { QQuickWindow *w = static_cast(m_window.get()); if (w) { QQuickItem *focusItem = w->activeFocusItem(); if (focusItem) { QObject *popup = focusItem->property("popup").value(); if (!popup || !popup->property("visible").toBool()) { QPointF point = focusItem->mapFromGlobal(e->globalPosition()); QRectF rect(0, 0, focusItem->width(), focusItem->height()); if (!rect.contains(point)) { QQuickItem *item = w->property("sidebarPage").value(); if (item) { item->forceActiveFocus(); } } } } } } } return DccApp::eventFilter(watched, event); } bool DccManager::isIndicatorShown(const QString &cmd) const { return cmd == "indicator=true"; } void DccManager::saveSize() { if (!m_window) return; if (!m_dconfig->isValid()) return; const auto states = m_window->windowStates(); const bool isMaximized = states.testFlag(Qt::WindowMaximized) || states.testFlag(Qt::WindowFullScreen); const bool visible = m_window->isVisible(); // Only save normal size when visible and not maximized. // During maximization, widthChanged/heightChanged may fire with screen // dimensions before windowStateChanged updates the state. // On some platforms (e.g. Wayland), hiding a window may reset its state, // so we must not save the reset dimensions either. if (!visible || isMaximized) return; m_dconfig->setValue(WidthConfig, m_window->width()); m_dconfig->setValue(HeightConfig, m_window->height()); } void DccManager::handleScreenAdded(QScreen *screen) { Q_UNUSED(screen) if (!m_window) return; // Requirement: when HDMI re-connected, if the control center is maximized, // restore it back to the default (normal) window size. if (!m_window->windowStates().testFlag(Qt::WindowMaximized)) return; m_window->showNormal(); QScreen *targetScreen = m_window->screen() ? m_window->screen() : qGuiApp->primaryScreen(); if (!targetScreen) return; QRect avail = targetScreen->availableGeometry(); int w = width(); int h = height(); // Clamp into the available area (avoid going off-screen) // Keep consistent with `DccWindow.qml` minimum sizes. constexpr int kMinW = 520; constexpr int kMinH = 400; w = qMax(kMinW, qMin(w, avail.width())); h = qMax(kMinH, qMin(h, avail.height())); m_window->resize(QSize(w, h)); const int x = avail.x() + (avail.width() - w) / 2; const int y = avail.y() + (avail.height() - h) / 2; m_window->setPosition(QPoint(x, y)); m_window->requestActivate(); } QString DccManager::parseShowPageUrl(const QString &url, QString &cmd) const { const int i = url.indexOf('?'); cmd = i != -1 ? url.mid(i + 1) : QString(); return url.mid(0, i).split('/', Qt::SkipEmptyParts).join('/'); // 移除多余的/ } void DccManager::replyShowPageRequest(const QString &url, const QDBusMessage &message, bool found) const { if (message.type() == QDBusMessage::InvalidMessage) { return; } if (found) { QDBusConnection::sessionBus().send(message.createReply()); } else { QDBusConnection::sessionBus().send(message.createErrorReply(QDBusError::InvalidArgs, QString("not found url:") + url)); } } void DccManager::startPendingShow(const QString &url, const QDBusMessage &message) { m_showUrl = url; m_showMessage = message; m_showTimer->start(); } void DccManager::waitShowPage(const QString &url, const QDBusMessage message) { qCInfo(dccLog()) << "show page:" << url; clearShowParam(); m_showFallbackTimer->stop(); if (m_plugins->isDeleting()) { return; } DccObject *obj = nullptr; QString cmd; if (url.isEmpty()) { obj = m_root; showPage(obj, QString()); } else { const QString path = parseShowPageUrl(url, cmd); const auto objs = findObjects(path, true); obj = objs.isEmpty() ? nullptr : objs.first(); if (obj) { showPage(obj, cmd); } else if (!m_plugins->loadFinished()) { startPendingShow(url, message); return; } } replyShowPageRequest(url, message, obj); } void DccManager::clearShowParam() { m_showTimer->stop(); if (!m_showUrl.isEmpty()) { m_showUrl.clear(); m_showMessage = QDBusMessage(); } } void DccManager::handleShowReady() { if (!m_showUrl.isEmpty()) { tryShow(); } else if (m_showFallbackTimer->isActive() && !m_activeObject) { tryShowFallback(); } } void DccManager::tryShow() { if (m_showUrl.isEmpty()) { return; } QString cmd; const QString path = parseShowPageUrl(m_showUrl, cmd); DccObject *obj = findObject(path); if (obj) { const QString url = m_showUrl; const QDBusMessage message = m_showMessage; clearShowParam(); showPage(obj, cmd); replyShowPageRequest(url, message, true); } else if (m_plugins->loadFinished()) { const QString url = m_showUrl; const QDBusMessage message = m_showMessage; clearShowParam(); replyShowPageRequest(url, message, false); if (!m_activeObject) { showPage(m_root, QString()); } } else if (!m_plugins->isDeleting()) { m_showTimer->start(); } } void DccManager::tryShowFallback() { if (m_plugins->isDeleting() || !m_showUrl.isEmpty() || m_activeObject) { return; } m_showFallbackTimer->stop(); showPage(m_root, QString()); } void DccManager::doShowPage(QPointer obj, const QString &cmd) { if (m_plugins->isDeleting() || !obj) { return; } m_showFallbackTimer->stop(); qCInfo(dccLog) << "ShowPage:" << obj << " have cmd:" << !cmd.isEmpty(); // 禁用首页 if (obj == m_root) { if (m_root->getChildren().isEmpty()) { return; } obj = m_root->getChildren().first(); } if (m_activeObject == obj && cmd.isEmpty()) { return; } bool indicatorShown = isIndicatorShown(cmd); if (!cmd.isEmpty() && !indicatorShown) { Q_EMIT obj->active(cmd); return; } DccObject *parent = obj; while (parent && parent != m_root) { parent = DccObject::Private::FromObject(parent)->getParent(); } if (parent != m_root) { return; } QVector modules; QVector triggeredObjs; DccObject *triggeredObj = obj; if (triggeredObj->pageType() == DccObject::MenuEditor && !triggeredObj->getChildren().isEmpty()) { triggeredObj = triggeredObj->getChildren().first(); } DccObject *tmpObj = triggeredObj; tmpObj->setCurrentObject(nullptr); tmpObj->active(QString()); while (tmpObj && (tmpObj->pageType() != DccObject::Menu)) { // 页面中的控件,则激活项为父项 triggeredObjs.append(tmpObj); DccObject *tmpObjParent = DccObject::Private::FromObject(tmpObj)->getParent(); if (tmpObjParent) { tmpObjParent->setCurrentObject(tmpObj); tmpObjParent->active(QString()); } tmpObj = tmpObjParent; } if (!tmpObj) { return; } modules.append(tmpObj); DccObject *p = DccObject::Private::FromObject(tmpObj)->getParent(); while (p) { p->setCurrentObject(tmpObj); Q_EMIT p->active(QString()); modules.append(p); tmpObj = p; p = DccObject::Private::FromObject(p)->getParent(); } triggeredObjs.append(modules); std::reverse(modules.begin(), modules.end()); std::reverse(triggeredObjs.begin(), triggeredObjs.end()); auto animationMode = DccApp::AnimationPush; // 处理旧对象 for (auto *oldObj : std::as_const(m_triggeredObjects)) { if (!triggeredObjs.contains(oldObj)) { oldObj->setCurrentObject(nullptr); animationMode = DccApp::AnimationPop; } if (oldObj != m_root && oldObj != triggeredObjs.last()) { Q_EMIT oldObj->deactive(); } } setAnimationMode(animationMode); // 更新当前对象 m_currentObjects = modules; m_triggeredObjects = triggeredObjs; Q_EMIT triggeredObjectsChanged(m_triggeredObjects); if (auto *lastObj = m_currentObjects.last(); lastObj != m_activeObject) { m_activeObject = lastObj; Q_EMIT activeObjectChanged(m_activeObject); } // 更新导航模型和日志 m_navModel->setNavigationObject(m_currentObjects); qCInfo(dccLog) << "trigger object:" << triggeredObj->name() << " active object:" << m_activeObject->name() << " parent:" << (void *)triggeredObj->parentItem(); #ifdef HAVE_DDE_API_EVENTLOGGER // Reset and start page stay timer when page changes if (m_pageStayTimer) { m_pageStayTimer->stop(); // Build page tags directly from current objects m_lastPageTags.clear(); for (auto *obj : m_currentObjects) { if (obj != m_root) { m_lastPageTags.append(obj->name()); } } m_pageStayTimer->start(); } #endif // 触发父项变更 if (auto *parentItem = triggeredObj->parentItem(); !(triggeredObj->pageType() & DccObject::Menu) && parentItem) { Q_EMIT activeItemChanged(parentItem, indicatorShown); } } QSet findAddItems(QSet *oldSet, QSet *newSet) { QSet addSet; for (auto &&key : *newSet) { if (!oldSet->contains(key)) { addSet.insert(key); } } return addSet; } void DccManager::updateModuleConfig(const QString &key) { QSet oldModuleConfig; QSet *newModuleConfig = nullptr; uint32_t type = DCC_CONFIG_HIDDEN; if (key == HideConfig) { type = DCC_CONFIG_HIDDEN; oldModuleConfig = m_hideModule; newModuleConfig = &m_hideModule; } else if (key == DisableConfig) { type = DCC_CONFIG_DISABLED; oldModuleConfig = m_disableModule; newModuleConfig = &m_disableModule; } else { return; } const auto &list = m_dconfig->value(key).toStringList(); // 预处理,去掉首尾空格项,去多通配符项 newModuleConfig->clear(); for (auto &&config : list) { bool isValid = false; // 有效字符为:字母、数字、'/'、'*' for (auto &c : config) { isValid = c == '/' || c == '*' || c.isLetterOrNumber(); if (!isValid) { break; } } if (isValid) { newModuleConfig->insert(config); } } QSet addModuleConfig = findAddItems(&oldModuleConfig, newModuleConfig); QSet removeModuleConfig = findAddItems(newModuleConfig, &oldModuleConfig); for (auto &&url : addModuleConfig) { QVector objs = findObjects(url); for (auto &&obj : objs) { DccObject::Private::FromObject(obj)->setFlagState(type, true); } } for (auto &&url : removeModuleConfig) { QVector objs = findObjects(url); for (auto &&obj : objs) { DccObject::Private::FromObject(obj)->setFlagState(type, false); } } if (newModuleConfig == &m_hideModule && (!addModuleConfig.isEmpty() || !removeModuleConfig.isEmpty())) { Q_EMIT hideModuleChanged(m_hideModule); } } void DccManager::onVisible(bool visible) { if (!m_root) { return; } DccObject *obj = qobject_cast(sender()); if (!obj) { return; } if (visible) { QVector objs; objs.append(obj->getChildren()); while (!objs.isEmpty()) { auto o = objs.takeFirst(); if (o->isVisibleToApp()) { objs.append(o->getChildren()); } else { connect(o, &DccObject::visibleToAppChanged, this, &DccManager::onVisible, Qt::ConnectionType(Qt::QueuedConnection | Qt::UniqueConnection)); removeObjectFromParent(o); DccObject::Private::FromObject(m_hideObjects)->addChild(o, false); } } DccObject::Private::FromObject(m_hideObjects)->removeChild(obj); if (!addObjectToParent(obj)) { DccObject::Private::FromObject(m_noAddObjects)->addChild(obj, false); } } else { removeObjectFromParent(obj); DccObject::Private::FromObject(m_hideObjects)->addChild(obj, false); } } void DccManager::onObjectAdded(DccObject *obj) { if (!m_root) { return; } m_searchModel->addSearchData(obj, QString(), QString()); QVector objs; objs.append(obj); while (!objs.isEmpty()) { auto o = objs.takeFirst(); connect(o, &DccObject::childAdded, this, &DccManager::onObjectAdded); connect(o, &DccObject::childRemoved, this, &DccManager::onObjectRemoved); connect(o, &DccObject::displayNameChanged, this, &DccManager::onObjectDisplayChanged); connect(o, &DccObject::visibleToAppChanged, this, &DccManager::onVisible, Qt::ConnectionType(Qt::QueuedConnection | Qt::UniqueConnection)); objs.append(o->getChildren()); } } void DccManager::onObjectRemoved(DccObject *obj) { if (!m_root) { return; } QVector objs; objs.append(obj); while (!objs.isEmpty()) { auto o = objs.takeFirst(); disconnect(o, &DccObject::childAdded, this, nullptr); disconnect(o, &DccObject::childRemoved, this, nullptr); disconnect(o, &DccObject::displayNameChanged, this, nullptr); m_searchModel->removeSearchData(o, QString()); objs.append(o->getChildren()); } auto it = std::find(m_triggeredObjects.begin(), m_triggeredObjects.end(), obj); if (it != m_triggeredObjects.end()) { m_triggeredObjects.erase(it, m_triggeredObjects.end()); } DccObject *parentObj = m_root; for (auto &&o : m_currentObjects) { if (o == obj) { doShowPage(QPointer(parentObj), QString()); break; } parentObj = o; } } void DccManager::onObjectDisplayChanged() { if (!m_root) { return; } DccObject *obj = qobject_cast(sender()); if (obj) { m_searchModel->removeSearchData(obj, QString()); m_searchModel->addSearchData(obj, QString(), QString()); } } bool DccManager::addObjectToParent(DccObject *obj) { if (const DccObject *parentObj = findParent(obj)) { DccObject::Private::FromObject(parentObj)->addChild(obj); return true; } return false; } bool DccManager::removeObjectFromParent(DccObject *obj) { DccObject *parentObj = DccObject::Private::FromObject(obj)->getParent(); if (parentObj) { DccObject::Private::FromObject(parentObj)->removeChild(obj); return true; } return false; } void DccManager::clearData() { if (m_plugins->isDeleting()) { return; } m_imageProvider = nullptr; m_plugins->beginDelete(); clearShowParam(); m_window->hide(); m_window->close(); m_objMap.clear(); // doShowPage(m_root, QString()); #ifdef DCC_ENABLE_MEMORY_MANAGEMENT // TODO: delete m_engine会有概率崩溃 m_window = nullptr; qCDebug(dccLog()) << "delete root begin"; DccObject *root = m_root; m_root = nullptr; Q_EMIT rootChanged(m_root); qCDebug(dccLog()) << "delete root end"; qCDebug(dccLog()) << "delete clearData hide:" << m_hideObjects->getChildren().size() << "noAdd:" << m_noAddObjects->getChildren().size() << "noParent" << m_noParentObjects->getChildren().size(); delete m_noParentObjects; delete m_noAddObjects; delete m_hideObjects; qCDebug(dccLog()) << "delete dccobject"; qCDebug(dccLog()) << "delete QmlEngine"; delete m_engine; qCDebug(dccLog()) << "clear QmlEngine"; m_engine = nullptr; delete root; #endif } void DccManager::waitLoadFinished() const { if (!m_plugins->loadFinished()) { QEventLoop loop; QTimer timer; connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit); connect(m_plugins, &PluginManager::loadAllFinished, &loop, &QEventLoop::quit); timer.start(5000); loop.exec(); } } void DccManager::doGetAllModule(const QDBusMessage message) const { waitLoadFinished(); DccObject *root = m_root; QList> modules; for (auto &&child : root->getChildren()) { modules.append({ child, { child->name(), child->displayName() } }); } for (auto &&child : m_hideObjects->getChildren()) { modules.append({ child, { child->name(), child->displayName() } }); } QJsonArray arr; while (!modules.isEmpty()) { const auto &urlInfo = modules.takeFirst(); QJsonObject obj; obj.insert("url", urlInfo.second.at(0)); obj.insert("displayName", urlInfo.second.at(1)); obj.insert("weight", (int)(urlInfo.first->weight())); arr.append(obj); const QList &children = urlInfo.first->getChildren(); for (auto it = children.crbegin(); it != children.crend(); ++it) modules.prepend({ *it, { urlInfo.second.at(0) + "/" + (*it)->name(), urlInfo.second.at(1) + "/" + (*it)->displayName() } }); } QJsonDocument doc; doc.setArray(arr); QString json = doc.toJson(QJsonDocument::Compact); QDBusConnection::sessionBus().send(message.createReply(json)); } void DccManager::onPageStayTimeout() { #ifdef HAVE_DDE_API_EVENTLOGGER qCInfo(dccLog) << "onPageStayTimeout triggered, m_lastPageTags:" << m_lastPageTags; if (m_lastPageTags.isEmpty()) { qCWarning(dccLog) << "onPageStayTimeout: m_lastPageTags is empty, skipping log"; return; } QJsonArray tagArray; for (const auto &tag : m_lastPageTags) { tagArray.append(tag); } DDE_EventLogger::EventLogger::instance().writeEventLog( DDE_EventLogger::EventLoggerData(EVENT_LOGGER_CONTROL_CENTER_STAY, "control_center_config", { {"control_center_tag", tagArray} })); qCInfo(dccLog) << "EventLogger: page stay - tags:" << QJsonDocument(tagArray).toJson(QJsonDocument::Compact); #endif } } // namespace dccV25 ================================================ FILE: src/dde-control-center/dccmanager.h ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCMANAGER_H #define DCCMANAGER_H #include "dccapp.h" #include "dccobject.h" #include #include #include #include #include QT_BEGIN_NAMESPACE class QWindow; class QQmlApplicationEngine; class QAbstractItemModel; class QScreen; QT_END_NAMESPACE namespace dccV25 { class NavigationModel; class SearchModel; class PluginManager; class DccImageProvider; class DccManager : public DccApp, protected QDBusContext { Q_OBJECT public: explicit DccManager(QObject *parent = nullptr); ~DccManager() override; static bool installTranslator(const QString &name); void init(); QQmlApplicationEngine *engine(); void setMainWindow(QWindow *window); void loadModules(bool async, const QStringList &dirs); int width() const override; int height() const override; int sidebarWidth() const override; void setSidebarWidth(int width) override; inline DccObject *root() const override { return m_root; } inline DccObject *activeObject() const override { return m_activeObject; } inline const QVector ¤tObjects() const override { return m_currentObjects; } inline const QVector &triggeredObjects() const override { return m_triggeredObjects; } Q_INVOKABLE DccApp::UosEdition uosEdition() const; Q_INVOKABLE Dtk::Core::DSysInfo::ProductType productType() const; Q_INVOKABLE bool isTreeland() const; inline const QSet &hideModule() const { return m_hideModule; } public Q_SLOTS: DccObject *object(const QString &name) override; void addObject(DccObject *obj) override; void removeObject(DccObject *obj) override; void removeObject(const QString &name) override; void showPage(const QString &url) override; void showPage(DccObject *obj); void showPage(DccObject *obj, const QString &cmd) override; void toBack(); QWindow *mainWindow() const override; QAbstractItemModel *navModel() const override; QSortFilterProxyModel *searchModel() const override; void cacheImage(const QString &id, const QSize &thumbnailSize = QSize()); void show(); void showHelp(); // DBus Search QString search(const QString &json) const; QString searchProxy(const QString &json) const; bool stop(const QString &json); bool action(const QString &json); QString GetAllModule(); void onDccObjectDestroyed(DccObject *obj); Q_SIGNALS: void activeItemChanged(QQuickItem *item, bool isIndicatorShown); void hideModuleChanged(const QSet &hideModule); private: void initConfig(); bool contains(const QSet &urls, const DccObject *obj); QStringList splitUrl(const QString &url, QString &targetName); bool isMatchByName(const QString &url, const QString &name); bool isMatch(const QString &url, const DccObject *obj); bool isEqualByName(const QString &url, const QString &name); bool isEqual(const QString &url, const DccObject *obj); DccObject *findObject(const QString &url); QVector findObjects(const QString &url, bool one = false); const DccObject *findParent(const DccObject *obj); bool eventFilter(QObject *watched, QEvent *event) override; bool isIndicatorShown(const QString &cmd) const; QString parseShowPageUrl(const QString &url, QString &cmd) const; void replyShowPageRequest(const QString &url, const QDBusMessage &message, bool found) const; void startPendingShow(const QString &url, const QDBusMessage &message); private Q_SLOTS: void saveSize(); void handleScreenAdded(QScreen *screen); void waitShowPage(const QString &url, const QDBusMessage message); void clearShowParam(); void handleShowReady(); void tryShow(); void tryShowFallback(); void doShowPage(QPointer obj, const QString &cmd); void updateModuleConfig(const QString &key); void onVisible(bool visible); void onObjectAdded(DccObject *obj); void onObjectRemoved(DccObject *obj); void onObjectDisplayChanged(); bool addObjectToParent(DccObject *obj); bool removeObjectFromParent(DccObject *obj); void clearData(); void waitLoadFinished() const; void doGetAllModule(const QDBusMessage message) const; void onPageStayTimeout(); private: DccObject *m_root; DccObject *m_activeObject; // 当前定位的项 DccObject *m_hideObjects; // 隐藏的项 DccObject *m_noAddObjects; // 未找到父对象的 DccObject *m_noParentObjects; // 没有父对象的 QVector m_currentObjects; // 当前显示的页面路径,从根页面到当前页面 QVector m_triggeredObjects; // 用户交互触发的对象路径,从根菜单到当前子控件 PluginManager *m_plugins; QPointer m_window; Dtk::Core::DConfig *m_dconfig; QSet m_hideModule; QSet m_disableModule; QQmlApplicationEngine *m_engine; NavigationModel *m_navModel; SearchModel *m_searchModel; DccImageProvider *m_imageProvider; int m_sidebarWidth; // DBus调用时,对应项还没加载完成,此处保存跳转参数 QTimer *m_showTimer; QTimer *m_showFallbackTimer; QString m_showUrl; QDBusMessage m_showMessage; QHash> m_objMap; // 映射对象名称到对象指针列表,用于快速查找 #ifdef HAVE_DDE_API_EVENTLOGGER QTimer *m_pageStayTimer; QStringList m_lastPageTags; #endif }; } // namespace dccV25 #endif // DCCMANAGER_H ================================================ FILE: src/dde-control-center/main.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "controlcenterdbusadaptor.h" #include "dccmanager.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE DCORE_USE_NAMESPACE QString loggingRules(const QString &loggingModule) { if (loggingModule.isEmpty()) return ""; static const QStringList levels = { "warning", "info", "debug" }; const auto &list = loggingModule.split(","); const auto &moduleName = list.at(0); const auto &level = list.size() > 1 ? list.at(1) : "info"; const int levelIndex = levels.indexOf(level); if (-1 == levelIndex) return ""; QString rules = "*.debug=false\n*.info=false\n*.warning=false\n"; for (int i = 0; i <= levelIndex; ++i) { auto rule = QString("org.deepin.dde.control-center.").append(moduleName).append(".").append(levels.at(i)).append("=true\n"); rules.append(std::move(rule)); } return rules; } QStringList defaultpath() { QString pluginsDir(DefaultModuleDirectory); const QStringList path{ pluginsDir + "/plugins_v1.1", pluginsDir + "/plugins_v1.0" }; // , QStringLiteral("/usr/lib/dde-control-center/modules/") }; return path; } static void refreshQmlCache(const QString &version) { if (version.isEmpty()) return; static const QByteArray envCachePath = qgetenv("QML_DISK_CACHE_PATH"); QString directory = envCachePath.isEmpty() ? QStandardPaths::writableLocation(QStandardPaths::CacheLocation) + QLatin1String("/qmlcache/") : QString::fromLocal8Bit(envCachePath) + QLatin1String("/"); QDir dir(directory); if (dir.exists()) { if (dir.exists(version)) return; const auto ret = dir.removeRecursively(); qDebug() << "Remove old QML cache:" << directory << "result:" << ret; } dir.mkpath(version); } int main(int argc, char *argv[]) { QGuiApplication *app = new QGuiApplication(argc, argv); #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) app.setAttribute(Qt::AA_UseHighDpiPixmaps); #endif // (QT_VERSION < QT_VERSION_CHECK(6, 0, 0)) app->setOrganizationName("deepin"); app->setApplicationName("dde-control-center"); #ifdef CVERSION QString verstr(CVERSION); if (verstr.isEmpty()) verstr = "6.0"; app->setApplicationVersion(verstr); #else app->setApplicationVersion("6.0"); #endif app->setQuitOnLastWindowClosed(false); refreshQmlCache(app->applicationVersion()); // take care of command line options QCommandLineOption showOption(QStringList() << "s" << "show", "show control center(hide for default)."); QCommandLineOption toggleOption(QStringList() << "t" << "toggle", "toggle control center visible."); QCommandLineOption dbusOption(QStringList() << "d" << "dbus", "startup on dbus"); QCommandLineOption moduleOption("m", "the module' id of which to be shown.", "module"); QCommandLineOption pageOption("p", "specified module page", "page"); QCommandLineOption showTime(QStringList() << "z" << "time", "show control center exe time."); // 新增time参数自动测试启动速度 QCommandLineOption loggingModuleOption(QStringList() << "l" << "logging-module", "Only output logs for the specified module", "loggingModule"); QCommandLineOption pluginDir("spec", "load plugins from specialdir", "plugindir"); QCommandLineParser parser; parser.setApplicationDescription("DDE Control Center"); parser.addHelpOption(); parser.addVersionOption(); parser.addOption(showOption); parser.addOption(toggleOption); parser.addOption(dbusOption); parser.addOption(moduleOption); parser.addOption(pageOption); parser.addOption(showTime); parser.addOption(loggingModuleOption); parser.addOption(pluginDir); parser.process(*app); QString reqPage = parser.value(pageOption); const QString &reqModule = parser.value(moduleOption); if (!reqModule.isEmpty()) { reqPage = reqModule + "/" + reqPage; } const QStringList &refPluginDirs = parser.values(pluginDir); QDBusConnection conn = QDBusConnection::sessionBus(); if (!conn.registerService(DccDBusService)) { qDebug() << "dbus service already registered!" << "pid is:" << qApp->applicationPid(); if (parser.isSet(toggleOption)) { DDBusSender().service(DccDBusService).interface(DccDBusInterface).path(DccDBusPath).method("Toggle").call(); } if (!reqPage.isEmpty()) { DDBusSender().service(DccDBusService).interface(DccDBusInterface).path(DccDBusPath).method("ShowPage").arg(reqPage).call(); } else if (parser.isSet(showOption) && !parser.isSet(dbusOption)) { DDBusSender().service(DccDBusService).interface(DccDBusInterface).path(DccDBusPath).method("Show").call(); } return -1; } if (parser.isSet(loggingModuleOption)) { const auto &rules = loggingRules(parser.value(loggingModuleOption)); if (!rules.isEmpty()) QLoggingCategory::setFilterRules(rules); } DLogManager::setLogFormat("%{time}{yy-MM-ddTHH:mm:ss.zzz} [%{type}] [%{category}] <%{function}:%{line}> %{message}"); DLogManager::registerJournalAppender(); DLogManager::registerConsoleAppender(); DLogManager::registerFileAppender(); auto dirs = QStandardPaths::standardLocations(QStandardPaths::GenericDataLocation); QStringList fallbacks = QIcon::fallbackSearchPaths(); for (const auto &fb : dirs) { fallbacks << fb + QLatin1String("/icons"); } // To Fix Qt6 find icons will ignore ${GenericDataLocation}/icons/xxx QIcon::setFallbackSearchPaths(fallbacks); app->setWindowIcon(DIconTheme::findQIcon("preferences-system")); dccV25::DccManager::installTranslator("dde-control-center"); app->setApplicationDisplayName(QObject::tr("Control Center")); // app->setApplicationDescription(QApplication::translate("main", "Control Center provides the options for system settings.")); // QAccessible::installFactory(accessibleFactory); dccV25::DccManager *dccManager = new dccV25::DccManager(app); dccManager->init(); QQmlApplicationEngine *engine = dccManager->engine(); // connect quit signal to qApp->exit, to make sure the app can quit when the main window is closed QObject::connect(engine, &QQmlApplicationEngine::quit, app, [] { qApp->exit(); }); engine->loadFromModule("org.deepin.dcc", "DccWindow"); QList objs = engine->rootObjects(); for (auto &&obj : objs) { QWindow *w = qobject_cast(obj); if (w) { dccManager->setMainWindow(w); break; } } if (!dccManager->mainWindow()) { qWarning() << "Failed to create window"; return 1; } dccV25::ControlCenterDBusAdaptor *adaptor = new dccV25::ControlCenterDBusAdaptor(dccManager); dccV25::DBusControlCenterGrandSearchService *grandSearchadAptor = new dccV25::DBusControlCenterGrandSearchService(dccManager); Q_UNUSED(grandSearchadAptor) if (!conn.registerObject(DccDBusPath, dccManager)) { qDebug() << "dbus service already registered!" << "pid is:" << qApp->applicationPid(); return -1; } if (!refPluginDirs.isEmpty()) { dccManager->loadModules(true, refPluginDirs); adaptor->Show(); } else { dccManager->loadModules(!parser.isSet(dbusOption), defaultpath()); if (!reqPage.isEmpty()) { adaptor->ShowPage(reqPage); adaptor->Show(); } else if (parser.isSet(showOption) && !parser.isSet(dbusOption)) { adaptor->Show(); } else if (parser.isSet(showTime)) { adaptor->Show(); return 0; } #ifdef QT_DEBUG // debug时会直接show // 发布版本,不会直接显示,为了满足在被dbus调用时, // 如果dbus参数错误,不会有任何UI上的变化 if (1 == argc) { DDBusSender().service(DccDBusService).interface(DccDBusInterface).path(DccDBusPath).method("Show").call(); } #endif } int exitCode = app->exec(); conn.unregisterService(DccDBusService); #ifdef DCC_ENABLE_MEMORY_MANAGEMENT delete dccManager; delete app; #endif return exitCode; } ================================================ FILE: src/dde-control-center/navigationmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "navigationmodel.h" #include "dccobject.h" #include namespace dccV25 { // static Q_LOGGING_CATEGORY(dccLog, "dde.dcc.NavigationModel"); enum NavType { Separator, Middle, End, }; NavigationModel::NavigationModel(QObject *parent) : QAbstractItemModel(parent) { } void NavigationModel::setNavigationObject(const QVector &objs) { beginResetModel(); m_data.clear(); for (auto &&obj : objs) { if ((obj->pageType() & DccObject::PageType::Menu) && !obj->displayName().isEmpty()) { m_data.append(obj); } } endResetModel(); } QHash NavigationModel::roleNames() const { QHash names = QAbstractItemModel::roleNames(); names[NavTypeRole] = "type"; names[NavUrlRole] = "url"; return names; } QModelIndex NavigationModel::index(int row, int column, const QModelIndex &) const { if (row < 0 || row >= rowCount()) { return QModelIndex(); } return createIndex(row, column); } QModelIndex NavigationModel::parent(const QModelIndex &) const { return QModelIndex(); } int NavigationModel::rowCount(const QModelIndex &) const { if (m_data.isEmpty()) return 0; return m_data.size(); } int NavigationModel::columnCount(const QModelIndex &) const { return 1; } QVariant NavigationModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) { return QVariant(); } int i = index.row(); if (i < 0 || i >= m_data.size()) { return QVariant(); } const DccObject *item = m_data.at(i); switch (role) { case Qt::DisplayRole: return item->displayName(); case NavTypeRole: return (i == (m_data.size() - 1)) ? End : Middle; case NavUrlRole: return item->parentName() + "/" + item->name(); default: break; } return QVariant(); } } // namespace dccV25 ================================================ FILE: src/dde-control-center/navigationmodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef NAVIGATIONMODEL_H #define NAVIGATIONMODEL_H #include namespace dccV25 { class DccObject; class NavigationModel : public QAbstractItemModel { Q_OBJECT public: explicit NavigationModel(QObject *parent = nullptr); void setNavigationObject(const QVector &objs); enum DccModelRole { NavTypeRole = Qt::UserRole + 300, NavUrlRole }; QHash roleNames() const override; // Basic functionality: QModelIndex index(int row, int column, const QModelIndex &parentIndex = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; private: QVector m_data; }; } // namespace dccV25 #endif // NAVIGATIONMODEL_H ================================================ FILE: src/dde-control-center/plugin/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(DCCQmlPlugin_Name dde-control-center-lib) file(GLOB DCCQmlPlugin_SRCS "*.h" "*.cpp" ) file(GLOB QML_PATHS "*.qml" "*.js" ) foreach(FILE_PATH ${QML_PATHS}) file(RELATIVE_PATH FILE_NAME ${CMAKE_CURRENT_SOURCE_DIR} ${FILE_PATH}) list(APPEND DCCQmlPlugin_CONTROLS ${FILE_NAME}) endforeach(FILE_PATH) file(GLOB RES_PATHS "*.svg" "*.png" "*.jpg" ) foreach(FILE_PATH ${RES_PATHS}) file(RELATIVE_PATH FILE_NAME ${CMAKE_CURRENT_SOURCE_DIR} ${FILE_PATH}) list(APPEND DCCQmlPlugin_RES ${FILE_NAME}) endforeach(FILE_PATH) file(GLOB DCI_PATHS "*.dci" ) foreach(FILE_PATH ${DCI_PATHS}) file(RELATIVE_PATH FILE_NAME ${CMAKE_CURRENT_SOURCE_DIR} ${FILE_PATH}) list(APPEND DCCDciPlugin_RES ${FILE_NAME}) endforeach(FILE_PATH) qt_policy(SET QTP0001 NEW) qt_add_qml_module(${DCCQmlPlugin_Name} PLUGIN_TARGET ${DCCQmlPlugin_Name} URI org.deepin.dcc VERSION 1.0 STATIC RESOURCES ${DCCQmlPlugin_RES} QML_FILES ${DCCQmlPlugin_CONTROLS} SOURCES ${DCCQmlPlugin_SRCS} OUTPUT_DIRECTORY org/deepin/dcc ) qt_add_resources(${DCCQmlPlugin_Name} "dci" PREFIX "/dsg/built-in-icons" FILES ${DCCDciPlugin_RES} ) set(DCCQmlPlugin_Libraries ${QT_NS}::DBus ${QT_NS}::Gui ${QT_NS}::Quick ${QT_NS}::QuickPrivate ) target_link_libraries(${DCCQmlPlugin_Name} PRIVATE ${DCCQmlPlugin_Libraries} ) ================================================ FILE: src/dde-control-center/plugin/Crumb.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls 2.3 import QtQml.Models //Delegatechoice for Qt >= 6.9 import Qt.labs.qmlmodels //DelegateChooser import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 FocusScope { id: root property alias model: repeater.model property bool layoutPending: false signal clicked(var model) palette: D.DTK.palette function updateLayout() { if (layoutPending) return layoutPending = true Qt.callLater(doUpdateLayout) } function doUpdateLayout() { layoutPending = false let totalWidth = width let i let child for (i = children.length - 1; i >= 0; --i) { child = children[i] if (totalWidth <= 0) { child.visible = false } else { totalWidth -= child.implicitWidth child.visible = true if (totalWidth < 0) { child.width = child.implicitWidth + totalWidth } else { child.width = child.implicitWidth } } } let x = 0 for (i = 0; i < children.length; ++i) { child = children[i] if (child.visible) { child.x = x x += child.width } } } activeFocusOnTab: repeater.count > 1 onWidthChanged: updateLayout() onVisibleChanged: updateLayout() Repeater { id: repeater function nextItemFocus(forward) { var focusIndex = -1 for (var i = 0; i < repeater.count; i++) { var item = repeater.itemAt(i) if (item.focus) { focusIndex = i break } } focusIndex = forward ? focusIndex - 1 : focusIndex + 1 if (focusIndex >= 0 && focusIndex < repeater.count - 1) { repeater.itemAt(focusIndex).forceActiveFocus() } } delegate: DelegateChooser { role: "type" DelegateChoice { roleValue: 1 delegate: Control { property alias pressed: ma.pressed property D.Palette textColor: DS.Style.button.text palette.windowText: D.ColorSelector.textColor anchors.verticalCenter: parent.verticalCenter bottomPadding: 3 topPadding: 3 leftPadding: 4 rightPadding: 4 focus: true hoverEnabled: enabled onImplicitWidthChanged: root.updateLayout() contentItem: RowLayout { spacing: 6 DccLabel { Layout.fillWidth: true text: model.display elide: Text.ElideLeft color: parent.palette.windowText } Label { text: "/" color: parent.palette.windowText visible: background.width > DS.Style.control.padding * 2 } } background: Rectangle { id: background property D.Palette backgroundColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0) normalDark: Qt.rgba(0, 0, 0, 0) hovered: Qt.rgba(0, 0, 0, 0.1) hoveredDark: Qt.rgba(1, 1, 1, 0.1) pressed: Qt.rgba(0, 0, 0, 0.06) pressedDark: Qt.rgba(1, 1, 1, 0.06) } radius: 6 color: D.ColorSelector.backgroundColor border { color: parent.palette.highlight width: parent.activeFocus ? DS.Style.control.focusBorderWidth : 0 } } Keys.onPressed: event => { switch (event.key) { case Qt.Key_Space: case Qt.Key_Enter: case Qt.Key_Return: root.clicked(model) break case Qt.Key_Left: case Qt.Key_Up: repeater.nextItemFocus(true) break case Qt.Key_Right: case Qt.Key_Down: repeater.nextItemFocus(false) break } } MouseArea { id: ma anchors.fill: parent onClicked: { root.clicked(model) } } } } DelegateChoice { roleValue: 2 delegate: Control { bottomPadding: 3 topPadding: 3 leftPadding: 4 rightPadding: 4 anchors.verticalCenter: parent.verticalCenter onImplicitWidthChanged: root.updateLayout() contentItem: DccLabel { text: model.display elide: Text.ElideLeft color: parent.palette.highlight } } } } } } ================================================ FILE: src/dde-control-center/plugin/DccCheckIcon.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import org.deepin.dtk 1.0 as D D.ActionButton { property real size: 16 checked: true activeFocusOnTab: false icon { width: size height: size name: checked ? "item_checked" : "item_unchecked" } } ================================================ FILE: src/dde-control-center/plugin/DccEditorItem.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS D.ItemDelegate { id: control property alias separatorVisible: background.separatorVisible property alias backgroundType: background.backgroundType property var item: model.item property Component rightItem: null property real iconRadius: model.item.iconRadius ? model.item.iconRadius : 0 property real iconSize: model.item.iconSize ? model.item.iconSize : 0 property real leftPaddingSize: model.item.leftPaddingSize ? model.item.leftPaddingSize : 14 property real rightItemTopMargin: 5 property real rightItemBottomMargin: 5 implicitHeight: Math.max(model.item.description.length !== 0 ? 48 : 40, implicitContentHeight) + topInset + bottomInset backgroundVisible: false checkable: false topPadding: topInset bottomPadding: bottomInset leftPadding: control.leftPaddingSize rightPadding: 8 hoverEnabled: model.item.enabledToApp checked: backgroundType & 0x08 cascadeSelected: !checked font: D.DTK.fontManager.t6 activeFocusOnTab: false Keys.onUpPressed: function(event) { var p = control.parent while (p && !p.navigateToItem) { p = p.parent } if (p) { p.navigateToItem(false) } else { nextItemInFocusChain(false)?.forceActiveFocus(Qt.BacktabFocusReason) } } Keys.onDownPressed: function(event) { var p = control.parent while (p && !p.navigateToItem) { p = p.parent } if (p) { p.navigateToItem(true) } else { nextItemInFocusChain(true)?.forceActiveFocus(Qt.TabFocusReason) } } Keys.onReturnPressed: control.clicked() Keys.onEnterPressed: control.clicked() icon { name: model.item.icon source: model.item.iconSource width: control.iconSize > 0 ? control.iconSize : DS.Style.itemDelegate.iconSize height: control.iconSize > 0 ? control.iconSize : DS.Style.itemDelegate.iconSize } contentItem: RowLayout { Layout.fillWidth: true Layout.fillHeight: true D.IconLabel { visible: model.item.icon && model.item.icon.length > 0 spacing: control.spacing mirrored: control.mirrored display: control.display alignment: control.display === D.IconLabel.IconOnly || control.display === D.IconLabel.TextUnderIcon ? Qt.AlignCenter : Qt.AlignLeft | Qt.AlignVCenter color: control.palette.windowText icon { name: control.icon.name source: control.icon.source width: control.icon.width height: control.icon.height palette: D.DTK.makeIconPalette(control.palette) theme: control.D.ColorSelector.controlTheme } } ColumnLayout { Layout.leftMargin: model.item.icon.length === 0 ? 0 : 8 Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter spacing: 2 opacity: model.item.enabledToApp ? 1 : 0.4 DccLabel { Layout.fillWidth: true text: model.display font: control.font } DccLabel { Layout.fillWidth: true visible: text !== "" font: D.DTK.fontManager.t10 text: model.item.description opacity: 0.5 } } DccLoader { id: rightLoader Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.topMargin: control.rightItemTopMargin Layout.bottomMargin: control.rightItemBottomMargin enabled: model.item.enabledToApp opacity: enabled ? 1 : 0.4 active: !rightItem dccObj: model.item dccObjItem: control } Loader { Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.topMargin: control.rightItemTopMargin Layout.bottomMargin: control.rightItemBottomMargin enabled: model.item.enabledToApp opacity: enabled ? 1 : 0.4 active: rightItem sourceComponent: rightItem } } Loader { id: loader active: control.iconRadius > 0 sourceComponent: D.ItemViewport { parent: control sourceItem: contentItem.children[0] radius: control.iconRadius fixed: true width: control.icon.width height: control.icon.height hideSource: true antialiasing: true x: 15 y: (control.height - icon.height) / 2 } } background: DccItemBackground { id: background separatorVisible: false } onClicked: { if ((backgroundType & 0x04) && model.item.enabledToApp) { model.item.active("") } } } ================================================ FILE: src/dde-control-center/plugin/DccGroupView.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import Qt.labs.platform 1.1 import QtQml.Models //Delegatechoice for Qt >= 6.9 import Qt.labs.qmlmodels //DelegateChooser import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 Rectangle { id: control property bool isGroup: true property alias spacing: layoutView.spacing property int currentFocusIndex: -1 // 追踪当前焦点在可交互项中的索引 property var model: DccModel { root: dccObj } // 判断当前项是否是第一个可交互的菜单项(Menu或MenuEditor类型) function isFirstInteractiveItem(idx) { for (var i = 0; i < idx; i++) { var obj = control.model.getObject(i) if (obj && (obj.pageType === DccObject.Menu || obj.pageType === DccObject.MenuEditor)) { return false } } var currentObj = control.model.getObject(idx) return currentObj && (currentObj.pageType === DccObject.Menu || currentObj.pageType === DccObject.MenuEditor) } function getInteractiveRepeaterIndices() { var indices = [] for (var i = 0; i < repeater.count; i++) { var obj = control.model.getObject(i) if (obj && (obj.pageType === DccObject.Menu || obj.pageType === DccObject.MenuEditor)) indices.push(i) } return indices } function onMenuItemFocused(repeaterIndex) { control.currentFocusIndex = getInteractiveRepeaterIndices().indexOf(repeaterIndex) } function navigateToItem(forward) { var indices = getInteractiveRepeaterIndices() if (indices.length === 0) return var next = control.currentFocusIndex < 0 ? 0 : (forward ? control.currentFocusIndex + 1 : control.currentFocusIndex - 1) if (next < 0) next = indices.length - 1 if (next >= indices.length) next = 0 var item = repeater.itemAt(indices[next]) if (item) item.forceActiveFocus(forward ? Qt.TabFocusReason : Qt.BacktabFocusReason) } objectName: "noPadding" color: "transparent" implicitHeight: layoutView.height Layout.fillWidth: true ColumnLayout { id: layoutView width: parent.width spacing: 0 Repeater { id: repeater model: control.model delegate: DelegateChooser { role: "pageType" DelegateChoice { roleValue: DccObject.Menu delegate: DccMenuItem { topInset: control.isGroup ? 0 : 3 bottomInset: control.isGroup ? 0 : 3 separatorVisible: control.isGroup backgroundType: model.item.backgroundType | DccObject.ClickStyle Layout.fillWidth: true activeFocusOnTab: control.isFirstInteractiveItem(index) corners: control.isGroup ? getCornersForBackground(index, repeater.count) : D.RoundRectangle.TopLeftCorner | D.RoundRectangle.TopRightCorner | D.RoundRectangle.BottomLeftCorner | D.RoundRectangle.BottomRightCorner onActiveFocusChanged: { if (activeFocus) control.onMenuItemFocused(index) } } } DelegateChoice { roleValue: DccObject.Editor delegate: DccEditorItem { topInset: control.isGroup ? 0 : 3 bottomInset: control.isGroup ? 0 : 3 separatorVisible: control.isGroup backgroundType:model.item.backgroundType | (control.isGroup ? 1 : 0) Layout.fillWidth: true activeFocusOnTab: false corners: control.isGroup ? getCornersForBackground(index, repeater.count) : D.RoundRectangle.TopLeftCorner | D.RoundRectangle.TopRightCorner | D.RoundRectangle.BottomLeftCorner | D.RoundRectangle.BottomRightCorner } } DelegateChoice { roleValue: DccObject.Item delegate: DccItem { topInset: control.isGroup ? 0 : 3 bottomInset: control.isGroup ? 0 : 3 separatorVisible: control.isGroup backgroundType: model.item.backgroundType | (control.isGroup ? 1 : 0) Layout.fillWidth: true activeFocusOnTab: false corners: control.isGroup ? getCornersForBackground(index, repeater.count) : D.RoundRectangle.TopLeftCorner | D.RoundRectangle.TopRightCorner | D.RoundRectangle.BottomLeftCorner | D.RoundRectangle.BottomRightCorner } } DelegateChoice { roleValue: DccObject.MenuEditor delegate: DccMenuEditorItem { topInset: control.isGroup ? 0 : 3 bottomInset: control.isGroup ? 0 : 3 separatorVisible: control.isGroup backgroundType: model.item.backgroundType | DccObject.ClickStyle Layout.fillWidth: true activeFocusOnTab: control.isFirstInteractiveItem(index) corners: control.isGroup ? getCornersForBackground(index, repeater.count) : D.RoundRectangle.TopLeftCorner | D.RoundRectangle.TopRightCorner | D.RoundRectangle.BottomLeftCorner | D.RoundRectangle.BottomRightCorner onActiveFocusChanged: { if (activeFocus) control.onMenuItemFocused(index) } } } } } } } ================================================ FILE: src/dde-control-center/plugin/DccItem.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D D.ItemDelegate { id: control property alias separatorVisible: background.separatorVisible property alias backgroundType: background.backgroundType property var item: model.item backgroundVisible: backgroundType & 0x01 enabled: model.item.enabledToApp hoverEnabled: true checkable: false topPadding: topInset bottomPadding: bottomInset implicitHeight: contentItem.implicitHeight + topPadding + bottomPadding padding: 0 font: D.DTK.fontManager.t6 activeFocusOnTab: false contentItem: DccLoader { dccObj: model.item dccObjItem: control } background: DccItemBackground { id: background separatorVisible: false } Component.onCompleted: { if (contentItem.item && contentItem.item.objectName === "noPadding") { leftPadding = 0 rightPadding = 0 } } } ================================================ FILE: src/dde-control-center/plugin/DccItemBackground.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import Qt.labs.platform 1.1 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS Item { id: bgItem implicitWidth: DS.Style.itemDelegate.width implicitHeight: DS.Style.itemDelegate.height property bool separatorVisible: false // 分隔线 property bool shadowVisible: true // 阴影 property alias control: bgItem.parent property real radius: DS.Style.control.radius property real bgMargins: 3 property bool focusBorderVisible: true property bool externalFocus: false property bool isKeyboardNavigating: false property real backgroundType: 0 property D.Palette backgroundColor: D.Palette { normal: Qt.rgba(1, 1, 1, 1) normalDark: Qt.rgba(1, 1, 1, 0.05) hovered: Qt.rgba(0, 0, 0, 0.1) hoveredDark: Qt.rgba(1, 1, 1, 0.1) pressed: Qt.rgba(0, 0, 0, 0.15) pressedDark: Qt.rgba(1, 1, 1, 0.15) } property D.Palette bgColor: D.Palette { normal: backgroundColor.normal normalDark: backgroundColor.normalDark } property D.Palette shadowColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.05) normalDark: Qt.rgba(0, 0, 0, 0.3) } property D.Palette separatorColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.05) normalDark: Qt.rgba(1, 1, 1, 0.05) } D.ColorSelector.pressed: control.pressed && backgroundType & DccObject.Clickable // 阴影 Loader { id: shadow y: 0 z: 3 width: parent.width height: parent.height active: shadowVisible && (!control.checked) && (backgroundType & 0x01) && (control.corners & D.RoundRectangle.BottomCorner) sourceComponent: Canvas { id: canvas property var color: bgItem.D.ColorSelector.shadowColor property real h: 1 anchors.fill: parent renderTarget: Canvas.FramebufferObject onPaint: { var ctx = getContext("2d") ctx.clearRect(0, 0, canvas.width, canvas.height) ctx.fillStyle = canvas.color ctx.beginPath() ctx.moveTo(0, canvas.height / 2) ctx.lineTo(0, canvas.height - bgItem.radius) ctx.quadraticCurveTo(0, canvas.height, bgItem.radius, canvas.height) ctx.lineTo(canvas.width - bgItem.radius, canvas.height) ctx.quadraticCurveTo(canvas.width, canvas.height, canvas.width, canvas.height - bgItem.radius) ctx.lineTo(canvas.width, canvas.height / 2) ctx.closePath() ctx.fill() ctx.globalCompositeOperation = "destination-out" ctx.fillStyle = "black" ctx.beginPath() ctx.moveTo(0, canvas.height / 2 - canvas.h) ctx.lineTo(0, canvas.height - bgItem.radius - canvas.h) ctx.quadraticCurveTo(0, canvas.height - canvas.h, bgItem.radius, canvas.height - canvas.h) ctx.lineTo(canvas.width - bgItem.radius, canvas.height - canvas.h) ctx.quadraticCurveTo(canvas.width, canvas.height - canvas.h, canvas.width, canvas.height - bgItem.radius - canvas.h) ctx.lineTo(canvas.width, canvas.height / 2 - canvas.h) ctx.closePath() ctx.fill() ctx.globalCompositeOperation = "source-over" } Component.onCompleted: { canvas.requestPaint() } onColorChanged: { canvas.requestPaint() } } } // 背景 Loader { z: 1 anchors.fill: parent active: (backgroundType & 0x01) || ((backgroundType & 0x02) && control.hovered) // active: backgroundType !== 0 // (backgroundType & 0xFF) && !(backgroundType & 0x08) anchors.topMargin: 0 anchors.bottomMargin: 0 sourceComponent: D.RoundRectangle { // 高亮时,hovered状态HighlightPanel有处理,无阴影时,hovered状态使用半透明 color: ((backgroundType & 0x08) || (backgroundType & 0x02) === 0 || !control.hoverEnabled) ? bgItem.D.ColorSelector.bgColor : bgItem.D.ColorSelector.backgroundColor radius: bgItem.radius corners: control.corners } } Loader { z: 2 anchors { fill: parent topMargin: bgMargins bottomMargin: bgMargins leftMargin: bgMargins rightMargin: bgMargins } active: focusBorderVisible && (control.visualFocus || externalFocus || isKeyboardNavigating) sourceComponent: D.FocusBoxBorder { radius: bgItem.radius color: control.palette.highlight } } // 高亮 Loader { z: 2 anchors { fill: parent topMargin: bgMargins bottomMargin: bgMargins leftMargin: bgMargins rightMargin: bgMargins } active: control.checked && !control.cascadeSelected sourceComponent: D.HighlightPanel {} } // Warning Loader { z: 2 anchors.fill: parent anchors.topMargin: 1 anchors.bottomMargin: 1 active: (backgroundType & 0x10) sourceComponent: Rectangle { radius: bgItem.radius color: Qt.rgba(0.95, 0.22, 0.20, 0.15) } } // 分隔线 Loader { active: separatorVisible && (!(control.corners & D.RoundRectangle.BottomCorner)) height: 1 z: 3 anchors { bottom: parent.bottom bottomMargin: 0 // bottomMargin: (control.ListView.view.spacing - 1) / 2 left: parent.left leftMargin: 10 right: parent.right rightMargin: 10 } sourceComponent: Rectangle { color: bgItem.D.ColorSelector.separatorColor } } } ================================================ FILE: src/dde-control-center/plugin/DccLabel.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import org.deepin.dtk 1.0 Label { id: control property alias hovered: mouseArea.containsMouse elide: Text.ElideRight font: DTK.fontManager.t6 ToolTip { visible: control.width < control.implicitWidth && control.hovered text: control.text delay: 500 timeout: 3000 } // 使用Attached方式退出时会崩溃 // ToolTip.visible: width < implicitWidth && hovered // ToolTip.text: text MouseArea { id: mouseArea anchors.fill: parent hoverEnabled: true acceptedButtons: Qt.NoButton } } ================================================ FILE: src/dde-control-center/plugin/DccLoader.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick Loader { property var dccObj: null property Item dccObjItem: null function updateDccObjItem() { if (dccObj) { dccObj.parentItem = dccObjItem } } enabled: dccObj && dccObj.enabledToApp // asynchronous: true sourceComponent: dccObj ? dccObj.page : null onDccObjChanged: updateDccObjItem() onDccObjItemChanged: updateDccObjItem() Component.onCompleted: updateDccObjItem() onStatusChanged: { if (status === Loader.Error) { console.warn("Failed to load component for dccObj:", dccObj) } } } ================================================ FILE: src/dde-control-center/plugin/DccMenuEditorItem.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D DccEditorItem { id: control property Component editor: null leftPadding: 14 rightPadding: 10 topPadding: topInset bottomPadding: bottomInset activeFocusOnTab: false rightItem: RowLayout { spacing: 10 DccLoader { active: !editor dccObj: model.item dccObjItem: control } Loader { active: editor sourceComponent: editor } D.IconLabel { icon { width: 12 height: 12 name: "arrow_ordinary_right" palette: D.DTK.makeIconPalette(control.palette) mode: control.D.ColorSelector.controlState theme: control.D.ColorSelector.controlTheme } } } onClicked: { if (model.item.children.length > 0) { DccApp.showPage(model.item.children[0]) } else { console.warn(model.item.name, " MenuEditor nust include children", model.item.children.length) } } } ================================================ FILE: src/dde-control-center/plugin/DccMenuItem.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import org.deepin.dtk 1.0 as D DccEditorItem { topInset: 5 leftPadding: 14 rightPadding: 10 bottomInset: 5 topPadding: topInset bottomPadding: bottomInset activeFocusOnTab: false rightItem: D.IconLabel { icon { name: "arrow_ordinary_right" palette: D.DTK.makeIconPalette(palette) } } onClicked: DccApp.showPage(model.item) } ================================================ FILE: src/dde-control-center/plugin/DccRightView.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import Qt.labs.qmlmodels 1.2 import QtQuick.Layouts 1.15 import "DccUtils.js" as DccUtils Flickable { id: control property alias spacing: groupView.spacing property alias isGroup: groupView.isGroup property real margin: DccUtils.getMargin(width) property bool scrollBarVisible: false contentHeight: groupView.height ScrollBar.vertical: ScrollBar { id: vbar width: 10 opacity: control.scrollBarVisible ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 150 } } } DccGroupView { id: groupView isGroup: false height: implicitHeight + 10 anchors { left: parent.left right: parent.right leftMargin: control.margin rightMargin: control.margin } } Timer { id: showScrollBarTimer interval: 300 repeat: false onTriggered: control.scrollBarVisible = true } Component.onCompleted: { showScrollBarTimer.start() } Rectangle { id: panel property var item: undefined property int cnt: 0 property bool isIndicatorShown: true z: 10 radius: 8 color: "transparent" visible: false border.color: this.palette.highlight border.width: 2 } Timer { interval: 100 repeat: true running: panel.item !== undefined onTriggered: { if (!panel.item || !panel.item.visible || !control.visible || panel.cnt > 6) { panel.visible = false panel.cnt = 0 panel.item = undefined panel.isIndicatorShown = false stop() } else { let itemY = panel.item.mapToItem(control, 0, 0).y if ((itemY + panel.item.height) > control.height) { control.contentY = itemY + panel.item.height - control.height + control.contentY } itemY = panel.item.mapToItem(control, 0, 0).y if (itemY < 0) { control.contentY = -itemY } if (panel.isIndicatorShown) { panel.x = panel.item.mapToItem(control, 0, 0).x panel.y = panel.item.mapToItem(control, 0, 0).y + control.contentY panel.height = panel.item.height panel.width = panel.item.width panel.visible = panel.cnt & 1 } panel.cnt++ } } } Connections { target: DccApp function onActiveItemChanged(item, isIndicatorShown) { panel.item = item panel.isIndicatorShown = isIndicatorShown } } Connections { target: DccApp.mainWindow() function onActiveFocusItemChanged() { var focusItem = target.activeFocusItem var parentItem = focusItem while (parentItem && parentItem !== groupView) { parentItem = parentItem.parent } if (!parentItem || parentItem !== groupView) { return } let itemY = focusItem.mapToItem(control, 0, 0).y if ((itemY + focusItem.height) > control.height) { control.contentY = itemY + focusItem.height - control.height + control.contentY } else if (itemY < 0) { control.contentY = focusItem.mapToItem(groupView, 0, 0).y } } } } ================================================ FILE: src/dde-control-center/plugin/DccRowView.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import Qt.labs.platform 1.1 import Qt.labs.qmlmodels 1.2 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 RowLayout { objectName: "noPadding" Layout.fillWidth: true spacing: 10 Repeater { id: repeater model: DccModel { root: dccObj } delegate: DccLoader { Layout.fillWidth: item ? item.Layout.fillWidth : false Layout.fillHeight: item ? item.Layout.fillHeight : false Layout.alignment: item ? item.Layout.alignment : Qt.AlignLeft dccObj: model.item dccObjItem: this } } } ================================================ FILE: src/dde-control-center/plugin/DccSettingsObject.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 DccObject { id: root readonly property string bodyUrl: root.parentName + "/" + root.name + "/body" readonly property string footerUrl: root.parentName + "/" + root.name + "/footer" page: DccSettingsView {} DccObject { id: bodyObj name: "body" parentName: root.parentName + "/" + root.name weight: 10 pageType: DccObject.Item } DccObject { id: footerObj name: "footer" parentName: root.parentName + "/" + root.name weight: 20 pageType: DccObject.Item } } ================================================ FILE: src/dde-control-center/plugin/DccSettingsView.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import Qt.labs.qmlmodels 1.2 import QtQuick.Layouts 1.15 import "DccUtils.js" as DccUtils Flickable { id: control property real spacing: 0 property bool isGroup: false property real margin: DccUtils.getMargin(width) property bool initItem: false property bool scrollBarVisible: false contentHeight: centralItem.height + bottomItem.height - (bottomItem.height > 0 ? bottomItem.anchors.topMargin : 0) ScrollBar.vertical: ScrollBar { id: vbar width: 10 opacity: control.scrollBarVisible ? 1 : 0 Behavior on opacity { NumberAnimation { duration: 150 } } } Component { id: groupView DccGroupView { isGroup: control.isGroup spacing: control.spacing } } Component { id: footer DccRowView {} } Item { y: control.contentY height: control.height - bottomItem.height width: parent.width clip: true DccLoader { id: centralItem y: -control.contentY focus: true dccObjItem: parent anchors { left: parent.left right: parent.right leftMargin: control.margin rightMargin: control.margin } } } DccLoader { id: bottomItem height: item ? (item.implicitHeight + 20) : 0 focus: true dccObjItem: parent anchors { left: parent.left right: parent.right topMargin: 5 bottomMargin: 5 leftMargin: control.margin rightMargin: control.margin } y: (control.contentHeight - control.contentY > control.height ? control.height - this.height + control.contentY : control.contentHeight - this.height) } Rectangle { id: panel property var item: undefined property int cnt: 1 property bool isIndicatorShown: true z: 10 radius: 8 color: "transparent" visible: false border.color: this.palette.highlight border.width: 2 } Timer { interval: 100 repeat: true running: panel.item !== undefined onTriggered: { if (!panel.item || !panel.item.visible || !control.visible || panel.cnt > 5) { panel.visible = false panel.cnt = 1 panel.item = undefined stop() } else { panel.cnt++ let itemY = panel.item.mapToItem(control, 0, 0).y let rHeight = control.height - bottomItem.height if ((itemY + panel.item.height) > rHeight) { control.contentY = itemY + panel.item.height - rHeight + control.contentY } else if (itemY < 0 && centralItem.item) { control.contentY = panel.item.mapToItem(centralItem.item, 0, 0).y } if (panel.isIndicatorShown) { panel.x = panel.item.mapToItem(control, 0, 0).x panel.y = panel.item.mapToItem(control, 0, 0).y + control.contentY panel.height = panel.item.height panel.width = panel.item.width panel.visible = panel.cnt & 1 } } } } Connections { target: DccApp function onActiveItemChanged(item, isIndicatorShown) { panel.item = item panel.isIndicatorShown = isIndicatorShown } } Connections { target: DccApp.mainWindow() function onActiveFocusItemChanged() { var focusItem = target.activeFocusItem var parentItem = focusItem while (parentItem && parentItem !== centralItem.item) { parentItem = parentItem.parent } if (!parentItem || parentItem !== centralItem.item) { return } let itemY = focusItem.mapToItem(control, 0, 0).y let rHeight = control.height - bottomItem.height if ((itemY + focusItem.height) > rHeight) { control.contentY = itemY + focusItem.height - rHeight + control.contentY } else if (itemY < 0 && centralItem.item) { control.contentY = focusItem.mapToItem(centralItem.item, 0, 0).y } } } function updateItem() { if (!initItem && dccObj.children.length === 2) { if (!dccObj.children[0].page) { dccObj.children[0].page = groupView } centralItem.dccObj = dccObj.children[0] if (!dccObj.children[1].page) { dccObj.children[1].page = footer } bottomItem.dccObj = dccObj.children[1] initItem = true } } Timer { id: showScrollBarTimer interval: 300 repeat: false onTriggered: control.scrollBarVisible = true } Component.onCompleted: { updateItem() showScrollBarTimer.start() } Connections { target: dccObj function onChildrenChanged() { updateItem() } } } ================================================ FILE: src/dde-control-center/plugin/DccTimeRange.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS D.SpinBox { id: control wrap: true readonly property string timeString: textFromValue(value) property int hour: 0 property int minute: 0 property int initialValue: 0 signal timeChanged Layout.maximumWidth: 110 rightPadding: control.down.indicator.width Timer { id: valueChangeTimer interval: 500 // 500ms 防抖,用户停止操作后才发送 onTriggered: { if (control.value !== control.initialValue) { control.timeChanged() control.initialValue = control.value // 更新初始值 } } } from: 0 to: 1380 // 23 hours * 60 minutes stepSize: 60 value: hour * 60 + minute editable: true font: D.DTK.fontManager.t7 inputMethodHints: Qt.ImhDigitsOnly function formatText(value) { return value < 10 ? "0" + value : value } onHourChanged: { var m = value % 60 var newValue = hour * 60 + m if (stepSize === 1) { from = hour * 60 to = hour * 60 + 59 } if (value !== newValue) value = newValue } onMinuteChanged: { var h = Math.floor(value / 60) var newValue = h * 60 + minute if (stepSize === 60) { from = minute to = 23 * 60 + minute } if (value !== newValue) value = newValue } textFromValue: function (value) { var hours = Math.floor(value / 60) var minutes = value % 60 return (hours < 10 ? "0" + hours : hours) + ":" + (minutes < 10 ? "0" + minutes : minutes) } valueFromText: function (text) { var parts = text.split(":") var hours = parseInt(parts[0], 10) var minutes = parseInt(parts[1], 10) switch (stepSize) { case 1: control.from = hours * 60 control.to = hours * 60 + 59 break case 60: control.from = minutes control.to = 23 * 60 + minutes break } return hours * 60 + minutes } contentItem: RowLayout { property string text: hourInput.text + ":" + minuteInput.text spacing: 0 opacity: enabled ? 1 : 0.4 TextInput { id: hourInput property bool typingDigit: false Layout.fillWidth: true Layout.fillHeight: true Layout.preferredWidth: 20 Layout.alignment: Qt.AlignHCenter text: control.formatText(Math.floor(value / 60)) font: control.font color: control.palette.text selectionColor: control.palette.highlight selectedTextColor: control.palette.highlightedText horizontalAlignment: Qt.AlignHCenter verticalAlignment: Qt.AlignVCenter readOnly: !control.editable validator: RegularExpressionValidator { regularExpression: /^(?:[0-1]?[0-9]|2[0-3])$/ } maximumLength: 2 inputMethodHints: control.inputMethodHints selectByMouse: true mouseSelectionMode: TextInput.SelectCharacters onFocusChanged: { if (focus) { control.stepSize = 60 var minutes = value % 60 control.from = minutes control.to = 23 * 60 + minutes } else { typingDigit = false } } Keys.onPressed: function(event) { if (event.key >= Qt.Key_0 && event.key <= Qt.Key_9) { typingDigit = true } } onTextChanged: { if (focus && typingDigit) { if (text.length === 1) { var firstDigit = parseInt(text, 10) if (firstDigit >= 3) { typingDigit = false minuteInput.forceActiveFocus() minuteInput.selectAll() } } else if (text.length === 2) { typingDigit = false minuteInput.forceActiveFocus() minuteInput.selectAll() } } } Keys.onRightPressed: function(event) { if (cursorPosition === length) { minuteInput.forceActiveFocus() minuteInput.selectAll() event.accepted = true } else { event.accepted = false } } } Label { Layout.preferredWidth: 10 Layout.alignment: Qt.AlignHCenter text: ":" font: control.font color: control.palette.text horizontalAlignment: Qt.AlignHCenter verticalAlignment: Qt.AlignVCenter } TextInput { id: minuteInput Layout.fillWidth: true Layout.fillHeight: true Layout.preferredWidth: 20 Layout.alignment: Qt.AlignHCenter text: control.formatText(Math.floor(value % 60)) font: control.font color: control.palette.text selectionColor: control.palette.highlight selectedTextColor: control.palette.highlightedText horizontalAlignment: Qt.AlignHCenter verticalAlignment: Qt.AlignVCenter readOnly: !control.editable validator: RegularExpressionValidator { regularExpression: /^(?:[0-5]?[0-9])$/ } maximumLength: 2 inputMethodHints: control.inputMethodHints selectByMouse: true mouseSelectionMode: TextInput.SelectCharacters onFocusChanged: { if (focus) { control.stepSize = 1 var hours = Math.floor(value / 60) control.from = hours * 60 control.to = hours * 60 + 59 } } Keys.onLeftPressed: function(event) { if (cursorPosition === 0) { hourInput.forceActiveFocus() hourInput.selectAll() event.accepted = true } else { event.accepted = false } } } } onValueChanged: { valueChangeTimer.restart() } onActiveFocusChanged: { if (activeFocus) { valueChangeTimer.stop() initialValue = value } else { valueChangeTimer.restart() } } } ================================================ FILE: src/dde-control-center/plugin/DccTitleObject.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import "DccUtils.js" as DccUtils DccObject { pageType: DccObject.Item page: ColumnLayout { DccLabel { Layout.fillWidth: true property D.Palette textColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.9) normalDark: Qt.rgba(1, 1, 1, 0.9) } font: DccUtils.copyFont(D.DTK.fontManager.t5, { "weight": 500 }) text: dccObj.displayName color: D.ColorSelector.textColor } DccLabel { Layout.fillWidth: true visible: text !== "" font: D.DTK.fontManager.t8 text: dccObj.description opacity: 0.5 } } onParentItemChanged: { if (parentItem) { parentItem.leftPadding = 14 } } } ================================================ FILE: src/dde-control-center/plugin/DccUtils.js ================================================ .pragma library // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later function copyFont(srcFont, propertys) { return Qt.font({ "family": propertys.hasOwnProperty("family") ? propertys.family : srcFont.family, "bold": propertys.hasOwnProperty("bold") ? propertys.bold : srcFont.bold, "weight": propertys.hasOwnProperty("weight") ? propertys.weight : propertys.hasOwnProperty("bold") && propertys.bold ? 700 : srcFont.weight, "italic": propertys.hasOwnProperty("italic") ? propertys.italic : srcFont.italic, "underline": propertys.hasOwnProperty("underline") ? propertys.underline : srcFont.underline, "pointSize": propertys.hasOwnProperty("pointSize") ? propertys.pointSize : srcFont.pointSize, "pixelSize": propertys.hasOwnProperty("pixelSize") ? propertys.pixelSize : srcFont.pixelSize }) } function getMargin(w) { if (w > 1300) { return Math.round((w - 1200) / 2) } if (w >= 600) { return 50 } return Math.round((w - 500) / 2) } ================================================ FILE: src/dde-control-center/plugin/DccWindow.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 D.ApplicationWindow { id: mainWindow enum PageIndex { LoadIndex, HomeIndex, SecondIndex } property string appProductName: Qt.application.displayName property string appLicense: "GPL-3.0-or-later" property int currentIndex: DccWindow.PageIndex.LoadIndex property var sidebarPage: null minimumWidth: 520 minimumHeight: 400 visible: false flags: Qt.Window | Qt.WindowCloseButtonHint | Qt.WindowTitleHint | Qt.WindowMinimizeButtonHint | Qt.WindowMaximizeButtonHint color: "transparent" D.DWindow.enabled: true onClosing: { Qt.callLater(function () { console.info("DccWindow closed") Qt.quit() }) } MouseArea { anchors.fill: parent enabled: false cursorShape: Qt.ArrowCursor } D.StyledBehindWindowBlur { anchors.fill: parent control: mainWindow blendColor: { if (valid) { return DS.Style.control.selectColor(control ? control.palette.window : undefined, Qt.rgba(1, 1, 1, 0.8), Qt.rgba(0.06, 0.06, 0.06, 0.8)) } return DS.Style.control.selectColor(undefined, DS.Style.behindWindowBlur.lightNoBlurColor, DS.Style.behindWindowBlur.darkNoBlurColor) } } Shortcut { context: Qt.ApplicationShortcut sequences: [StandardKey.HelpContents, "F1"] onActivated: DccApp.showHelp() onActivatedAmbiguously: DccApp.showHelp() } D.TitleBar { id: titleBar icon.name: "preferences-system" implicitHeight: 40 menu: Menu { D.ThemeMenu {} D.MenuSeparator {} D.HelpAction { onTriggered: DccApp.showHelp() } D.AboutAction { aboutDialog: D.AboutDialog { D.DWindow.enabled: true productIcon: "preferences-system" modality: Qt.WindowModal productName: appProductName websiteName: D.DTK.deepinWebsiteName websiteLink: D.DTK.deepinWebsiteLink description: qsTr("Control Center provides the options for system settings.") onClosing: destroy(10) } } D.QuitAction {} } embedMode: false autoHideOnFullscreen: true focus: true leftContent: D.ActionButton { id: sidebarButton opacity: Window.window.active ? 1 : (D.DTK.themeType === D.ApplicationHelper.DarkType ? 0.6 : 0.4) palette.windowText: D.ColorSelector.textColor anchors { verticalCenter: parent.verticalCenter leftMargin: 20 left: parent.left } implicitHeight: 30 implicitWidth: 30 hoverEnabled: enabled activeFocusOnTab: true visible: mainWindow.currentIndex === DccWindow.PageIndex.SecondIndex icon { name: "sidebar" height: 16 width: 16 } Component.onCompleted: { if (contentItem) { contentItem.smooth = false } } background: Rectangle { property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } onClicked: { if (mainWindow.sidebarPage) { mainWindow.sidebarPage.targetSidebar() } } } content: Item { anchors { fill: parent leftMargin: mainWindow.currentIndex === DccWindow.PageIndex.HomeIndex ? 0 : -200 } SearchBar { anchors { horizontalCenter: parent.horizontalCenter verticalCenter: parent.verticalCenter } visible: mainWindow.currentIndex === DccWindow.PageIndex.HomeIndex model: DccApp.searchModel() onClicked: function (model) { DccApp.showPage(model.url) } } D.ActionButton { id: breakBut palette.windowText: D.ColorSelector.textColor implicitHeight: 30 implicitWidth: 30 x: ((mainWindow.sidebarPage && mainWindow.sidebarPage.splitterX > 110) ? mainWindow.sidebarPage.splitterX : 110) - 1 anchors.verticalCenter: parent.verticalCenter visible: mainWindow.currentIndex === DccWindow.PageIndex.SecondIndex hoverEnabled: enabled activeFocusOnTab: enabled enabled: DccApp.activeObject && DccApp.activeObject.parentName.length !== 0 && DccApp.activeObject.parentName !== "root" onClicked: DccApp.toBack() icon { name: "arrow_ordinary_left" height: 12 width: 12 } background: Rectangle { property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } } Crumb { width: parent.width - x anchors { left: breakBut.right leftMargin: 8 verticalCenter: parent.verticalCenter } visible: mainWindow.currentIndex === DccWindow.PageIndex.SecondIndex model: DccApp.navModel() onClicked: function (model) { DccApp.showPage(model.url) centralView.forceActiveFocus() } } } } DccLoader { id: centralView anchors.fill: parent dccObj: DccApp.root } /* 焦点切换调试,暂不删 onActiveFocusItemChanged: { console.log("root onActiveFocusItemChanged: ", mainWindow.activeFocusItem, mainWindow.activeFocusControl) if (mainWindow.activeFocusItem && mainWindow.activeFocusControl) { console.log("root activeFocusOnTab: ", mainWindow.activeFocusItem.activeFocusOnTab, mainWindow.activeFocusControl.activeFocusOnTab) } } D.FocusBoxBorder { id: focusIn z: 98 x: { if (visible) { var p1 = mainWindow.activeFocusItem.parent.mapToGlobal(mainWindow.activeFocusItem.x, mainWindow.activeFocusItem.y) console.log("p1:", p1) var p2 = mapFromItem(mainWindow.activeFocusItem, mainWindow.activeFocusItem.x, mainWindow.activeFocusItem.y) console.log("p2:", p2) var p3 = parent.mapFromGlobal(p1.x, p1.y) console.log("p3:", p3) return p3.x // mapFromGlobal(root, mainWindow.activeFocusItem.mapToGlobal( // mainWindow.activeFocusItem.x, // mainWindow.activeFocusItem.y)).x } else { return 0 } } y: visible ? parent.mapFromGlobal(mainWindow.activeFocusItem.parent.mapToGlobal(mainWindow.activeFocusItem.x, mainWindow.activeFocusItem.y)).y : 0 width: visible ? mainWindow.activeFocusItem.width : 0 height: visible ? mainWindow.activeFocusItem.height : 0 // anchors.topMargin: visible: mainWindow.activeFocusItem radius: DS.Style.control.radius color: "#80FF0000" } */ Component { id: rootLayout SwipeView { id: stackView hoverEnabled: false currentIndex: DccWindow.PageIndex.LoadIndex interactive: false activeFocusOnTab: false Rectangle { id: loadPage color: palette.window D.DciIcon { anchors.centerIn: parent name: "control-loading" mode: D.DTK.NormalState theme: D.DTK.themeType } visible: stackView.currentIndex === DccWindow.PageIndex.LoadIndex } HomePage { id: homePage visible: stackView.currentIndex === DccWindow.PageIndex.HomeIndex } SecondPage { id: secondPage visible: stackView.currentIndex === DccWindow.PageIndex.SecondIndex Component.onCompleted: mainWindow.sidebarPage = this } Connections { target: DccApp function onActiveObjectChanged(activeObject) { Qt.callLater(function () { if (stackView.currentIndex !== DccWindow.PageIndex.LoadIndex && null === DccApp.activeObject) { mainWindow.sidebarPage = null stackView.currentIndex = DccWindow.PageIndex.LoadIndex mainWindow.currentIndex = DccWindow.PageIndex.LoadIndex } else if (stackView.currentIndex !== DccWindow.PageIndex.HomeIndex && DccApp.root === DccApp.activeObject) { mainWindow.sidebarPage = null stackView.currentIndex = DccWindow.PageIndex.HomeIndex mainWindow.currentIndex = DccWindow.PageIndex.HomeIndex } else if (stackView.currentIndex !== DccWindow.PageIndex.SecondIndex && DccApp.root !== DccApp.activeObject) { mainWindow.sidebarPage = secondPage stackView.currentIndex = DccWindow.PageIndex.SecondIndex mainWindow.currentIndex = DccWindow.PageIndex.SecondIndex } }) } } Component.onCompleted: { if (contentItem) { contentItem.highlightMoveDuration = 0 } } } } Component.onCompleted: { mainWindow.width = DccApp.width mainWindow.height = DccApp.height mainWindow.x = Screen.virtualX + (Screen.width - mainWindow.width) / 2 mainWindow.y = Screen.virtualY + (Screen.height - mainWindow.height) / 2 DccApp.root.page = rootLayout } } ================================================ FILE: src/dde-control-center/plugin/HomePage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 Control { id: root property bool contentVisible: true property real cellWidth: 240 property real cellHeight: 64 property real cellSpacing: 10 Item { id: header implicitHeight: 50 anchors { // bottom: parent.bottom top: parent.top left: parent.left right: parent.right } Rectangle { id: separator visible: contentVisible anchors { bottom: parent.bottom left: parent.left right: parent.right } color: palette.shadow // "#F2F2F2" // color: palette.placeholderText height: 2 } } function updateMargin() { if (width > grid.cellWidth) { var count = parseInt((width - root.cellSpacing) / (grid.cellWidth)) var length = dccObj.children.length if (length < count) { count = length } grid.anchors.leftMargin = (width - count * (grid.cellWidth)) / 2 + (root.cellSpacing / 2) } else { grid.anchors.leftMargin = root.cellSpacing } } onWidthChanged: updateMargin() Connections { target: dccObj function onChildrenChanged() { updateMargin() } } Rectangle { id: background z: -1 anchors.fill: parent color: palette.window } GridView { id: grid anchors { fill: parent topMargin: root.cellSpacing + header.height leftMargin: root.cellSpacing } clip: true cellWidth: root.cellWidth + root.cellSpacing cellHeight: root.cellHeight + root.cellSpacing visible: contentVisible activeFocusOnTab: true Keys.enabled: true Keys.onPressed: function (event) { switch (event.key) { case Qt.Key_Enter: case Qt.Key_Return: var obj = dccModel.getObject(currentIndex) if (obj) { DccApp.showPage(obj) } break default: return } event.accepted = true } highlight: Item { z: 2 D.FocusBoxBorder { anchors { fill: parent margins: 5 } radius: 8 color: parent.palette.highlight visible: grid.activeFocus } } focus: true model: DccModel { id: dccModel root: dccObj } delegate: D.ItemDelegate { width: root.cellWidth height: root.cellHeight padding: 12 icon { name: model.item.icon source: model.item.iconSource width: 32 height: 32 } contentFlow: true hoverEnabled: true background: DccItemBackground { separatorVisible: false backgroundType: DccObject.ClickStyle } content: RowLayout { Layout.fillWidth: true Layout.fillHeight: true ColumnLayout { Layout.leftMargin: 5 Layout.maximumWidth: 160 Label { id: display Layout.maximumWidth: 160 text: model.display color: palette.brightText elide: Text.ElideRight } Label { id: description Layout.maximumWidth: 160 visible: text !== "" font: D.DTK.fontManager.t10 text: updateDescription() color: palette.brightText opacity: 0.5 elide: Text.ElideRight function updateDescription() { if (model.item.description === "" && model.item.children.length > 0) { var len = model.item.children.length var descs = [] for (var i = 0; i < len && descs.length < 3; ++i) { if (model.item.children[i].pageType & DccObject.Menu) { descs.push(model.item.children[i].displayName) } } return descs.join(qsTr(",")) + (len <= 3 ? "" : qsTr("...")) } return model.item.description } Connections { target: model.item function onChildrenChanged(children) { description.text = description.updateDescription() } } } } D.DciIcon { Layout.alignment: Qt.AlignRight Layout.rightMargin: -2 visible: model.item.badge !== 0 name: "reddot" sourceSize: Qt.size(16, 16) } } onClicked: { DccApp.showPage(model.item) console.log(model.item.name, model.display, model.item.icon) } } } } ================================================ FILE: src/dde-control-center/plugin/SearchBar.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import org.deepin.dtk 1.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS Rectangle { id: control property alias model: view.model property alias edit: searchEdit signal clicked(var model) implicitHeight: 32 implicitWidth: (parent.width / 2) > 240 ? 240 : (parent.width / 2) color: "transparent" radius: DS.Style.control.radius border.color: palette.light // "#E1E7EB" #D2E4F2 border.width: 1 opacity: 0.7 onVisibleChanged: { searchEdit.text = "" popup.close() } SearchEdit { id: searchEdit function setViewIndex(viewIndex) { if (viewIndex < 0) { viewIndex = view.count - 1 view.positionViewAtEnd() } else if (viewIndex >= view.count) { viewIndex = 0 view.positionViewAtBeginning() } view.currentIndex = viewIndex } anchors.fill: parent anchors.margins: 1 activeFocusOnTab: true // focus: true placeholderTextColor: palette.brightText padding: 1 DropArea { anchors.fill: parent onDropped: function(drop) { if (drop.hasText) { searchEdit.text = drop.text drop.acceptProposedAction() } } } property Palette nomalPalette: Palette { normal: ("#FCFCFC") normalDark: ("#0C0C0C") } backgroundColor: nomalPalette onTextChanged: { if (text === "") { popup.close() } else { model.setFilterRegularExpression(text) if (view.count > 0) { popup.open() } else { popup.close() } } } Keys.enabled: true Keys.onPressed: function (event) { switch (event.key) { case Qt.Key_Escape: popup.close() break case Qt.Key_Down: setViewIndex(view.currentIndex + 1) break case Qt.Key_Up: setViewIndex(view.currentIndex - 1) break case Qt.Key_Return: case Qt.Key_Enter: if (view.currentItem) { view.currentItem.clicked() } break default: return } event.accepted = true } } Popup { id: popup y: 35 width: searchEdit.width > 308 ? searchEdit.width : 308 height: (view.count > 7 ? 7 : view.count) * 32 + 15 padding: 5 ListView { id: view clip: true anchors.fill: parent spacing: 0 delegate: D.ItemDelegate { implicitWidth: parent ? parent.width : 0 implicitHeight: 32 topInset: 0 bottomInset: 0 topPadding: 0 bottomPadding: 0 backgroundVisible: true corners: getCornersForBackground(index, view.count) icon.name: model.decoration // text: model.display checked: ListView.isCurrentItem contentFlow: true content: DccLabel { text: model.display ? model.display : "" } onClicked: { control.clicked(model) popup.close() } background: DccItemBackground { separatorVisible: false bgMargins: 0 backgroundType: DccObject.Hover } } ScrollBar.vertical: ScrollBar {} } enter: Transition { NumberAnimation { property: "opacity" from: 0.0 to: 1.0 duration: 150 } NumberAnimation { property: "scale" from: 0.0 to: 1.0 duration: 150 } } exit: Transition { NumberAnimation { property: "opacity" to: 0.0 duration: 150 } NumberAnimation { property: "scale" to: 0.0 duration: 150 } } } } ================================================ FILE: src/dde-control-center/plugin/SecondPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Window 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 Item { id: root property real oldX: 180 // 用于调整宽度时,自动调整侧边栏宽度 property real oldSplitterX: 180 // 记录上次位置,用于恢复 property alias splitterX: splitter.x property bool isKeyboardNavigating: false // 标记是否正在键盘导航 function updateSidebarWidth(sidebarWidth) { if (!rightView.empty) { DccApp.sidebarWidth = sidebarWidth } } function targetSidebar() { if (splitter.x < 110) { var newX = root.oldSplitterX if (root.width - newX > 520) { splitter.x = newX } else if (root.width - 180 > 520) { splitter.x = 180 } else if (root.width - 110 > 520) { splitter.x = 110 } else { let dx = 630 - root.width DccApp.mainWindow().x -= dx DccApp.mainWindow().width = 630 splitter.x = 110 } } else { root.oldSplitterX = splitter.x splitter.x = 0 root.oldX = 0 } updateSidebarWidth(splitter.x) } activeFocusOnTab: false Item { id: leftView anchors { top: parent.top bottom: parent.bottom left: parent.left right: splitter.left } visible: width > 20 SearchBar { id: searchEdit anchors { left: parent.left right: parent.right top: parent.top margins: 10 topMargin: 50 } model: DccApp.searchModel() onClicked: function (model) { DccApp.showPage(model.url) } } ListView { id: list visible: true anchors.top: searchEdit.bottom anchors.bottom: parent.bottom anchors.left: parent.left anchors.right: parent.right anchors.topMargin: 3 leftMargin: 10 rightMargin: 10 topMargin: 6 bottomMargin: 10 clip: true focus: true activeFocusOnTab: true currentIndex: dccObj ? dccObj.children.indexOf(dccObj.currentObject) : -1 palette: D.DTK.palette opacity: Window.window.active ? 1 : (D.DTK.themeType === D.ApplicationHelper.DarkType ? 0.6 : 0.4) MouseArea { anchors.fill: parent z: 999 acceptedButtons: Qt.LeftButton propagateComposedEvents: true onPressed: function (mouse) { list.forceActiveFocus() mouse.accepted = false } } ScrollBar.vertical: ScrollBar { width: 10 } Keys.enabled: true Keys.onPressed: function (event) { switch (event.key) { case Qt.Key_Up: if (count <= 0 || !dccObj) break var upIdx = currentIndex if (upIdx < 0) upIdx = 0 else if (upIdx > 0) upIdx-- var upObj = dccModel.getObject(upIdx) if (upObj) { root.isKeyboardNavigating = true dccObj.currentObject = upObj DccApp.showPage(upObj) } forceActiveFocus() break case Qt.Key_Down: if (count <= 0 || !dccObj) break var downIdx = currentIndex if (downIdx < 0) downIdx = 0 else if (downIdx < count - 1) downIdx++ var downObj = dccModel.getObject(downIdx) if (downObj) { root.isKeyboardNavigating = true dccObj.currentObject = downObj DccApp.showPage(downObj) } forceActiveFocus() break case Qt.Key_Enter: case Qt.Key_Return: var obj = dccModel.getObject(currentIndex) if (obj) DccApp.showPage(obj) forceActiveFocus() break default: return } event.accepted = true } model: DccModel { id: dccModel root: dccObj } delegate: D.ItemDelegate { implicitHeight: 40 width: parent ? parent.width : 300 font: D.DTK.fontManager.t6 activeFocusOnTab: false focusPolicy: Qt.ClickFocus property bool isKeyboardNavigating: false checked: dccObj.currentObject === model.item cascadeSelected: false icon { name: model.item.icon source: model.item.iconSource width: 24 height: 24 } onActiveFocusChanged: { if (activeFocus) { // 通过键盘导航获得焦点时设置标记 if (root.isKeyboardNavigating) { isKeyboardNavigating = true } } else { // 失去焦点时重置标记 isKeyboardNavigating = false } } contentFlow: true content: RowLayout { DccLabel { Layout.fillWidth: true text: model.display } D.DciIcon { visible: model.item.badge !== 0 name: "reddot" sourceSize: Qt.size(16, 16) } } hoverEnabled: true background: DccItemBackground { focusBorderVisible: true isKeyboardNavigating: parent.isKeyboardNavigating externalFocus: ListView.view && ListView.view.activeFocus && ListView.isCurrentItem separatorVisible: false bgMargins: 0 backgroundType: DccObject.Hover | DccObject.Clickable backgroundColor: D.Palette { normal: Qt.rgba(1, 1, 1, 1) normalDark: Qt.rgba(1, 1, 1, 0.05) hovered: Qt.rgba(0, 0, 0, 0.1) hoveredDark: Qt.rgba(1, 1, 1, 0.1) pressed: Qt.rgba(0, 0, 0, 0.2) pressedDark: Qt.rgba(1, 1, 1, 0.25) } } onClicked: { // 鼠标点击时重置键盘导航标记 isKeyboardNavigating = false list.forceActiveFocus() DccApp.showPage(model.item) } } } } Rectangle { property D.Palette bgColor: D.Palette { normal: Qt.rgba(0.97, 0.97, 0.97, 0.95) normalDark: Qt.rgba(0.09, 0.09, 0.09, 0.85) } palette: D.DTK.palette anchors { top: parent.top bottom: parent.bottom left: splitter.right right: parent.right } color: D.ColorSelector.bgColor StackView { id: rightView clip: true hoverEnabled: true focus: true activeFocusOnTab: true anchors { fill: parent topMargin: 50 } onCurrentItemChanged: { if (currentItem && !root.isKeyboardNavigating) { rightView.forceActiveFocus() } root.isKeyboardNavigating = false } } } Rectangle { id: splitter property D.Palette bgColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.05) normalDark: Qt.rgba(0, 0, 0, 0.5) } implicitWidth: 1 x: 180 height: root.height color: D.ColorSelector.bgColor } MouseArea { x: splitter.x - 2 width: 5 anchors.top: parent.top anchors.bottom: parent.bottom cursorShape: Qt.SizeHorCursor onPositionChanged: function (mouse) { var newX = mouse.x + splitter.x if (newX >= 0 && newX < root.width - splitter.width) { if (root.width - newX < 520) { return } if (newX < 110) { newX = 0 } splitter.x = newX root.oldX = newX } updateSidebarWidth(splitter.x) } } onWidthChanged: { var newX = width - 510 if (width - splitter.x < 510) { if (newX < 0) { return } if (newX < 110) { newX = 0 } splitter.x = newX } else if (splitter.x < oldX) { newX = width - 510 if (newX < 0) { return } if (newX < 110) { newX = 0 } if (newX > oldX) { newX = oldX } splitter.x = newX } updateSidebarWidth(splitter.x) } Component { id: rightLayout DccRightView {} } Component { id: mainView DccLoader {} } function updateRightView() { var activeObj = DccApp.activeObject if (!activeObj || activeObj === dccObj) { return } if (activeObj.page === null) { activeObj.page = rightLayout } rightView.replace(mainView, { "dccObj": activeObj }, DccApp.animationMode === DccApp.AnimationPush ? StackView.PushTransition : StackView.PopTransition) } Connections { target: DccApp function onActiveObjectChanged() { updateRightView() } } Component.onCompleted: { oldX = DccApp.sidebarWidth updateRightView() } } ================================================ FILE: src/dde-control-center/plugin/dccapp.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dccapp.h" namespace dccV25 { static DccApp *dccApp = nullptr; DccApp *DccApp::instance() { return dccApp; } DccApp::DccApp(QObject *parent) : QObject(parent) , m_animationMode(AnimationPop) { Q_ASSERT(!dccApp); dccApp = this; } DccApp::~DccApp() { } void DccApp::setAnimationMode(AnimationMode mode) { if (m_animationMode != mode) { m_animationMode = mode; Q_EMIT animationModeChanged(mode); } } int DccApp::width() const { return 0; } int DccApp::height() const { return 0; } DccObject *DccApp::root() const { return nullptr; } DccObject *DccApp::activeObject() const { return nullptr; } int DccApp::sidebarWidth() const { return 180; } void DccApp::setSidebarWidth(int) { } DccObject *DccApp::object(const QString &) { return nullptr; } void DccApp::addObject(DccObject *) { } void DccApp::removeObject(DccObject *) { } void DccApp::removeObject(const QString &) { } void DccApp::showPage(const QString &) { } void DccApp::showPage(DccObject *, const QString &) { } QWindow *DccApp::mainWindow() const { return nullptr; } QAbstractItemModel *DccApp::navModel() const { return nullptr; } QSortFilterProxyModel *DccApp::searchModel() const { return nullptr; } } // namespace dccV25 ================================================ FILE: src/dde-control-center/plugin/dccapp.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCAPP_H #define DCCAPP_H #include "dccobject.h" #include QT_BEGIN_NAMESPACE class QWindow; class QAbstractItemModel; class QSortFilterProxyModel; QT_END_NAMESPACE namespace dccV25 { class DccApp : public QObject { Q_OBJECT public: enum UosEdition { UosEditionUnknown, UosProfessional, UosHome, UosCommunity, UosMilitary, UosEnterprise, UosEnterpriseC, UosEuler, UosMilitaryS, // for Server UosDeviceEdition, UosEducation, UosEditionCount // must at last }; Q_ENUM(UosEdition) enum AnimationMode { AnimationPush, AnimationPop }; Q_ENUM(AnimationMode) static DccApp *instance(); Q_PROPERTY(int width READ width FINAL) Q_PROPERTY(int height READ height FINAL) Q_PROPERTY(int sidebarWidth READ sidebarWidth WRITE setSidebarWidth NOTIFY sidebarWidthChanged) Q_PROPERTY(DccObject * root READ root NOTIFY rootChanged) Q_PROPERTY(DccObject * activeObject READ activeObject NOTIFY activeObjectChanged) Q_PROPERTY(QVector currentObjects READ currentObjects NOTIFY currentObjectsChanged) Q_PROPERTY(QVector triggeredObjects READ triggeredObjects NOTIFY triggeredObjectsChanged) Q_PROPERTY(AnimationMode animationMode READ animationMode WRITE setAnimationMode NOTIFY animationModeChanged) virtual int width() const; virtual int height() const; virtual DccObject *root() const; virtual DccObject *activeObject() const; virtual const QVector ¤tObjects() const = 0; virtual const QVector &triggeredObjects() const = 0; virtual AnimationMode animationMode() const { return m_animationMode; } virtual int sidebarWidth() const; virtual void setSidebarWidth(int width); virtual void setAnimationMode(AnimationMode mode); public Q_SLOTS: virtual DccObject *object(const QString &name); virtual void addObject(DccObject *obj); virtual void removeObject(DccObject *obj); virtual void removeObject(const QString &name); virtual void showPage(const QString &url); virtual void showPage(DccObject *obj, const QString &cmd); virtual QWindow *mainWindow() const; virtual QAbstractItemModel *navModel() const; virtual QSortFilterProxyModel *searchModel() const; Q_SIGNALS: void sidebarWidthChanged(int width); void rootChanged(DccObject *root); void activeObjectChanged(DccObject *activeObject); void currentObjectsChanged(QVector currentObjects); void triggeredObjectsChanged(QVector triggeredObjects); void activeItemChanged(QQuickItem *item); void animationModeChanged(AnimationMode mode); protected: explicit DccApp(QObject *parent = nullptr); ~DccApp() override; private: AnimationMode m_animationMode; }; } // namespace dccV25 #endif // DCCAPP_H ================================================ FILE: src/dde-control-center/plugin/dccimageprovider.cpp ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dccimageprovider.h" #include #include #include #include #include namespace dccV25 { // 4x of 84x54 => 336x216, used as a high-res base thumbnail size const QSize THUMBNAIL_ICON_SIZE(336, 216); // Separator for cache key to include size information const QString CACHE_KEY_SIZE_SEPARATOR = "::SIZE::"; static QSize resolveSize(const QSize &size) { return (size.isValid() && size.width() > 0 && size.height() > 0) ? size : THUMBNAIL_ICON_SIZE; } // --------------------------------------------------------------------------- // CacheImageResponse – pure QML response container, no loading logic. // --------------------------------------------------------------------------- class CacheImageResponse : public QQuickImageResponse { Q_OBJECT public: CacheImageResponse() = default; void setImage(const QImage &image) { m_image = image; } void emitFinished() { Q_EMIT finished(); } QQuickTextureFactory *textureFactory() const override { return QQuickTextureFactory::textureFactoryForImage(m_image); } private: QImage m_image; }; // --------------------------------------------------------------------------- // ImageTask – async image loader, runs on thread pool. // --------------------------------------------------------------------------- class ImageTask : public QObject, public QRunnable { Q_OBJECT Q_SIGNALS: void imageLoaded(const QString &cacheKey, const QImage &image); public: ImageTask(const QString &id, const QSize &requestedSize, const QString &cacheKey) : m_id(id) , m_requestedSize(requestedSize) , m_cacheKey(cacheKey) { setAutoDelete(false); } void run() override { QUrl url(m_id); const QString scheme = url.scheme().toLower(); QString path; if (scheme == "qrc") path = ":" + url.path(); else if (scheme == "file" || url.isLocalFile()) path = url.toLocalFile(); else path = url.toString(); QImageReader reader(path); if (!reader.canRead()) { Q_EMIT imageLoaded(m_cacheKey, QImage()); return; } const QSize nativeSize = reader.size(); if (nativeSize.isValid() && m_requestedSize.isValid()) { QSize scaledSize = nativeSize.scaled(m_requestedSize, Qt::KeepAspectRatioByExpanding); scaledSize = scaledSize.boundedTo(nativeSize); reader.setScaledSize(scaledSize); } QImage img; if (!reader.read(&img)) { Q_EMIT imageLoaded(m_cacheKey, QImage()); return; } if (img.width() > m_requestedSize.width() || img.height() > m_requestedSize.height()) { const QRect dest(QPoint(0, 0), m_requestedSize); const QRect src(img.rect().center() - dest.center(), m_requestedSize); img = img.copy(src); } Q_EMIT imageLoaded(m_cacheKey, img); } private: QString m_id; QSize m_requestedSize; QString m_cacheKey; }; // --------------------------------------------------------------------------- // DccImageProvider // --------------------------------------------------------------------------- DccImageProvider::DccImageProvider() : QQuickAsyncImageProvider() , m_cache(80) { } DccImageProvider::~DccImageProvider() { } // static QString DccImageProvider::makeCacheKey(const QString &id, const QSize &size) { const QSize s = resolveSize(size); return QString("%1%2%3x%4").arg(id, CACHE_KEY_SIZE_SEPARATOR).arg(s.width()).arg(s.height()); } void DccImageProvider::submitTask(const QString &id, const QSize &resolvedSize, const QString &cacheKey, CacheImageResponse *response) { Q_ASSERT(thread() == QThread::currentThread()); if (m_pendingResponses.contains(cacheKey)) { // Task already in flight – just register this response for notification if (response) m_pendingResponses.insert(cacheKey, response); return; } // Insert the response pointer, or an empty QPointer as an in-flight marker. m_pendingResponses.insert(cacheKey, QPointer(response)); auto task = new ImageTask(id, resolvedSize, cacheKey); connect(task, &ImageTask::imageLoaded, this, &DccImageProvider::onImageLoaded, Qt::QueuedConnection); connect(task, &ImageTask::imageLoaded, task, &QObject::deleteLater, Qt::QueuedConnection); QThreadPool::globalInstance()->start(task); } void DccImageProvider::cacheImage(const QString &id, const QSize &thumbnailSize) { const QString cacheKey = makeCacheKey(id, thumbnailSize); const QSize resolved = resolveSize(thumbnailSize); const auto work = [this, id, resolved, cacheKey]() { if (m_cache.object(cacheKey)) return; submitTask(id, resolved, cacheKey, nullptr); }; QMetaObject::invokeMethod(this, work); } QQuickImageResponse *DccImageProvider::requestImageResponse(const QString &id, const QSize &requestedSize) { const QString cacheKey = makeCacheKey(id, requestedSize); const QSize resolved = resolveSize(requestedSize); auto response = new CacheImageResponse(); response->moveToThread(thread()); QPointer guardedResponse(response); const auto work = [this, guardedResponse, id, resolved, cacheKey]() { if (!guardedResponse) return; if (const QImage *cached = m_cache.object(cacheKey)) { // Cache hit: set image and emit finished asynchronously on the provider thread. guardedResponse->setImage(*cached); guardedResponse->emitFinished(); } else { // Cache miss: submit a loading task. The response will be notified when loading is done. submitTask(id, resolved, cacheKey, guardedResponse); } }; QMetaObject::invokeMethod(this, work); return response; } void DccImageProvider::onImageLoaded(const QString &cacheKey, const QImage &image) { Q_ASSERT(thread() == QThread::currentThread()); if (!image.isNull()) m_cache.insert(cacheKey, new QImage(image)); if (!m_pendingResponses.contains(cacheKey)) return; const auto responses = m_pendingResponses.values(cacheKey); m_pendingResponses.remove(cacheKey); for (const auto &resp : responses) { if (resp) { if (!image.isNull()) resp->setImage(image); resp->emitFinished(); } } } } // namespace dccV25 #include "dccimageprovider.moc" ================================================ FILE: src/dde-control-center/plugin/dccimageprovider.h ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCIMAGEPROVIDER_H #define DCCIMAGEPROVIDER_H #include #include #include #include #include #include namespace dccV25 { class CacheImageResponse; class DccImageProvider : public QQuickAsyncImageProvider { Q_OBJECT public: explicit DccImageProvider(); ~DccImageProvider() override; void cacheImage(const QString &id, const QSize &thumbnailSize); QQuickImageResponse *requestImageResponse(const QString &id, const QSize &requestedSize) override; private Q_SLOTS: void onImageLoaded(const QString &cacheKey, const QImage &image); private: static QString makeCacheKey(const QString &id, const QSize &size); void submitTask(const QString &id, const QSize &resolvedSize, const QString &cacheKey, CacheImageResponse *response); QCache m_cache; QMultiMap> m_pendingResponses; }; } // namespace dccV25 #endif // DCCIMAGEPROVIDER_H ================================================ FILE: src/dde-control-center/plugin/dccmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dccmodel.h" #include "dccobject.h" #include "dccobject_p.h" #include #include namespace dccV25 { // static Q_LOGGING_CATEGORY(dccLog, "dde.dcc.model"); enum DccModelRole { DccItemRole = Qt::UserRole + 300, DccPageTypeRole, DccViewItemPositionRole, }; enum DccItemPostition { Invalid, Beginning, Middle, End, OnlyOne, }; DccModel::DccModel(QObject *parent) : QAbstractItemModel(parent) , m_root(nullptr) { } DccModel::~DccModel() { } DccObject *DccModel::root() const { return m_root; } void DccModel::setRoot(DccObject *root) { beginResetModel(); m_root = root; endResetModel(); Q_EMIT rootChanged(m_root); if (!m_root) return; connect(m_root, &DccObject::childAboutToBeAdded, this, &DccModel::AboutToAddObject); connect(m_root, &DccObject::childAdded, this, &DccModel::addObject); connect(m_root, &DccObject::childAboutToBeRemoved, this, &DccModel::AboutToRemoveObject); connect(m_root, &DccObject::childRemoved, this, &DccModel::removeObject); connect(m_root, &DccObject::childAboutToBeMoved, this, &DccModel::AboutToMoveObject); connect(m_root, &DccObject::childMoved, this, &DccModel::moveObject); for (auto &&obj : DccObject::Private::FromObject(m_root)->getChildren()) { connectObject(obj); } } DccObject *DccModel::getObject(int row) { if (row < 0 || row >= m_root->getChildren().size()) { return nullptr; } return m_root->getChildren().at(row); } QHash DccModel::roleNames() const { QHash names; names[Qt::DisplayRole] = "display"; names[Qt::StatusTipRole] = "description"; names[Qt::DecorationRole] = "decoration"; names[DccItemRole] = "item"; names[DccPageTypeRole] = "pageType"; names[DccViewItemPositionRole] = "position"; return names; } QModelIndex DccModel::index(const DccObject *object) { if (object == m_root) { return QModelIndex(); } DccObject *parent = DccObject::Private::FromObject(object)->getParent(); if (!parent) { // DGM: actually, it can happen (for instance if the entity is displayed in the local DB of a 3D view) // ccLog::Error(QString("An error occurred while creating DB tree index: object '%1' has no parent").arg(object->getName())); return QModelIndex(); } int pos = DccObject::Private::FromObject(parent)->getChildIndex(object); assert(pos >= 0); return createIndex(pos, 0, (void *)object); } QModelIndex DccModel::index(int row, int column, const QModelIndex &parentIndex) const { // qWarning() << __FUNCTION__ << __LINE__ << row << column << parentIndex; if (row < 0 || row >= m_root->getChildren().size()) { return QModelIndex(); } return createIndex(row, column, (void *)m_root->getChildren().at(row)); if (!hasIndex(row, column, parentIndex)) { return QModelIndex(); } DccObject *parent = (parentIndex.isValid() ? static_cast(parentIndex.internalPointer()) : m_root); const DccObject *child = DccObject::Private::FromObject(parent)->getChild(row); return child ? createIndex(row, column, (void *)child) : QModelIndex(); } QModelIndex DccModel::parent(const QModelIndex &index) const { if (!index.isValid()) { return QModelIndex(); } DccObject *childItem = static_cast(index.internalPointer()); if (!childItem) { assert(false); return QModelIndex(); } DccObject *parentItem = DccObject::Private::FromObject(childItem)->getParent(); assert(parentItem); if (!parentItem || parentItem == m_root) { return QModelIndex(); } return createIndex(DccObject::Private::FromObject(parentItem)->getIndex(), 0, parentItem); } int DccModel::rowCount(const QModelIndex &) const { if (!m_root) return 0; return DccObject::Private::FromObject(m_root)->getChildren().size(); } int DccModel::columnCount(const QModelIndex &parent) const { // qCWarning(dccLog) << __FUNCTION__ << __LINE__; if (!parent.isValid()) return 0; return 1; } QVariant DccModel::data(const QModelIndex &index, int role) const { // qCWarning(dccLog) << __FUNCTION__ << index << role; if (!index.isValid()) return QVariant(); DccObject *item = static_cast(index.internalPointer()); switch (role) { case DccItemRole: return QVariant::fromValue(item); case DccPageTypeRole: return QVariant::fromValue(item->pageType()); case DccViewItemPositionRole: { int count = rowCount(); if (index.row() == 0) { return count == 1 ? OnlyOne : Beginning; } else if (index.row() == count - 1) { return End; } else { return Middle; } } return Invalid; case Qt::DisplayRole: return item->displayName(); case Qt::StatusTipRole: return item->description(); case Qt::DecorationRole: return QIcon::fromTheme(item->icon()); } return QVariant(); } void DccModel::updateObject() { DccObject *obj = qobject_cast(sender()); if (obj) { QModelIndex i = index(obj); emit dataChanged(i, i); } } void DccModel::AboutToAddObject(const DccObject *, int pos) { beginInsertRows(QModelIndex(), pos, pos); } void DccModel::addObject(const DccObject *child) { endInsertRows(); connectObject(child); } void DccModel::AboutToRemoveObject(const DccObject *, int pos) { beginRemoveRows(QModelIndex(), pos, pos); } void DccModel::removeObject(const DccObject *child) { endRemoveRows(); disconnectObject(child); } void DccModel::AboutToMoveObject(const DccObject *, int pos, int oldPos) { beginMoveRows(QModelIndex(), oldPos, oldPos, QModelIndex(), pos); } void DccModel::moveObject(const DccObject *) { endMoveRows(); } void DccModel::connectObject(const DccObject *obj) { connect(obj, &DccObject::objectNameChanged, this, &DccModel::updateObject); connect(obj, &DccObject::displayNameChanged, this, &DccModel::updateObject); connect(obj, &DccObject::descriptionChanged, this, &DccModel::updateObject); connect(obj, &DccObject::iconChanged, this, &DccModel::updateObject); connect(obj, &DccObject::badgeChanged, this, &DccModel::updateObject); } void DccModel::disconnectObject(const DccObject *obj) { disconnect(obj, nullptr, this, nullptr); } } // namespace dccV25 ================================================ FILE: src/dde-control-center/plugin/dccmodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCMODEL_H #define DCCMODEL_H #include #include namespace dccV25 { class DccObject; class DccModel : public QAbstractItemModel { Q_OBJECT Q_PROPERTY(DccObject * root READ root WRITE setRoot NOTIFY rootChanged) QML_ELEMENT public: explicit DccModel(QObject *parent = nullptr); ~DccModel() override; DccObject *root() const; QHash roleNames() const override; QModelIndex index(const DccObject *object); // Basic functionality: QModelIndex index(int row, int column, const QModelIndex &parentIndex = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; public Q_SLOTS: void setRoot(DccObject *root); DccObject *getObject(int row); private Q_SLOTS: void updateObject(); void AboutToAddObject(const DccObject *parent, int pos); void addObject(const DccObject *child); void AboutToRemoveObject(const DccObject *parent, int pos); void removeObject(const DccObject *child); void AboutToMoveObject(const DccObject *parent, int pos, int oldPos); void moveObject(const DccObject *child); Q_SIGNALS: void rootChanged(DccObject *root); private: void connectObject(const DccObject *obj); void disconnectObject(const DccObject *obj); private: DccObject *m_root; }; } // namespace dccV25 #endif // DCCMODEL_H ================================================ FILE: src/dde-control-center/plugin/dccobject.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dccobject.h" #include "dccobject_p.h" #include #include #include #include #include #include namespace dccV25 { static Q_LOGGING_CATEGORY(dccLog, "dde.dcc.object"); DccObject::Private *DccObject::Private::FromObject(const DccObject *obj) { return obj ? obj->p_ptr : nullptr; } DccObject::Private::Private(DccObject *obj) : m_badge(0) , m_pageType(Menu) , m_weight(-1) , m_flags(0) , m_componentComplete(true) , q_ptr(obj) , m_parent(nullptr) , m_recommendedParent(nullptr) , m_currentObject(nullptr) , m_page(nullptr) , m_parentItem(nullptr) { } DccObject::Private::~Private() { q_ptr->setPage(nullptr); if (m_parent) { m_parent->p_ptr->removeChild(q_ptr); } while (!m_children.isEmpty()) { removeChild(m_children.size() - 1); } } bool DccObject::Private::getFlagState(uint32_t flag) const { return (m_flags & flag); } bool DccObject::Private::setFlagState(uint32_t flag, bool state) { if (getFlagState(flag) != state) { bool hidden = getFlagState(DCC_ALL_HIDDEN); bool disabled = getFlagState(DCC_ALL_DISABLED); if (state) m_flags |= flag; else m_flags &= (~flag); if (hidden != getFlagState(DCC_ALL_HIDDEN)) { Q_EMIT q_ptr->visibleToAppChanged(hidden); } bool allDisabled = getFlagState(DCC_ALL_DISABLED); if (disabled != allDisabled) { Q_EMIT q_ptr->enabledToAppChanged(disabled); } return true; } return false; } uint32_t DccObject::Private::getFlag() const { return m_flags; } bool DccObject::Private::addChild(DccObject::Private *child) { return addChild(child->q_ptr); } bool DccObject::Private::addChild(DccObject *child, bool updateParent) { if (!child) { return false; } int index = 0; for (auto &&it = m_children.cbegin(); it != m_children.cend(); it++) { if (*it == child) return false; if (child->weight() >= (*it)->weight()) { index++; } } Q_EMIT q_ptr->childAboutToBeAdded(q_ptr, index); m_children.insert(m_children.cbegin() + index, child); DccObject::Private::FromObject(child)->SetParent(q_ptr); if (updateParent) { DccObject::Private::FromObject(child)->SetRecommendedParent(q_ptr); } Q_EMIT q_ptr->childAdded(child); Q_EMIT q_ptr->childrenChanged(m_children); return true; } void DccObject::Private::removeChild(int index) { if (index < 0 || index >= m_children.size()) { // Q_ASSERT(false); return; } DccObject *child = m_children.at(index); Q_EMIT q_ptr->childAboutToBeRemoved(q_ptr, index); m_children.erase(m_children.cbegin() + index); DccObject::Private::FromObject(child)->SetParent(nullptr); if (child == m_currentObject) { q_ptr->setCurrentObject(nullptr); } Q_EMIT q_ptr->childRemoved(child); Q_EMIT q_ptr->childrenChanged(m_children); } void DccObject::Private::removeChild(DccObject *child) { int pos = getChildIndex(child); if (pos >= 0) removeChild(pos); } void DccObject::Private::updatePos(DccObject *child) { int oldPos = -1; int modelPos = 0; int index = 0; for (auto &&it = m_children.cbegin(); it != m_children.cend(); it++, index++) { if (*it == child) { oldPos = index; } else if (child->weight() >= (*it)->weight()) { modelPos = index + 1; } } int newPos = oldPos < modelPos ? modelPos - 1 : modelPos; if (oldPos < 0 || oldPos == newPos) { return; } Q_EMIT q_ptr->childAboutToBeMoved(q_ptr, modelPos, oldPos); m_children.move(oldPos, newPos); Q_EMIT q_ptr->childMoved(child); Q_EMIT q_ptr->childrenChanged(m_children); } const QVector &DccObject::Private::getChildren() const { return m_children; } int DccObject::Private::getIndex() const { return m_parent ? m_parent->p_ptr->getChildren().indexOf(q_ptr) : -1; } DccObject *DccObject::Private::getChild(int childPos) const { return (childPos >= 0 && childPos < m_children.size() ? m_children[childPos] : nullptr); } int DccObject::Private::getChildIndex(const DccObject *child) const { return m_children.indexOf(const_cast(child)); } void DccObject::Private::addObject(DccObject *child) { if (child && !m_objects.contains(child)) { m_objects.append(child); DccObject::Private::FromObject(child)->SetRecommendedParent(q_ptr); connect(child, &DccObject::objectDestroyed, q_ptr, [this](DccObject *obj) { m_objects.removeAll(obj); Q_EMIT q_ptr->removeObject(obj); }); Q_EMIT q_ptr->addObject(child); } } void DccObject::Private::removeObject(DccObject *child) { if (child) { DccObject::Private::FromObject(child)->SetRecommendedParent(nullptr); m_objects.removeAll(child); Q_EMIT q_ptr->removeObject(child); } } void DccObject::Private::removeObjectFromParent() { if (m_recommendedParent) { m_recommendedParent->removeObject(q_ptr); } } void DccObject::Private::clearObject() { for (auto obj : m_objects) { DccObject::Private::FromObject(obj)->SetRecommendedParent(nullptr); Q_EMIT q_ptr->removeObject(obj); } m_objects.clear(); } void DccObject::Private::data_append(QQmlListProperty *data, QObject *o) { if (!o) return; DccObject::Private *that = reinterpret_cast(data->data); that->m_data.append(o); o->setParent(that->q_ptr); if (DccObject *obj = qobject_cast(o)) { reinterpret_cast(data->data)->addObject(obj); } } qsizetype DccObject::Private::data_count(QQmlListProperty *data) { return reinterpret_cast(data->data)->m_data.count(); } QObject *DccObject::Private::data_at(QQmlListProperty *data, qsizetype i) { QObjectList &d = reinterpret_cast(data->data)->m_data; if (i < 0 || i >= d.size()) return nullptr; return d.at(i); } void DccObject::Private::data_clear(QQmlListProperty *data) { reinterpret_cast(data->data)->clearObject(); reinterpret_cast(data->data)->m_data.clear(); } /////////////////////////////////////////////////////// DccObject::DccObject(QObject *parent) : QObject(parent) , p_ptr(new DccObject::Private(this)) { } DccObject::~DccObject() { Q_EMIT objectDestroyed(this); delete p_ptr; } QString DccObject::name() const { return objectName(); } void DccObject::setName(const QString &name) { setObjectName(name); Q_EMIT nameChanged(name); } QString DccObject::parentName() const { return p_ptr->m_parentName; } void DccObject::setParentName(const QString &parentName) { if (p_ptr->m_parentName != parentName) { p_ptr->m_parentName = parentName; Q_EMIT parentNameChanged(p_ptr->m_parentName); } } quint32 DccObject::weight() const { return p_ptr->m_weight; } void DccObject::setWeight(quint32 weight) { if (p_ptr->m_weight != weight) { p_ptr->m_weight = weight; if (p_ptr->m_parent) { p_ptr->m_parent->p_ptr->updatePos(this); } Q_EMIT weightChanged(p_ptr->m_weight); } } QString DccObject::displayName() const { return p_ptr->m_displayName; } void DccObject::setDisplayName(const QString &displayName) { if (p_ptr->m_displayName != displayName) { p_ptr->m_displayName = displayName; Q_EMIT displayNameChanged(p_ptr->m_displayName); } } QString DccObject::description() const { return p_ptr->m_description; } void DccObject::setDescription(const QString &description) { if (p_ptr->m_description != description) { p_ptr->m_description = description; Q_EMIT descriptionChanged(p_ptr->m_description); } } QString DccObject::icon() const { return p_ptr->m_icon; } void DccObject::setIcon(const QString &icon) { if (p_ptr->m_icon != icon) { p_ptr->m_icon = icon; Q_EMIT iconChanged(p_ptr->m_icon); // 只在组件完成后才解析 URL if (p_ptr->m_componentComplete) { updateIconSource(); } } } void DccObject::updateIconSource() { if (!p_ptr->m_icon.isEmpty()) { QQmlContext *context = qmlContext(this); p_ptr->m_iconSource = context ? context->resolvedUrl(p_ptr->m_icon) : p_ptr->m_icon; } else { p_ptr->m_iconSource.clear(); } Q_EMIT iconSourceChanged(p_ptr->m_iconSource); } QUrl DccObject::iconSource() const { return p_ptr->m_iconSource; } qint8 DccObject::badge() const { return p_ptr->m_badge; } void DccObject::setBadge(qint8 badge) { if (p_ptr->m_badge != badge) { p_ptr->m_badge = badge; Q_EMIT badgeChanged(p_ptr->m_badge); } } bool DccObject::isVisible() const { return !p_ptr->getFlagState(DCC_HIDDEN); } void DccObject::setVisible(bool isVisible) { if (p_ptr->setFlagState(DCC_HIDDEN, !isVisible)) { Q_EMIT visibleChanged(isVisible); } } bool DccObject::isVisibleToApp() const { return !p_ptr->getFlagState(DCC_ALL_HIDDEN); } bool DccObject::isEnabled() const { return !p_ptr->getFlagState(DCC_DISABLED); } void DccObject::setEnabled(bool enabled) { if (p_ptr->setFlagState(DCC_DISABLED, !enabled)) { Q_EMIT enabledChanged(enabled); } } bool DccObject::isEnabledToApp() const { return !p_ptr->getFlagState(DCC_ALL_DISABLED); } bool DccObject::canSearch() const { return !p_ptr->getFlagState(DCC_CANSEARCH); } void DccObject::setCanSearch(bool canSearch) { if (p_ptr->setFlagState(DCC_CANSEARCH, !canSearch)) { Q_EMIT canSearchChanged(canSearch); } } DccObject::BackgroundTypes DccObject::backgroundType() const { return BackgroundTypes(p_ptr->m_flags & DCC_MASK_BGTYPE); } void DccObject::setBackgroundType(BackgroundTypes type) { if (backgroundType() != type) { p_ptr->m_flags &= DCC_MASK_NOBGTYPE; p_ptr->m_flags |= type; Q_EMIT backgroundTypeChanged(type); } } DccObject *DccObject::currentObject() { return p_ptr->m_currentObject; } void DccObject::setCurrentObject(DccObject *obj) { if (p_ptr->m_currentObject != obj) { if (p_ptr->m_currentObject) { Q_EMIT p_ptr->m_currentObject->deactive(); } p_ptr->m_currentObject = obj; Q_EMIT currentObjectChanged(p_ptr->m_currentObject); } } quint8 DccObject::pageType() const { return p_ptr->m_pageType; } void DccObject::setPageType(quint8 type) { if (p_ptr->m_pageType != type) { p_ptr->m_pageType = type; Q_EMIT pageTypeChanged(p_ptr->m_pageType); } } QQuickItem *DccObject::parentItem() { return p_ptr->m_parentItem.get(); } void DccObject::setParentItem(QQuickItem *item) { if (item != p_ptr->m_parentItem.get()) { p_ptr->m_parentItem = item; Q_EMIT parentItemChanged(p_ptr->m_parentItem.get()); } } QQmlComponent *DccObject::page() const { return p_ptr->m_page; } void DccObject::setPage(QQmlComponent *page) { if (p_ptr->m_page.get() != page) { p_ptr->m_page = page; Q_EMIT pageChanged(p_ptr->m_page.get()); } } QQmlListProperty DccObject::data() { return QQmlListProperty(this, p_ptr, &DccObject::Private::data_append, &DccObject::Private::data_count, &DccObject::Private::data_at, &DccObject::Private::data_clear); } const QVector &DccObject::getChildren() const { return p_ptr->getChildren(); } void DccObject::classBegin() { p_ptr->m_componentComplete = false; } void DccObject::componentComplete() { p_ptr->m_componentComplete = true; if (!p_ptr->m_icon.isEmpty()) { updateIconSource(); } } bool DccObject::isComponentComplete() const { return p_ptr->m_componentComplete; } } // namespace dccV25 ================================================ FILE: src/dde-control-center/plugin/dccobject.h ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCOBJECT_H #define DCCOBJECT_H #include #include #include #include #include namespace dccV25 { class DccModel; class DccObject : public QObject, public QQmlParserStatus { Q_OBJECT Q_INTERFACES(QQmlParserStatus) QML_ELEMENT public: Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) Q_PROPERTY(QString parentName READ parentName WRITE setParentName NOTIFY parentNameChanged) Q_PROPERTY(quint32 weight READ weight WRITE setWeight NOTIFY weightChanged) Q_PROPERTY(QString displayName READ displayName WRITE setDisplayName NOTIFY displayNameChanged) Q_PROPERTY(QString description READ description WRITE setDescription NOTIFY descriptionChanged) Q_PROPERTY(QString icon READ icon WRITE setIcon NOTIFY iconChanged) Q_PROPERTY(QUrl iconSource READ iconSource NOTIFY iconSourceChanged) Q_PROPERTY(qint8 badge READ badge WRITE setBadge NOTIFY badgeChanged DESIGNABLE false) Q_PROPERTY(bool visible READ isVisible WRITE setVisible NOTIFY visibleChanged DESIGNABLE false) Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged DESIGNABLE false) Q_PROPERTY(bool visibleToApp READ isVisibleToApp NOTIFY visibleToAppChanged) // 未设置隐藏且未被配置隐藏则为true Q_PROPERTY(bool enabledToApp READ isEnabledToApp NOTIFY enabledToAppChanged) // 未设置禁用且未被配置禁用则为true Q_PROPERTY(bool canSearch READ canSearch WRITE setCanSearch NOTIFY canSearchChanged DESIGNABLE false) Q_PROPERTY(BackgroundTypes backgroundType READ backgroundType WRITE setBackgroundType NOTIFY backgroundTypeChanged DESIGNABLE false) Q_PROPERTY(DccObject* currentObject READ currentObject WRITE setCurrentObject NOTIFY currentObjectChanged DESIGNABLE false) Q_PROPERTY(QVector children READ getChildren NOTIFY childrenChanged DESIGNABLE false) Q_PROPERTY(quint8 pageType READ pageType WRITE setPageType NOTIFY pageTypeChanged) Q_PROPERTY(QQmlComponent* page READ page WRITE setPage NOTIFY pageChanged) Q_PROPERTY(QQuickItem* parentItem READ parentItem WRITE setParentItem NOTIFY parentItemChanged) Q_PROPERTY(QQmlListProperty data READ data DESIGNABLE false) Q_CLASSINFO("DefaultProperty", "data") explicit DccObject(QObject *parent = nullptr); ~DccObject() override; QString name() const; void setName(const QString &name); QString parentName() const; void setParentName(const QString &parentName); quint32 weight() const; void setWeight(quint32 weight); QString displayName() const; void setDisplayName(const QString &displayName); QString description() const; void setDescription(const QString &description); QString icon() const; void setIcon(const QString &icon); QUrl iconSource() const; qint8 badge() const; void setBadge(qint8 badge); bool isVisible() const; void setVisible(bool isVisible); bool isVisibleToApp() const; bool isEnabled() const; void setEnabled(bool enabled); bool isEnabledToApp() const; // 是否参与搜索,默认参与搜索 bool canSearch() const; void setCanSearch(bool canSearch); enum BackgroundType { AutoBg = 0, // 自动,Menu为Normal|Hover,Group为Normal,其他无背景,默认 Normal = 0x01, // 正常base背景 Hover = 0x02, // 鼠标悬浮背景 Clickable = 0x04, // 点击触发active信号 Highlight = 0x08, // 高亮背景,通常表示选中状态 Warning = 0x10, // 红色 ClickStyle = Normal | Hover | Clickable, // 有悬浮背景并可点击 }; Q_DECLARE_FLAGS(BackgroundTypes, BackgroundType) Q_FLAG(BackgroundTypes) BackgroundTypes backgroundType() const; void setBackgroundType(BackgroundTypes type); DccObject *currentObject(); void setCurrentObject(DccObject *obj); enum PageType { EditorPage = 1, // 编辑控件,page为右则的编辑控件,左则为displayName和description ItemPage, // 控件,page为整个控件 Menu = 0x40, // 菜单项,子页面是page,默认 MenuEditor, // 菜单加编辑控件,子项是一个菜单项 Control = 0x20, // 页面中的一个控件,与其他组合使用 Editor = EditorPage | Control, // 编辑控件 Item = ItemPage | Control, // 控件 UserType = 0x80, // 0x80及以上: 用户自定义使用 }; Q_ENUM(PageType) quint8 pageType() const; void setPageType(quint8 type); // QT_DEPRECATED_X("use DccLoader") // Q_INVOKABLE QQuickItem *getSectionItem(QObject *parent); QQuickItem *parentItem(); void setParentItem(QQuickItem *item); QQmlComponent *page() const; void setPage(QQmlComponent *page); QQmlListProperty data(); const QVector &getChildren() const; // QQmlParserStatus interface void classBegin() override; void componentComplete() override; class Private; protected: bool isComponentComplete() const; Q_SIGNALS: // 激活信号 void active(const QString &cmd); void deactive(); // 子项变化信号 void childAboutToBeAdded(const DccObject *parent, int pos); void childAdded(DccObject *child); void childAboutToBeRemoved(const DccObject *parent, int pos); void childRemoved(DccObject *child); void childAboutToBeMoved(const DccObject *parent, int pos, int oldPos); void childMoved(DccObject *child); void childrenChanged(const QVector &children); // 属性变化信号 void nameChanged(const QString &name); void parentNameChanged(const QString &parentName); void weightChanged(quint32 weight); void displayNameChanged(const QString &displayName); void descriptionChanged(const QString &description); void iconChanged(const QString &icon); void iconSourceChanged(const QUrl &iconSource); void badgeChanged(qint8 badge); void visibleChanged(bool visible); void enabledChanged(bool enabled); void visibleToAppChanged(bool visibleToApp); void enabledToAppChanged(bool enabledToApp); void canSearchChanged(bool canSearch); void backgroundTypeChanged(BackgroundTypes type); void currentObjectChanged(DccObject *obj); void pageTypeChanged(quint8 type); void pageChanged(QQmlComponent *page); void parentItemChanged(QQuickItem *item); void addObject(DccObject *obj); void removeObject(DccObject *obj); void objectDestroyed(DccObject *obj); protected: DccObject::Private *p_ptr; private: void updateIconSource(); }; } // namespace dccV25 #endif // DCCOBJECT_H ================================================ FILE: src/dde-control-center/plugin/dccobject_p.h ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCOBJECT_P_H #define DCCOBJECT_P_H #include "dccobject.h" #include #define DCC_HIDDEN 0x80000000 #define DCC_DISABLED 0x40000000 #define DCC_CONFIG_HIDDEN 0x20000000 #define DCC_CONFIG_DISABLED 0x10000000 // 0xA0000000 = 0x80000000|0x20000000 0x80000000为用户设置位 0x20000000为配置设置位 // 0x50000000 = 0x40000000|0x10000000 0x4000000为用户设置位 0x10000000为配置设置位 #define DCC_ALL_HIDDEN 0xA0000000 #define DCC_ALL_DISABLED 0x50000000 #define DCC_MASK_BGTYPE 0x000000FF // 背景类型 #define DCC_MASK_NOBGTYPE 0xFFFFFF00 // 背景类型 #define DCC_CUSTOM_DEFULT 0x08000000 #define DCC_CANSEARCH 0x04000000 // 不参与搜索 namespace dccV25 { class DccObject::Private { public: static DccObject::Private *FromObject(const DccObject *obj); bool getFlagState(uint32_t flag) const; bool setFlagState(uint32_t flag, bool state); uint32_t getFlag() const; bool addChild(DccObject::Private *child); bool addChild(DccObject *child, bool updateParent = true); void removeChild(int index); void removeChild(DccObject *child); void updatePos(DccObject *child); const QVector &getChildren() const; int getIndex() const; inline DccObject *getParent() const { return m_parent; } inline DccObject *getRecommendedParent() const { return m_recommendedParent; } inline const QVector &getObjects() const { return m_objects; } DccObject *getChild(int childPos) const; int getChildIndex(const DccObject *child) const; void addObject(DccObject *child); void removeObject(DccObject *child); void removeObjectFromParent(); void clearObject(); protected: explicit Private(DccObject *obj); virtual ~Private(); virtual inline void SetParent(DccObject *anObject) { m_parent = anObject; } virtual inline void SetRecommendedParent(DccObject *parent) { m_recommendedParent = parent; } private: // data property static void data_append(QQmlListProperty *data, QObject *o); static qsizetype data_count(QQmlListProperty *data); static QObject *data_at(QQmlListProperty *data, qsizetype i); static void data_clear(QQmlListProperty *data); protected: qint8 m_badge; quint8 m_pageType; quint16 m_weight; quint32 m_flags; bool m_componentComplete; DccObject *q_ptr; // q指针 DccObject *m_parent; // 父项 QPointer m_recommendedParent; // 推荐父项 DccObject *m_currentObject; QVector m_children; // 子项 QVector m_objects; // m_data中DccObject QObjectList m_data; // data属性,为qml能加子项 QPointer m_page; QPointer m_parentItem; // Item父项 QString m_parentName; QString m_displayName; QString m_description; QString m_icon; // 属性 QUrl m_iconSource; // icon带相对路径处理 friend class DccObject; }; } // namespace dccV25 #endif // DCCOBJECT_P_H ================================================ FILE: src/dde-control-center/plugin/dccquickdbusinterface.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dccquickdbusinterface.h" #include "dccquickdbusinterface_p.h" #include #include #include #include #include #include #include #include #include namespace dccV25 { static Q_LOGGING_CATEGORY(dccLog, "dde.dcc.quickDBus"); static const QString &PropertiesInterface = QStringLiteral("org.freedesktop.DBus.Properties"); static const QString &PropertiesChanged = QStringLiteral("PropertiesChanged"); DccQuickDBusCallback::DccQuickDBusCallback(QJSValue member, QJSValue errorSlot, QObject *parent) : QObject(parent) , m_member(member) , m_errorSlot(errorSlot) { } DccQuickDBusCallback::~DccQuickDBusCallback() { } static QVariant DBusBasicToValue(const QDBusArgument &arg) { switch (arg.currentSignature().at(0).unicode()) { case 'b': { bool v; arg >> v; return v; } break; case 'y': { unsigned char v; arg >> v; return v; } break; case 'n': { short v; arg >> v; return v; } break; case 'q': { unsigned short v; arg >> v; return v; } break; case 'i': { int v; arg >> v; return v; } break; case 'u': { unsigned int v; arg >> v; return v; } break; case 'x': { qint64 v; arg >> v; return v; } break; case 't': { quint64 v; arg >> v; return v; } break; case 'd': { double v; arg >> v; return v; } break; case 's': { QString v; arg >> v; return v; } break; case 'o': { QDBusObjectPath v; arg >> v; return v.path(); } break; case 'g': { QDBusSignature v; arg >> v; return v.signature(); } break; case 'h': { QDBusUnixFileDescriptor v; arg >> v; return v.fileDescriptor(); } break; case 'v': { QDBusVariant v; arg >> v; return v.variant(); } break; default: qCWarning(dccLog()) << "error basic type:" << arg.currentType(); break; } return QVariant(); } static QVariant DBusArgumentToValue(const QDBusArgument &arg) { switch (arg.currentType()) { case QDBusArgument::BasicType: return DBusBasicToValue(arg); break; case QDBusArgument::VariantType: { QDBusVariant v; arg >> v; return v.variant(); } break; case QDBusArgument::ArrayType: { QList ret; arg.beginArray(); while (!arg.atEnd()) { ret.append(DBusArgumentToValue(arg)); } arg.endStructure(); return ret; } break; case QDBusArgument::StructureType: { QVariantList ret; arg.beginStructure(); while (!arg.atEnd()) { ret.append(DBusArgumentToValue(arg)); } arg.endStructure(); return ret; } break; case QDBusArgument::MapType: { QVariantMap map; arg.beginMap(); while (!arg.atEnd()) { arg.beginMapEntry(); QVariant key = DBusBasicToValue(arg); QVariant value = DBusArgumentToValue(arg); map.insert(key.toString(), value); arg.endMapEntry(); } arg.endMap(); return QVariant::fromValue(map); } break; default: qCWarning(dccLog()) << "error type:" << arg.currentType(); break; } return QVariant(); } QVariant DccQuickDBusCallback::toValue(const QVariant &value) { return value.canConvert() ? DBusArgumentToValue(qvariant_cast(value)) : value; } void DccQuickDBusCallback::returnMethod(const QDBusMessage &msg) { QJSValueList arglist; for (auto &&v : msg.arguments()) { arglist.append(QJSValue(QJSPrimitiveValue(DccQuickDBusCallback::toValue(v)))); } if (m_member.isCallable()) { m_member.call(arglist); } deleteLater(); } void DccQuickDBusCallback::errorMethod(const QDBusError &error, const QDBusMessage &) { QJSValueList arglist; arglist.append(QJSValue(error.name() + ":" + error.message())); if (m_member.isCallable()) { m_errorSlot.call(arglist); } deleteLater(); } DccDBusSignalCallback::DccDBusSignalCallback(const QMetaMethod &method, QObject *parent) : QObject(parent) , m_method(method) , m_target(parent) { } DccDBusSignalCallback::~DccDBusSignalCallback() { } void DccDBusSignalCallback::returnMethod(const QDBusMessage &msg) { QVariantList arglist(m_method.parameterCount()); int i = 0; for (auto &&v : msg.arguments()) { arglist[i] = DccQuickDBusCallback::toValue(v); i++; if (i > arglist.size()) { break; } } switch (arglist.size()) { case 0: m_method.invoke(m_target); break; case 1: m_method.invoke(m_target, arglist.at(0)); break; case 2: m_method.invoke(m_target, arglist.at(0), arglist.at(1)); break; case 3: m_method.invoke(m_target, arglist.at(0), arglist.at(1), arglist.at(2)); break; case 4: m_method.invoke(m_target, arglist.at(0), arglist.at(1), arglist.at(2), arglist.at(3)); break; case 5: m_method.invoke(m_target, arglist.at(0), arglist.at(1), arglist.at(2), arglist.at(3), arglist.at(4)); break; case 6: m_method.invoke(m_target, arglist.at(0), arglist.at(1), arglist.at(2), arglist.at(3), arglist.at(4), arglist.at(5)); break; case 7: m_method.invoke(m_target, arglist.at(0), arglist.at(1), arglist.at(2), arglist.at(3), arglist.at(4), arglist.at(5), arglist.at(6)); break; case 8: m_method.invoke(m_target, arglist.at(0), arglist.at(1), arglist.at(2), arglist.at(3), arglist.at(4), arglist.at(5), arglist.at(6), arglist.at(7)); break; default: m_method.invoke(m_target, arglist.at(0), arglist.at(1), arglist.at(2), arglist.at(3), arglist.at(4), arglist.at(5), arglist.at(6), arglist.at(7), arglist.at(8)); break; } } class DBusPropertySignalSpy : public QObject { public: typedef std::function PropertyCallbackFunc; explicit DBusPropertySignalSpy(PropertyCallbackFunc fun, QObject *parent = nullptr) : QObject(parent) , m_propertyCallbackFunc(fun) { } int qt_metacall(QMetaObject::Call c, int id, void **arguments) override { QObject *target = sender(); int signalIndex = id; id = QObject::qt_metacall(c, id, arguments); if (id < 0 || c != QMetaObject::InvokeMetaMethod) return id; const QMetaProperty prop = target->metaObject()->property(signalIndex); m_propertyCallbackFunc(prop.name(), prop.read(target)); return id; } protected: PropertyCallbackFunc m_propertyCallbackFunc; }; ////////////////////////////////////// DccQuickDBusInterface::Private::Private(DccQuickDBusInterface *q) : q_ptr(q) , m_propertySpy(new DBusPropertySignalSpy(std::bind(&DccQuickDBusInterface::Private::onPropertySpy, this, std::placeholders::_1, std::placeholders::_2), this)) , m_connectionType(SessionBus) , m_connection(QDBusConnection::connectToBus(QDBusConnection::SessionBus, QString::number((quintptr)q))) { } DccQuickDBusInterface::Private::~Private() { } void DccQuickDBusInterface::Private::getAllPropertys() { QDBusMessage msg = QDBusMessage::createMethodCall(m_service, m_path, PropertiesInterface, "GetAll"); msg << m_interface; m_connection.callWithCallback(msg, this, SLOT(onAllProperties(QVariantMap)), SLOT(onGetPropertiesErr(QDBusError))); } void DccQuickDBusInterface::Private::onAllProperties(const QVariantMap &changedProperties) { for (QVariantMap::const_iterator it = changedProperties.cbegin(); it != changedProperties.cend(); ++it) { QString propName; if (m_suffix.isEmpty()) { propName = it.key(); propName[0] = propName.at(0).toLower(); } else { propName = m_suffix + it.key(); } if (m_mapProperties.contains(propName)) { if (m_mapProperties.value(propName).isEmpty()) { m_mapProperties[propName] = it.key(); } QVariant v = DccQuickDBusCallback::toValue(it.value()); m_propertyMap.insert(propName, v); // setProperty会触发属性变化信号 q_ptr->setProperty(propName.toLatin1(), v); } } } void DccQuickDBusInterface::Private::onGetPropertiesErr(const QDBusError &e) { qCWarning(dccLog()) << e << m_service << m_path << m_interface; } void DccQuickDBusInterface::Private::onPropertiesChanged(const QString &interfaceName, const QVariantMap &changedProperties, const QStringList &invalidatedProperties) { Q_UNUSED(interfaceName) Q_UNUSED(invalidatedProperties) onAllProperties(changedProperties); } QVariant DccQuickDBusInterface::Private::getProperty(const QString &propname) { return m_propertyMap.value(propname, QVariant()); } void DccQuickDBusInterface::Private::setProperty(const QString &propname, const QVariant &value) { const QString prop = m_mapProperties.value(propname, propname); QDBusMessage msg = QDBusMessage::createMethodCall(m_service, m_path, PropertiesInterface, QStringLiteral("Set")); msg << m_interface << prop << QVariant::fromValue(QDBusVariant(value)); m_connection.asyncCall(msg); } void DccQuickDBusInterface::Private::onPropertySpy(const char *propname, const QVariant &value) { QVariant v = value; if (v.canConvert()) { v = value.value().toVariant(); } if (m_propertyMap.value(propname) != v) { setProperty(propname, v); } } //////////////////////////////////////////////// DccQuickDBusInterface::DccQuickDBusInterface(QObject *parent) : QObject(parent) , p_ptr(new DccQuickDBusInterface::Private(this)) { } DccQuickDBusInterface::~DccQuickDBusInterface() { delete p_ptr; } QString DccQuickDBusInterface::service() const { return p_ptr->m_service; } void DccQuickDBusInterface::setService(const QString &service) { if (p_ptr->m_service != service) { p_ptr->m_service = service; Q_EMIT serviceChanged(p_ptr->m_service); } } QString DccQuickDBusInterface::path() const { return p_ptr->m_path; } void DccQuickDBusInterface::setPath(const QString &path) { if (p_ptr->m_path != path) { p_ptr->m_path = path; Q_EMIT pathChanged(p_ptr->m_path); } } QString DccQuickDBusInterface::interface() const { return p_ptr->m_interface; } void DccQuickDBusInterface::setInterface(const QString &interface) { if (p_ptr->m_interface != interface) { p_ptr->m_interface = interface; Q_EMIT interfaceChanged(p_ptr->m_interface); } } DccQuickDBusInterface::BusType DccQuickDBusInterface::connection() const { return p_ptr->m_connectionType; } void DccQuickDBusInterface::setConnection(const BusType &connection) { if (p_ptr->m_connectionType != connection) { p_ptr->m_connectionType = connection; QDBusConnection::disconnectFromBus(p_ptr->m_connection.name()); p_ptr->m_connection = QDBusConnection::connectToBus(QDBusConnection::BusType(p_ptr->m_connectionType), p_ptr->m_connection.name()); Q_EMIT connectionChanged(p_ptr->m_connectionType); } } QString DccQuickDBusInterface::suffix() const { return p_ptr->m_suffix; } void DccQuickDBusInterface::setSuffix(const QString &suffix) { if (p_ptr->m_suffix != suffix) { p_ptr->m_suffix = suffix; Q_EMIT suffixChanged(p_ptr->m_suffix); } } bool DccQuickDBusInterface::callWithCallback(const QString &method, const QList &args, const QJSValue member, const QJSValue errorSlot) { DccQuickDBusCallback *callback = new DccQuickDBusCallback(member, errorSlot, this); QDBusMessage msg = QDBusMessage::createMethodCall(p_ptr->m_service, p_ptr->m_path, p_ptr->m_interface, method); msg.setArguments(args); return p_ptr->m_connection.callWithCallback(msg, callback, SLOT(returnMethod(QDBusMessage)), SLOT(errorMethod(QDBusError, QDBusMessage))); } void DccQuickDBusInterface::connectNotify(const QMetaMethod &signal) { QObject::connectNotify(signal); } void DccQuickDBusInterface::disconnectNotify(const QMetaMethod &signal) { QObject::disconnectNotify(signal); } void DccQuickDBusInterface::classBegin() { } void DccQuickDBusInterface::componentComplete() { static const QStringList ReservedPropertyNames{ "service", "path", "inter", "connection", "suffix" }; const QMetaObject *mo = this->metaObject(); const int count = mo->propertyCount(); for (int i = mo->propertyOffset(); i < count; ++i) { const QMetaProperty &property = mo->property(i); if (!ReservedPropertyNames.contains(property.name())) { p_ptr->m_mapProperties.insert(property.name(), QString()); if (property.hasNotifySignal()) { QMetaObject::connect(this, property.notifySignalIndex(), p_ptr->m_propertySpy, i); } } } const int mcount = mo->methodCount(); for (int i = mo->methodOffset(); i < mcount; ++i) { const QMetaMethod &m = mo->method(i); if (m.methodType() == 2 && m.name().startsWith("on")) { DccDBusSignalCallback *callback = new DccDBusSignalCallback(m, this); p_ptr->m_connection.connect(p_ptr->m_service, p_ptr->m_path, p_ptr->m_interface, m.name().mid(2), callback, SLOT(returnMethod(QDBusMessage))); } } if (!p_ptr->m_mapProperties.isEmpty()) { p_ptr->getAllPropertys(); p_ptr->m_connection.connect(p_ptr->m_service, p_ptr->m_path, PropertiesInterface, PropertiesChanged, { p_ptr->m_interface }, QString(), p_ptr, SLOT(onPropertiesChanged(QString, QVariantMap, QStringList))); } } } // namespace dccV25 ================================================ FILE: src/dde-control-center/plugin/dccquickdbusinterface.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCQUICKDBUSINTERFACE_H #define DCCQUICKDBUSINTERFACE_H #include #include #include namespace dccV25 { class DccQuickDBusInterface : public QObject, public QQmlParserStatus { Q_OBJECT QML_NAMED_ELEMENT(DccDBusInterface) Q_PROPERTY(QString service READ service WRITE setService NOTIFY serviceChanged) Q_PROPERTY(QString path READ path WRITE setPath NOTIFY pathChanged) Q_PROPERTY(QString inter READ interface WRITE setInterface NOTIFY interfaceChanged) Q_PROPERTY(BusType connection READ connection WRITE setConnection NOTIFY connectionChanged) Q_PROPERTY(QString suffix READ suffix WRITE setSuffix NOTIFY suffixChanged) public: explicit DccQuickDBusInterface(QObject *parent = nullptr); ~DccQuickDBusInterface() override; enum BusType { SessionBus, SystemBus, }; Q_ENUM(BusType) QString service() const; void setService(const QString &service); QString path() const; void setPath(const QString &path); QString interface() const; void setInterface(const QString &interface); BusType connection() const; void setConnection(const BusType &connection); // 属性前缀,防止属性与关键字冲突 QString suffix() const; void setSuffix(const QString &suffix); public Q_SLOTS: bool callWithCallback(const QString &method, const QList &args, const QJSValue member, const QJSValue errorSlot); Q_SIGNALS: void serviceChanged(const QString &service); void pathChanged(const QString &path); void interfaceChanged(const QString &interface); void connectionChanged(const BusType &connection); void suffixChanged(const QString &suffix); protected: void connectNotify(const QMetaMethod &signal) override; void disconnectNotify(const QMetaMethod &signal) override; void classBegin() override; void componentComplete() override; protected: class Private; Private *p_ptr; }; } // namespace dccV25 #endif // DCCQUICKDBUSINTERFACE_H ================================================ FILE: src/dde-control-center/plugin/dccquickdbusinterface_p.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCQUICKDBUSINTERFACE_P_H #define DCCQUICKDBUSINTERFACE_P_H #include "dccquickdbusinterface.h" #include #include #include namespace dccV25 { class DBusPropertySignalSpy; class DccQuickDBusCallback : public QObject { Q_OBJECT public: explicit DccQuickDBusCallback(QJSValue member, QJSValue errorSlot, QObject *parent); ~DccQuickDBusCallback() override; static QVariant toValue(const QVariant &value); public Q_SLOTS: void returnMethod(const QDBusMessage &msg); void errorMethod(const QDBusError &error, const QDBusMessage &msg); protected: QJSValue m_member; QJSValue m_errorSlot; }; class DccDBusSignalCallback : public QObject { Q_OBJECT public: explicit DccDBusSignalCallback(const QMetaMethod &method, QObject *parent); ~DccDBusSignalCallback() override; public Q_SLOTS: void returnMethod(const QDBusMessage &msg); protected: QMetaMethod m_method; QObject *m_target; }; class DccQuickDBusInterface::Private : public QObject { Q_OBJECT public: explicit Private(DccQuickDBusInterface *q); ~Private() override; void getAllPropertys(); private Q_SLOTS: void onAllProperties(const QVariantMap &changedProperties); void onGetPropertiesErr(const QDBusError &e); void onPropertiesChanged(const QString &interfaceName, const QVariantMap &changedProperties, const QStringList &invalidatedProperties); QVariant getProperty(const QString &propname); void setProperty(const QString &propname, const QVariant &value); void onPropertySpy(const char *propname, const QVariant &value); public: DccQuickDBusInterface *q_ptr; DBusPropertySignalSpy *m_propertySpy; QString m_service; QString m_path; QString m_interface; QMap m_mapProperties; // 保存属性名对照表,qml要求属性名首字母小写 QString m_suffix; BusType m_connectionType; QDBusConnection m_connection; QVariantMap m_propertyMap; // DBus属性值 friend class DccQuickDBusCallback; }; } // namespace dccV25 #endif // DCCQUICKDBUSINTERFACE_P_H ================================================ FILE: src/dde-control-center/plugin/dccrepeater.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dccrepeater.h" #include "dccobject_p.h" #include #include #include // 参考QQuickRepeater实现,非必须不修改 namespace dccV25 { class DccRepeaterPrivate { public: DccRepeaterPrivate(DccRepeater *qq) : q_ptr(qq) , model(nullptr) , ownModel(false) , dataSourceIsObject(false) , delegateValidated(false) , itemCount(0) { } ~DccRepeaterPrivate() { if (ownModel) delete model; } void requestItems() { if (!model) return; for (int i = 0; i < itemCount; i++) { QObject *object = model->object(i, QQmlIncubator::AsynchronousIfNested); if (object) model->release(object); } } public: DccRepeater *q_ptr = nullptr; QPointer model; QVariant dataSource; QPointer dataSourceAsObject; bool ownModel : 1; bool dataSourceIsObject : 1; bool delegateValidated : 1; int itemCount = 0; QVector > deletables; Q_DECLARE_PUBLIC(DccRepeater) }; DccRepeater::DccRepeater(QObject *parent) : DccObject(parent) , d_ptr(new DccRepeaterPrivate(this)) { } DccRepeater::~DccRepeater() { Q_D(DccRepeater); if (d->model) { // clang-format off qmlobject_disconnect(d->model, QQmlInstanceModel, SIGNAL(modelUpdated(QQmlChangeSet,bool)), this, DccRepeater, SLOT(modelUpdated(QQmlChangeSet,bool))); qmlobject_disconnect(d->model, QQmlInstanceModel, SIGNAL(createdItem(int,QObject*)), this, DccRepeater, SLOT(createdItem(int,QObject*))); qmlobject_disconnect(d->model, QQmlInstanceModel, SIGNAL(initItem(int,QObject*)), this, DccRepeater, SLOT(initItem(int,QObject*))); // clang-format on } } QVariant DccRepeater::model() const { Q_D(const DccRepeater); if (d->dataSourceIsObject) { QObject *o = d->dataSourceAsObject; return QVariant::fromValue(o); } return d->dataSource; } void DccRepeater::setModel(const QVariant &m) { Q_D(DccRepeater); QVariant model = m; if (model.userType() == qMetaTypeId()) model = model.value().toVariant(); if (d->dataSource == model) return; clear(); if (d->model) { // clang-format off qmlobject_disconnect(d->model, QQmlInstanceModel, SIGNAL(modelUpdated(QQmlChangeSet,bool)), this, DccRepeater, SLOT(modelUpdated(QQmlChangeSet,bool))); qmlobject_disconnect(d->model, QQmlInstanceModel, SIGNAL(createdItem(int,QObject*)), this, DccRepeater, SLOT(createdItem(int,QObject*))); qmlobject_disconnect(d->model, QQmlInstanceModel, SIGNAL(initItem(int,QObject*)), this, DccRepeater, SLOT(initItem(int,QObject*))); // clang-format on } d->dataSource = model; QObject *object = qvariant_cast(model); d->dataSourceAsObject = object; d->dataSourceIsObject = object != nullptr; QQmlInstanceModel *vim = nullptr; if (object && (vim = qobject_cast(object))) { if (d->ownModel) { delete d->model; d->ownModel = false; } d->model = vim; } else { if (!d->ownModel) { d->model = new QQmlDelegateModel(qmlContext(this)); d->ownModel = true; if (isComponentComplete()) static_cast(d->model.data())->componentComplete(); } if (QQmlDelegateModel *dataModel = qobject_cast(d->model)) { dataModel->setModel(model); } } if (d->model) { // clang-format off qmlobject_connect(d->model, QQmlInstanceModel, SIGNAL(modelUpdated(QQmlChangeSet,bool)), this, DccRepeater, SLOT(modelUpdated(QQmlChangeSet,bool))); qmlobject_connect(d->model, QQmlInstanceModel, SIGNAL(createdItem(int,QObject*)), this, DccRepeater, SLOT(createdItem(int,QObject*))); qmlobject_connect(d->model, QQmlInstanceModel, SIGNAL(initItem(int,QObject*)), this, DccRepeater, SLOT(initItem(int,QObject*))); // clang-format on regenerate(); } Q_EMIT modelChanged(); Q_EMIT countChanged(); } QQmlComponent *DccRepeater::delegate() const { Q_D(const DccRepeater); if (d->model) { if (QQmlDelegateModel *dataModel = qobject_cast(d->model)) return dataModel->delegate(); } return nullptr; } void DccRepeater::setDelegate(QQmlComponent *delegate) { Q_D(DccRepeater); if (QQmlDelegateModel *dataModel = qobject_cast(d->model)) if (delegate == dataModel->delegate()) return; if (!d->ownModel) { d->model = new QQmlDelegateModel(qmlContext(this)); d->ownModel = true; } if (QQmlDelegateModel *dataModel = qobject_cast(d->model)) { dataModel->setDelegate(delegate); regenerate(); Q_EMIT delegateChanged(); d->delegateValidated = false; } } int DccRepeater::count() const { Q_D(const DccRepeater); if (d->model) return d->model->count(); return 0; } void DccRepeater::resetModel() { modelUpdated(QQmlChangeSet(), true); } DccObject *DccRepeater::objectAt(int index) const { Q_D(const DccRepeater); if (index >= 0 && index < d->deletables.size()) return d->deletables[index]; return nullptr; } void DccRepeater::componentComplete() { Q_D(DccRepeater); if (d->model && d->ownModel) static_cast(d->model.data())->componentComplete(); DccObject::componentComplete(); regenerate(); if (d->model && d->model->count()) Q_EMIT countChanged(); } bool DccRepeater::event(QEvent *event) { if (event->type() == QEvent::ParentChange && parent()) { regenerate(); } return DccObject::event(event); } void DccRepeater::clear() { Q_D(DccRepeater); bool complete = isComponentComplete(); if (d->model) { for (int i = d->deletables.size() - 1; i >= 0; --i) { if (DccObject *obj = d->deletables.at(i)) { if (complete) { // reomve from dccApp DccObject::Private::FromObject(obj)->removeObjectFromParent(); Q_EMIT objRemoved(i, obj); } d->model->release(obj); } } for (DccObject *obj : std::as_const(d->deletables)) { if (obj) obj->setParent(nullptr); } } d->deletables.clear(); d->itemCount = 0; } void DccRepeater::regenerate() { Q_D(DccRepeater); if (!isComponentComplete()) { return; } clear(); if (!d->model || !d->model->count() || !d->model->isValid() || !parent() || !isComponentComplete()) return; d->itemCount = count(); d->deletables.resize(d->itemCount); d->requestItems(); } void DccRepeater::createdItem(int index, QObject *) { Q_D(DccRepeater); QObject *object = d->model->object(index, QQmlIncubator::AsynchronousIfNested); DccObject *dccObj = qmlobject_cast(object); DccObject *targetParent = this; for (QObject *pQObj = this; pQObj; pQObj = pQObj->parent()) { DccObject *pObj = qmlobject_cast(pQObj); if (pObj && !pObj->name().isEmpty()) { targetParent = pObj; break; } } DccObject::Private::FromObject(targetParent)->addObject(dccObj); Q_EMIT objAdded(index, object); } void DccRepeater::initItem(int index, QObject *object) { Q_D(DccRepeater); if (index >= d->deletables.size()) { // this can happen when Package is used // calling regenerate does too much work, all we need is to call resize // so that d->deletables[index] = item below works d->deletables.resize(d->model->count() + 1); } DccObject *dccObj = qmlobject_cast(object); if (!d->deletables.at(index)) { if (!dccObj) { if (object) { d->model->release(object); if (!d->delegateValidated) { d->delegateValidated = true; QObject *delegate = this->delegate(); qmlWarning(delegate ? delegate : this) << "Delegate must be of `DccObject` type"; } } return; } d->deletables[index] = dccObj; dccObj->setParent(this); } } void DccRepeater::modelUpdated(const QQmlChangeSet &changeSet, bool reset) { Q_D(DccRepeater); if (!isComponentComplete()) { return; } if (reset) { regenerate(); if (changeSet.difference() != 0) Q_EMIT countChanged(); return; } int difference = 0; QHash > > moved; for (const QQmlChangeSet::Change &remove : changeSet.removes()) { int index = qMin(remove.index, d->deletables.size()); int count = qMin(remove.index + remove.count, d->deletables.size()) - index; if (remove.isMove()) { moved.insert(remove.moveId, d->deletables.mid(index, count)); d->deletables.erase(d->deletables.begin() + index, d->deletables.begin() + index + count); } else { while (count--) { DccObject *item = d->deletables.at(index); d->deletables.remove(index); Q_EMIT objRemoved(index, item); if (item) { DccObject::Private::FromObject(item)->removeObjectFromParent(); d->model->release(item); item->setParent(nullptr); } --d->itemCount; } } difference -= remove.count; } for (const QQmlChangeSet::Change &insert : changeSet.inserts()) { int index = qMin(insert.index, d->deletables.size()); if (insert.isMove()) { QVector > items = moved.value(insert.moveId); d->deletables = d->deletables.mid(0, index) + items + d->deletables.mid(index); } else { for (int i = 0; i < insert.count; ++i) { int modelIndex = index + i; ++d->itemCount; d->deletables.insert(modelIndex, nullptr); QObject *object = d->model->object(modelIndex, QQmlIncubator::AsynchronousIfNested); if (object) d->model->release(object); } } difference += insert.count; } if (difference != 0) Q_EMIT countChanged(); } } // namespace dccV25 ================================================ FILE: src/dde-control-center/plugin/dccrepeater.h ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCREPEATER_H #define DCCREPEATER_H #include "dccobject.h" #include #include #include class QQmlChangeSet; namespace dccV25 { class DccRepeaterPrivate; class DccRepeater : public DccObject { Q_OBJECT Q_PROPERTY(QVariant model READ model WRITE setModel NOTIFY modelChanged FINAL) Q_PROPERTY(QQmlComponent *delegate READ delegate WRITE setDelegate NOTIFY delegateChanged FINAL) Q_PROPERTY(int count READ count NOTIFY countChanged FINAL) QML_ELEMENT public: explicit DccRepeater(QObject *parent = nullptr); ~DccRepeater() override; QVariant model() const; void setModel(const QVariant &newModel); QQmlComponent *delegate() const; void setDelegate(QQmlComponent *newDelegate); int count() const; Q_INVOKABLE void resetModel(); Q_INVOKABLE DccObject *objectAt(int index) const; Q_SIGNALS: void modelChanged(); void delegateChanged(); void countChanged(); void objAdded(int index, QObject *obj); void objRemoved(int index, QObject *obj); protected: void clear(); void regenerate(); void componentComplete() override; bool event(QEvent *event) override; private Q_SLOTS: void createdItem(int index, QObject *item); void initItem(int index, QObject *item); void modelUpdated(const QQmlChangeSet &changeSet, bool reset); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), DccRepeater) }; } // namespace dccV25 #endif // DCCREPEATER_H ================================================ FILE: src/dde-control-center/pluginmanager.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "pluginmanager.h" #include "dccfactory.h" #include "dccmanager.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace dccV25 { static Q_LOGGING_CATEGORY(dccLog, "dde.dcc.plugin"); const static QString TranslateReadDir = QStringLiteral(TRANSLATE_READ_DIR); enum PluginStatus { // metaData 0xFF000000 PluginBegin = 0x10000000, PluginEnd = 0x20000000, MetaDataLoad = 0x02000000, MetaDataEnd = 0x04000000, MetaDataErr = 0x08000000, // module 0x00FF0000 ModuleLoad = 0x00010000, ModuleCreate = 0x00020000, ModuleEnd = 0x00400000, ModuleErr = 0x00800000, // data 0x0000FF00 DataBegin = 0x00000100, DataLoad = 0x00000200, DataEnd = 0x00004000, DataErr = 0x00008000, // mainObj 0x000000FF MainObjLoad = 0x00000001, MainObjCreate = 0x00000002, MainObjAdd = 0x00000004, MainObjEnd = 0x00000040, MainObjErr = 0x00000080, PluginErrMask = MetaDataErr | ModuleErr | DataErr | MainObjErr, PluginEndMask = PluginEnd | MetaDataEnd | ModuleEnd | DataEnd | MainObjEnd, }; enum PluginType { T_Unknown = 0, T_V1_0 = 0x01000000, T_V1_1 = 0x02000000, T_V_MASK = 0xFF000000, T_HasMoudule = 0x00000001, T_HasMain = 0x00000002, T_DataMask = 0x00000003, T_ShortMain = 0x00000004, // main模块名为main.qml }; struct PluginData { QString name; QString path; uint type; DccFactory *factory; DccObject *module; DccObject *mainObj; DccObject *soObj; QObject *data; QThread *thread; uint status; PluginData(const QString &_name, const QString &_path) : name(_name) , path(_path) , type(T_Unknown) , factory(nullptr) , module(nullptr) , mainObj(nullptr) , soObj(nullptr) , data(nullptr) , thread(nullptr) , status(PluginBegin) { } inline uint version() { return type & T_V_MASK; } }; class LoadPluginTask : public QRunnable { public: explicit LoadPluginTask(PluginData *data, PluginManager *pManager) : QRunnable() , m_pManager(pManager) , m_data(data) { } protected: void run() override; void createData(); protected: PluginManager *m_pManager; PluginData *m_data; }; void LoadPluginTask::run() { m_data->thread = QThread::currentThread(); createData(); m_data->thread = nullptr; } void LoadPluginTask::createData() { Q_EMIT m_pManager->updatePluginStatus(m_data, DataBegin, "create data begin"); QElapsedTimer timer; timer.start(); QObject *dataObj = nullptr; DccObject *soObj = nullptr; if (m_pManager->isDeleting()) { return; } if (!m_data->factory) { Q_EMIT m_pManager->updatePluginStatus(m_data, DataEnd, ": create data skipped"); return; } else { Q_EMIT m_pManager->updatePluginStatus(m_data, DataLoad, QString()); dataObj = m_data->factory->create(); if (dataObj && dataObj->parent()) { dataObj->setParent(nullptr); } soObj = m_data->factory->dccObject(); if (soObj && soObj->parent()) { soObj->setParent(nullptr); } } if (dataObj) { m_data->data = dataObj; } if (soObj) { m_data->soObj = soObj; } if (m_data->data) { m_data->data->moveToThread(m_pManager->thread()); } if (m_data->soObj) { m_data->soObj->moveToThread(m_pManager->thread()); } Q_EMIT m_pManager->updatePluginStatus(m_data, DataEnd, ": create data finished. elapsed time :" + QString::number(timer.elapsed())); } PluginManager::PluginManager(DccManager *parent) : QObject(parent) , m_manager(parent) , m_rootModule(nullptr) , m_threadPool(nullptr) , m_isDeleting(false) , m_modulePhaseFinished(false) { qRegisterMetaType("PluginData"); connect(this, &PluginManager::pluginEndStatusChanged, this, &PluginManager::loadPlugin); connect(this, &PluginManager::updatePluginStatus, this, &PluginManager::onUpdatePluginStatus); connect(this, &PluginManager::modulePhaseFinished, this, &PluginManager::onModulePhaseFinished); connect(m_manager, &DccManager::hideModuleChanged, this, &PluginManager::onHideModuleChanged); } PluginManager::~PluginManager() { for (auto &&data : m_plugins) { if (data->data && !data->thread) { qCDebug(dccLog()) << "delete so" << data->name; delete data->data; data->data = nullptr; } } cancelLoad(); for (auto &&data : m_plugins) { if (data->data) { qCDebug(dccLog()) << "delete so" << data->name; delete data->data; data->data = nullptr; } data->factory = nullptr; delete data; } m_plugins.clear(); } bool PluginManager::compareVersion(const QString &targetVersion, const QString &baseVersion) { QStringList version1 = baseVersion.split("."); QStringList version2 = targetVersion.split("."); if (version1.size() != version2.size()) { return false; } for (int i = 0; i < version1.size(); ++i) { // 相等判断下一个子版本号 if (version1[i] == version2[i]) continue; // 转成整形比较 if (version1[i].toInt() > version2[i].toInt()) { return false; } else { return true; } } return true; } bool PluginManager::updatePluginType(PluginData *plugin) { QString qrcPath; switch (plugin->type) { case T_V1_1: { if (QFile::exists(plugin->path + "/qmldir")) { plugin->type |= T_HasMoudule | T_HasMain; qrcPath = ":/qt/qml/" + plugin->name; auto paths = m_engine->importPathList(); QDir pluginDir(plugin->path); pluginDir.cdUp(); QString qmlPlugin = pluginDir.absolutePath(); if (!paths.contains(qmlPlugin)) { m_engine->addImportPath(qmlPlugin); } } } break; case T_V1_0: { QDir dir(plugin->path); if (dir.exists("main.qml")) { plugin->type |= T_ShortMain | T_HasMain; } else if (dir.exists(plugin->name + "Main.qml")) { plugin->type |= T_HasMain; } if (dir.exists(plugin->name + ".qml")) { plugin->type |= T_HasMoudule; } qrcPath = plugin->path; } break; default: { // 尝试枚举版本 plugin->type = T_V1_1; if (updatePluginType(plugin)) { return true; } plugin->type = T_V1_0; if (updatePluginType(plugin)) { return true; } plugin->type = T_Unknown; return false; } break; } if (plugin->type & T_DataMask) { QStringList paths = Dtk::Gui::DIconTheme::dciThemeSearchPaths(); paths.append(qrcPath); Dtk::Gui::DIconTheme::setDciThemeSearchPaths(paths); return true; } return false; } bool PluginManager::preparePluginFactory(PluginData *plugin) { if (!plugin || plugin->factory) { return plugin && plugin->factory; } const QString soPath = plugin->path + "/" + plugin->name + ".so"; if (!QFile::exists(soPath)) { return true; } QPluginLoader loader(soPath); if (!loader.load()) { qCWarning(dccLog()) << plugin->name << ": prepare factory load failed" << loader.errorString(); return false; } const auto &meta = loader.metaData(); const auto iid = meta["IID"].toString(); if (iid.isEmpty() || iid != QString(qobject_interface_iid())) { qCWarning(dccLog()) << plugin->name << ": prepare factory iid error" << iid; loader.unload(); return false; } QObject *instance = loader.instance(); if (!instance) { qCWarning(dccLog()) << plugin->name << ": prepare factory instance failed" << loader.errorString(); loader.unload(); return false; } DccFactory *factory = qobject_cast(instance); if (!factory) { qCWarning(dccLog()) << plugin->name << ": prepare factory cast failed"; loader.unload(); return false; } plugin->factory = factory; return true; } bool PluginManager::allModulesFinished() const { for (auto &&plugin : m_plugins) { uint status = plugin->status; bool moduleFinished = (status & ModuleEnd) || (status & ModuleErr) || (status & PluginEnd); if (!moduleFinished) { return false; } } return !m_plugins.isEmpty(); } QThreadPool *PluginManager::threadPool() { if (!m_threadPool) { m_threadPool = new QThreadPool(this); } return m_threadPool; } void PluginManager::loadPlugin(PluginData *plugin) { if (isDeleting()) { return; } if (plugin->status & PluginEnd) { if (loadFinished()) { Q_EMIT loadAllFinished(); cancelLoad(); } } else if (plugin->status & MainObjEnd) { addMainObject(plugin); Q_EMIT updatePluginStatus(plugin, PluginEnd, QString()); } else if ((plugin->status & (DataEnd | MainObjLoad)) == DataEnd) { if (plugin->data) { plugin->data->setParent(this); } if (plugin->soObj) { plugin->soObj->setParent(this); } loadMain(plugin); } else if ((plugin->status & (ModuleEnd | DataBegin)) == ModuleEnd) { if (!m_modulePhaseFinished && allModulesFinished()) { Q_EMIT modulePhaseFinished(); return; } if (m_modulePhaseFinished) { loadPluginData(plugin); } } else if ((plugin->status & (MetaDataEnd | ModuleLoad)) == MetaDataEnd) { if (!preparePluginFactory(plugin)) { Q_EMIT updatePluginStatus(plugin, DataErr | PluginEnd, ": factory preparation failed, plugin skipped"); return; } DccManager::installTranslator(plugin->name); loadModule(plugin); } else { loadMetaData(plugin); } } void PluginManager::onUpdatePluginStatus(PluginData *plugin, uint status, const QString &log) { if (isDeleting()) { return; } uint oldStatus = plugin->status; plugin->status |= status; if (status & PluginErrMask) { qCWarning(dccLog()) << plugin->name << ": status" << QString::number(plugin->status, 16) << log; } else { qCDebug(dccLog()) << plugin->name << ": status" << QString::number(plugin->status, 16) << log; } if ((oldStatus != plugin->status) && (status & PluginEndMask)) { Q_EMIT pluginEndStatusChanged(plugin); } } void PluginManager::loadMetaData(PluginData *plugin) { if (isDeleting()) { return; } updatePluginType(plugin); if (m_manager->hideModule().contains(plugin->name)) { // 跳过隐藏的模块,需要动态加载回来 Q_EMIT updatePluginStatus(plugin, PluginEnd | MetaDataEnd, QString()); return; } // metadata #if 0 // 文件夹有版本信息,不需要用metadata.json判断 const QString metadataPath = plugin->path + "/metadata.json"; QFile metadataFile(metadataPath); if (!metadataFile.open(QIODevice::ReadOnly)) { Q_EMIT updatePluginStatus(plugin, MetaDataErr | PluginEnd, "Couldn't open " + metadataFile.fileName()); return; } QJsonParseError error; const QJsonObject metaData = QJsonDocument::fromJson(metadataFile.readAll()).object(); metadataFile.close(); if (error.error) { Q_EMIT updatePluginStatus(plugin, MetaDataErr | PluginEnd, "error parsing json data:" + error.errorString()); return; } if (!compareVersion(metaData.value("Version").toString(), "1.0")) { Q_EMIT updatePluginStatus(plugin, MetaDataErr | PluginEnd, "plugin's version is too low:" + metaData.value("Version").toString()); return; } #endif Q_EMIT updatePluginStatus(plugin, MetaDataEnd, QString()); } void PluginManager::loadModule(PluginData *plugin) { if (isDeleting()) { return; } if (!(plugin->type & T_HasMoudule)) { Q_EMIT updatePluginStatus(plugin, ModuleErr | ModuleEnd, "module qml not exists"); return; } QQmlComponent *component = new QQmlComponent(m_manager->engine(), m_manager->engine()); switch (plugin->version()) { case T_V1_0: { const QString qmlPath = plugin->path + "/" + plugin->name + ".qml"; Q_EMIT updatePluginStatus(plugin, ModuleLoad, ": load module " + qmlPath); component->loadUrl(qmlPath); } break; case T_V1_1: default: { QString typeName = plugin->name; typeName[0] = typeName[0].toUpper(); Q_EMIT updatePluginStatus(plugin, ModuleLoad, ": load module " + typeName); component->loadFromModule(plugin->name, typeName); } break; } createModule(component, plugin); } void PluginManager::loadPluginData(PluginData *plugin) { if (isDeleting()) { return; } if (plugin->module) { disconnect(plugin->module, nullptr, this, nullptr); if (plugin->module->isVisibleToApp()) { threadPool()->start(new LoadPluginTask(plugin, this)); } else { connect(plugin->module, &DccObject::visibleToAppChanged, this, &PluginManager::onVisibleToAppChanged); Q_EMIT updatePluginStatus(plugin, PluginEnd, QString()); } } else { threadPool()->start(new LoadPluginTask(plugin, this)); } } void PluginManager::loadMain(PluginData *plugin) { if (isDeleting()) { return; } if (!(plugin->type & T_HasMain)) { Q_EMIT updatePluginStatus(plugin, MainObjErr | MainObjEnd, "main qml not exists"); return; } QQmlComponent *component = new QQmlComponent(m_manager->engine(), m_manager->engine()); switch (plugin->version()) { case T_V1_0: { const QString qmlPath = plugin->path + "/" + ((plugin->type & T_ShortMain) ? "main.qml" : plugin->name + "Main.qml"); Q_EMIT updatePluginStatus(plugin, MainObjLoad, ": load Main " + qmlPath); component->loadUrl(qmlPath); } break; case T_V1_1: default: { QString typeName = plugin->name + "Main"; typeName[0] = typeName[0].toUpper(); Q_EMIT updatePluginStatus(plugin, MainObjLoad, ": load Main " + typeName); component->loadFromModule(plugin->name, typeName); } break; } createMain(component, plugin); } void PluginManager::createModule(QQmlComponent *component, PluginData *plugin) { if (isDeleting()) { return; } Q_EMIT updatePluginStatus(plugin, ModuleCreate, "create module"); switch (component->status()) { case QQmlComponent::Ready: { QObject *object = component->create(); component->deleteLater(); if (!object) { Q_EMIT updatePluginStatus(plugin, ModuleErr | ModuleEnd, " component create module object is null:" + component->errorString()); return; } object->setParent(m_rootModule); plugin->module = qobject_cast(object); Q_EMIT updatePluginStatus(plugin, ModuleEnd, "create module finished"); m_manager->addObject(plugin->module); } break; case QQmlComponent::Error: { component->deleteLater(); Q_EMIT updatePluginStatus(plugin, ModuleErr | ModuleEnd, " component create module object error:" + component->errorString()); } break; default: break; } } void PluginManager::createMain(QQmlComponent *component, PluginData *plugin) { if (isDeleting()) { return; } Q_EMIT updatePluginStatus(plugin, MainObjCreate, "create main"); switch (component->status()) { case QQmlComponent::Ready: { QQmlContext *context = new QQmlContext(component->engine()); context->setContextProperties({ { "dccData", QVariant::fromValue(plugin->data) }, { "dccModule", QVariant::fromValue(plugin->module) } }); QObject *object = component->create(context); component->deleteLater(); if (!object) { delete context; Q_EMIT updatePluginStatus(plugin, MainObjErr | MainObjEnd, " component create main object is null:" + component->errorString()); return; } context->setParent(object); object->setParent(plugin->module ? plugin->module : m_rootModule); plugin->mainObj = qobject_cast(object); Q_EMIT updatePluginStatus(plugin, MainObjEnd, ": create main finished"); } break; case QQmlComponent::Error: { Q_EMIT updatePluginStatus(plugin, MainObjErr | MainObjEnd, " component create main object error:" + component->errorString()); component->deleteLater(); } break; default: break; } } void PluginManager::addMainObject(PluginData *plugin) { if (isDeleting()) { return; } Q_EMIT updatePluginStatus(plugin, MainObjAdd, "add main object"); if (!plugin->mainObj) { plugin->mainObj = plugin->soObj; } if (plugin->mainObj) { if (plugin->mainObj->name().isEmpty() || (plugin->module && plugin->mainObj->name() == plugin->module->name())) { // 插件根项name为空时,关联{name}.qml,不加树 if (plugin->module) { QQmlComponent *page = plugin->mainObj->page(); if (page) { plugin->module->setPage(page); } connect(plugin->mainObj, &DccObject::pageChanged, plugin->module, &DccObject::setPage); connect(plugin->mainObj, &DccObject::displayNameChanged, plugin->module, &DccObject::setDisplayName); connect(plugin->mainObj, &DccObject::descriptionChanged, plugin->module, &DccObject::setDescription); connect(plugin->mainObj, &DccObject::iconChanged, plugin->module, &DccObject::setIcon); connect(plugin->mainObj, &DccObject::badgeChanged, plugin->module, &DccObject::setBadge); connect(plugin->mainObj, &DccObject::visibleChanged, plugin->module, &DccObject::setVisible); connect(plugin->mainObj, &DccObject::active, plugin->module, &DccObject::active); connect(plugin->mainObj, &DccObject::deactive, plugin->module, &DccObject::deactive); } } else { } } else { Q_EMIT updatePluginStatus(plugin, MainObjErr, "The plugin isn't main DccObject"); } if (plugin->mainObj) { Q_EMIT addObject(plugin->mainObj); } if (plugin->soObj) { Q_EMIT addObject(plugin->soObj); } Q_EMIT updatePluginStatus(plugin, MainObjEnd | PluginEnd, "add main object finished"); } void PluginManager::onModulePhaseFinished() { if (isDeleting()) { return; } m_modulePhaseFinished = true; for (auto &&plugin : m_plugins) { if (plugin->status & ModuleEnd) { loadPlugin(plugin); } } } void PluginManager::onHideModuleChanged(const QSet &hideModule) { for (auto &&plugin : m_plugins) { if ((plugin->status & PluginEnd) && (((plugin->status & (MetaDataEnd | MetaDataErr | ModuleLoad)) == MetaDataEnd) && (!hideModule.contains(plugin->name)))) { // 加载完成,没检查MetaData也没错误,不在hideModule中,则需要重新加载 plugin->status &= ~PluginEnd; loadPlugin(plugin); } } } void PluginManager::onVisibleToAppChanged(bool visibleToApp) { if (!visibleToApp) { return; } DccObject *obj = qobject_cast(sender()); if (!obj) { return; } for (auto &&plugin : m_plugins) { if (plugin->module == obj && (plugin->status & PluginEnd) && (!(plugin->status & (DataEnd | DataErr)))) { // 加载完成,没检查MetaData也没错误,不在hideModule中,则需要重新加载 plugin->status &= ~PluginEnd; loadPlugin(plugin); } } } void PluginManager::loadModules(DccObject *root, bool async, const QStringList &dirs, QQmlEngine *engine) { Q_UNUSED(async) if (!root) return; m_rootModule = root; qCDebug(dccLog()) << "plugin dir:" << dirs; m_engine = engine; QFileInfoList pluginList; for (const auto &dir : dirs) { QDir plugindir(dir); if (plugindir.exists()) { if (!plugindir.isEmpty(QDir::Files)) { pluginList += QFileInfo(plugindir.absolutePath()); } pluginList += plugindir.entryInfoList(QDir::Dirs | QDir::NoDotAndDotDot); } } const QStringList groupPlugins({ "system", "device" }); // 优先加载只是组的插件 for (auto &lib : pluginList) { const QString &filepath = lib.absoluteFilePath(); auto filename = lib.fileName(); PluginData *plugin = new PluginData(lib.baseName(), filepath); if (filepath.contains("_v1.1")) { plugin->type = T_V1_1; } else if (filepath.contains("_v1.0")) { plugin->type = T_V1_0; } else { plugin->type = T_Unknown; } if (groupPlugins.contains(filename)) { m_plugins.prepend(plugin); } else { m_plugins.append(plugin); } } for (const auto &plugin : m_plugins) { loadPlugin(plugin); } } void PluginManager::cancelLoad() { if (m_threadPool) { m_threadPool->clear(); // 等待所有正在运行的任务完成,避免析构时的竞态条件 m_threadPool->waitForDone(); for (auto &&plugin : m_plugins) { if (plugin->thread) { qCWarning(dccLog()) << plugin->name << ": status" << QString::number(plugin->status, 16) << "thread exit timeout"; } } qCWarning(dccLog()) << "delete threadPool"; delete m_threadPool; qCWarning(dccLog()) << "delete threadPool finish"; m_threadPool = nullptr; } } bool PluginManager::loadFinished() const { uint status = PluginEnd; for (auto &&plugin : m_plugins) { status &= plugin->status; } return (status & PluginEnd) && (!m_plugins.isEmpty()); } void PluginManager::beginDelete() { m_isDeleting = true; } }; // namespace dccV25 Q_DECLARE_METATYPE(dccV25::PluginData *) ================================================ FILE: src/dde-control-center/pluginmanager.h ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include class QQmlComponent; class QThreadPool; namespace dccV25 { class DccObject; class DccManager; struct PluginData; class PluginManager : public QObject { Q_OBJECT public: explicit PluginManager(DccManager *parent); ~PluginManager(); void loadModules(DccObject *root, bool async, const QStringList &dirs, QQmlEngine *engine); bool loadFinished() const; void beginDelete(); inline bool isDeleting() const { return m_isDeleting; } public Q_SLOTS: void cancelLoad(); Q_SIGNALS: void addObject(DccObject *obj); void loadAllFinished(); void modulePhaseFinished(); void pluginEndStatusChanged(PluginData *plugin); void updatePluginStatus(PluginData *plugin, uint status, const QString &log); private: bool compareVersion(const QString &targetVersion, const QString &baseVersion); bool updatePluginType(PluginData *plugin); bool preparePluginFactory(PluginData *plugin); bool allModulesFinished() const; QThreadPool *threadPool(); private Q_SLOTS: void loadPlugin(PluginData *plugin); void loadMetaData(PluginData *plugin); void loadModule(PluginData *plugin); void loadPluginData(PluginData *plugin); void loadMain(PluginData *plugin); void createModule(QQmlComponent *component, PluginData *plugin); void createMain(QQmlComponent *component, PluginData *plugin); void addMainObject(PluginData *plugin); void onModulePhaseFinished(); void onHideModuleChanged(const QSet &hideModule); void onVisibleToAppChanged(bool visibleToApp); void onUpdatePluginStatus(PluginData *plugin, uint status, const QString &log); private: DccManager *m_manager; QList m_plugins; // cache for other plugin DccObject *m_rootModule; // root module from MainWindow QThreadPool *m_threadPool; bool m_isDeleting; bool m_modulePhaseFinished; QQmlEngine *m_engine; }; } // namespace dccV25 ================================================ FILE: src/dde-control-center/qrc/dcc.qrc ================================================ icons/dcc_nav_accounts_42px.svg icons/dcc_nav_accounts_84px.svg icons/dcc_nav_mouse_42px.svg icons/dcc_nav_mouse_84px.svg icons/dcc_nav_notification_42px.svg icons/dcc_nav_notification_84px.svg icons/dcc_nav_personalization_42px.svg icons/dcc_nav_personalization_84px.svg icons/dcc_nav_power_42px.svg icons/dcc_nav_power_84px.svg icons/dcc_nav_privacy_42px.svg icons/dcc_nav_privacy_84px.svg icons/dcc_nav_sound_42px.svg icons/dcc_nav_sound_84px.svg icons/dcc_nav_systeminfo_42px.svg icons/dcc_nav_systeminfo_84px.svg icons/dcc_nav_touchscreen_42px.svg icons/dcc_nav_touchscreen_84px.svg icons/dcc_nav_update_42px.svg icons/dcc_nav_update_84px.svg icons/dcc_nav_wacom_42px.svg icons/dcc_nav_wacom_84px.svg icons/dcc_none_dark.svg icons/dcc_none_light.svg icons/dcc_privacy_policy_32px.svg icons/dcc_protocol_32px.svg icons/dcc_safe_update.svg icons/dcc_unknown_update.svg icons/dcc_using_electric_32px.svg icons/dcc_version_32px.svg icons/dcc_volume1_32px.svg icons/dcc_volume2_32px.svg icons/dcc_volume3_32px.svg icons/dcc_system_update_48px.svg icons/dcc_nav_datetime_42px.svg icons/dcc_nav_datetime_84px.svg ================================================ FILE: src/dde-control-center/searchmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "searchmodel.h" #include "dccobject.h" #include "dccobject_p.h" #include #include #include namespace dccV25 { struct SearchData { QString display; QString text; QString plainText; QString url; QList searchTexts; const DccObject *obj; const DccObject *ancestors; QList weight; unsigned int matchScore; // 匹配度,越小匹配度越高,排序越靠前 explicit SearchData(const DccObject *o) : obj(o) , matchScore(0) { ancestors = o; while (ancestors) { weight.prepend(ancestors->weight()); const DccObject *objParent = DccObject::Private::FromObject(ancestors)->getParent(); if (!objParent || objParent->name() == "root") { break; } ancestors = objParent; } } inline const QString sourceText() const { return text.isEmpty() ? obj->displayName() : text; } inline const QString sourceUrl() const { return url.isEmpty() ? obj->parentName() + "/" + obj->name() : url; } }; ////////////////////////////////////////////////////// class SearchSourceModel : public QAbstractItemModel { public: explicit SearchSourceModel(QObject *parent = nullptr); ~SearchSourceModel() override; void addSearchData(DccObject *obj, const QString &text, const QString &url); void removeSearchData(const DccObject *obj, const QString &text); protected: void addObject(DccObject *obj, const QString &text, const QString &url); // Basic functionality: QModelIndex index(int row, int column, const QModelIndex &parentIndex = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; private: QList m_data; QTextDocument m_doc; }; SearchSourceModel::SearchSourceModel(QObject *parent) : QAbstractItemModel(parent) { } SearchSourceModel::~SearchSourceModel() { qDeleteAll(m_data); } void SearchSourceModel::addSearchData(DccObject *obj, const QString &text, const QString &url) { if (!obj) { return; } addObject(obj, text, url); if (text.isEmpty() && url.isEmpty()) { QVector objs(obj->getChildren()); while (!objs.isEmpty()) { DccObject *o = objs.takeFirst(); addObject(o, QString(), QString()); objs.append(o->getChildren()); } } } void SearchSourceModel::removeSearchData(const DccObject *obj, const QString &text) { if (!obj) { return; } auto beginIt = m_data.begin(); for (auto it = beginIt; it != m_data.end();) { if ((*it)->obj == obj && (text.isEmpty() || (*it)->text == text)) { int i = it - beginIt; beginRemoveRows(QModelIndex(), i, i); delete (*it); it = m_data.erase(it); endRemoveRows(); } else { ++it; } } } void SearchSourceModel::addObject(DccObject *obj, const QString &text, const QString &url) { if (!obj || !obj->canSearch()) { return; } m_doc.setHtml(text.isEmpty() ? obj->displayName() : text); const QString &sText = m_doc.toPlainText().toLower(); if (sText.isEmpty()) { return; } SearchData *data = new SearchData(obj); data->text = sText; data->url = url; bool ok = false; for (auto &&c : sText) { data->searchTexts << Dtk::Core::pinyin(c, Dtk::Core::TS_NoneTone, &ok); } if (!ok) { data->searchTexts.clear(); } // 排序规则不会变,添加时排序,避免在显示时处理 int index = 0; bool findOk = false; for (auto d : m_data) { for (int i = 0; i < d->weight.size() && i < data->weight.size(); ++i) { if (d->weight.at(i) < data->weight.at(i)) { break; } else if (d->weight.at(i) > data->weight.at(i)) { findOk = true; break; } } if (findOk) { break; } index++; } beginInsertRows(QModelIndex(), index, index); m_data.insert(index, data); endInsertRows(); } QModelIndex SearchSourceModel::index(int row, int column, const QModelIndex &) const { if (row < 0 || row >= rowCount()) { return QModelIndex(); } return createIndex(row, column); } QModelIndex SearchSourceModel::parent(const QModelIndex &) const { return QModelIndex(); } int SearchSourceModel::rowCount(const QModelIndex &) const { return m_data.size(); } int SearchSourceModel::columnCount(const QModelIndex &) const { return 1; } QVariant SearchSourceModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) { return QVariant(); } int i = index.row(); if (i < 0 || i >= m_data.size()) { return QVariant(); } const SearchData *data = m_data.at(i); switch (role) { case Qt::DisplayRole: return data->display.isEmpty() ? data->sourceText() : data->display; case Qt::DecorationRole: { return data->ancestors->icon(); } break; case SearchModel::SearchPlainTextRole: return data->plainText; case SearchModel::SearchDataRole: return QVariant::fromValue(data); case SearchModel::SearchUrlRole: return data->sourceUrl() + "?indicator=true"; case SearchModel::SearchTextRole: return data->sourceText(); case SearchModel::SearchWeightRole: return QVariant::fromValue(data->weight); case SearchModel::SearchMatchScoreRole: return QVariant::fromValue(data->matchScore); default: break; } return QVariant(); } bool SearchSourceModel::setData(const QModelIndex &index, const QVariant &value, int role) { int i = index.row(); if (i < 0 || i >= m_data.size()) { return false; } SearchData *data = m_data.at(i); switch (role) { case Qt::DisplayRole: case Qt::EditRole: { const QString &v = value.toString(); if (v != data->display) { data->display = value.toString(); } return true; } case SearchModel::SearchPlainTextRole: data->plainText = value.toString(); return true; case SearchModel::SearchMatchScoreRole: data->matchScore = value.toUInt(); return true; default: break; } return false; } ////////////////////////////////////////////////////// SearchModel::SearchModel(QObject *parent) : QSortFilterProxyModel(parent) , m_timer(new QTimer(this)) { setFilterRole(SearchTextRole); setSortRole(SearchMatchScoreRole); setDynamicSortFilter(false); sort(0); setSourceModel(new SearchSourceModel(this)); connect(m_timer, &QTimer::timeout, this, &SearchModel::doSort); m_timer->setSingleShot(true); m_timer->setInterval(100); } QHash SearchModel::roleNames() const { QHash names = QAbstractItemModel::roleNames(); names[SearchUrlRole] = "url"; names[SearchPlainTextRole] = "plainText"; return names; } void SearchModel::addSearchData(DccObject *obj, const QString &text, const QString &url) { static_cast(sourceModel())->addSearchData(obj, text, url); } void SearchModel::removeSearchData(const DccObject *obj, const QString &text) { static_cast(sourceModel())->removeSearchData(obj, text); } void SearchModel::doSort() { sort(0); } bool SearchModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { QModelIndex sourceIndex = sourceModel()->index(source_row, 0, source_parent); if (!sourceIndex.isValid()) return false; const SearchData *data = sourceModel()->data(sourceIndex, SearchDataRole).value(); QString text = data->sourceText(); QString filterText = filterRegularExpression().pattern().trimmed(); if (filterText.isEmpty()) { return false; } filterText = filterText.toLower(); QList findIndex; int from = 0; bool findOk = true; for (QChar &c : filterText) { from = text.indexOf(c, from, Qt::CaseInsensitive); if (from < 0) { findOk = false; break; } findIndex.append(from++); } if (!findOk) { bool isAllLetter = true; for (QChar &c : filterText) { isAllLetter &= c.unicode() < 127; } if (isAllLetter) { QList texts = data->searchTexts; findIndex.clear(); int wordsIndex = -1; auto cIt = filterText.cbegin(); for (auto &&words : texts) { ++wordsIndex; for (auto &&py : words) { from = 0; while (from < py.size() && cIt != filterText.cend() && py.at(from) == (*cIt)) { ++cIt; ++from; } if (from > 0) { findIndex.append(wordsIndex); break; } } if (cIt == filterText.cend()) { findOk = true; break; } } } if (!findOk) { return false; } } unsigned int leftCnt = 0; // 开头未匹配字符 unsigned int midCnt = 0; // 中间未匹配字符,相关度影响最大 unsigned int rightCnt = 0; // 末尾未匹配字符,相关度影响最小 if (!findIndex.isEmpty()) { leftCnt = findIndex.first(); rightCnt = text.length() - findIndex.last() - 1; for (auto it = findIndex.begin() + 1; it != findIndex.end(); ++it) { midCnt = midCnt * 10 + ((*it) - (*(it - 1))) - 1; } if (midCnt > 0x0000FFFF) { midCnt = 0x0000FFFF; } } unsigned int matchScore = rightCnt + leftCnt * 0x00000100 + midCnt * 0x00010000; QString display; int i = 0; bool noEnd = false; for (auto &&sub : text) { if (!findIndex.isEmpty() && i == findIndex.first()) { if (!noEnd) { display.append(""); noEnd = true; } display.append(sub); findIndex.takeFirst(); } else { if (noEnd) { display.append(""); noEnd = false; } display.append(sub); } ++i; } if (noEnd) { display.append(""); } QStringList displays(display); const DccObject *p = DccObject::Private::FromObject(data->obj)->getParent(); while (p && p->name() != "root") { if (!p->displayName().isEmpty()) { displays.prepend(p->displayName()); } p = DccObject::Private::FromObject(p)->getParent(); } sourceModel()->setData(sourceIndex, displays.join("/")); displays.takeLast(); displays.append(text); sourceModel()->setData(sourceIndex, displays.join("/"), SearchPlainTextRole); sourceModel()->setData(sourceIndex, matchScore, SearchMatchScoreRole); auto currentIndex = mapFromSource(sourceIndex); if (currentIndex.isValid()) { Q_EMIT const_cast(this)->dataChanged(currentIndex, currentIndex, { Qt::DisplayRole }); m_timer->start(); // 数据库更新后延时排序并防抖 } return true; } bool SearchModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const { unsigned int left = source_left.data(SearchMatchScoreRole).toUInt(); unsigned int right = source_right.data(SearchMatchScoreRole).toUInt(); if (left == right) { return source_left.data(SearchPlainTextRole).toString() < source_right.data(SearchPlainTextRole).toString(); } return left < right; } } // namespace dccV25 ================================================ FILE: src/dde-control-center/searchmodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef SEARCHMODEL_H #define SEARCHMODEL_H #include #include #include namespace dccV25 { class DccObject; class SearchModel : public QSortFilterProxyModel { Q_OBJECT public: explicit SearchModel(QObject *parent = nullptr); enum DccSearchRole { SearchUrlRole = Qt::UserRole + 300, SearchPlainTextRole, SearchTextRole, SearchWeightRole, SearchDataRole, SearchMatchScoreRole }; QHash roleNames() const override; public Q_SLOTS: void addSearchData(DccObject *obj, const QString &text, const QString &url); void removeSearchData(const DccObject *obj, const QString &text); void doSort(); protected: bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; protected: QTimer *m_timer; }; } // namespace dccV25 #endif // SEARCHMODEL_H ================================================ FILE: src/plugin-accounts/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(pluginName accounts) file(GLOB_RECURSE accounts_SRCS "operation/*.cpp" "operation/*.h" "operation/qrc/${pluginName}.qrc" ) add_library(${pluginName} MODULE ${accounts_SRCS} ) pkg_check_modules(DEEPIN_PW_CHECK REQUIRED libdeepin_pw_check) find_package(PolkitQt6-1) set(accounts_Libraries ${DCC_FRAME_Library} ${QT_NS}::DBus ${DTK_NS}::Core ${DTK_NS}::Gui ${QT_NS}::Concurrent PolkitQt6-1::Agent ${DEEPIN_PW_CHECK_LIBRARIES} ) target_link_libraries(${pluginName} PRIVATE ${accounts_Libraries} ) dcc_install_plugin(NAME ${pluginName} TARGET ${pluginName}) ================================================ FILE: src/plugin-accounts/operation/accountlistmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "accountlistmodel.h" #include "accountscontroller.h" using namespace dccV25; AccountListModel::AccountListModel(QObject *parent) : QAbstractListModel(parent) { } void AccountListModel::reset() { beginResetModel(); endResetModel(); } int AccountListModel::rowCount(const QModelIndex &) const { AccountsController *controller = dynamic_cast(parent()); if (!controller) return 0; return controller->userIdList().count(); } QVariant AccountListModel::data(const QModelIndex &index, int role) const { AccountsController *controller = dynamic_cast(parent()); if (!controller) return QVariant(); const QStringList &ids = controller->userIdList(); const QString &id = ids.value(index.row()); QString name = controller->fullName(id); if (name.isEmpty()) name = controller->userName(id); switch (role) { case Qt::DisplayRole: return name; case UserIdRole: return id; case UserTypeRole: return controller->userTypeName(id); case AvatarRole: return controller->avatar(id); case OnlineRole: return controller->isOnline(id); default: break; } return QVariant(); } QHash AccountListModel::roleNames() const { auto names = QAbstractListModel::roleNames(); names[UserIdRole] = "userId"; names[UserTypeRole] = "userType"; names[AvatarRole] = "avatar"; names[OnlineRole] = "online"; return names; } ////////////////// /// GroupListModel GroupListModel::GroupListModel(const QString &id, QObject *parent) :QAbstractListModel(parent) , m_userId(id) { AccountsController *controller = dynamic_cast(parent); if (controller) { m_groups = controller->groups(m_userId); connect(controller, &AccountsController::groupsUpdateFailed, this, [this](const QString &groupName) { int idx = m_groups.indexOf(groupName); if (idx > 0) Q_EMIT dataChanged(index(idx), index(idx)); }); connect(controller, &AccountsController::groupsChanged, this, [this, controller](const QString &userId, const QStringList &) { if (userId == m_userId) updateGroups(controller->groups(userId)); }); connect(controller, &AccountsController::groupsUpdate, this, [this, controller]() { updateGroups(controller->groups(m_userId)); }); connect(controller, &AccountsController::requestCreateGroup, this, [this, controller](const QString &userId) { if (userId != m_userId) return; if (m_groups.count() > 1 && m_groups.last().isEmpty()) return; m_isCreatingGroup = true; int index = m_groups.count(); beginInsertRows(QModelIndex(), index, index); m_groups << ""; endInsertRows(); Q_EMIT groupsUpdated(); }); connect(controller, &AccountsController::requestClearEmptyGroup, this, [this, controller](const QString &userId) { if (userId != m_userId) return; if (m_groups.isEmpty()) return; if (!m_groups.last().isEmpty()) return; int index = m_groups.count() - 1; beginRemoveRows(QModelIndex(), index, index); m_groups.removeLast(); endRemoveRows(); }); } } void GroupListModel::setUserId(const QString &id) { if (m_userId == id) return; AccountsController *controller = dynamic_cast(parent()); if (!controller) return; m_userId = id; updateGroups(controller->groups(id)); } void GroupListModel::updateGroups(const QStringList &groups) { if (m_groups == groups) return; beginResetModel(); m_groups = groups; endResetModel(); Q_EMIT groupsUpdated(); } int GroupListModel::rowCount(const QModelIndex &) const { if (m_userId.isEmpty()) return 0; return m_groups.count(); } QVariant GroupListModel::data(const QModelIndex &index, int role) const { AccountsController *controller = dynamic_cast(parent()); if (!controller) return QVariant(); const QString groupName = m_groups.value(index.row()); switch (role) { case Qt::DisplayRole: return groupName; case UserIdRole: return m_userId; case EditAbleRole: return controller->groupEditAble(m_userId, groupName); case EnableRole: return controller->groupEnabled(m_userId, groupName); default: break; } return QVariant(); } QHash GroupListModel::roleNames() const { auto names = QAbstractListModel::roleNames(); names[UserIdRole] = "userId"; names[EditAbleRole] = "groupEditAble"; names[EnableRole] = "groupEnabled"; return names; } ================================================ FILE: src/plugin-accounts/operation/accountlistmodel.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef ACCOUNTLISTMODEL_H #define ACCOUNTLISTMODEL_H #include namespace dccV25 { class AccountListModel : public QAbstractListModel { public: explicit AccountListModel(QObject *parent = nullptr); enum AccountListRole { UserIdRole = Qt::UserRole + 1, UserTypeRole, AvatarRole, OnlineRole }; public: void reset(); virtual int rowCount(const QModelIndex &parent) const override; virtual QVariant data(const QModelIndex &index, int role) const override; virtual QHash roleNames() const override; }; class GroupListModel : public QAbstractListModel { Q_OBJECT Q_PROPERTY(bool isCreatingGroup READ isCreatingGroup WRITE setCreatingGroup) public: explicit GroupListModel(const QString &id, QObject *parent = nullptr); enum GroupListRole { UserIdRole = Qt::UserRole + 1, EditAbleRole, EnableRole }; public: inline QString userId() const { return m_userId; } void setUserId(const QString &id); void updateGroups(const QStringList &groups); virtual int rowCount(const QModelIndex &parent) const override; virtual QVariant data(const QModelIndex &index, int role) const override; virtual QHash roleNames() const override; bool isCreatingGroup() const { return m_isCreatingGroup; } Q_INVOKABLE void setCreatingGroup(const bool &isCreatingGroup) { m_isCreatingGroup = isCreatingGroup; } signals: void groupsUpdated(); private: QString m_userId; QStringList m_groups; bool m_isCreatingGroup = false; }; } #endif // ACCOUNTLISTMODEL_H ================================================ FILE: src/plugin-accounts/operation/accountscontroller.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "accountscontroller.h" #include "pwqualitymanager.h" #include "avatarlistmodel.h" #include "dccfactory.h" #include "accountlistmodel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #define FACEID_NUM 5 #define Faceimg_SIZE 200 DCORE_USE_NAMESPACE namespace dccV25 { DCC_FACTORY_CLASS(AccountsController) static bool isUserGroupName(int gid, const QString &name) { QString groupName; const group *curGroup = getgrgid(static_cast<__gid_t>(gid)); if (nullptr != curGroup && nullptr != curGroup->gr_name) groupName = QString(curGroup->gr_name); return groupName == name; } AccountsController::AccountsController(QObject *parent) : QObject{ parent } { qmlRegisterType("AccountsController", 1, 0, "CreationResult"); m_model = new UserModel(this); m_worker = new AccountsWorker(m_model, this); connect(m_model, &UserModel::userAdded, this, [this]() { Q_EMIT userIdListChanged(); }); connect(m_model, &UserModel::userRemoved, this, [this](User *user) { Q_EMIT userRemoved(user->id()); Q_EMIT userIdListChanged(); }); connect(m_model, &UserModel::avatarChanged, this, &AccountsController::avatarChanged); connect(m_model, &UserModel::autoLoginChanged, this, &AccountsController::autoLoginChanged); connect(m_model, &UserModel::quickLoginChanged, this, &AccountsController::quickLoginChanged); connect(m_model, &UserModel::nopasswdLoginChanged, this, &AccountsController::nopasswdLoginChanged); connect(m_model, &UserModel::groupsChanged, this, [this](const QString &userId, const QStringList &groups) { updateSingleUserGroups(userId); Q_EMIT groupsChanged(userId, groups); }); connect(m_model, &UserModel::passwordModifyFinished, this, &AccountsController::passwordModifyFinished); connect(m_model, &UserModel::userTypeChanged, this, &AccountsController::userTypeChanged); connect(m_model, &UserModel::fullnameChanged, this, &AccountsController::fullnameChanged); connect(m_model, &UserModel::passwordAgeChanged, this, &AccountsController::passwordAgeChanged); connect(m_worker, &AccountsWorker::showSafetyPage, this, &AccountsController::showSafetyPage); connect(m_model, &UserModel::allGroupsChange, this, [this]() { if (!m_isCreatingUser) { updateAllGroups(); } this->groupsUpdate(); }); connect(m_worker, &AccountsWorker::updateGroupFailed, this, &AccountsController::groupsUpdateFailed); connect(m_worker, &AccountsWorker::createGroupFailed, this, [this]() { requestClearEmptyGroup(currentUserId()); }); connect(m_worker, &AccountsWorker::updateGroupFinished, this, [this]() { updateAllGroups(); this->groupsUpdate(); }); connect(m_worker, &AccountsWorker::accountCreationFinished, this, [this](CreationResult *result) { m_isCreatingUser = false; Q_EMIT accountCreationFinished(result->type(), result->message()); if (result->type() == CreationResult::NoError) { QTimer::singleShot(100, this, [this]() { if (!m_model->userList().isEmpty()) { updateSingleUserGroups(m_model->userList().last()->id()); } }); } }); connect(m_model, &UserModel::quickLoginVisibleChanged, this, &AccountsController::quickLoginVisibleChanged); QMetaObject::invokeMethod(m_worker, "active", Qt::QueuedConnection); } AccountsController::~AccountsController() { } QString AccountsController::avatar(const QString &id) const { User *user = m_model->getUser(id); if (!user) return QString(); const QString cur = user->currentAvatar(); if (QFileInfo(cur).isAbsolute()) return QUrl::fromLocalFile(cur).toString(); return cur; } void AccountsController::setAvatar(const QString &id, const QString &url) { if (User *user = m_model->getUser(id)) m_worker->setAvatar(user, QUrl::fromUserInput(url).toLocalFile()); } QStringList AccountsController::avatars(const QString &id, const QString &filter, const QString §ion) { User *user = m_model->getUser(id); if (!user) return {}; if (filter.contains("icons/local")) { QStringList res; const QString addBtn = "add"; const QString cacheDir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); if (!cacheDir.isEmpty()) { const QString avatarsDir = cacheDir + QDir::separator() + "avatars"; QDir dir(avatarsDir); if (dir.exists()) { QStringList files = dir.entryList(QStringList() << "*.png" << "*.jpg" << "*.jpeg" << "*.bmp", QDir::Files, QDir::Time); for (const QString &f : files) { const QString full = dir.absoluteFilePath(f); const QFileInfo fi(full); res << (QUrl::fromLocalFile(full).toString()); } } } res.removeDuplicates(); res.prepend(addBtn); return res; } QStringList res; const auto &list = user->avatars(); std::copy_if(list.begin(), list.end(), std::back_inserter(res), [filter, section](const QString &iconFile) { bool exists = QFileInfo::exists(QUrl(iconFile).toLocalFile()); const QString subPath = section.isEmpty() ? "" : section + "/"; return exists && iconFile.contains(filter + "/" + subPath); }); std::sort(res.begin(), res.end(), [=](const QString &path1, const QString &path2){ return path1 < path2; }); return res; } QString AccountsController::saveCustomAvatar(const QString &id, const QString &tempFile, const QString &originalFile) { User *user = m_model->getUser(id); if (!user) return QString(); return m_worker->saveCustomAvatar(tempFile, originalFile); } void AccountsController::deleteUserIcon(const QString &id, const QString &iconFile) { User *user = m_model->getUser(id); if (!user) return; const QString local = QUrl(iconFile).toLocalFile(); if (local.isEmpty()) return; m_worker->deleteUserIcon(user, local); Q_EMIT avatarChanged(id, user->currentAvatar()); } void AccountsController::cleanupTempPreviewFiles(const QStringList &files) { for (const QString &file : files) { QFile::remove(file); } } QString AccountsController::userName(const QString &id) const { User *user = m_model->getUser(id); return user ? user->name() : QString(); } QString AccountsController::customAvatarFromCache() const { const QString cacheDir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); if (cacheDir.isEmpty()) return QString(); const QString marker = cacheDir + QDir::separator() + "avatars" + QDir::separator() + "current"; QFile mf(marker); if (!mf.exists()) return QString(); if (!mf.open(QIODevice::ReadOnly | QIODevice::Text)) return QString(); const QString fileName = QString::fromUtf8(mf.readAll()).trimmed(); mf.close(); if (fileName.isEmpty()) return QString(); const QString abs = cacheDir + QDir::separator() + "avatars" + QDir::separator() + fileName; QFileInfo fi(abs); if (!fi.exists()) return QString(); return QUrl::fromLocalFile(abs).toString(); } QString AccountsController::fullName(const QString &id) const { User *user = m_model->getUser(id); return user ? user->fullname() : QString(); } void AccountsController::setFullname(const QString &id, const QString &name) { if (User *user = m_model->getUser(id)) if (name.simplified() != user->fullname()) m_worker->setFullname(user, name.simplified()); // 去除空白字符 } int AccountsController::userType(const QString &id) const { User *user = m_model->getUser(id); return user ? user->userType() : 0; } void AccountsController::setUserType(const QString &id, int index) { if (User *user = m_model->getUser(id)) if (index != user->userType()) m_worker->setAdministrator(user, User::Administrator == index); } QString AccountsController::userTypeName(const QString &id) const { auto ut = userTypes(); return ut.value(userType(id)); } bool AccountsController::isSystemAdmin(const User *user) const { if (!user) return false; // 本地管理员账户不一定是等保三级的管理员账户,要区分判断 if (m_model->getIsSecurityHighLever()) return user->securityLever() == SecurityLever::Sysadm; return user->userType() == User::UserType::Administrator; } int AccountsController::adminCount() const { int cnt = 0; // 等保三级系统模式下 if (m_model->getIsSecurityHighLever()) return 1; for (auto user : m_model->userList()) { if (user->userType() == User::UserType::Administrator) cnt++; } return cnt; } void AccountsController::checkPwdLimitLevel(int lvl) { // 企业版控制中心用户创建屏蔽安全中心登录安全的接口需求 if ((DSysInfo::uosEditionType() == DSysInfo::UosEnterprise) || (DSysInfo::uosEditionType() == DSysInfo::UosEnterpriseC)) return ; // needShowSafetyPage m_worker->checkPwdLimitLevel(lvl); } bool AccountsController::isDeleteAble(const QString &id) const { User *editUser = m_model->getUser(id); if (!editUser) return false; User *curLoginUser = m_model->currentUser(); auto isOnlyAdmin = [this, editUser] { // 是最后一个管理员 return isSystemAdmin(editUser) // 是管理员 && adminCount() == 1; // 管理员只有一个 }; if (m_model->getIsSecurityHighLever()) { return curLoginUser && curLoginUser->securityLever() == SecurityLever::Sysadm && !editUser->isCurrentUser(); } return !editUser->isCurrentUser() // 不是当前用户 && !editUser->online() // 未登录 && !isOnlyAdmin(); // 不是最后一个管理员 } bool AccountsController::isAutoLoginVisable() const { return m_model->isAutoLoginVisable(); } bool AccountsController::isQuickLoginVisible() const { return m_model->isQuickLoginVisible(); } bool AccountsController::autoLogin(const QString &id) const { User *user = m_model->getUser(id); return user ? user->autoLogin() : false; } bool AccountsController::quickLogin(const QString &id) const { User *user = m_model->getUser(id); return user ? user->quickLogin() : false; } void AccountsController::setAutoLogin(const QString &id, const bool enable) { if (User *user = m_model->getUser(id)) if (user->autoLogin() != enable) m_worker->setAutoLogin(user, enable); } void AccountsController::setQuickLogin(const QString &id, const bool enable) { if (User *user = m_model->getUser(id)) if (user->quickLogin() != enable) m_worker->setQuickLogin(user, enable); } QString AccountsController::getOtherUserAutoLogin() const { for (auto user : m_model->userList()) { if (user->name() != currentUserName() && user->autoLogin()) { return user->name(); } } return ""; } bool AccountsController::isNoPassWordLoginVisable() const { return m_model->isNoPassWordLoginVisable(); } bool AccountsController::nopasswdLogin(const QString &id) { User *user = m_model->getUser(id); return user ? user->nopasswdLogin() : false; } void AccountsController::setNopasswdLogin(const QString &id, const bool enable) { if (User *user = m_model->getUser(id)) if (user->nopasswdLogin() != enable) m_worker->setNopasswdLogin(user, enable); } bool AccountsController::isOnline(const QString &id) { User *user = m_model->getUser(id); return user ? user->online() : false; } bool AccountsController::needShowGroups() { #ifdef QT_DEBUG // alwayls show groups for test return true; #endif return !DSysInfo::isCommunityEdition(); } QStringList AccountsController::allGroups() const { return m_model->getAllGroups(); } QStringList AccountsController::groups(const QString &id) { if (!needShowGroups()) return QStringList(); if (m_groups.contains(id)) return m_groups.value(id); updateGroups(id); return m_groups.value(id); } void AccountsController::updateGroups(const QString &id) { QStringList ag = allGroups(); QHash containsCache; for (const QString &group : ag) { containsCache[group] = groupContains(id, group); } std::sort(ag.begin(), ag.end(), [&containsCache](const QString &left, const QString &right){ bool isLeftContains = containsCache.value(left); bool isRightContains = containsCache.value(right); if (!(isLeftContains ^ isRightContains)) { // both true or both false return left.compare(right, Qt::CaseInsensitive) < 0; } else { return isLeftContains ? true : false; } }); m_groups[id] = ag; } void AccountsController::updateAllGroups() { if (!m_model) return; QSet existingUserIds; QList userList = m_model->userList(); QStringList allGroupsList = allGroups(); for (const auto user : userList) { QString id = user->id(); existingUserIds.insert(id); QHash containsCache; for (const QString &group : allGroupsList) { containsCache[group] = groupContains(id, group); } QStringList containedGroups; QStringList notContainedGroups; for (const QString &group : allGroupsList) { if (containsCache.value(group)) { containedGroups.append(group); } else { notContainedGroups.append(group); } } std::sort(containedGroups.begin(), containedGroups.end(), [](const QString &a, const QString &b) { return a.compare(b, Qt::CaseInsensitive) < 0; }); std::sort(notContainedGroups.begin(), notContainedGroups.end(), [](const QString &a, const QString &b) { return a.compare(b, Qt::CaseInsensitive) < 0; }); QStringList sortedGroups = containedGroups; sortedGroups.append(notContainedGroups); m_groups[id] = sortedGroups; } QStringList keysToRemove; for (const auto &id : m_groups.keys()) { if (!existingUserIds.contains(id)) { keysToRemove.append(id); } } for (const auto &id : keysToRemove) { m_groups.remove(id); } } void AccountsController::updateSingleUserGroups(const QString &id) { if (!m_model || !m_model->getUser(id)) return; updateGroups(id); } bool AccountsController::groupContains(const QString &id, const QString &name) const { User *user = m_model->getUser(id); if (!user) return false; if (isUserGroupName(user->gid().toInt(), name)) return true; auto presetGroups = user->groups(); return presetGroups.contains(name); } bool AccountsController::groupEnabled(const QString &id, const QString &name) const { User *user = m_model->getUser(id); if (!user) return false; const QString Sudo = "sudo"; const QString SysadmGroup = "sysadm"; const QString SecadmGroup = "secadm"; const QString AudadmGroup = "audadm"; const QList IgoreGroups= {Sudo, "root", SecadmGroup, AudadmGroup}; if (isUserGroupName(user->gid().toInt(), name)) return false; // 对于sysadm组,不管有没有加入等保,都需要将其置灰 if (name == SysadmGroup) { return false; } // 等保三级系统模式下,置灰sudo, root, secadm, audadm组 if (m_model->getIsSecurityHighLever()) { for (auto &group : IgoreGroups) { if (name == group) return false; } } bool ret = (name != Sudo) ? true : false; bool isLastAdmin = adminCount() == 1 && user->userType() == User::Administrator; if (!ret && !user->online() && !isLastAdmin) { ret = true; } return ret; } bool AccountsController::groupEditAble(const QString &id, const QString &name) const { User *user = m_model->getUser(id); if (!user) { return false; } bool ok; int iGid = user->gid().toInt(&ok, 10); if (!ok) return false; if (isUserGroupName(iGid, name)) return false; // gid < 1000 if (m_model->isDisabledGroup(name)) return false; return true; } bool AccountsController::groupExists(const QString &name) const { QStringList existingGroups = allGroups(); return existingGroups.contains(name); } void AccountsController::createGroup(const QString &name) { m_worker->createGroup(name, 0, false); } void AccountsController::deleteGroup(const QString &name) { m_worker->deleteGroup(name); } void AccountsController::modifyGroup(const QString &oldName, const QString &newName) { m_worker->modifyGroup(oldName, newName, 0); } void AccountsController::setGroup(const QString &id, const QString &group, bool on) { if (User *user = m_model->getUser(id)) { QStringList groups = user->groups(); if (on && !groups.contains(group)) { groups.append(group); } else if (!on && groups.contains(group)) { groups.removeOne(group); } else { qWarning() << "setGroups" << user->name() << groups << group << on; return; } m_worker->setGroups(user, groups); } } void AccountsController::addUser(const QVariantMap &info) { m_isCreatingUser = true; const int type = info["type"].toInt(); const QString name = info["name"].toString().simplified(); const QString fullname = info["fullname"].toString().simplified(); const QString pwd = info["pwd"].toString(); const QString pwdRepeat = info["pwdRepeat"].toString(); const QString pwdHint = info["pwdHint"].toString(); User *user = new User(this); m_worker->randomUserIcon(user); user->setName(name.simplified()); user->setFullname(fullname.simplified()); user->setPassword(pwd); user->setRepeatPassword(pwdRepeat); user->setPasswordHint(pwdHint); /* 设置用户组 */ if (type == 1) { user->setUserType(User::UserType::Administrator); } else if (type == 0) { user->setUserType(User::UserType::StandardUser); } else { Q_ASSERT_X(0, __FUNCTION__, "invalide userType " + type); // user->setGroups("custom"); // user->setUserType(User::UserType::StandardUser); } m_worker->createAccount(user); } void AccountsController::removeUser(const QString &id, const bool deleteHome) { if (User *user = m_model->getUser(id)) m_worker->deleteAccount(user, deleteHome); } void AccountsController::setPassword(const QString &id, const QVariantMap &info) { if (User *user = m_model->getUser(id)) { const QString oldPwd = info["oldPwd"].toString(); const QString newPwd = info["pwd"].toString(); const QString pwdRepeat = info["pwdRepeat"].toString(); if (user->isCurrentUser()) m_worker->setPassword(user, oldPwd, newPwd, pwdRepeat); else m_worker->resetPassword(user, newPwd); } } void AccountsController::setPasswordHint(const QString &id, const QString &pwdHint) { if (User *user = m_model->getUser(id)) { if (!pwdHint.simplified().isEmpty()) m_worker->setPasswordHint(user, pwdHint); } } int AccountsController::passwordAge(const QString &id) const { User *user = m_model->getUser(id); qDebug() << "passwordAge" << (user ? user->passwordAge() : -1); return user ? user->passwordAge() : -1; } void AccountsController::setPasswordAge(const QString &id, const int age) { if (User *user = m_model->getUser(id)) { if (user->passwordAge() != age) m_worker->setMaxPasswordAge(user, age); } } QSortFilterProxyModel *AccountsController::avatarFilterModel() { if (m_avatarFilterModel) return m_avatarFilterModel; m_avatarFilterModel = new QSortFilterProxyModel(this); User *user = m_model->currentUser(); AvatarListModel *sourceModel = new AvatarListModel(user, this); m_avatarFilterModel->setSourceModel(sourceModel); m_avatarFilterModel->setFilterCaseSensitivity(Qt::CaseInsensitive); return m_avatarFilterModel; } QAbstractListModel *AccountsController::avatarTypesModel() { if (m_avatarTypesModel) return m_avatarTypesModel; m_avatarTypesModel = new AvatarTypesModel(this); return m_avatarTypesModel; } QAbstractListModel *AccountsController::accountsModel() { if (m_accountsModel) return m_accountsModel; m_accountsModel = new AccountListModel(this); connect(this, &AccountsController::avatarChanged, m_accountsModel, [this](const QString &userId, const QString &) { int idIdx = userIdList().indexOf(userId); if (idIdx < 0) return; auto index = m_accountsModel->index(idIdx); m_accountsModel->dataChanged(index, index, {AccountListModel::AvatarRole}); }); connect(this, &AccountsController::groupsChanged, m_accountsModel, [this](const QString &userId, const QStringList &) { int idIdx = userIdList().indexOf(userId); if (idIdx < 0) return; auto index = m_accountsModel->index(idIdx); m_accountsModel->dataChanged(index, index, {AccountListModel::UserTypeRole}); }); connect(m_model, &UserModel::onlineChanged, m_accountsModel, [this](const QString &userId, const bool&) { int idIdx = userIdList().indexOf(userId); if (idIdx < 0) return; auto index = m_accountsModel->index(idIdx); m_accountsModel->dataChanged(index, index, {AccountListModel::OnlineRole}); emit onlineUserListChanged(); }); connect(this, &AccountsController::userIdListChanged, static_cast(m_accountsModel), &AccountListModel::reset); return m_accountsModel; } QAbstractListModel *AccountsController::groupsModel(const QString &id) { if (m_groupsModel) { static_cast(m_groupsModel)->setUserId(id); return m_groupsModel; } auto groupsModel = new GroupListModel(id, this); m_groupsModel = groupsModel; return m_groupsModel; } int AccountsController::passwordLevel(const QString &pwd) { return PwqualityManager::instance()->GetNewPassWdLevel(pwd); } QString AccountsController::checkUsername(const QString &name) { QString alertMsg; do { if (name.size() < 3 || name.size() > 32) { alertMsg = tr("Username must be between 3 and 32 characters"); break; } QRegularExpression letterOrNum("^[A-Za-z0-9]+"); if (!letterOrNum.match(name).hasMatch()) { alertMsg = tr("The first character must be a letter or number"); break; } QRegularExpression onlyNums("^\\d+$"); if (onlyNums.match(name).hasMatch()) { alertMsg = tr("Your username should not only have numbers"); break; } #define ErrCodeExist 4 // username existed check, not check fullname! // reply ==> (false, "the username existed", 4) QDBusPendingReply reply = m_worker->isUsernameValid(name); if (!reply.argumentAt(0).toBool() && ErrCodeExist == reply.argumentAt(2).toInt()) { alertMsg = tr("The username has been used by other user accounts"); break; } // check fullname QList userList = m_model->userList(); auto ret = std::any_of(userList.begin(), userList.end(), [name](const User * user) { return name == user->fullname(); }); if (ret) { alertMsg = tr("The username has been used by other user accounts"); break; } } while (false); return alertMsg; } QString AccountsController::checkFullname(const QString &name) { QString alertMsg; QString trimmedName = name.simplified(); // 与 setFullname 保持一致,去除首尾空格 do { if (trimmedName.isEmpty()) { break; } if (trimmedName.size() > 32) { alertMsg = tr("The full name is too long"); break; } #define ErrCodeSystemUsed 6 // 欧拉版会自己创建 shutdown 等 root 组账户且不会添加到 userList 中,导致无法重复性算法无效, // 先通过 isUsernameValid 校验这些账户再通过重复性算法校验 // vaild == false && code == 6 是用户名已存在 QDBusPendingReply reply = m_worker->isUsernameValid(trimmedName); if (!reply.argumentAt(0).toBool() && ErrCodeSystemUsed == reply.argumentAt(2).toInt()) { alertMsg = tr("The full name has been used by other user accounts"); break; } QList userList = m_model->userList(); auto ret = std::any_of(userList.begin(), userList.end(), [trimmedName](User *user) { return trimmedName == user->fullname() || trimmedName == user->name(); }); /* 与已有的用户全名和用户名进行重复性校验 */ if (ret) { alertMsg = tr("The full name has been used by other user accounts"); break; } QList groupList = m_model->getAllGroups(); ret = std::any_of(groupList.begin(), groupList.end(), [trimmedName](const QString &group) { return trimmedName == group; }); if (ret) { alertMsg = tr("The full name has been used by other user accounts"); break; } } while (false); return alertMsg; } QString AccountsController::checkPassword(const QString &name, const QString &pwd) { auto error = PwqualityManager::instance()->verifyPassword(name, pwd); if (error != PwqualityManager::ERROR_TYPE::PW_NO_ERR) { QString msg = PwqualityManager::instance()->getErrorTips(error); checkPwdLimitLevel(passwordLevel(pwd)); return msg; } return QString(); } QString AccountsController::checkPasswordSilently(const QString &name, const QString &pwd) { auto error = PwqualityManager::instance()->verifyPassword(name, pwd); if (error != PwqualityManager::ERROR_TYPE::PW_NO_ERR) { return PwqualityManager::instance()->getErrorTips(error); } return QString(); } QVariantMap AccountsController::checkPasswordResult(int code, const QString &msg, const QString &name, const QString &pwd) { if (code == 0) return QVariantMap(); QVariantMap res; // reset password error if (code < 0) { res["pwd"] = QVariant::fromValue(msg); return res; } auto error = PwqualityManager::instance()->verifyPassword(name, pwd); QString errMsg = PwqualityManager::instance()->getErrorTips(error); // new password error if (error != PW_NO_ERR) { res["pwd"] = QVariant::fromValue(errMsg); return res; } // current password error if (msg.startsWith("Current Password: passwd:", Qt::CaseInsensitive)) { res["oldPwd"] = QVariant::fromValue(tr("Wrong password")); return res; } checkPwdLimitLevel(passwordLevel(pwd)); // new password err res["pwd"] = QVariant::fromValue(errMsg); return res; } void AccountsController::showDefender() { m_worker->showDefender(); } void AccountsController::playSystemSound(int soundType) { m_worker->playSystemSound(soundType); } QString AccountsController::currentUserName() const { return m_model->getCurrentUserName(); } QStringList AccountsController::userIdList() const { QStringList ids; for (const auto user : m_model->userList()) { if (user->name() == currentUserName()) continue; ids << user->id(); } return ids; } QStringList AccountsController::onlineUserList() const { return m_model->getOnlineUsers(); } QString AccountsController::currentUserId() const { for (const auto user : m_model->userList()) { if (user->name() == m_model->getCurrentUserName()) return user->id(); } return QString(); } bool AccountsController::curUserIsSysAdmin() const { User *curUser = m_model->currentUser(); if (curUser) return isSystemAdmin(curUser); return false; } QStringList AccountsController::userTypes(bool createUser /* = false*/) const { QStringList types{ tr("Standard User"), tr("Administrator") }; if (createUser && DSysInfo::UosServer == DSysInfo::uosType()) { types << tr("Customized"); } return types; } } // namespace dccV25 #include "accountscontroller.moc" ================================================ FILE: src/plugin-accounts/operation/accountscontroller.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef ACCOUNTSCONTROLLER_H #define ACCOUNTSCONTROLLER_H #include "usermodel.h" #include "accountsworker.h" #include "creationresult.h" #include #include #include #include namespace dccV25 { class AccountsController : public QObject { Q_OBJECT Q_PROPERTY(QString currentUserName READ currentUserName NOTIFY currentUserNameChanged FINAL) Q_PROPERTY(QStringList userIdList READ userIdList NOTIFY userIdListChanged FINAL) Q_PROPERTY(QStringList onlineUserList READ onlineUserList NOTIFY onlineUserListChanged FINAL) Q_PROPERTY(bool isQuickLoginVisible READ isQuickLoginVisible NOTIFY quickLoginVisibleChanged FINAL) public: explicit AccountsController(QObject *parent = nullptr); virtual ~AccountsController(); QString currentUserName() const; QStringList userIdList() const; QStringList onlineUserList() const; public slots: QString currentUserId() const; bool curUserIsSysAdmin() const; QString avatar(const QString &id) const; void setAvatar(const QString &id, const QString &url); QStringList avatars(const QString &id, const QString &filter, const QString §ion); QString saveCustomAvatar(const QString &id, const QString &tempFile, const QString &originalFile = QString()); QString userName(const QString &id) const; QString fullName(const QString &id) const; void setFullname(const QString &id, const QString &name); int userType(const QString &id) const; void setUserType(const QString &id, int index); QString userTypeName(const QString &id) const; QStringList userTypes(bool createUser = false) const; bool isDeleteAble(const QString &id) const; bool isAutoLoginVisable() const; bool autoLogin(const QString &id) const; void setAutoLogin(const QString &id, const bool enable); QString getOtherUserAutoLogin() const; bool isQuickLoginVisible() const; bool quickLogin(const QString &id) const; void setQuickLogin(const QString &id, const bool enable); bool isNoPassWordLoginVisable() const; bool nopasswdLogin(const QString &id); void setNopasswdLogin(const QString &id, const bool enable); bool isOnline(const QString &id); bool needShowGroups(); QStringList allGroups() const; QStringList groups(const QString &id); void updateGroups(const QString &id); void updateAllGroups(); void setGroup(const QString &id, const QString &group, bool on); bool groupContains(const QString &id, const QString &name) const; bool groupEnabled(const QString &id, const QString &name) const; bool groupEditAble(const QString &id, const QString &name) const; bool groupExists(const QString &name) const; void createGroup(const QString &name); void deleteGroup(const QString &name); void modifyGroup(const QString &oldName, const QString &newName); void addUser(const QVariantMap &userInfo); void removeUser(const QString &id, const bool deleteHome); void setPassword(const QString &id, const QVariantMap &info); void setPasswordHint(const QString &id, const QString &pwdHint); int passwordAge(const QString &id) const; void setPasswordAge(const QString &id, const int age); QSortFilterProxyModel *avatarFilterModel(); QAbstractListModel *avatarTypesModel(); QAbstractListModel *accountsModel(); QAbstractListModel *groupsModel(const QString &id); int passwordLevel(const QString &pwd); QString checkUsername(const QString &name); QString checkFullname(const QString &name); QString checkPassword(const QString &name, const QString &pwd); // Used by UI realtime validation (no safety-page popup side effects). QString checkPasswordSilently(const QString &name, const QString &pwd); QVariantMap checkPasswordResult(int code, const QString &msg, const QString &name, const QString &pwd); void showDefender(); void playSystemSound(int soundType); void updateSingleUserGroups(const QString &id); QString customAvatarFromCache() const; void deleteUserIcon(const QString &id, const QString &iconFile); void cleanupTempPreviewFiles(const QStringList &files); signals: void currentUserNameChanged(); void userIdListChanged(); void userRemoved(const QString &userId); void onlineUserListChanged(); void avatarChanged(const QString &userId, const QString &avatar); void userTypeChanged(const QString &userId, const int userType); void fullnameChanged(const QString &userId, const QString &fullname); void autoLoginChanged(const QString &userId, bool enable); void quickLoginChanged(const QString &userId, bool enable); void nopasswdLoginChanged(const QString &userId, bool enable); void passwordAgeChanged(const QString &userId, const int age); void passwordModifyFinished(const QString &userId, const int exitCode, const QString &msg); void groupsChanged(const QString &userId, const QStringList &groups); void groupsUpdate(); // create/delete/modify void groupsUpdateFailed(const QString &groupName); void requestCreateGroup(const QString &userId); void requestClearEmptyGroup(const QString &userId); void showSafetyPage(const QString &errorTips); void accountCreationFinished(CreationResult::ResultType resultType, const QString &message); void quickLoginVisibleChanged(); protected: bool isSystemAdmin(const User *user) const; int adminCount() const; void checkPwdLimitLevel(int lvl); private: AccountsWorker *m_worker = nullptr; UserModel *m_model = nullptr; QSortFilterProxyModel *m_avatarFilterModel = nullptr; QAbstractListModel *m_avatarTypesModel = nullptr; QAbstractListModel *m_accountsModel = nullptr; QHash m_groups; QAbstractListModel *m_groupsModel = nullptr; bool m_isCreatingUser = false; }; } #endif // ACCOUNTSCONTROLLER_H ================================================ FILE: src/plugin-accounts/operation/accountsdbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "accountsdbusproxy.h" #include #include #include #include #include AccountsDBusProxy::AccountsDBusProxy(QObject *parent) : QObject(parent) { init(); } void AccountsDBusProxy::init() { const QString accountsService = "org.deepin.dde.Accounts1"; const QString accountsPath = "/org/deepin/dde/Accounts1"; const QString accountsInterface = "org.deepin.dde.Accounts1"; const QString propertiesInterface = "org.freedesktop.DBus.Properties"; const QString propertiesChanged = "PropertiesChanged"; const QString displayManagerService = "org.freedesktop.DisplayManager"; const QString displayManagerPath = "/org/freedesktop/DisplayManager"; const QString displayManagerInterface = "org.freedesktop.DisplayManager"; m_dBusAccountsInter = new DDBusInterface(accountsService, accountsPath, accountsInterface, QDBusConnection::systemBus(), this); m_dBusDisplayManagerInter = new DDBusInterface(displayManagerService, displayManagerPath, displayManagerInterface, QDBusConnection::systemBus(), this); QDBusConnection dbusConnection = m_dBusAccountsInter->connection(); dbusConnection.connect(accountsService, accountsPath, propertiesInterface, propertiesChanged, this, SLOT(onPropertiesChanged(QDBusMessage))); } void AccountsDBusProxy::onPropertiesChanged(const QDBusMessage &message) { if (message.arguments().size() < 2) return; QVariantMap changedProps = qdbus_cast(message.arguments().at(1).value()); if (changedProps.contains("QuickLoginEnabled")) { bool value = changedProps.value("QuickLoginEnabled").toBool(); Q_EMIT QuickLoginEnabledChanged(value); } } // Accounts QStringList AccountsDBusProxy::userList() { return qvariant_cast(m_dBusAccountsInter->property("UserList")); } QStringList AccountsDBusProxy::groupList() { return qvariant_cast(m_dBusAccountsInter->property("GroupList")); } QList AccountsDBusProxy::sessions() { return qvariant_cast>(m_dBusDisplayManagerInter->property("Sessions")); } QDBusPendingReply AccountsDBusProxy::CreateUser(const QString &in0, const QString &in1, int in2) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1) << QVariant::fromValue(in2); return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("CreateUser"), argumentList); } QDBusPendingReply<> AccountsDBusProxy::DeleteUser(const QString &in0, bool in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("DeleteUser"), argumentList); } QDBusPendingReply AccountsDBusProxy::FindUserById(const qint64 &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("FindUserById"), argumentList); } QDBusPendingReply AccountsDBusProxy::FindUserByName(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("FindUserByName"), argumentList); } QDBusPendingReply AccountsDBusProxy::GetGroups() { QList argumentList; return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("GetGroups"), argumentList); } QDBusPendingReply AccountsDBusProxy::GetPresetGroups(int in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("GetPresetGroups"), argumentList); } QDBusPendingReply AccountsDBusProxy::IsPasswordValid(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("IsPasswordValid"), argumentList); } QDBusPendingReply AccountsDBusProxy::IsUsernameValid(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("IsUsernameValid"), argumentList); } QDBusPendingReply AccountsDBusProxy::RandUserIcon() { QList argumentList; return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("RandUserIcon"), argumentList); } QDBusPendingReply AccountsDBusProxy::GetGroupInfoByName(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("GetGroupInfoByName"), argumentList); } QDBusPendingReply<> AccountsDBusProxy::deleteGroup(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(true); // force = true return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("DeleteGroup"), argumentList); } QDBusPendingReply<> AccountsDBusProxy::createGroup(const QString &in0, uint32_t in1, bool in2) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1) << QVariant::fromValue(in2); return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("CreateGroup"), argumentList); } QDBusPendingReply<> AccountsDBusProxy::modifyGroup(const QString &in0, const QString &in1, uint32_t in2) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1) << QVariant::fromValue(in2); return m_dBusAccountsInter->asyncCallWithArgumentList(QStringLiteral("ModifyGroup"), argumentList); } bool AccountsDBusProxy::quickLoginEnabled() { QVariant value = m_dBusAccountsInter->property("QuickLoginEnabled"); return value.isValid() ? value.toBool() : true; // 默认为true } ================================================ FILE: src/plugin-accounts/operation/accountsdbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef ACCOUNTSDBUSPROXY_H #define ACCOUNTSDBUSPROXY_H #include #include #include using Dtk::Core::DDBusInterface; class QDBusMessage; class AccountsDBusProxy : public QObject { Q_OBJECT public: explicit AccountsDBusProxy(QObject *parent = nullptr); // accounts Q_PROPERTY(QStringList UserList READ userList NOTIFY UserListChanged) QStringList userList(); // groups Q_PROPERTY(QStringList GroupList READ groupList NOTIFY GroupListChanged) QStringList groupList(); // displaymanager Q_PROPERTY(QList Sessions READ sessions NOTIFY SessionsChanged) QList sessions(); Q_PROPERTY(bool QuickLoginEnabled READ quickLoginEnabled) bool quickLoginEnabled(); signals: void UserAdded(const QString &in0); void UserDeleted(const QString &in0); // begin property changed signals void UserListChanged(const QStringList &value) const; void GroupListChanged(const QStringList &value); // displaymanager void SessionsChanged(const QList &value) const; void QuickLoginEnabledChanged(bool value); public slots: QDBusPendingReply CreateUser(const QString &in0, const QString &in1, int in2); QDBusPendingReply<> DeleteUser(const QString &in0, bool in1); QDBusPendingReply FindUserById(const qint64 &in0); QDBusPendingReply FindUserByName(const QString &in0); QDBusPendingReply GetGroups(); QDBusPendingReply GetPresetGroups(int in0); QDBusPendingReply IsPasswordValid(const QString &in0); QDBusPendingReply IsUsernameValid(const QString &in0); QDBusPendingReply RandUserIcon(); QDBusPendingReply GetGroupInfoByName(const QString &in0); QDBusPendingReply<> deleteGroup(const QString &in0); QDBusPendingReply<> createGroup(const QString &in0, uint32_t in1, bool in2); QDBusPendingReply<> modifyGroup(const QString &in0, const QString &in1, uint32_t in2); void onPropertiesChanged(const QDBusMessage &message); private: void init(); private: DDBusInterface *m_dBusAccountsInter; DDBusInterface *m_dBusDisplayManagerInter; }; #endif // ACCOUNTSDBUSPROXY_H ================================================ FILE: src/plugin-accounts/operation/accountsworker.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "accountsworker.h" #include "user.h" #include "usermodel.h" #include "syncdbusproxy.h" #include "accountsdbusproxy.h" #include "userdbusproxy.h" #include "securitydbusproxy.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace PolkitQt1; using namespace dccV25; DCORE_USE_NAMESPACE DGUI_USE_NAMESPACE namespace { // 密码加密算法前缀映射,按优先级排序(从高到低) // 注意:顺序除非产品要求不要变更 const QList> kPasswordAlgorithmPrefixes = { {"sm3", "$sm3$"}, {"yescrypt", "$y$"}, {"sha512", "$6$"}, {"sha256", "$5$"} }; // 根据算法名称获取前缀的辅助函数 QString getAlgorithmPrefix(const QString &algorithm) { for (const auto &pair : kPasswordAlgorithmPrefixes) { if (pair.first.toLower() == algorithm.toLower()) { return pair.second; } } return QString(); } } // anonymous namespace AccountsWorker::AccountsWorker(UserModel *userList, QObject *parent) : QObject(parent) , m_accountsInter(new AccountsDBusProxy(this)) , m_userQInter(new UserDBusProxy(QString("/org/deepin/dde/Accounts1/User%1").arg(getuid()), this)) , m_syncInter(new SyncDBusProxy(this)) , m_securityInter(new SecurityDBusProxy(this)) , m_userModel(userList) , m_accountCfg(DConfig::create("org.deepin.dde.daemon", "org.deepin.dde.daemon.account", QString(), this)) { struct passwd *pws; pws = getpwuid(getuid()); m_currentUserName = QString(pws->pw_name); m_userModel->setCurrentUserName(m_currentUserName); m_userModel->setIsSecurityHighLever(hasOpenSecurity()); connect(m_accountsInter, &AccountsDBusProxy::UserListChanged, this, &AccountsWorker::onUserListChanged, Qt::QueuedConnection); connect(m_accountsInter, &AccountsDBusProxy::GroupListChanged, this, &AccountsWorker::onGroupListChanged, Qt::QueuedConnection); connect(m_accountsInter, &AccountsDBusProxy::UserAdded, this, &AccountsWorker::addUser, Qt::QueuedConnection); connect(m_accountsInter, &AccountsDBusProxy::UserDeleted, this, &AccountsWorker::removeUser, Qt::QueuedConnection); connect(m_accountsInter, &AccountsDBusProxy::SessionsChanged, this, &AccountsWorker::updateUserOnlineStatus); QDBusPendingReply reply = m_accountsInter->FindUserById(pws->pw_uid); QString currentUserPath = reply.value(); if (!currentUserPath.isEmpty()) { onUserListChanged({currentUserPath}); } onUserListChanged(m_accountsInter->userList()); updateUserOnlineStatus(m_accountsInter->sessions()); getAllGroups(); getPresetGroups(); if(DSysInfo::UosServer != DSysInfo::uosType()) { m_userModel->setAutoLoginVisable(true); m_userModel->setNoPassWordLoginVisable(true); } else { m_userModel->setAutoLoginVisable(true); m_userModel->setNoPassWordLoginVisable(false); } m_userModel->setQuickLoginVisible(m_accountsInter->quickLoginEnabled()); connect(m_accountsInter, &AccountsDBusProxy::QuickLoginEnabledChanged, m_userModel, &UserModel::setQuickLoginVisible); } void AccountsWorker::getAllGroups() { QDBusPendingReply reply = m_accountsInter->GetGroups(); QDBusPendingCallWatcher *groupResult = new QDBusPendingCallWatcher(reply, this); connect(groupResult, &QDBusPendingCallWatcher::finished, this, &AccountsWorker::getAllGroupsResult); } void AccountsWorker::getGroupInfoByName(const QString &groupName, QString &resInfoJson) { QString info; QDBusPendingReply reply = m_accountsInter->GetGroupInfoByName(groupName); QDBusPendingCallWatcher *groupResult = new QDBusPendingCallWatcher(reply, this); connect(groupResult, &QDBusPendingCallWatcher::finished, this, [&resInfoJson](QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; if (!watch->isError()) { resInfoJson = reply.value(); } else { qDebug() << "getGroupInfoByName error." << watch->error(); } watch->deleteLater(); }); groupResult->waitForFinished(); } void AccountsWorker::getAllGroupsResult(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; if (!watch->isError()) { m_userModel->setAllGroups(reply.value()); QStringList disabledGroups; QJsonDocument jsonDocument; QJsonObject jsonObject; QString info; foreach (auto name, reply.value()) { getGroupInfoByName(name, info); jsonDocument = QJsonDocument::fromJson(info.toLocal8Bit()); jsonObject = jsonDocument.object(); bool res = false; int gid = jsonObject.value("Gid").toString().toInt(&res); if (res && 1000 > gid) { if (!disabledGroups.contains(name)) disabledGroups.append(name); } } m_userModel->setDisabledGroups(disabledGroups); } else { qDebug() << "getAllGroupsResult error." << watch->error(); } watch->deleteLater(); } void AccountsWorker::getPresetGroups() { int userType = DSysInfo::UosServer == DSysInfo::uosType() ? 0 : 1; QDBusPendingReply reply = m_accountsInter->GetPresetGroups(userType); QDBusPendingCallWatcher *presetGroupsResult = new QDBusPendingCallWatcher(reply, this); connect(presetGroupsResult, &QDBusPendingCallWatcher::finished, this, &AccountsWorker::getPresetGroupsResult); } void AccountsWorker::getPresetGroupsResult(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; if (!watch->isError()) { m_userModel->setPresetGroups(reply.value()); } else { qDebug() << "getPresetGroupsResult error." << watch->error(); } watch->deleteLater(); } void AccountsWorker::getUOSID(QString &uosid) { const auto &result = m_syncInter->UOSID(); if (!result.isEmpty()) { uosid = result; } } void AccountsWorker::getUUID(QString &uuid) { QVariant retUUID = m_userQInter->uuid(); uuid = retUUID.toString(); } void AccountsWorker::localBindCheck(User *user, const QString &uosid, const QString &uuid) { Q_UNUSED(user) QFutureWatcher *watcher = new QFutureWatcher(this); connect(watcher, &QFutureWatcher::finished, [this, watcher] { BindCheckResult result = watcher->result(); if (result.error.isEmpty()) Q_EMIT localBindUbid(result.ubid); else Q_EMIT localBindError(result.error); watcher->deleteLater(); }); QFuture future = QtConcurrent::run(&AccountsWorker::checkLocalBind, this, uosid, uuid); watcher->setFuture(future); } void AccountsWorker::startResetPasswordExec(User *user) { qInfo() << "Begin Resetpassword"; UserDBusProxy *userInter = m_userInters.value(user); auto reply = userInter->SetPassword(""); reply.waitForFinished(); Q_EMIT user->startResetPasswordReplied(reply.error().message()); } void AccountsWorker::asyncSecurityQuestionsCheck(User *user) { QFutureWatcher> *watcher = new QFutureWatcher>(this); connect(watcher, &QFutureWatcher>::finished, [user, watcher] { QList result = watcher->result(); if (result.size() != SECURITY_QUESTIONS_ERROR_COUNT) Q_EMIT user->startSecurityQuestionsCheckReplied(result); watcher->deleteLater(); }); QFuture> future = QtConcurrent::run(&AccountsWorker::securityQuestionsCheck, this); watcher->setFuture(future); } QList AccountsWorker::securityQuestionsCheck() { QDBusPendingReply> reply = m_userQInter->GetSecretQuestions(); if (!reply.error().message().isEmpty()) { qWarning() << reply.error().message(); } if (reply.isValid()) { return reply.value(); } return {-1}; } void AccountsWorker::setPasswordHint(User *user, const QString &passwordHint) { UserDBusProxy *userInter = m_userInters.value(user); Q_ASSERT(userInter); userInter->SetPasswordHint(passwordHint); } void AccountsWorker::setSecurityQuestions(User *user, const QMap &securityQuestions) { QDBusPendingReply reply = m_userQInter->SetSecretQuestions(securityQuestions); if (reply.isValid()) { Q_EMIT user->setSecurityQuestionsReplied(reply.error().message()); } if (!reply.error().message().isEmpty()) { Q_EMIT user->setSecurityQuestionsReplied(reply.error().message() + "error"); } } void AccountsWorker::deleteGroup(const QString &group) { QDBusPendingCall call = m_accountsInter->deleteGroup(group); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, group] (QDBusPendingCallWatcher* call) { if (call->isError()) { qWarning() << "Delete group " << group << " failed, error:" << call->error().message(); Q_EMIT updateGroupFailed(group); return; } Q_EMIT updateGroupFinished(AccountsWorker::OperateType::Delete, call->isValid(), group); }); } void AccountsWorker::createGroup(const QString &group, uint32_t gid, bool isSystem) { QDBusPendingCall call = m_accountsInter->createGroup(group, gid, isSystem); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, group, gid] (QDBusPendingCallWatcher* call) { if (call->isError()) { qWarning() << "Create group, gid: " << gid << ", created group `" << group << "` failed, error:" << call->error().message(); Q_EMIT createGroupFailed(group); return; } Q_EMIT updateGroupFinished(AccountsWorker::OperateType::Create, call->isValid()); }); } void AccountsWorker::modifyGroup(const QString &oldGroup, const QString &newGroup, uint32_t gid) { QDBusPendingCall call = m_accountsInter->modifyGroup(oldGroup, newGroup, gid); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, oldGroup, newGroup] (QDBusPendingCallWatcher* call) { if (call->isError()) { qWarning() << "Modify group from " << oldGroup << " to " << newGroup << " failed, error:" << call->error().message(); // 这里返回旧的 groupname, 因为 model 中的数据还没更新,给一个新的是定位不到 model 的 index 来触发 datachanged Q_EMIT updateGroupFailed(oldGroup); return; } Q_EMIT updateGroupFinished(AccountsWorker::OperateType::Modify, call->isValid()); }); } bool AccountsWorker::hasOpenSecurity() { const auto &value = m_securityInter->Status(); if (value.isEmpty()) { qWarning() << m_securityInter->lastError(); return false; } if (value == "open") return true; return false; } SecurityLever AccountsWorker::getSecUserLeverbyname(QString userName) { std::tuple result = m_securityInter->GetSEUserByName(userName); const auto &value = std::get<0>(result); if (value.isEmpty()) { qWarning() << m_securityInter->lastError(); return SecurityLever::Standard; } if (value == QStringLiteral("sysadm_u")) { return SecurityLever::Sysadm; } if (value == QStringLiteral("secadm_u")) { return SecurityLever::Secadm; } if (value == QStringLiteral("audadm_u")) { return SecurityLever::Audadm; } if (value == QStringLiteral("auditadm_u")) { return SecurityLever::Auditadm; } return SecurityLever::Standard; } void AccountsWorker::checkPwdLimitLevel(int level) { // 密码校验失败并且安全中心密码安全等级不为低,弹出跳转到安全中心的对话框,低、中、高等级分别对应的值为1、2、3 QDBusInterface interface(QStringLiteral("com.deepin.defender.daemonservice"), QStringLiteral("/com/deepin/defender/daemonservice"), QStringLiteral("com.deepin.defender.daemonservice")); if (!interface.isValid()) { return; } QDBusReply pwdLimitLevel = interface.call("GetPwdLimitLevel"); if (pwdLimitLevel.error().type() == QDBusError::NoError && pwdLimitLevel >= level) { QDBusReply errorTips = interface.call("GetPwdError"); if (!errorTips.value().isEmpty()) { Q_EMIT showSafetyPage(errorTips); } } } void AccountsWorker::showDefender() { qDebug() << "showDefender call....."; QDBusPendingCall call = DDBusSender() .service("com.deepin.defender.hmiscreen") .interface("com.deepin.defender.hmiscreen") .path("/com/deepin/defender/hmiscreen") .method(QString("ShowPage")) .arg(QString("securitytools")) .arg(QString("login-safety")) .call(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); watcher->waitForFinished(); watcher->deleteLater(); } void AccountsWorker::setGroups(User *user, const QStringList &usrGroups) { UserDBusProxy *userInter = m_userInters[user]; Q_ASSERT(userInter); userInter->SetGroups(usrGroups); } void AccountsWorker::active() { for (auto it(m_userInters.cbegin()); it != m_userInters.cend(); ++it) { it.key()->setName(it.value()->property("UserName").toString()); it.key()->setAutoLogin(it.value()->automaticLogin()); it.key()->setNopasswdLogin(it.value()->noPasswdLogin()); it.key()->setUserType(it.value()->accountType()); it.key()->setAvatars(it.value()->iconList()); it.key()->setGroups(it.value()->groups()); it.key()->setCurrentAvatar(it.value()->iconFile()); it.key()->setCreatedTime(it.value()->createdTime()); it.key()->setGid(it.value()->gid()); it.key()->setFullname(it.value()->fullName()); it.key()->setIsCurrentUser(it.value()->property("UserName").toString() == m_currentUserName); it.key()->setId(it.value()->path()); } } QString AccountsWorker::getCurrentUserName() { return m_currentUserName; } QDBusPendingReply AccountsWorker::isUsernameValid(const QString &name) { QDBusPendingReply reply = m_accountsInter->IsUsernameValid(name); reply.waitForFinished(); return reply; } void AccountsWorker::randomUserIcon(User *user) { QDBusPendingCall call = m_accountsInter->RandUserIcon(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, [=] { if (!call.isError()) { QDBusPendingReply reply = call.reply(); user->setCurrentAvatar(reply.value()); } watcher->deleteLater(); }); } void AccountsWorker::createAccount(const User *user) { qDebug() << "create account"; QFutureWatcher *watcher = new QFutureWatcher(this); connect(watcher, &QFutureWatcher::finished, [this, watcher, user] { CreationResult *result = watcher->result(); Q_EMIT accountCreationFinished(result); Q_EMIT requestMainWindowEnabled(true); watcher->deleteLater(); }); QFuture future = QtConcurrent::run(&AccountsWorker::createAccountInternal, this, user); Q_EMIT requestMainWindowEnabled(false); watcher->setFuture(future); } void AccountsWorker::updateGroupinfo() { m_userModel->setAllGroups(m_accountsInter->GetGroups()); } void AccountsWorker::setAvatar(User *user, const QString &iconPath) { qDebug() << "set account avatar"; UserDBusProxy *ui = m_userInters[user]; Q_ASSERT(ui); ui->SetIconFile(iconPath); const QString appCacheDir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); if (!appCacheDir.isEmpty()) { const QString avatarsDir = appCacheDir + QDir::separator() + "avatars"; QDir().mkpath(avatarsDir); const QString markerFile = avatarsDir + QDir::separator() + "current"; const QString absIcon = QFileInfo(iconPath).absoluteFilePath(); if (absIcon.startsWith(avatarsDir + QDir::separator())) { const QString fileName = QFileInfo(absIcon).fileName(); QSaveFile save(markerFile); if (save.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { save.write(fileName.toUtf8()); save.commit(); } } else { QFile f(markerFile); if (f.exists()) { if (f.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { f.close(); } } } } } void AccountsWorker::setFullname(User *user, const QString &fullname) { qInfo() << "fullname" << fullname; UserDBusProxy *ui = m_userInters[user]; Q_ASSERT(ui); QDBusPendingCall call = ui->SetFullName(fullname); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { Q_EMIT user->fullnameChanged(user->fullname()); } else { Q_EMIT accountFullNameChangeFinished(); } watcher->deleteLater(); }); } void AccountsWorker::deleteAccount(User *user, const bool deleteHome) { QDBusPendingCall call = m_accountsInter->DeleteUser(user->name(), deleteHome); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, user] (QDBusPendingCallWatcher* call) { Q_EMIT requestMainWindowEnabled(true); if (call->isError()) { qDebug() << Q_FUNC_INFO << call->error().message(); Q_EMIT m_userModel->isCancelChanged(); } else { if (!m_userInters.contains(user)) { call->deleteLater(); return; } Q_EMIT m_userModel->deleteUserSuccess(); removeUser(m_userInters.value(user)->path()); getAllGroups(); } call->deleteLater(); }); Q_EMIT requestMainWindowEnabled(false); } void AccountsWorker::setAutoLogin(User *user, const bool autoLogin) { UserDBusProxy *ui = m_userInters[user]; Q_ASSERT(ui); QDBusPendingCall call = ui->SetAutomaticLogin(autoLogin); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { Q_EMIT user->autoLoginChanged(user->autoLogin()); } watcher->deleteLater(); }); } void AccountsWorker::setQuickLogin(User *user, const bool quickLogin) { UserDBusProxy *ui = m_userInters[user]; Q_ASSERT(ui); QDBusPendingCall call = ui->SetQuickLogin(quickLogin); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { Q_EMIT user->quickLoginChanged(user->quickLogin()); } watcher->deleteLater(); }); } //切换账户权限 void AccountsWorker::setAdministrator(User *user, const bool asAdministrator) { UserDBusProxy *ui = m_userInters[user]; Q_ASSERT(ui); // because this operate need root permission, we must wait for finished and refersh result Q_EMIT requestMainWindowEnabled(false); QStringList lstGroups = ui->groups(); if(!asAdministrator) lstGroups.removeOne("sudo"); else lstGroups.append("sudo"); QDBusPendingCall call = ui->SetGroups(lstGroups); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { Q_EMIT user->userTypeChanged(user->userType()); } Q_EMIT requestMainWindowEnabled(true); watcher->deleteLater(); }); } void AccountsWorker::loadUserList() { onUserListChanged(m_accountsInter->userList()); } void AccountsWorker::onUserListChanged(const QStringList &userList) { for (const QString &path : userList) { if (!m_userModel->contains(path)) { addUser(path); } } } void AccountsWorker::onGroupListChanged(const QStringList &groupList) { if (m_userModel) m_userModel->setAllGroups(groupList); } void AccountsWorker::setPassword(User *user, const QString &oldpwd, const QString &passwd, const QString &repeatPasswd, const bool needResult) { QProcess process; QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); env.insert("LC_ALL", "C"); process.setProcessEnvironment(env); process.setProcessChannelMode(QProcess::MergedChannels); process.start("/bin/bash", QStringList() << "-c" << QString("passwd")); if (user->passwordStatus() == NO_PASSWORD) { process.write(QString("%1\n%2\n").arg(passwd).arg(repeatPasswd).toLatin1()); } else { process.write(QString("%1\n%2\n%3").arg(oldpwd).arg(passwd).arg(repeatPasswd).toLatin1()); } process.closeWriteChannel(); process.waitForFinished(); if (needResult) { // process.exitCode() = 0 表示密码修改成功 int exitCode = process.exitCode(); const QString& outputTxt = process.readAll(); Q_EMIT user->passwordModifyFinished(exitCode, outputTxt); } } void AccountsWorker::resetPassword(User *user, const QString &password) { auto reply = m_userInters.value(user)->SetPassword(cryptUserPassword(password)); reply.waitForFinished(); Q_EMIT user->passwordResetFinished(reply.error().message()); } void AccountsWorker::deleteUserIcon(User *user, const QString &iconPath) { Q_UNUSED(user) const QString absPath = QFileInfo(QUrl::fromUserInput(iconPath).toLocalFile()).absoluteFilePath(); const QString appCacheDir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); if (!appCacheDir.isEmpty()) { const QString avatarsDir = appCacheDir + QDir::separator() + "avatars" + QDir::separator(); if (absPath.startsWith(avatarsDir)) { QFile::remove(absPath); } } if (!appCacheDir.isEmpty()) { const QString avatarsDir = appCacheDir + QDir::separator() + "avatars"; const QString markerFile = avatarsDir + QDir::separator() + "current"; QFile mf(markerFile); if (mf.exists() && mf.open(QIODevice::ReadOnly | QIODevice::Text)) { const QByteArray content = mf.readAll(); mf.close(); const QString fileName = QFileInfo(iconPath).fileName(); if (!content.isEmpty() && QString::fromUtf8(content).trimmed() == fileName) { if (mf.open(QIODevice::WriteOnly | QIODevice::Truncate | QIODevice::Text)) { mf.close(); } } } } } void AccountsWorker::addUser(const QString &userPath) { if (userPath.contains("User0", Qt::CaseInsensitive) || m_userModel->contains(userPath)) return; if(!userPath.contains("/org/deepin/dde/Accounts1")) return; UserDBusProxy *userInter = new UserDBusProxy(userPath, this); User *user = new User(this); connect(userInter, &UserDBusProxy::UserNameChanged, user, [=](const QString &name) { user->setName(name); user->setSecurityLever(getSecUserLeverbyname(name)); user->setOnline(m_onlineUsers.contains(name)); user->setIsCurrentUser(name == m_currentUserName); checkADUser(); }); connect(userInter, &UserDBusProxy::AutomaticLoginChanged, user, &User::setAutoLogin); connect(userInter, &UserDBusProxy::QuickLoginChanged, user, &User::setQuickLogin); connect(userInter, &UserDBusProxy::IconListChanged, user, &User::setAvatars); connect(userInter, &UserDBusProxy::IconFileChanged, user, &User::setCurrentAvatar); connect(userInter, &UserDBusProxy::FullNameChanged, user, &User::setFullname); connect(userInter, &UserDBusProxy::NoPasswdLoginChanged, user, &User::setNopasswdLogin); connect(userInter, &UserDBusProxy::PasswordStatusChanged, user, &User::setPasswordStatus); connect(userInter, &UserDBusProxy::CreatedTimeChanged, user, &User::setCreatedTime); connect(userInter, &UserDBusProxy::GroupsChanged, user, &User::setGroups); connect(userInter, &UserDBusProxy::AccountTypeChanged, user, &User::setUserType); connect(userInter, &UserDBusProxy::MaxPasswordAgeChanged, user, &User::setPasswordAge); connect(userInter, &UserDBusProxy::GidChanged, user, &User::setGid); // 这里直接赋值的话, 由于请求是异步的, 所以一开始会被初始化成乱码, // 然后数据正常了以后会额外产生一次变化信号 // 对于计算当前有多少个管理员有干扰. userInter->iconList(); userInter->groups(); userInter->iconFile(); userInter->noPasswdLogin(); userInter->passwordStatus(); userInter->createdTime(); userInter->accountType(); userInter->maxPasswordAge(); userInter->IsPasswordExpired(); userInter->gid(); user->setId(userPath); user->setName(userInter->userName()); user->setFullname(userInter->fullName()); user->setAutoLogin(userInter->automaticLogin()); user->setQuickLogin(userInter->quickLogin()); user->setAvatars(userInter->iconList()); user->setCurrentAvatar(userInter->iconFile()); user->setNopasswdLogin(userInter->noPasswdLogin()); user->setPasswordStatus(userInter->passwordStatus()); user->setCreatedTime(userInter->createdTime()); user->setGroups(userInter->groups()); user->setUserType(userInter->accountType()); user->setPasswordAge(userInter->maxPasswordAge()); user->setGid(userInter->gid()); m_userInters[user] = userInter; m_userModel->addUser(userPath, user); } void AccountsWorker::removeUser(const QString &userPath) { for (UserDBusProxy *userInter : m_userInters.values()) { if (userInter->path() == userPath) { User *user = m_userInters.key(userInter); user->deleteLater(); m_userInters.remove(user); m_userModel->removeUser(userPath); return; } } } void AccountsWorker::setNopasswdLogin(User *user, const bool nopasswdLogin) { UserDBusProxy *userInter = m_userInters[user]; Q_ASSERT(userInter); QDBusPendingCall call = userInter->EnableNoPasswdLogin(nopasswdLogin); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { Q_EMIT user->nopasswdLoginChanged(user->nopasswdLogin()); } QProcess restartLock; QStringList restartLockCommand = QStringList { "--user", "restart", "dde-lock.service" }; restartLock.start("systemctl", restartLockCommand); restartLock.waitForFinished(-1); watcher->deleteLater(); }); } void AccountsWorker::setMaxPasswordAge(User *user, const int maxAge) { UserDBusProxy *userInter = m_userInters[user]; Q_ASSERT(userInter); QDBusPendingCall call = userInter->SetMaxPasswordAge(maxAge); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { Q_EMIT user->passwordAgeChanged(user->passwordAge()); } watcher->deleteLater(); }); } void AccountsWorker::refreshADDomain() { QProcess *process = new QProcess(this); process->start("/opt/pbis/bin/enum-users", QStringList()); connect(process, &QProcess::readyReadStandardOutput, this, [=] { QRegularExpression re("Name:\\s+(\\w+)"); QRegularExpressionMatch match = re.match(process->readAll()); m_userModel->setIsJoinADDomain(match.hasMatch()); }); connect(process, static_cast(&QProcess::finished), process, &QProcess::deleteLater); } void AccountsWorker::ADDomainHandle(const QString &server, const QString &admin, const QString &password) { const bool isJoin = m_userModel->isJoinADDomain(); int exitCode = 0; if (isJoin) { exitCode = QProcess::execute("pkexec", QStringList() << "/opt/pbis/bin/domainjoin-cli" << "leave" << "--disable" << "ssh"); } else { // for safety, restart lwsmd service before join AD Domain QProcess::execute("pkexec", QStringList() << "/bin/systemctl" << "restart" << "lwsmd"); exitCode = QProcess::execute("pkexec", QStringList() << "/opt/pbis/bin/domainjoin-cli" << "join" << "--disable" << "ssh" << server << admin << password); } QString message; if (!exitCode) { message = isJoin ? tr("Your host was removed from the domain server successfully") : tr("Your host joins the domain server successfully"); // Additional operation, need to initialize the user's settings if (!isJoin) { QProcess::execute("pkexec", QStringList() << "/opt/pbis/bin/config" << "UserDomainPrefix" << "ADS"); QProcess::execute("pkexec", QStringList() << "/opt/pbis/bin/config" << "LoginShellTemplate" << "/bin/bash"); } // save config QFile file("/etc/deepin/dde-session-ui.conf"); QFile tmpFile("/tmp/.dde-session-ui.conf"); if (file.exists() && file.open(QIODevice::Text | QIODevice::ReadOnly)) { qDebug() << file.copy("/tmp/.dde-session-ui.conf"); } if (tmpFile.open(QIODevice::Text | QIODevice::ReadWrite)) { QSettings setting("/tmp/.dde-session-ui.conf", QSettings::IniFormat); setting.setValue("loginPromptInput", !isJoin); setting.sync(); QProcess::execute("pkexec", QStringList() << "cp" << "/tmp/.dde-session-ui.conf" << "/etc/deepin/dde-session-ui.conf"); tmpFile.remove(); } } else { message = isJoin ? tr("Your host failed to leave the domain server") : tr("Your host failed to join the domain server"); } DDBusSender() .service("org.freedesktop.Notifications") .path("/org/freedesktop/Notifications") .interface("org.freedesktop.Notifications") .method("Notify") .arg(QString()) .arg((uint)QDateTime::currentMSecsSinceEpoch()) .arg(exitCode ? QStringLiteral("dialog-warning") : QStringLiteral("dialog-ok")) .arg(tr("AD domain settings")) .arg(message) .arg(QStringList()) .arg(QVariantMap()) .arg((int)0) .call(); refreshADDomain(); } void AccountsWorker::updateUserOnlineStatus(const QList &paths) { m_onlineUsers.clear(); m_userModel->SetOnlineUsers(QStringList()); for (const QDBusObjectPath &path : paths) { QDBusInterface sessionInter("org.freedesktop.DisplayManager", path.path(), "org.freedesktop.DisplayManager.Session", QDBusConnection::systemBus()); m_onlineUsers << qvariant_cast(sessionInter.property("UserName")); } for (User *user : m_userModel->userList()) { user->setOnline(m_onlineUsers.contains(user->name())); } m_userModel->SetOnlineUsers(m_onlineUsers); checkADUser(); } void AccountsWorker::checkADUser() { // AD User is not in native user list, but session list have it. bool isADUser = false; QStringList userList; for (User *user : m_userModel->userList()) { userList << user->name(); } for (const QString &u : m_onlineUsers) { if (!userList.contains(u)) { isADUser = true; break; } } m_userModel->setADUserLogind(isADUser); } CreationResult *AccountsWorker::createAccountInternal(const User *user) { CreationResult *result = new CreationResult; // validate username QDBusPendingReply reply = m_accountsInter->IsUsernameValid(user->name()); reply.waitForFinished(); if (reply.isError()) { result->setType(CreationResult::UserNameError); result->setMessage(reply.error().message()); return result; } bool validation = reply.argumentAt(0).toBool(); if (!validation) { result->setType(CreationResult::UserNameError); result->setMessage(dgettext("dde-daemon", reply.argumentAt(1).toString().toUtf8().data())); return result; } // validate password if (user->password() != user->repeatPassword()) { result->setType(CreationResult::PasswordMatchError); result->setMessage(tr("Password not match")); return result; } Authority::Result authenticationResult; authenticationResult = Authority::instance()->checkAuthorizationSync("org.deepin.dde.accounts.user-administration", UnixProcessSubject(getpid()), Authority::AllowUserInteraction); if (Authority::Result::Yes != authenticationResult) { result->setType(CreationResult::Canceled); return result; } // default FullName is empty string QDBusObjectPath path; QDBusPendingReply createReply = m_accountsInter->CreateUser(user->name(), user->fullname(), user->userType()); createReply.waitForFinished(); if (createReply.isError()) { /* 这里由后端保证出错时一定有错误信息返回,如果没有错误信息,就默认用户在认证时点了取消 */ result->setType(createReply.error().message().isEmpty() ? CreationResult::Canceled : CreationResult::UnknownError); result->setMessage(createReply.error().message()); return result; } else { path = createReply.argumentAt<0>(); } const QString userPath = path.path(); UserDBusProxy *userDBus = new UserDBusProxy(userPath, this); if (!userDBus->interface()->isValid()) { result->setType(CreationResult::UnknownError); result->setMessage("user dbus is still not valid."); return result; } //TODO(hualet): better to check all the call results. bool sifResult = !userDBus->SetIconFile(user->currentAvatar()).isError(); bool spResult = !userDBus->SetPassword(cryptUserPassword(user->password())).isError(); bool groupResult = true; bool passwordHintResult = true; if (DSysInfo::UosServer == DSysInfo::uosType() && !user->groups().isEmpty()) { groupResult = !userDBus->SetGroups(user->groups()).isError(); } passwordHintResult = !userDBus->SetPasswordHint(user->passwordHint()).isError(); if (!sifResult || !spResult || !groupResult || !passwordHintResult) { result->setType(CreationResult::UnknownError); if (!sifResult) result->setMessage("set icon file for new created user failed."); if (!spResult) result->setMessage("set password for new created user failed"); if (!groupResult) result->setMessage("set group for new created user failed"); return result; } return result; } QString AccountsWorker::tryEncryptPassword(const QString &password, const QString &algorithm) { // 获取算法对应的 salt 前缀 QString saltPrefix = getAlgorithmPrefix(algorithm); if (saltPrefix.isEmpty()) { return QString(); // 不支持的算法 } // 使用 crypt_gensalt_rn 生成 salt setting(线程安全版本) // 这个函数会为每种算法自动生成正确格式的 salt char output[CRYPT_GENSALT_OUTPUT_SIZE]; char *setting = crypt_gensalt_rn(saltPrefix.toLatin1().data(), 0, nullptr, 0, output, sizeof(output)); if (setting == nullptr || setting[0] == '*') { qWarning() << "Failed to generate salt for algorithm:" << algorithm << "(crypt_gensalt_rn returned" << (setting == nullptr ? "nullptr" : "invalid setting") << ", errno:" << errno << ")"; return QString(); } // 调用 crypt 函数进行加密 char *result = crypt(password.toUtf8().data(), setting); // 检查加密是否成功 // 根据 man crypt 文档: // 1. 返回 nullptr 表示失败 // 2. 返回以 '*' 开头的字符串也表示失败(无效哈希) if (result == nullptr || result[0] == '*') { qWarning() << "Password encryption failed with algorithm:" << algorithm << "(crypt returned" << (result == nullptr ? "nullptr" : "invalid hash starting with '*'") << ", errno:" << errno << ")"; return QString(); // 加密失败 } qDebug() << "Password encryption succeeded with algorithm:" << algorithm; return QString(result); } QString AccountsWorker::cryptUserPassword(const QString &password) { // 从 dconfig 获取加密算法,如果获取失败或不存在则默认为 sm3 QString algorithm = "sm3"; if (m_accountCfg && m_accountCfg->isValid()) { algorithm = m_accountCfg->value("passwordEncryptionAlgorithm", "sm3").toString(); if (algorithm.isEmpty()) { algorithm = "sm3"; } } // 尝试使用配置的算法加密 QString encrypted = tryEncryptPassword(password, algorithm); if (!encrypted.isEmpty()) { return encrypted; } // 如果配置的算法失败,按优先级顺序遍历所有支持的算法重试 qWarning() << "Password encryption failed with configured algorithm:" << algorithm << ", trying fallback algorithms..."; for (const auto &pair : kPasswordAlgorithmPrefixes) { const QString &fallbackAlg = pair.first; // 跳过已经尝试过的算法 if (fallbackAlg.toLower() == algorithm.toLower()) { continue; } encrypted = tryEncryptPassword(password, fallbackAlg); if (!encrypted.isEmpty()) { qWarning() << "Password encryption succeeded with fallback algorithm:" << fallbackAlg; return encrypted; } } // 所有算法都失败 qCritical() << "Password encryption failed with all supported algorithms!"; return QString(); } BindCheckResult AccountsWorker::checkLocalBind(const QString &uosid, const QString &uuid) { BindCheckResult result; const auto &ret = m_syncInter->LocalBindCheck(uosid, uuid); if (!ret.isEmpty()) result.ubid = ret; else result.error = m_syncInter->lastError(); return result; } void AccountsWorker::playSystemSound(int soundType) { DDesktopServices::playSystemSoundEffect(static_cast(soundType)); } QString AccountsWorker::saveCustomAvatar(const QString &tempFile, const QString &originalFile) { const QString appCacheDir = QStandardPaths::writableLocation(QStandardPaths::CacheLocation); if (appCacheDir.isEmpty()) { return QString(); } const QString avatarsDir = appCacheDir + QDir::separator() + "avatars"; QDir().mkpath(avatarsDir); QString targetFile; bool replacingExisting = false; if (!originalFile.isEmpty()) { QFileInfo origInfo(originalFile); const QString origAbs = QFileInfo(QUrl(originalFile).toLocalFile()).absoluteFilePath(); if (origAbs.startsWith(avatarsDir + QDir::separator())) { targetFile = avatarsDir + QDir::separator() + QFileInfo(origAbs).fileName(); replacingExisting = true; } } if (targetFile.isEmpty()) { const QString baseName = QString::number(QDateTime::currentMSecsSinceEpoch()); targetFile = avatarsDir + QDir::separator() + baseName + ".png"; } QStringList files = QDir(avatarsDir).entryList(QStringList() << "*.png" << "*.jpg" << "*.jpeg" << "*.bmp", QDir::Files, QDir::Time /* newest first */); if (files.size() == 4 && !replacingExisting) { QString currentName; QFile mf(avatarsDir + QDir::separator() + "current"); if (mf.exists() && mf.open(QIODevice::ReadOnly | QIODevice::Text)) { currentName = QString::fromUtf8(mf.readAll()).trimmed(); mf.close(); } int oldestIndex = files.size() - 1; int candidateIndex = oldestIndex; if (!currentName.isEmpty() && files.at(oldestIndex) == currentName && files.size() >= 2) { candidateIndex = files.size() - 2; } const QString toDelete = files.at(candidateIndex); QFile::remove(avatarsDir + QDir::separator() + toDelete); } const QString tempAbs = tempFile.startsWith("file:") ? QUrl(tempFile).toLocalFile() : QFileInfo(tempFile).absoluteFilePath(); if (QFileInfo(tempAbs).absoluteFilePath() == QFileInfo(targetFile).absoluteFilePath()) { return QUrl::fromLocalFile(targetFile).toString(); } if (QFile::exists(targetFile)) { QFile::remove(targetFile); } bool ok = QFile::copy(tempAbs, targetFile); if (!ok) { ok = QFile::rename(tempAbs, targetFile); if (!ok) { return QString(); } } if (replacingExisting) { const QString markerFile = avatarsDir + QDir::separator() + "current"; QFile mf(markerFile); if (mf.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { const QString fileName = QFileInfo(targetFile).fileName(); mf.write(fileName.toUtf8()); mf.close(); } } return QUrl::fromLocalFile(targetFile).toString(); } ================================================ FILE: src/plugin-accounts/operation/accountsworker.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef ACCOUNTSWORKER_H #define ACCOUNTSWORKER_H #include "usermodel.h" #include "creationresult.h" #include #include #include #define SECURITY_QUESTIONS_ERROR_COUNT 1 class AccountsDBusProxy; class UserDBusProxy; class SyncDBusProxy; class SecurityDBusProxy; namespace dccV25 { class User; struct BindCheckResult { QString ubid = ""; QString error = ""; }; class AccountsWorker : public QObject { Q_OBJECT public: enum class OperateType { Delete, Create, Modify }; explicit AccountsWorker(UserModel * userList, QObject *parent = nullptr); Q_INVOKABLE void active(); QString getCurrentUserName(); void updateGroupinfo(); QDBusPendingReply isUsernameValid(const QString &name); QString saveCustomAvatar(const QString &tempFile, const QString &originalFile = QString()); Q_SIGNALS: void accountCreationFinished(CreationResult *result) const; void accountFullNameChangeFinished() const; void requestMainWindowEnabled(const bool isEnabled) const; void localBindUbid(const QString &ubid); void localBindError(const QString &error); void showSafetyPage(const QString &errorTips); void updateGroupFinished(OperateType operation, bool successfully, const QString& groupName = QString()); void updateGroupFailed(const QString& groupName = QString()); void createGroupFailed(const QString& groupName = QString()); public Q_SLOTS: void randomUserIcon(User *user); void createAccount(const User *user); void setAvatar(User *user, const QString &iconPath); void setFullname(User *user, const QString &fullname); void deleteAccount(User *user, const bool deleteHome); void setAutoLogin(User *user, const bool autoLogin); void setQuickLogin(User *user, const bool quickLogin); void setAdministrator(User *user, const bool asAdministrator); void onUserListChanged(const QStringList &userList); void onGroupListChanged(const QStringList &groupList); void setPassword(User *user, const QString &oldpwd, const QString &passwd, const QString &repeatPasswd, const bool needResule = true); void resetPassword(User *user, const QString &password); void deleteUserIcon(User *user, const QString &iconPath); void setNopasswdLogin(User *user, const bool nopasswdLogin); void setMaxPasswordAge(User *user, const int maxAge); void loadUserList(); void getUOSID(QString &uosid); void getUUID(QString &uuid); void localBindCheck(User *user, const QString &uosid, const QString &uuid); void startResetPasswordExec(User *user); void asyncSecurityQuestionsCheck(User *user); void refreshADDomain(); void ADDomainHandle(const QString &server, const QString &admin, const QString &password); void addUser(const QString &userPath); void removeUser(const QString &userPath); void setGroups(User *user, const QStringList &usrGroups); void setPasswordHint(User *user, const QString &passwordHint); void setSecurityQuestions(User *user, const QMap &securityQuestions); void deleteGroup(const QString &group); void createGroup(const QString &group, uint32_t gid, bool isSystem); void modifyGroup(const QString &oldGroup, const QString &newGroup, uint32_t gid); void getGroupInfoByName(const QString &groupName, QString &resInfoJson); bool hasOpenSecurity(); SecurityLever getSecUserLeverbyname(QString userName); void checkPwdLimitLevel(int level); void showDefender(); void playSystemSound(int soundType); private Q_SLOTS: void updateUserOnlineStatus(const QList &paths); void getAllGroups(); void getAllGroupsResult(QDBusPendingCallWatcher *watch); void getPresetGroups(); void getPresetGroupsResult(QDBusPendingCallWatcher *watch); void checkADUser(); private: UserDBusProxy *userInter(const QString &userName) const; CreationResult *createAccountInternal(const User *user); QString cryptUserPassword(const QString &password); QString tryEncryptPassword(const QString &password, const QString &algorithm); BindCheckResult checkLocalBind(const QString &uosid, const QString &uuid); QList securityQuestionsCheck(); private: AccountsDBusProxy *m_accountsInter; UserDBusProxy *m_userQInter; SyncDBusProxy *m_syncInter; SecurityDBusProxy *m_securityInter; QMap m_userInters; QString m_currentUserName; QStringList m_onlineUsers; UserModel *m_userModel; Dtk::Core::DConfig *m_accountCfg; }; } // namespace dccV25 #endif // ACCOUNTSWORKER_H ================================================ FILE: src/plugin-accounts/operation/avatarlistmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "avatarlistmodel.h" #include "user.h" using namespace dccV25; static QStringList g_avatarTypes { "icons/human/dimensional", "icons/human/flat", "icons/anmal", "icons/emoji", "icons/illustration", "icons/local" }; AvatarTypesModel::AvatarTypesModel(QObject *) { } int AvatarTypesModel::rowCount(const QModelIndex &) const { return g_avatarTypes.count(); } QVariant AvatarTypesModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.row() >= g_avatarTypes.size()) return QVariant(); const QString &avatarType = g_avatarTypes.value(index.row()); QString section; if (avatarType.contains("human/dimensional")) { section = tr("Dimensional"); } else if (avatarType.contains("human/flat")) { section = tr("Flat"); } else { // none } switch (role) { case Qt::DisplayRole: return avatarType; case SectionRole: return section; default: break; } return QVariant(); } QHash AvatarTypesModel::roleNames() const { auto names = QAbstractListModel::roleNames(); names[SectionRole] = "section"; return names; } AvatarListModel::AvatarListModel(User *user, QObject *parent) : QAbstractListModel(parent) , m_user(user) { } int AvatarListModel::rowCount(const QModelIndex &) const { if (!m_user) return 0; return m_user->avatars().count(); } QVariant AvatarListModel::data(const QModelIndex &index, int role) const { if (!m_user) return QVariant(); const auto &list = m_user->avatars(); if (!index.isValid() || index.row() >= list.size()) return QVariant(); const QString &iconUrl = list.value(index.row()); switch (role) { case Qt::DisplayRole: return iconUrl; default: break; } return QVariant(); } ================================================ FILE: src/plugin-accounts/operation/avatarlistmodel.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef AVATARLISTMODEL_H #define AVATARLISTMODEL_H #include namespace dccV25 { class User; class AvatarTypesModel : public QAbstractListModel { Q_OBJECT public: explicit AvatarTypesModel(QObject *parent = nullptr); enum AvatarRole { SectionRole = Qt::UserRole + 1 }; // QAbstractItemModel interface public: virtual int rowCount(const QModelIndex &parent) const override; virtual QVariant data(const QModelIndex &index, int role) const override; virtual QHash roleNames() const override; }; class AvatarListModel : public QAbstractListModel { public: explicit AvatarListModel(User *user, QObject *parent = nullptr); void setUser(User *user) { if (m_user == user) return; m_user = user; } // QAbstractItemModel interface public: virtual int rowCount(const QModelIndex &parent) const override; virtual QVariant data(const QModelIndex &index, int role) const override; protected: User *m_user = nullptr; }; } #endif // AVATARLISTMODEL_H ================================================ FILE: src/plugin-accounts/operation/creationresult.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "creationresult.h" using namespace dccV25; CreationResult::CreationResult(QObject *parent) : CreationResult(NoError, QString(""), parent) { } CreationResult::CreationResult(CreationResult::ResultType type, const QString &message, QObject *parent) : QObject(parent) , m_type(type) , m_message(message) { } void CreationResult::setType(const ResultType &type) { m_type = type; } void CreationResult::setMessage(const QString &message) { m_message = message; } ================================================ FILE: src/plugin-accounts/operation/creationresult.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCC_ACCOUNTSS_CREATIONRESULT_H #define DCC_ACCOUNTSS_CREATIONRESULT_H #include namespace dccV25 { class CreationResult : public QObject { Q_OBJECT public: enum ResultType { UserNameError, // 用户名错误 PasswordError, // 密码错误 PasswordMatchError, // 两次输入的密码不匹配 UnknownError, // 未知错误 Canceled, // 用户取消认证或关闭认证窗口 NoError }; Q_ENUM(ResultType) explicit CreationResult(QObject *parent = 0); explicit CreationResult(ResultType type, const QString &message, QObject *parent = 0); inline ResultType type() const { return m_type; } void setType(const ResultType &type); inline QString message() const { return m_message; } void setMessage(const QString &message); private: ResultType m_type; QString m_message; }; } // namespace dccV25 #endif // DCC_ACCOUNTSS_CREATIONRESULT_H ================================================ FILE: src/plugin-accounts/operation/pwqualitymanager.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "pwqualitymanager.h" #include #include using namespace dccV25; DCORE_USE_NAMESPACE PwqualityManager::PwqualityManager() : m_passwordMinLen(0) , m_passwordMaxLen(0) { } PwqualityManager *PwqualityManager::instance() { static PwqualityManager pwquality; return &pwquality; } PwqualityManager::ERROR_TYPE PwqualityManager::verifyPassword(const QString &user, const QString &password, CheckType checkType) { switch (checkType) { case PwqualityManager::Default: { ERROR_TYPE error = deepin_pw_check(user.toLocal8Bit().data(), password.toLocal8Bit().data(), LEVEL_STRICT_CHECK, nullptr); if (error == PW_ERR_PW_REPEAT) { error = PW_NO_ERR; } return error; } case PwqualityManager::Grub2: { // LEVEL_STRICT_CHECK? ERROR_TYPE error = deepin_pw_check_grub2(user.toLocal8Bit().data(), password.toLocal8Bit().data(), LEVEL_STANDARD_CHECK, nullptr); if (error == PW_ERR_PW_REPEAT) { error = PW_NO_ERR; } return error; } } return PW_NO_ERR; } PASSWORD_LEVEL_TYPE PwqualityManager::GetNewPassWdLevel(const QString &newPasswd) { return get_new_passwd_strength_level(newPasswd.toLocal8Bit().data()); } QString PwqualityManager::getErrorTips(PwqualityManager::ERROR_TYPE type, CheckType checkType) { int passwordPalimdromeNum = (checkType == Default ? get_pw_palimdrome_num(LEVEL_STRICT_CHECK) : get_pw_palimdrome_num_grub2(LEVEL_STRICT_CHECK)); int passwordMonotoneCharacterNum = (checkType == Default ? get_pw_monotone_character_num(LEVEL_STRICT_CHECK) : get_pw_monotone_character_num_grub2(LEVEL_STRICT_CHECK)); int passwordConsecutiveSameCharacterNum = (checkType == Default ? get_pw_consecutive_same_character_num(LEVEL_STRICT_CHECK) : get_pw_consecutive_same_character_num_grub2(LEVEL_STRICT_CHECK)); m_passwordMinLen = (checkType == Default ? get_pw_min_length(LEVEL_STRICT_CHECK) : get_pw_min_length_grub2(LEVEL_STRICT_CHECK)); m_passwordMaxLen = (checkType == Default ? get_pw_max_length(LEVEL_STRICT_CHECK) : get_pw_max_length_grub2(LEVEL_STRICT_CHECK)); //通用校验规则 QMap PasswordFlagsStrMap = { {PW_ERR_PASSWORD_EMPTY, tr("Password cannot be empty")}, {PW_ERR_LENGTH_SHORT, tr("Password must have at least %1 characters").arg(m_passwordMinLen)}, {PW_ERR_LENGTH_LONG, tr("Password must be no more than %1 characters").arg(m_passwordMaxLen)}, {PW_ERR_CHARACTER_INVALID, tr("Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\\{}[]:\"'<>,.?/)")}, {PW_ERR_PALINDROME, tr("No more than %1 palindrome characters please").arg(passwordPalimdromeNum)}, {PW_ERR_PW_MONOTONE, tr("No more than %1 monotonic characters please").arg(passwordMonotoneCharacterNum)}, {PW_ERR_PW_CONSECUTIVE_SAME, tr("No more than %1 repeating characters please").arg(passwordConsecutiveSameCharacterNum)}, {PW_ERR_CHARACTER_TYPE_TOO_FEW, tr("At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username.").arg(get_pw_min_character_type(0))}, }; //服务器版校验规则 if (DSysInfo::UosServer == DSysInfo::uosType()) { PasswordFlagsStrMap[PW_ERR_CHARACTER_INVALID] = tr("Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\\{}[]:\"'<>,.?/)"); PasswordFlagsStrMap[PW_ERR_PALINDROME] = tr("Password must not contain more than 4 palindrome characters"); PasswordFlagsStrMap[PW_ERR_WORD] = tr("Do not use common words and combinations as password"); PasswordFlagsStrMap[PW_ERR_PW_MONOTONE] = tr("Create a strong password please"); PasswordFlagsStrMap[PW_ERR_PW_CONSECUTIVE_SAME] = tr("Create a strong password please"); PasswordFlagsStrMap[PW_ERR_PW_FIRST_UPPERM] = tr("Do not use common words and combinations as password"); } //规则校验以外的情况统一返回密码不符合安全要求 if (PasswordFlagsStrMap.value(type).isEmpty()) { PasswordFlagsStrMap[type] = tr("It does not meet password rules"); } return PasswordFlagsStrMap.value(type); } ================================================ FILE: src/plugin-accounts/operation/pwqualitymanager.h ================================================ //SPDX-FileCopyrightText: 2018 - 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef DEEPIN_INSTALLER_PWQUALITY_MANAGER_H #define DEEPIN_INSTALLER_PWQUALITY_MANAGER_H #include #include #include namespace dccV25 { class PwqualityManager : public QObject { Q_OBJECT public: typedef PW_ERROR_TYPE ERROR_TYPE; enum CheckType { Default, Grub2 }; /** * @brief PwqualityManager::instance 构造一个 单例 * @return 返回一个静态实例 */ static PwqualityManager* instance(); /** * @brief PwqualityManager::verifyPassword 校验密码 * @param password 带检密码字符串 * @return 若找到,返回text,反之返回空 */ ERROR_TYPE verifyPassword(const QString &user, const QString &password, CheckType checkType = Default); PASSWORD_LEVEL_TYPE GetNewPassWdLevel(const QString &newPasswd); QString getErrorTips(ERROR_TYPE type, CheckType checkType = Default); private: PwqualityManager(); PwqualityManager(const PwqualityManager&) = delete; int m_passwordMinLen; int m_passwordMaxLen; }; } #endif // DEEPIN_INSTALLER_PWQUALITY_MANAGER_H ================================================ FILE: src/plugin-accounts/operation/qrc/accounts.qrc ================================================ icons/dcc_nav_accounts_42px.svg icons/dcc_nav_accounts_84px.svg icons/dcc_avatar_12px.svg icons/dcc_user_animal.dci icons/dcc_user_custom.dci icons/dcc_user_emoji.dci icons/dcc_user_funny.dci icons/dcc_user_human.dci icons/dcc_user_add_icon.dci icons/dcc_user_scenery.dci icons/dcc_deepin_password_strength_high.svg icons/dcc_deepin_password_strength_low.svg icons/dcc_deepin_password_strength_middle.svg icons/dcc_deepin_password_strength_unactive_deep_mode.svg icons/dcc_deepin_password_strength_unactive_light_mode.svg ================================================ FILE: src/plugin-accounts/operation/securitydbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "securitydbusproxy.h" #include #include #include SecurityDBusProxy::SecurityDBusProxy(QObject *parent) : QObject(parent) { init(); } QString SecurityDBusProxy::Status() { QDBusPendingReply reply = m_dBusInter->asyncCall("Status"); reply.waitForFinished(); if (reply.isError()) { m_lastError = reply.error().message(); } else { return reply.argumentAt<0>(); } return QString(); } std::tuple SecurityDBusProxy::GetSEUserByName(const QString &user) { Q_UNUSED(user) std::tuple result; QDBusPendingReply reply = m_dBusInter->asyncCall("GetSEUserByName"); reply.waitForFinished(); if (reply.isError()) { m_lastError = reply.error().message(); } else { result = std::make_tuple(reply.argumentAt<0>(), reply.argumentAt<1>()); } return result; } void SecurityDBusProxy::init() { const QString &service = QStringLiteral("com.deepin.daemon.SecurityEnhance"); const QString &path = QStringLiteral("/com/deepin/daemon/SecurityEnhance"); const QString &interface = QStringLiteral("com.deepin.daemon.SecurityEnhance"); m_dBusInter = new DDBusInterface(service, path, interface, QDBusConnection::systemBus(), this); if (!m_dBusInter->isValid()) { qWarning() << "Security interface invalid: " << m_dBusInter->lastError().message(); return; } } ================================================ FILE: src/plugin-accounts/operation/securitydbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include using Dtk::Core::DDBusInterface; class QDBusMessage; class SecurityDBusProxy : public QObject { Q_OBJECT public: explicit SecurityDBusProxy(QObject *parent = nullptr); QString Status(); std::tuple GetSEUserByName(const QString &user); inline QString lastError() { return m_lastError; } private: void init(); private: DDBusInterface *m_dBusInter; QString m_lastError; }; ================================================ FILE: src/plugin-accounts/operation/syncdbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "syncdbusproxy.h" #include #include #include #include #include #include #include #include SyncDBusProxy::SyncDBusProxy(QObject *parent) : QObject(parent) { init(); } QString SyncDBusProxy::UOSID() { QDBusReply retUOSID = m_dBusInter->call("UOSID"); m_lastError = retUOSID.error().message(); if (m_lastError.isEmpty()) { return retUOSID.value(); } else { qWarning() << "UOSID failed:" << m_lastError; return QString(); } } QString SyncDBusProxy::LocalBindCheck(const QString &uosid, const QString &uuid) { QDBusReply retLocalBindCheck = m_dBusInter->call(QDBus::BlockWithGui, "LocalBindCheck", uosid, uuid); m_lastError = retLocalBindCheck.error().message(); if (m_lastError.isEmpty()) { return retLocalBindCheck.value(); } else { qWarning() << "localBindCheck failed:" << m_lastError; return QString(); } } void SyncDBusProxy::init() { const QString &service = QStringLiteral("com.deepin.sync.Helper"); const QString &path = QStringLiteral("/com/deepin/sync/Helper"); const QString &interface = QStringLiteral("com.deepin.sync.Helper"); m_dBusInter = new QDBusInterface(service, path, interface, QDBusConnection::systemBus(), this); if (!m_dBusInter->isValid()) { qWarning() << "syncHelper interface invalid: " << m_dBusInter->lastError().message(); return; } } ================================================ FILE: src/plugin-accounts/operation/syncdbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include class QDBusInterface; class QDBusMessage; class SyncDBusProxy : public QObject { Q_OBJECT public: explicit SyncDBusProxy(QObject *parent = nullptr); QString UOSID(); QString LocalBindCheck(const QString &uosid, const QString &uuid); inline QString lastError() { return m_lastError; } private: void init(); private: QDBusInterface *m_dBusInter; QString m_lastError; }; ================================================ FILE: src/plugin-accounts/operation/user.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "user.h" using namespace dccV25; User::User(QObject *parent) : QObject(parent) , m_isCurrentUser(false) , m_autoLogin(false) , m_quickLogin(false) , m_online(false) , m_nopasswdLogin(false) , m_userType(UserType::StandardUser) , m_createdTime(0) , m_securityLever(SecurityLever::Standard) { } void User::setId(const QString &id) { if (id != m_id) m_id = id; } const QString User::name() const { return m_name; } void User::setName(const QString &name) { if (name != m_name) { m_name = name; Q_EMIT nameChanged(m_name); } } void User::setFullname(const QString &fullname) { if (fullname != m_fullname) { m_fullname = fullname; Q_EMIT fullnameChanged(m_fullname); } } void User::setAutoLogin(const bool autoLogin) { if (m_autoLogin == autoLogin) return; m_autoLogin = autoLogin; Q_EMIT autoLoginChanged(m_autoLogin); } void User::setQuickLogin(const bool quickLogin) { if (m_quickLogin == quickLogin) return; m_quickLogin = quickLogin; Q_EMIT quickLoginChanged(m_quickLogin); } void User::setAvatars(const QList &avatars) { m_avatars = avatars; Q_EMIT avatarListChanged(m_avatars); } void User::setGroups(const QStringList &groups) { if (m_groups != groups) { m_groups = groups; Q_EMIT groupsChanged(m_groups); } } void User::setCurrentAvatar(const QString &avatar) { if (m_currentAvatar != avatar) { m_currentAvatar = avatar; Q_EMIT currentAvatarChanged(m_currentAvatar); } } void User::setPassword(const QString &password) { m_password = password; } void User::setRepeatPassword(const QString &repeatPassword) { m_repeatPassword = repeatPassword; } void User::setPasswordHint(const QString &passwordHint) { m_passwordHint = passwordHint; } void User::setOnline(bool online) { if (m_online != online) { m_online = online; Q_EMIT onlineChanged(online); } } bool User::nopasswdLogin() const { return m_nopasswdLogin; } void User::setNopasswdLogin(bool nopasswdLogin) { if (m_nopasswdLogin == nopasswdLogin) return; m_nopasswdLogin = nopasswdLogin; Q_EMIT nopasswdLoginChanged(nopasswdLogin); } const QString User::displayName() const { return m_fullname.isEmpty() ? m_name : m_fullname; } void User::setIsCurrentUser(bool isCurrentUser) { if (isCurrentUser == m_isCurrentUser) return; m_isCurrentUser = isCurrentUser; Q_EMIT isCurrentUserChanged(isCurrentUser); } void User::setPasswordStatus(const QString& status) { if (m_passwordStatus == status) { return; } m_passwordStatus = status; Q_EMIT passwordStatusChanged(status); } void User::setCreatedTime(const quint64 & createdtime) { if (m_createdTime == createdtime) { return; } m_createdTime = createdtime; Q_EMIT createdTimeChanged(createdtime); } void User::setUserType(const int userType) { if (m_userType == userType) { return; } m_userType = userType; Q_EMIT userTypeChanged(userType); } void User::setIsPasswordExpired(bool isExpired) { if (isExpired == m_isPasswordExpired) return; m_isPasswordExpired = isExpired; Q_EMIT isPasswordExpiredChanged(isExpired); } void User::setPasswordAge(const int age) { if (age == m_pwAge) return; m_pwAge = age; Q_EMIT passwordAgeChanged(age); } int User::charactertypes(QString password) { int Number_flag = 0; int Capital_flag = 0; int Small_flag = 0; int Symbol_flag = 0; QByteArray ba = password.toLatin1(); const char *s = ba.data(); while (*s) { if ('0' <= *s && '9' >= *s) { Number_flag = 1 ; } else if ('A' <= *s && 'Z' >= *s) { Capital_flag = 1; } else if ('a' <= *s && 'z' >= *s) { Small_flag = 1; } else { Symbol_flag = 1; } s++; } return Number_flag + Capital_flag + Small_flag + Symbol_flag; } void User::setGid(const QString &gid) { if (m_gid == gid) return; m_gid = gid; Q_EMIT gidChanged(gid); } SecurityLever User::securityLever() const { return m_securityLever; } void User::setSecurityLever(const SecurityLever &securityLever) { m_securityLever = securityLever; } ================================================ FILE: src/plugin-accounts/operation/user.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef USER_H #define USER_H #include #include #include static const QString NO_PASSWORD { "NP" }; namespace dccV25 { enum SecurityLever { Standard, Sysadm, Secadm, Audadm, Auditadm }; class User : public QObject { Q_OBJECT public: enum UserType { StandardUser = 0, Administrator, Customized }; explicit User(QObject *parent = nullptr); Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged) Q_PROPERTY(QString fullname READ fullname WRITE setFullname NOTIFY fullnameChanged) const inline QString id() const { return m_id; } void setId(const QString &id); const QString name() const; void setName(const QString &name); const QString fullname() const { return m_fullname; } void setFullname(const QString &fullname); inline bool autoLogin() const { return m_autoLogin; } void setAutoLogin(const bool autoLogin); inline bool quickLogin() const { return m_quickLogin; } void setQuickLogin(const bool quickLogin); inline const QList &avatars() const { return m_avatars; } void setAvatars(const QList &avatars); inline const QStringList &groups() const { return m_groups; } void setGroups(const QStringList &groups); inline const QString currentAvatar() const { return m_currentAvatar; } void setCurrentAvatar(const QString &avatar); inline QString password() const { return m_password; } void setPassword(const QString &password); inline QString repeatPassword() const { return m_repeatPassword; } void setRepeatPassword(const QString &repeatPassword); inline QString passwordHint() const { return m_passwordHint; } void setPasswordHint(const QString &passwordHint); inline bool online() const { return m_online; } void setOnline(bool online); bool nopasswdLogin() const; void setNopasswdLogin(bool nopasswdLogin); const QString displayName() const; inline bool isCurrentUser() const { return m_isCurrentUser; } void setIsCurrentUser(bool isCurrentUser); inline QString passwordStatus() const { return m_passwordStatus; } void setPasswordStatus(const QString& status); inline quint64 createdTime() const { return m_createdTime; } void setCreatedTime(const quint64 & createdtime); inline int userType() const { return m_userType; } void setUserType(const int userType); inline bool isPasswordExpired() const { return m_isPasswordExpired; } void setIsPasswordExpired(bool isExpired); inline int passwordAge() const { return m_pwAge; } void setPasswordAge(const int age); int charactertypes(QString password); inline QString gid() const { return m_gid; } void setGid(const QString &gid); SecurityLever securityLever() const; void setSecurityLever(const SecurityLever &securityLever); Q_SIGNALS: void passwordModifyFinished(const int exitCode, const QString &errorTxt) const; void nameChanged(const QString &name) const; void fullnameChanged(const QString &name) const; void currentAvatarChanged(const QString &avatar) const; void autoLoginChanged(const bool autoLogin) const; void quickLoginChanged(const bool quickLogin) const; void avatarListChanged(const QList &avatars) const; void groupsChanged(const QStringList &groups) const; void onlineChanged(const bool &online) const; void nopasswdLoginChanged(const bool nopasswdLogin) const; void isCurrentUserChanged(bool isCurrentUser); void passwordStatusChanged(const QString& password) const; void createdTimeChanged(const quint64 & createtime); void userTypeChanged(const int userType); void isPasswordExpiredChanged(const bool isExpired) const; void passwordAgeChanged(const int age) const; void gidChanged(const QString &gid); void passwordResetFinished(const QString &errorText) const; void startResetPasswordReplied(const QString &errorText); void setSecurityQuestionsReplied(const QString &errorText); void startSecurityQuestionsCheckReplied(const QList &questios); private: bool m_isCurrentUser; bool m_autoLogin; bool m_quickLogin; bool m_online; bool m_nopasswdLogin; int m_userType; bool m_isPasswordExpired{false}; int m_pwAge{-1}; QString m_name; QString m_fullname; QString m_password; QString m_repeatPassword; QString m_currentAvatar; QString m_passwordStatus; // NP: no password, P have a password, L user is locked QList m_avatars; QStringList m_groups; quint64 m_createdTime; QString m_gid; QString m_passwordHint; QString m_id; SecurityLever m_securityLever; Q_ENUM(SecurityLever); }; } // namespace dccV25 #endif // USER_H ================================================ FILE: src/plugin-accounts/operation/userdbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "userdbusproxy.h" #include #include #include #include #include #include UserDBusProxy::UserDBusProxy(QString accountsUserPath, QObject *parent) : QObject(parent) , m_accountsUserPath(accountsUserPath) { init(); } void UserDBusProxy::init() { const QString AccountsUserService = "org.deepin.dde.Accounts1"; const QString AccountsUserInterface = "org.deepin.dde.Accounts1.User"; const QString PropertiesInterface = "org.freedesktop.DBus.Properties"; const QString PropertiesChanged = "PropertiesChanged"; m_dBusAccountsUserInter = new QDBusInterface(AccountsUserService, m_accountsUserPath, AccountsUserInterface, QDBusConnection::systemBus(), this); QDBusConnection dbusConnection = m_dBusAccountsUserInter->connection(); dbusConnection.connect(AccountsUserService, m_accountsUserPath, PropertiesInterface, PropertiesChanged, this, SLOT(onPropertiesChanged(QDBusMessage))); } //users QDBusPendingReply<> UserDBusProxy::AddGroup(const QString &group) { QList argumentList; argumentList << QVariant::fromValue(group); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("AddGroup"), argumentList); } QDBusPendingReply<> UserDBusProxy::DeleteGroup(const QString &group) { QList argumentList; argumentList << QVariant::fromValue(group); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("DeleteGroup"), argumentList); } QDBusPendingReply<> UserDBusProxy::DeleteIconFile(const QString &iconFile) { QList argumentList; argumentList << QVariant::fromValue(iconFile); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("DeleteIconFile"), argumentList); } QDBusPendingReply<> UserDBusProxy::EnableNoPasswdLogin(bool enabled) { QList argumentList; argumentList << QVariant::fromValue(enabled); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("EnableNoPasswdLogin"), argumentList); } QDBusPendingReply UserDBusProxy::IsPasswordExpired() { QList argumentList; return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("IsPasswordExpired"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetAutomaticLogin(bool enabled) { QList argumentList; argumentList << QVariant::fromValue(enabled); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetAutomaticLogin"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetDesktopBackgrounds(const QStringList &backgrounds) { QList argumentList; argumentList << QVariant::fromValue(backgrounds); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetDesktopBackgrounds"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetFullName(const QString &name) { qInfo() << "m_accountsUserPath" << m_accountsUserPath; QList argumentList; argumentList << QVariant::fromValue(name); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetFullName"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetGreeterBackground(const QString &background) { QList argumentList; argumentList << QVariant::fromValue(background); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetGreeterBackground"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetGroups(const QStringList &groups) { QList argumentList; argumentList << QVariant::fromValue(groups); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetGroups"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetHistoryLayout(const QStringList &layouts) { QList argumentList; argumentList << QVariant::fromValue(layouts); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetHistoryLayout"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetHomeDir(const QString &home) { QList argumentList; argumentList << QVariant::fromValue(home); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetHomeDir"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetIconFile(const QString &iconFile) { QList argumentList; argumentList << QVariant::fromValue(iconFile); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetIconFile"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetLayout(const QString &layout) { QList argumentList; argumentList << QVariant::fromValue(layout); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetLayout"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetLocale(const QString &locale) { QList argumentList; argumentList << QVariant::fromValue(locale); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetLocale"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetLocked(bool locked) { QList argumentList; argumentList << QVariant::fromValue(locked); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetLocked"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetMaxPasswordAge(int nDays) { QList argumentList; argumentList << QVariant::fromValue(nDays); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetMaxPasswordAge"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetPassword(const QString &password) { QList argumentList; argumentList << QVariant::fromValue(password); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetPassword"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetPasswordHint(const QString &hint) { QList argumentList; argumentList << QVariant::fromValue(hint); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetPasswordHint"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetShell(const QString &shell) { QList argumentList; argumentList << QVariant::fromValue(shell); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetShell"), argumentList); } QDBusPendingReply> UserDBusProxy::GetSecretQuestions() { //获取安全问题需要使用同步调用 return m_dBusAccountsUserInter->call(QStringLiteral("GetSecretQuestions")); } QDBusPendingReply<> UserDBusProxy::SetSecretQuestions(const QMap &securityQuestions) { QList argumentList; argumentList << QVariant::fromValue(securityQuestions); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetSecretQuestions"), argumentList); } QDBusPendingReply<> UserDBusProxy::SetQuickLogin(bool enabled) { QList argumentList; argumentList << QVariant::fromValue(enabled); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("SetQuickLogin"), argumentList); } QDBusPendingReply<> UserDBusProxy::EnableWechatAuth(bool enabled) { QList argumentList; argumentList << QVariant::fromValue(enabled); return m_dBusAccountsUserInter->asyncCallWithArgumentList(QStringLiteral("EnableWechatAuth"), argumentList); } //获取属性值 int UserDBusProxy::accountType() { return qvariant_cast(m_dBusAccountsUserInter->property("AccountType")); } bool UserDBusProxy::automaticLogin() { return qvariant_cast(m_dBusAccountsUserInter->property("AutomaticLogin")); } qulonglong UserDBusProxy::createdTime() { return qvariant_cast(m_dBusAccountsUserInter->property("CreatedTime")); } QStringList UserDBusProxy::desktopBackgrounds() { return qvariant_cast(m_dBusAccountsUserInter->property("DesktopBackgrounds")); } QString UserDBusProxy::fullName() { return qvariant_cast(m_dBusAccountsUserInter->property("FullName")); } QString UserDBusProxy::gid() { return qvariant_cast(m_dBusAccountsUserInter->property("Gid")); } QString UserDBusProxy::greeterBackground() { return qvariant_cast(m_dBusAccountsUserInter->property("GreeterBackground")); } QStringList UserDBusProxy::groups() { return qvariant_cast(m_dBusAccountsUserInter->property("Groups")); } QStringList UserDBusProxy::historyLayout() { return qvariant_cast(m_dBusAccountsUserInter->property("HistoryLayout")); } QString UserDBusProxy::homeDir() { return qvariant_cast(m_dBusAccountsUserInter->property("HomeDir")); } QString UserDBusProxy::iconFile() { return qvariant_cast(m_dBusAccountsUserInter->property("IconFile")); } QStringList UserDBusProxy::iconList() { return qvariant_cast(m_dBusAccountsUserInter->property("IconList")); } QString UserDBusProxy::layout() { return qvariant_cast(m_dBusAccountsUserInter->property("Layout")); } QString UserDBusProxy::locale() { return qvariant_cast(m_dBusAccountsUserInter->property("Locale")); } bool UserDBusProxy::locked() { return qvariant_cast(m_dBusAccountsUserInter->property("Locked")); } qulonglong UserDBusProxy::loginTime() { return qvariant_cast(m_dBusAccountsUserInter->property("LoginTime")); } int UserDBusProxy::longDateFormat() { return qvariant_cast(m_dBusAccountsUserInter->property("LongDateFormat")); } int UserDBusProxy::longTimeFormat() { return qvariant_cast(m_dBusAccountsUserInter->property("LongTimeFormat")); } int UserDBusProxy::maxPasswordAge() { return qvariant_cast(m_dBusAccountsUserInter->property("MaxPasswordAge")); } bool UserDBusProxy::noPasswdLogin() { return qvariant_cast(m_dBusAccountsUserInter->property("NoPasswdLogin")); } QString UserDBusProxy::passwordHint() { return qvariant_cast(m_dBusAccountsUserInter->property("PasswordHint")); } int UserDBusProxy::passwordLastChange() { return qvariant_cast(m_dBusAccountsUserInter->property("PasswordLastChange")); } QString UserDBusProxy::passwordStatus() { return qvariant_cast(m_dBusAccountsUserInter->property("PasswordStatus")); } QString UserDBusProxy::shell() { return qvariant_cast(m_dBusAccountsUserInter->property("Shell")); } int UserDBusProxy::shortDateFormat() { return qvariant_cast(m_dBusAccountsUserInter->property("ShortDateFormat")); } int UserDBusProxy::shortTimeFormat() { return qvariant_cast(m_dBusAccountsUserInter->property("ShortTimeFormat")); } bool UserDBusProxy::systemAccount() { return qvariant_cast(m_dBusAccountsUserInter->property("SystemAccount")); } QString UserDBusProxy::uid() { return qvariant_cast(m_dBusAccountsUserInter->property("Uid")); } QString UserDBusProxy::uuid() { return qvariant_cast(m_dBusAccountsUserInter->property("UUID")); } bool UserDBusProxy::use24HourFormat() { return qvariant_cast(m_dBusAccountsUserInter->property("Use24HourFormat")); } QString UserDBusProxy::userName() { return qvariant_cast(m_dBusAccountsUserInter->property("UserName")); } int UserDBusProxy::weekBegins() { return qvariant_cast(m_dBusAccountsUserInter->property("WeekBegins")); } int UserDBusProxy::weekdayFormat() { return qvariant_cast(m_dBusAccountsUserInter->property("WeekdayFormat")); } QString UserDBusProxy::xSession() { return qvariant_cast(m_dBusAccountsUserInter->property("XSession")); } void UserDBusProxy::onPropertiesChanged(const QDBusMessage &message) { QVariantMap changedProps = qdbus_cast(message.arguments().at(1).value()); for (QVariantMap::const_iterator it = changedProps.begin(); it != changedProps.end(); ++it) { QMetaObject::invokeMethod(this, it.key().toLatin1() + "Changed", Qt::DirectConnection, QGenericArgument(it.value().typeName(), it.value().data())); } } bool UserDBusProxy::quickLogin() const { return qvariant_cast(m_dBusAccountsUserInter->property("QuickLogin")); } bool UserDBusProxy::wechatAuth() const { return qvariant_cast(m_dBusAccountsUserInter->property("WechatAuthEnabled")); } ================================================ FILE: src/plugin-accounts/operation/userdbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef USERDBUSPROXY_H #define USERDBUSPROXY_H #include #include class QDBusInterface; class QDBusMessage; class UserDBusProxy : public QObject { Q_OBJECT public: explicit UserDBusProxy(QString accountsUserPath, QObject *parent = nullptr); Q_PROPERTY(int AccountType READ accountType NOTIFY AccountTypeChanged) int accountType(); Q_PROPERTY(bool AutomaticLogin READ automaticLogin NOTIFY AutomaticLoginChanged) bool automaticLogin(); Q_PROPERTY(qulonglong CreatedTime READ createdTime NOTIFY CreatedTimeChanged) qulonglong createdTime(); Q_PROPERTY(QStringList DesktopBackgrounds READ desktopBackgrounds NOTIFY DesktopBackgroundsChanged) QStringList desktopBackgrounds(); Q_PROPERTY(QString FullName READ fullName NOTIFY FullNameChanged) QString fullName(); Q_PROPERTY(QString Gid READ gid NOTIFY GidChanged) QString gid(); Q_PROPERTY(QString GreeterBackground READ greeterBackground NOTIFY GreeterBackgroundChanged) QString greeterBackground(); Q_PROPERTY(QStringList Groups READ groups NOTIFY GroupsChanged) QStringList groups(); Q_PROPERTY(QStringList HistoryLayout READ historyLayout NOTIFY HistoryLayoutChanged) QStringList historyLayout(); Q_PROPERTY(QString HomeDir READ homeDir NOTIFY HomeDirChanged) QString homeDir(); Q_PROPERTY(QString IconFile READ iconFile NOTIFY IconFileChanged) QString iconFile(); Q_PROPERTY(QStringList IconList READ iconList NOTIFY IconListChanged) QStringList iconList(); Q_PROPERTY(QString Layout READ layout NOTIFY LayoutChanged) QString layout(); Q_PROPERTY(QString Locale READ locale NOTIFY LocaleChanged) QString locale(); Q_PROPERTY(bool Locked READ locked NOTIFY LockedChanged) bool locked(); Q_PROPERTY(qulonglong LoginTime READ loginTime NOTIFY LoginTimeChanged) qulonglong loginTime(); Q_PROPERTY(int LongDateFormat READ longDateFormat NOTIFY LongDateFormatChanged) int longDateFormat(); Q_PROPERTY(int LongTimeFormat READ longTimeFormat NOTIFY LongTimeFormatChanged) int longTimeFormat(); Q_PROPERTY(int MaxPasswordAge READ maxPasswordAge NOTIFY MaxPasswordAgeChanged) int maxPasswordAge(); Q_PROPERTY(bool NoPasswdLogin READ noPasswdLogin NOTIFY NoPasswdLoginChanged) bool noPasswdLogin(); Q_PROPERTY(QString PasswordHint READ passwordHint NOTIFY PasswordHintChanged) QString passwordHint(); Q_PROPERTY(int PasswordLastChange READ passwordLastChange NOTIFY PasswordLastChangeChanged) int passwordLastChange(); Q_PROPERTY(QString PasswordStatus READ passwordStatus NOTIFY PasswordStatusChanged) QString passwordStatus(); Q_PROPERTY(QString Shell READ shell NOTIFY ShellChanged) QString shell(); Q_PROPERTY(int ShortDateFormat READ shortDateFormat NOTIFY ShortDateFormatChanged) int shortDateFormat(); Q_PROPERTY(int ShortTimeFormat READ shortTimeFormat NOTIFY ShortTimeFormatChanged) int shortTimeFormat(); Q_PROPERTY(bool SystemAccount READ systemAccount NOTIFY SystemAccountChanged) bool systemAccount(); Q_PROPERTY(QString Uid READ uid NOTIFY UidChanged) QString uid(); Q_PROPERTY(QString UUID READ uuid NOTIFY UUIDChanged) QString uuid(); Q_PROPERTY(bool Use24HourFormat READ use24HourFormat NOTIFY Use24HourFormatChanged) bool use24HourFormat(); Q_PROPERTY(QString UserName READ userName NOTIFY UserNameChanged) QString userName(); Q_PROPERTY(int WeekBegins READ weekBegins NOTIFY WeekBeginsChanged) int weekBegins(); Q_PROPERTY(int WeekdayFormat READ weekdayFormat NOTIFY WeekdayFormatChanged) int weekdayFormat(); Q_PROPERTY(QString XSession READ xSession NOTIFY XSessionChanged) QString xSession(); Q_PROPERTY(bool QuickLogin READ quickLogin NOTIFY QuickLoginChanged) bool quickLogin() const; Q_PROPERTY(bool WechatAuthEnabled READ wechatAuth NOTIFY WechatAuthChanged) bool wechatAuth() const; inline QString path() { return m_accountsUserPath; } inline const QDBusInterface* interface() { return m_dBusAccountsUserInter; } signals: // begin property changed signals void AccountTypeChanged(int value) const; void AutomaticLoginChanged(bool value) const; void CreatedTimeChanged(qulonglong value) const; void DesktopBackgroundsChanged(const QStringList & value) const; void FullNameChanged(const QString & value) const; void GidChanged(const QString & value) const; void GreeterBackgroundChanged(const QString & value) const; void GroupsChanged(const QStringList & value) const; void HistoryLayoutChanged(const QStringList & value) const; void HomeDirChanged(const QString & value) const; void IconFileChanged(const QString & value) const; void IconListChanged(const QStringList & value) const; void LayoutChanged(const QString & value) const; void LocaleChanged(const QString & value) const; void LockedChanged(bool value) const; void LoginTimeChanged(qulonglong value) const; void LongDateFormatChanged(int value) const; void LongTimeFormatChanged(int value) const; void MaxPasswordAgeChanged(int value) const; void NoPasswdLoginChanged(bool value) const; void PasswordHintChanged(const QString & value) const; void PasswordLastChangeChanged(int value) const; void PasswordStatusChanged(const QString & value) const; void ShellChanged(const QString & value) const; void ShortDateFormatChanged(int value) const; void ShortTimeFormatChanged(int value) const; void SystemAccountChanged(bool value) const; void UidChanged(const QString & value) const; void UUIDChanged(const QString & value) const; void Use24HourFormatChanged(bool value) const; void UserNameChanged(const QString & value) const; void WeekBeginsChanged(int value) const; void WeekdayFormatChanged(int value) const; void XSessionChanged(const QString & value) const; void QuickLoginChanged(bool value) const; void WechatAuthChanged(); public slots: QDBusPendingReply<> AddGroup(const QString &group); QDBusPendingReply<> DeleteGroup(const QString &group); QDBusPendingReply<> DeleteIconFile(const QString &iconFile); QDBusPendingReply<> EnableNoPasswdLogin(bool enabled); QDBusPendingReply IsPasswordExpired(); QDBusPendingReply<> SetAutomaticLogin(bool enabled); QDBusPendingReply<> SetDesktopBackgrounds(const QStringList &backgrounds); QDBusPendingReply<> SetFullName(const QString &name); QDBusPendingReply<> SetGreeterBackground(const QString &background); QDBusPendingReply<> SetGroups(const QStringList &groups); QDBusPendingReply<> SetHistoryLayout(const QStringList &layouts); QDBusPendingReply<> SetHomeDir(const QString &home); QDBusPendingReply<> SetIconFile(const QString &iconFile); QDBusPendingReply<> SetLayout(const QString &layout); QDBusPendingReply<> SetLocale(const QString &locale); QDBusPendingReply<> SetLocked(bool locked); QDBusPendingReply<> SetMaxPasswordAge(int nDays); QDBusPendingReply<> SetPassword(const QString &password); QDBusPendingReply<> SetPasswordHint(const QString &hint); QDBusPendingReply<> SetShell(const QString &shell); QDBusPendingReply> GetSecretQuestions(); QDBusPendingReply<> SetSecretQuestions(const QMap &securityQuestions); QDBusPendingReply<> SetQuickLogin(bool enabled); QDBusPendingReply<> EnableWechatAuth(bool enabled); private slots: void onPropertiesChanged(const QDBusMessage &message); private: void init(); private: QDBusInterface *m_dBusAccountsUserInter; QString m_accountsUserPath; }; #endif // USERDBUSPROXY_H ================================================ FILE: src/plugin-accounts/operation/usermodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "usermodel.h" #include using namespace dccV25; UserModel::UserModel(QObject *parent) : QObject(parent) , m_autoLoginVisable(true) , m_quickLoginVisible(true) , m_noPassWordLoginVisable(true) , m_bCreateUserValid(false) , m_isJoinADDomain(false) , m_isADUserLogind(false) , m_isSecurityHighLever(false) { } UserModel::~UserModel() { qDeleteAll(m_userList.values()); } User * UserModel::getUser(const QString &id) { return m_userList.value(id, nullptr); } QList UserModel::userList() const { for(auto user : m_userList) { if (m_onlineUsers.contains(user->name())) user->setOnline(true); else user->setOnline(false); } return m_userList.values(); } void UserModel::addUser(const QString &id, User *user) { Q_ASSERT(!m_userList.contains(id)); m_userList[id] = user; connect(user, &User::currentAvatarChanged, this, [this, user](const QString &avatar){ Q_EMIT avatarChanged(user->id(), avatar); }); connect(user, &User::autoLoginChanged, this, [this, user](const bool enable){ Q_EMIT autoLoginChanged(user->id(), enable); }); connect(user, &User::quickLoginChanged, this, [this, user](const bool enable){ Q_EMIT quickLoginChanged(user->id(), enable); }); connect(user, &User::nopasswdLoginChanged, this, [this, user](const bool enable){ Q_EMIT nopasswdLoginChanged(user->id(), enable); }); connect(user, &User::groupsChanged, this, [this, user](const QStringList &groups){ Q_EMIT groupsChanged(user->id(), groups); }); connect(user, &User::passwordModifyFinished, this, [this, user](const int exitCode, const QString &errorTxt){ Q_EMIT passwordModifyFinished(user->id(), exitCode, errorTxt); }); connect(user, &User::passwordResetFinished, this, [this, user](const QString &errorTxt){ Q_EMIT passwordModifyFinished(user->id(), errorTxt.isEmpty() ? 0 : -1, errorTxt); }); connect(user, &User::onlineChanged, this, [this, user](const bool &online){ Q_EMIT onlineChanged(user->id(), online); }); connect(user, &User::userTypeChanged, this, [this, user](const int userType){ Q_EMIT userTypeChanged(user->id(), userType); }); connect(user, &User::fullnameChanged, this, [this, user](const QString &fullname){ Q_EMIT fullnameChanged(user->id(), fullname); }); connect(user, &User::passwordAgeChanged, this, [this, user](const int age){ Q_EMIT passwordAgeChanged(user->id(), age); }); Q_EMIT userAdded(user); } void UserModel::removeUser(const QString &id) { Q_ASSERT(m_userList.contains(id)); User *user = m_userList[id]; m_userList.remove(id); Q_EMIT userRemoved(user); } bool UserModel::contains(const QString &id) { return m_userList.contains(id); } void UserModel::setAutoLoginVisable(const bool visable) { if (m_autoLoginVisable == visable) return; m_autoLoginVisable = visable; Q_EMIT autoLoginVisableChanged(m_autoLoginVisable); } void UserModel::setQuickLoginVisible(const bool visible) { if (m_quickLoginVisible == visible) return; m_quickLoginVisible = visible; Q_EMIT quickLoginVisibleChanged(m_quickLoginVisible); } void UserModel::setCreateUserValid(bool bValid) { if (m_bCreateUserValid == bValid) return; m_bCreateUserValid = bValid; } void UserModel::setNoPassWordLoginVisable(const bool visable) { if (m_noPassWordLoginVisable == visable) return; m_noPassWordLoginVisable = visable; Q_EMIT noPassWordLoginVisableChanged(m_noPassWordLoginVisable); } QStringList UserModel::getAllGroups() { return m_allGroups; } void UserModel::setPresetGroups(const QStringList &presetGroups) { m_presetGroups = presetGroups; } void UserModel::setAllGroups(const QStringList &groups) { if (m_allGroups == groups) { return; } m_allGroups = groups; Q_EMIT allGroupsChange(groups); } QStringList UserModel::getPresetGroups() { return m_presetGroups; } QString UserModel::getCurrentUserName() const { return m_currentUserName; } void UserModel::setCurrentUserName(const QString ¤tUserName) { m_currentUserName = currentUserName; } User *UserModel::currentUser() { for (auto user : userList()) { if (user->name() == m_currentUserName) { return user; } } return nullptr; } bool UserModel::getIsSecurityHighLever() const { return m_isSecurityHighLever; } void UserModel::setIsSecurityHighLever(bool isSecurityHighLever) { m_isSecurityHighLever = isSecurityHighLever; } bool UserModel::isDisabledGroup(const QString &groupName) { return m_DisabledGroups.contains(groupName); } void UserModel::setDisabledGroups(const QStringList &groups) { m_DisabledGroups = groups; } void UserModel::SetOnlineUsers(QStringList onlineUsers) { m_onlineUsers = onlineUsers; } void UserModel::setIsJoinADDomain(bool isJoinADDomain) { if (m_isJoinADDomain == isJoinADDomain) return; m_isJoinADDomain = isJoinADDomain; Q_EMIT isJoinADDomainChanged(isJoinADDomain); } void UserModel::setADUserLogind(bool isADUserLogind) { if (m_isADUserLogind == isADUserLogind) { return; } m_isADUserLogind = isADUserLogind; Q_EMIT isADUserLoginChanged(isADUserLogind); } ================================================ FILE: src/plugin-accounts/operation/usermodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef USERMODEL_H #define USERMODEL_H #include #include #include "user.h" namespace dccV25 { class UserModel : public QObject { Q_OBJECT public: explicit UserModel(QObject *parent = nullptr); ~UserModel(); User *getUser(const QString &id); QList userList() const; void addUser(const QString &id, User *user); void removeUser(const QString &id); bool contains(const QString &id); inline bool isAutoLoginVisable() const { return m_autoLoginVisable; } void setAutoLoginVisable(const bool visable); inline bool isQuickLoginVisible() const { return m_quickLoginVisible; } void setQuickLoginVisible(const bool visible); inline bool isCreateUserValid() const { return m_bCreateUserValid; } void setCreateUserValid(bool bValid); inline bool isNoPassWordLoginVisable() const { return m_noPassWordLoginVisable; } void setNoPassWordLoginVisable(const bool visable); bool isJoinADDomain() const { return m_isJoinADDomain; } void setIsJoinADDomain(bool isJoinADDomain); bool isADUserLogind() const { return m_isADUserLogind; } void setADUserLogind(bool isADUserLogind); void setAllGroups(const QStringList &groups); QStringList getAllGroups(); void setPresetGroups(const QStringList &presetGroups); QStringList getPresetGroups(); QString getCurrentUserName() const; void setCurrentUserName(const QString ¤tUserName); User *currentUser(); bool getIsSecurityHighLever() const; void setIsSecurityHighLever(bool isSecurityHighLever); inline QStringList getOnlineUsers() { return m_onlineUsers; } void SetOnlineUsers(QStringList onlineUsers); bool isDisabledGroup(const QString &groupName); void setDisabledGroups(const QStringList &groups); enum ActionOption { ClickCancel = 0, CreateUserSuccess, ModifyPwdSuccess }; Q_SIGNALS: void userAdded(User *user); void userRemoved(User *user); void avatarChanged(const QString &userId, const QString &avatar); void autoLoginChanged(const QString &userId, bool enable); void quickLoginChanged(const QString &userId, bool enable); void nopasswdLoginChanged(const QString &userId, bool enable); void groupsChanged(const QString &userId, const QStringList &groups); void passwordModifyFinished(const QString &userId, const int exitCode, const QString &errorTxt); void onlineChanged(const QString &userId, const bool &online) const; void userTypeChanged(const QString &userId, const int userType); void fullnameChanged(const QString &userId, const QString &fullname); void passwordAgeChanged(const QString &userId, const int age); void isJoinADDomainChanged(bool isjoin); void isADUserLoginChanged(bool isLogind); void allGroupsChange(const QStringList &groups); void deleteUserSuccess(); void autoLoginVisableChanged(bool autoLogin); void quickLoginVisibleChanged(bool quickLogin); void noPassWordLoginVisableChanged(bool noPassword); void isCancelChanged(); void adminCntChange(const int adminCnt); private: bool m_autoLoginVisable; bool m_quickLoginVisible; bool m_noPassWordLoginVisable; bool m_bCreateUserValid; QMap m_userList; QStringList m_allGroups; QStringList m_presetGroups; QString m_currentUserName; bool m_isJoinADDomain; bool m_isADUserLogind; bool m_isSecurityHighLever; QStringList m_DisabledGroups; QStringList m_onlineUsers; }; } // namespace dccV25 #endif // USERMODEL_H ================================================ FILE: src/plugin-accounts/qml/AccountSettings.qml ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 import org.deepin.dtk.style 1.0 as DS DccObject { id: settings property string userId property string papaName property bool autoLoginChecked: true property bool nopasswdLoginChecked: true property bool noQuickLoginChecked: true Component.onCompleted: { updateLoginSettings() } onUserIdChanged: { updateLoginSettings() } function updateLoginSettings() { settings.autoLoginChecked = dccData.autoLogin(settings.userId) settings.nopasswdLoginChecked = dccData.nopasswdLogin(settings.userId) settings.noQuickLoginChecked = dccData.quickLogin(settings.userId) } FontMetrics { id: fm } // 账户头像 DccObject { id: userAvatars name: "userAvatars" parentName: settings.papaName weight: 10 canSearch: settings.canSearch pageType: DccObject.Item page: Rectangle { id: item color: "transparent" implicitHeight: 100 Control { id: control implicitWidth: 100 implicitHeight: 100 antialiasing: true hoverEnabled: true MouseArea { anchors.fill: parent Loader { id: dilogLoader active: false sourceComponent: AvatarSettingsDialog { id: dialog userId: settings.userId currentAvatar: dccData.avatar(settings.userId) onAccepted: { if (currentAvatar.length > 0) dccData.setAvatar(settings.userId, currentAvatar) } onClosing: function (close) { dilogLoader.active = false } } onLoaded: function () { dilogLoader.item.show() } } Connections { target: dccData function onAvatarChanged(userId, avatar) { if (userId === settings.userId) { image.source = dccData.avatar(userId) } } function onAutoLoginChanged(userId, enable) { if (userId === settings.userId) { settings.autoLoginChecked = enable } } function onNopasswdLoginChanged(userId, enable) { if (userId === settings.userId) { settings.nopasswdLoginChecked = enable } } function onQuickLoginChanged(userId, enable) { if (userId === settings.userId) { settings.noQuickLoginChecked = enable } } function onUserRemoved(userId) { if (userId === settings.userId) { DccApp.showPage("accounts") } } } onClicked: { dilogLoader.active = true } } // crashed https://github.com/linuxdeepin/dtkdeclarative/pull/385 // ToolTip.text: qsTr("Clicked to changed avatar") // ToolTip.visible: control.hovered Image { id: image source: dccData.avatar(settings.userId) asynchronous: true visible: false anchors.fill: parent width: 100 height: 100 fillMode: Image.PreserveAspectCrop clip: true } Rectangle { id: mask radius: width / 2 visible: false anchors.fill: parent } OpacityMask { id: opMask source:image maskSource: mask anchors.fill: image } Rectangle { id: shadow visible: false anchors.fill: parent // color: Qt.rgba(0, 0, 0, 0.5) gradient: Gradient { GradientStop { position: 0.0; color: Qt.rgba(0, 0, 0, 0) } GradientStop { position: 0.7; color: Qt.rgba(0, 0, 0, 0) } GradientStop { position: 1.0; color: Qt.rgba(0, 0, 0, 1) } } } OpacityMask { id: shadowOpMask source:shadow maskSource: mask visible: control.hovered anchors.fill: shadow } Text { id: editText text: qsTr("edit") color: "white" visible: control.hovered anchors { horizontalCenter: control.horizontalCenter bottom: control.bottom bottomMargin: 2 } } } ColumnLayout { id: columLayout anchors.left: control.right anchors.leftMargin: 10 anchors.verticalCenter: item.verticalCenter Text { text: dccData.userName(settings.userId) font.pointSize: 16 font.bold: true color: palette.text elide: Text.ElideRight maximumLineCount: 1 Layout.maximumWidth: item.width - 230 } Text { id: userTypeName text: dccData.userTypeName(settings.userId) color: palette.text Connections { target: dccData function onUserTypeChanged(userId, type) { if (userId === settings.userId) { userTypeName.text = dccData.userTypeName(settings.userId) } } } } } RowLayout { anchors { left: columLayout.right right: parent.right leftMargin: 10 verticalCenter: item.verticalCenter } Item { Layout.fillWidth: true } Button { text: qsTr("Add new user") Layout.alignment: Qt.AlignRight | Qt.AlignHCenter Layout.rightMargin: 10 implicitWidth: implicitContentWidth + 20 implicitHeight: 30 onClicked: { cadLoader.active = true } Loader { id: cadLoader active: false sourceComponent: CreateAccountDialog { onClosing: function (close) { cadLoader.active = false } } onLoaded: function () { cadLoader.item.show() } } } } } } // 账户信息 DccTitleObject { name: "acountInfosTitle" parentName: settings.papaName displayName: qsTr("Account Information") canSearch: settings.canSearch weight: 18 } DccObject { name: settings.papaName + "acountInfos" parentName: settings.papaName description: qsTr("Account name, account fullname, account type") canSearch: settings.canSearch weight: 20 pageType: DccObject.Item page: DccGroupView {} DccObject { name: settings.papaName + "acountName" parentName: settings.papaName + "acountInfos" displayName: qsTr("Account name") canSearch: settings.canSearch weight: 10 pageType: DccObject.Editor page: Label { text: dccData.userName(settings.userId) } } DccObject { name: settings.papaName + "acountFullname" parentName: settings.papaName + "acountInfos" displayName: qsTr("Account fullname") canSearch: settings.canSearch weight: 20 pageType: DccObject.Editor page: RowLayout { property string originalFullName: "" // Store original name here EditActionLabel { id: fullNameEdit property bool rightClickPressed: false property bool contextMenuVisible: false property int savedSelectionStart: -1 property int savedSelectionEnd: -1 property string savedSelectedText: "" implicitWidth: 200 text: dccData.fullName(settings.userId) placeholderText: qsTr("Set fullname") horizontalAlignment: TextInput.AlignRight editBtn.visible: readOnly onEditingFinished: { if (readOnly) return if (contextMenuVisible) { return } if (rightClickPressed) { rightClickPressed = false return } if (showAlert) showAlert = false readOnly = true finished() } ToolTip { visible: parent.hovered && parent.readOnly && parent.completeText != "" && (parent.metrics.advanceWidth(parent.completeText) > (parent.width - parent.rightPadding - 10)) text: parent.completeText } Component.onCompleted: { completeText = text var elidedText = metrics.elidedText(completeText, Text.ElideRight, width - rightPadding - 10) text = elidedText } Menu { id: contextMenu onAboutToShow: { fullNameEdit.contextMenuVisible = true if (fullNameEdit.savedSelectionStart >= 0 && fullNameEdit.savedSelectionEnd >= 0) { Qt.callLater(function() { fullNameEdit.select(fullNameEdit.savedSelectionStart, fullNameEdit.savedSelectionEnd) }) } } onAboutToHide: { fullNameEdit.contextMenuVisible = false Qt.callLater(function() { fullNameEdit.rightClickPressed = false fullNameEdit.forceActiveFocus() fullNameEdit.savedSelectionStart = -1 fullNameEdit.savedSelectionEnd = -1 fullNameEdit.savedSelectedText = "" }) } Action { text: qsTr("Undo") enabled: fullNameEdit.canUndo && !fullNameEdit.readOnly onTriggered: { fullNameEdit.undo() Qt.callLater(function() { fullNameEdit.forceActiveFocus() }) } } Action { text: qsTr("Redo") enabled: fullNameEdit.canRedo && !fullNameEdit.readOnly onTriggered: { fullNameEdit.redo() Qt.callLater(function() { fullNameEdit.forceActiveFocus() }) } } MenuSeparator {} Action { text: qsTr("Cut") enabled: fullNameEdit.savedSelectedText.length > 0 && !fullNameEdit.readOnly onTriggered: { fullNameEdit.cut() Qt.callLater(function() { fullNameEdit.forceActiveFocus() }) } } Action { text: qsTr("Copy") enabled: fullNameEdit.savedSelectedText.length > 0 onTriggered: { fullNameEdit.copy() Qt.callLater(function() { fullNameEdit.forceActiveFocus() }) } } Action { text: qsTr("Paste") enabled: !fullNameEdit.readOnly onTriggered: { fullNameEdit.paste() Qt.callLater(function() { fullNameEdit.forceActiveFocus() }) } } MenuSeparator {} Action { text: qsTr("Select All") enabled: fullNameEdit.text.length > 0 onTriggered: { fullNameEdit.selectAll() Qt.callLater(function() { fullNameEdit.forceActiveFocus() }) } } } // 右键菜单处理 MouseArea { anchors.fill: parent acceptedButtons: Qt.RightButton onPressed: function(mouse) { if (mouse.button === Qt.RightButton && parent.text.length > 0) { parent.savedSelectionStart = parent.selectionStart parent.savedSelectionEnd = parent.selectionEnd parent.savedSelectedText = parent.selectedText parent.rightClickPressed = true } } onClicked: function(mouse) { if (mouse.button === Qt.RightButton && parent.text.length > 0) { contextMenu.popup() mouse.accepted = true } } } onReadOnlyChanged: { if (rightClickPressed) { return } // Store the original text when editing starts if (!readOnly) { text = completeText originalFullName = completeText rightClickPressed = false } } onTextEdited: { rightClickPressed = false if (showAlert) showAlert = false // validtor can not paste invalid text.. var regex = /^[^:]{0,32}$/ if (!regex.test(text)) { var filteredText = text filteredText = filteredText.replace(":", "") if (filteredText.length > 32) { showAlert = true alertText = qsTr("The full name is too long") dccData.playSystemSound(14) } // 长度 32 filteredText = filteredText.slice(0, 32) text = filteredText } } onFinished: function () { if (rightClickPressed) { fullNameEdit.readOnly = false return } // If text hasn't changed, do nothing if (text === originalFullName) { var elidedText = fullNameEdit.metrics.elidedText(fullNameEdit.completeText, Text.ElideRight, fullNameEdit.width - fullNameEdit.rightPadding - 10) fullNameEdit.text = elidedText return; } // --- Original validation and saving logic --- let alertMsg = dccData.checkFullname(text) if (alertMsg.length > 0) { showAlert = false showAlert = true alertText = alertMsg readOnly = false return } if (text.trim().length === 0) { dccData.setFullname(settings.userId, ""); fullNameEdit.text = ""; return; } dccData.setFullname(settings.userId, text) } Connections { target: dccData function onFullnameChanged(userId, fullname) { if (userId === settings.userId) { fullNameEdit.completeText = dccData.fullName(settings.userId) var elidedText = fullNameEdit.metrics.elidedText(fullNameEdit.completeText, Text.ElideRight, fullNameEdit.width - fullNameEdit.rightPadding - 10) fullNameEdit.text = elidedText } } } } } } DccObject { name: settings.papaName + "acountType" parentName: settings.papaName + "acountInfos" displayName: qsTr("Account type") canSearch: settings.canSearch weight: 30 pageType: DccObject.Editor enabled: dccData.isDeleteAble(settings.userId) page: ComboBox { flat: true model: dccData.userTypes() currentIndex: dccData.userType(settings.userId) onActivated: function (index) { dccData.setUserType(settings.userId, index) } Connections { target: dccData function onUserTypeChanged(userId, type) { if (userId === settings.userId) { currentIndex = type } } } } } } // 登陆设置 DccTitleObject { name: settings.papaName + "acountSettingsTitle" parentName: settings.papaName displayName: qsTr("Login settings") canSearch: settings.canSearch weight: 28 visible: acountSettings.visible } DccObject { id: acountSettings name: settings.papaName + "acountSettings" parentName: settings.papaName description: qsTr("quick login, Auto login, login without password") canSearch: settings.canSearch weight: 30 pageType: DccObject.Item page: DccGroupView {} visible: (autoLongin.visible || noPassword.visible || quickLogin.visible) && !DccApp.isTreeland() DccObject { id: quickLogin name: settings.papaName + "quickLogin" parentName: settings.papaName + "acountSettings" displayName: qsTr("Quick login") canSearch: settings.canSearch weight: 20 pageType: DccObject.Editor visible: dccData.isQuickLoginVisible enabled: dccData.currentUserId() === settings.userId page: Switch { checked: settings.noQuickLoginChecked onCheckedChanged: { if (settings.noQuickLoginChecked != checked) settings.noQuickLoginChecked = checked dccData.setQuickLogin(settings.userId, checked) } } } DccObject { id: autoLongin name: settings.papaName + "autoLongin" parentName: settings.papaName + "acountSettings" displayName: qsTr("Auto login") canSearch: settings.canSearch weight: 10 pageType: DccObject.Editor visible: dccData.isAutoLoginVisable() enabled: dccData.currentUserId() === settings.userId page: Switch { checked: settings.autoLoginChecked onCheckedChanged: { if (settings.autoLoginChecked != checked) settings.autoLoginChecked = checked if (checked) { var userName = dccData.getOtherUserAutoLogin() if (userName.length > 0) { awdLoader.active = true awdLoader.item.userName = userName return } } dccData.setAutoLogin(settings.userId, checked) } Loader { id: awdLoader active: false sourceComponent: AutoLoginWarningDialog { onClosing: function (close) { awdLoader.active = false settings.autoLoginChecked = false } } onLoaded: function () { awdLoader.item.show() } } } } DccObject { id: noPassword name: settings.papaName + "noPassword" parentName: settings.papaName + "acountSettings" displayName: qsTr("Login without password") canSearch: settings.canSearch weight: 30 pageType: DccObject.Editor visible: dccData.isNoPassWordLoginVisable() enabled: dccData.currentUserId() === settings.userId page: Switch { checked: settings.nopasswdLoginChecked onCheckedChanged: { if (settings.nopasswdLoginChecked != checked) settings.nopasswdLoginChecked = checked dccData.setNopasswdLogin(settings.userId, checked) } } } } // 登陆方式 LoginMethod { name: settings.papaName + "loginMethodTitle" parentName: settings.papaName userId: settings.userId canSearch: settings.canSearch } // 动态锁 // DccObject { // name: settings.papaName + "dynamicLockTitle" // parentName: settings.papaName // displayName: qsTr("Dynamic lock screen") // weight: 48 // pageType: DccObject.Item // page: Label { // leftPadding: 5 // text: dccObj.displayName // font { // pointSize: 13 // bold: true // } // } // onParentItemChanged: item => { if (item) item.topPadding = 10 } // } // DccObject { // name: settings.papaName + "dynamicLockGroups" // parentName: settings.papaName // displayName: qsTr("Dynamic lock screen groups") // weight: 50 // pageType: DccObject.Item // page: DccGroupView {} // DccObject { // name: settings.papaName + "dynamicLockItem" // parentName: settings.papaName + "dynamicLockGroups" // displayName: qsTr("Lock screen when device is disconnected") // description: qsTr("Lock screen when the bound Bluetooth device is disconnected") // weight: 10 // pageType: DccObject.Editor // page: Switch {} // } // } DccObject { id: bottomButtons name: settings.papaName + "BottomButtons" parentName: settings.papaName canSearch: settings.canSearch weight: 0xFFFF pageType: DccObject.Item page: RowLayout { Button { id: deleteBtn Layout.alignment: groupSettingsBtn.visible ? Qt.AlignLeft : Qt.AlignRight text: qsTr("Delete current account") enabled: dccData.isDeleteAble(settings.userId) implicitWidth: implicitContentWidth + 20 implicitHeight: 30 contentItem: Text { text: deleteBtn.text color: deleteBtn.ColorSelector.controlState === DTK.InactiveState ? "#66FF5736" : "#FF5736" verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter } Loader { id: cfdLoader active: false sourceComponent: ComfirmDeleteDialog { onClosing: function (close) { cfdLoader.active = false } onRequestDelete: function (deleteHome) { dccData.removeUser(settings.userId, deleteHome) } } onLoaded: function () { cfdLoader.item.show() } } onClicked: { cfdLoader.active = true } Connections { target: dccData function onOnlineUserListChanged() { deleteBtn.enabled = dccData.isDeleteAble(settings.userId) } } } Button { id: groupSettingsBtn Layout.alignment: Qt.AlignRight text: qsTr("Group setting") visible: dccData.needShowGroups() implicitWidth: implicitContentWidth + 20 implicitHeight: 30 onClicked: { DccApp.showPage(groupSettings) } } } DccObject { id: groupSettings property bool isEditing name: settings.papaName + "GroupSettings" parentName: bottomButtons.name displayName: qsTr("Account groups") canSearch: settings.canSearch weight: 10 pageType: DccObject.Menu page: ListView { id: groupview property int lrMargin: DccUtils.getMargin(width) property int conY: 0 property bool blockInitialFocus: false property bool focusNewlyCreatedItem: false property bool mousePressed: false property Item headerEditButton property Item addGroupButton spacing: 0 currentIndex: -1 activeFocusOnTab: true keyNavigationEnabled: true clip: false cacheBuffer: height * 6 displayMarginBeginning: height * 2 displayMarginEnd: height * 2 MouseArea { anchors.fill: parent propagateComposedEvents: true onPressed: function(mouse) { groupview.mousePressed = true mouse.accepted = false } onReleased: function(mouse) { groupview.mousePressed = false mouse.accepted = false } } onActiveFocusChanged: { if (activeFocus && count > 0) { if (focusNewlyCreatedItem) { return } if (blockInitialFocus) { if (model && model.isCreatingGroup) { blockInitialFocus = false return } blockInitialFocus = false if (mousePressed) { mousePressed = false return } focus = false return } if (groupview.headerEditButton && !mousePressed) { groupview.headerEditButton.forceActiveFocus(Qt.TabFocusReason) return } if (mousePressed) { mousePressed = false } } } onCurrentIndexChanged: { if (activeFocus && currentItem) { currentItem.forceActiveFocus() } } function qmlListModelUpdata() { if (model && model.isCreatingGroup) { model.setCreatingGroup(false) Qt.callLater(function () { groupview.positionViewAtEnd() if (groupview.focusNewlyCreatedItem && groupview.count > 0) { groupview.currentIndex = groupview.count - 1 if (groupview.currentItem && groupview.currentItem.forceActiveFocus) { groupview.currentItem.forceActiveFocus() } groupview.focusNewlyCreatedItem = false } }) } else { groupview.contentY = conY } } Connections { target: model function onGroupsUpdated() { qmlListModelUpdata() } } onContentYChanged: { if(contentY != -50) { conY = contentY } } anchors { left: parent ? parent.left : undefined right: parent ? parent.right : undefined } ScrollBar.vertical: ScrollBar { width: 10 } header: Item { implicitHeight: 50 anchors { left: parent ? parent.left : undefined right: parent ? parent.right : undefined leftMargin: groupview.lrMargin rightMargin: groupview.lrMargin } RowLayout { anchors.fill: parent DccLabel { Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter Layout.leftMargin: 10 font.pixelSize: DTK.fontManager.t5.pixelSize font.weight: 700 text: dccObj.displayName } Button { id: button checkable: true checked: groupSettings.isEditing Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.rightMargin: 10 text: groupSettings.isEditing ? qsTr("done") : qsTr("edit") font: DTK.fontManager.t8 focusPolicy: Qt.StrongFocus activeFocusOnTab: true background: Rectangle { radius: addGroupButton.background.radius color: "transparent" border.color: parent.palette.highlight border.width: button.activeFocus ? 2 : 0 } Keys.onPressed: function(event) { if (event.key === Qt.Key_Tab && !event.isAutoRepeat) { event.accepted = true groupview.blockInitialFocus = false groupview.currentIndex = 0 groupview.positionViewAtIndex(0, ListView.Beginning) Qt.callLater(function() { if (groupview.currentItem && groupview.currentItem.forceActiveFocus) { groupview.currentItem.forceActiveFocus(Qt.TabFocusReason) } }) return } } Component.onCompleted: { groupview.headerEditButton = button } onActiveFocusChanged: { if (activeFocus) { groupview.positionViewAtBeginning() } } textColor: Palette { normal { common: DTK.makeColor(Color.Highlight) crystal: DTK.makeColor(Color.Highlight) } } onCheckedChanged: { groupSettings.isEditing = button.checked } } } } model: settings.userId.length > 0 ? dccData.groupsModel(settings.userId) : 0 delegate: ItemDelegate { id: itemDelegate implicitHeight: 36 padding: 0 checkable: false clip: false z: editLabel.showAlert ? 100 : 1 focusPolicy: Qt.StrongFocus activeFocusOnTab: false KeyNavigation.tab: groupview.addGroupButton Keys.onPressed: function(event) { if (!model.groupEnabled) { if (event.key === Qt.Key_Up) { if (groupview.currentIndex > 0) { groupview.currentIndex = groupview.currentIndex - 1 groupview.positionViewAtIndex(groupview.currentIndex, ListView.Contain) } event.accepted = true return } else if (event.key === Qt.Key_Down) { if (groupview.currentIndex < groupview.count - 1) { groupview.currentIndex = groupview.currentIndex + 1 groupview.positionViewAtIndex(groupview.currentIndex, ListView.Contain) } event.accepted = true return } event.accepted = true return } if (!editLabel.readOnly) { return } if (event.key === Qt.Key_Up) { if (groupview.currentIndex > 0) { groupview.currentIndex = groupview.currentIndex - 1 groupview.positionViewAtIndex(groupview.currentIndex, ListView.Contain) } event.accepted = true } else if (event.key === Qt.Key_Down) { if (groupview.currentIndex < groupview.count - 1) { groupview.currentIndex = groupview.currentIndex + 1 groupview.positionViewAtIndex(groupview.currentIndex, ListView.Contain) } event.accepted = true } else if (event.key === Qt.Key_Space || event.key === Qt.Key_Return || event.key === Qt.Key_Enter) { if (!groupSettings.isEditing && model.groupEnabled) { dccData.setGroup(settings.userId, model.display, !editButton.checked) groupview.currentIndex = -1 groupview.focus = false } event.accepted = true } } property var editTextWidth: itemDelegate.width - editButton.width - rightPadding - 80 background: DccItemBackground { backgroundType: DccObject.Normal separatorVisible: true } anchors { left: parent ? parent.left : undefined right: parent ? parent.right : undefined leftMargin: groupview.lrMargin rightMargin: groupview.lrMargin } onWidthChanged: { if (editLabel.readOnly) { var elidedText = editLabel.metrics.elidedText(editLabel.completeText, Text.ElideRight, editTextWidth) editLabel.text = elidedText return } } contentItem: RowLayout { spacing: 0 Item { id: editContainer Layout.fillWidth: !editLabel.readOnly Layout.alignment: Qt.AlignVCenter Layout.leftMargin: 14 Layout.rightMargin: 2 implicitHeight: 36 implicitWidth: !editLabel.readOnly ? groupview.width : Math.min(editLabel.metrics.advanceWidth(editLabel.text) + editButton.width + 20, groupview.width - editButton.width - 30) EditActionLabel { id: editLabel property bool editAble: model.groupEditAble property string lastValidText: "" property bool isRestoring: false property string originalGroupName: "" anchors.fill: parent text: model.display completeText: model.display rightPadding: editButton.width + 10 placeholderText: qsTr("Group name") background: Item{} horizontalAlignment: TextInput.AlignLeft verticalAlignment: TextInput.AlignVCenter editBtn.visible: readOnly && editAble && !groupSettings.isEditing readOnly: model.display.length > 0 ToolTip { visible: parent.hovered && parent.readOnly && parent.completeText != "" && (parent.metrics.advanceWidth(parent.completeText) > (parent.width - parent.rightPadding - 10)) text: parent.completeText } // Monitor model.display changes to update elided text onCompleteTextChanged: { if (readOnly && completeText.length > 0) { var elidedText = metrics.elidedText(completeText, Text.ElideRight, editTextWidth) text = elidedText } } onReadOnlyChanged: { if (!readOnly) { text = completeText lastValidText = model.display originalGroupName = model.display } } Connections { target: dccData function onGroupsUpdateFailed(groupName) { if (groupName === editLabel.originalGroupName) { editLabel.completeText = editLabel.originalGroupName var elidedText = editLabel.metrics.elidedText(editLabel.originalGroupName, Text.ElideRight, editTextWidth) editLabel.text = elidedText } } } onTextChanged: { if (readOnly) { return } if (isRestoring) { isRestoring = false return } if (showAlert) showAlert = false if (text.length < 1 && lastValidText.length > 0 && !readOnly) { Qt.callLater(function() { editLabel.forceActiveFocus() }) } var isNewGroup = (model.display.length === 0) if (text.length > 32) { showAlert = true alertText = qsTr("Group names should be no more than 32 characters") dccData.playSystemSound(14) isRestoring = true text = lastValidText return } var numbersOnlyRegex = /^[0-9]+$/ if (text.length > 0 && numbersOnlyRegex.test(text)) { showAlert = true alertText = qsTr("Group names cannot only have numbers") dccData.playSystemSound(14) isRestoring = true text = lastValidText return } var validFormatRegex = /^[a-zA-Z][a-zA-Z0-9-_]*$/ if (text.length > 0 && !validFormatRegex.test(text) && model.display != "_ssh") { showAlert = true alertText = qsTr("Use letters,numbers,underscores and dashes only, and must start with a letter") dccData.playSystemSound(14) isRestoring = true text = lastValidText return } lastValidText = text } onFinished: function () { var wasNewGroup = (model.display.length < 1) if (text.length < 1) { if (model.display.length < 1) { dccData.requestClearEmptyGroup(settings.userId) } else { var elidedText = metrics.elidedText(model.display, Text.ElideRight, editTextWidth) text = elidedText readOnly = true } return } if (dccData.groupExists(text) && text !== model.display) { showAlert = true alertText = qsTr("The group name has been used") return } if (text === model.display) { completeText = text var elidedText = metrics.elidedText(completeText, Text.ElideRight, editTextWidth) text = elidedText readOnly = true return } if (model.display.length < 1) dccData.createGroup(text) else dccData.modifyGroup(model.display, text) completeText = text var elidedText = metrics.elidedText(completeText, Text.ElideRight, editTextWidth) text = elidedText readOnly = true // 当通过回车结束新建分组的编辑时,清空 ListView 的焦点与选中 if (wasNewGroup) { groupview.currentIndex = -1 groupview.focus = false } } onFocusChanged: { if (focus || text.length > 0 || editLabel.readOnly) return if (model.display.length < 1) { dccData.requestClearEmptyGroup(settings.userId) return } text = model.display } Component.onCompleted: { completeText = model.display lastValidText = model.display originalGroupName = model.display // Initialize original name if (editLabel.readOnly) { var elidedText = metrics.elidedText(completeText, Text.ElideRight, editTextWidth) text = elidedText return } Qt.callLater(function () { editLabel.focus = true }) } } } Item { Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter implicitHeight: 36 MouseArea { anchors.fill: parent visible: !groupSettings.isEditing enabled: model.groupEnabled acceptedButtons: Qt.AllButtons onClicked: { dccData.setGroup(settings.userId, model.display, !editButton.checked) } } } ActionButton { id: editButton focusPolicy: Qt.NoFocus icon.width: 16 icon.height: 16 visible: groupSettings.isEditing ? editLabel.editAble : editLabel.readOnly enabled: model.groupEnabled icon.name: { if (groupSettings.isEditing) { return "list_delete" } return editButton.checked ? "item_checked" : "radio_unchecked" } background: null Layout.alignment: Qt.AlignRight | Qt.AlignVCenter // list_delete.dci icon has padding 10 (1.10p) Layout.rightMargin: groupSettings.isEditing ? 0 : 10 // only checked from groupsChanged checkable: false checked: dccData.groupContains(settings.userId, model.display) onClicked: { if (groupSettings.isEditing) { // delete group dccData.deleteGroup(model.display) groupSettings.isEditing = false return } dccData.setGroup(settings.userId, model.display, !editButton.checked) } } } Item { anchors.fill: parent visible: !model.groupEnabled z: 10000 focus: true Keys.onPressed: function(event) { if (event.key === Qt.Key_Up) { if (groupview.currentIndex > 0) { groupview.currentIndex = groupview.currentIndex - 1 groupview.positionViewAtIndex(groupview.currentIndex, ListView.Contain) } event.accepted = true return } else if (event.key === Qt.Key_Down) { if (groupview.currentIndex < groupview.count - 1) { groupview.currentIndex = groupview.currentIndex + 1 groupview.positionViewAtIndex(groupview.currentIndex, ListView.Contain) } event.accepted = true return } event.accepted = true } Keys.onReleased: function(event) { event.accepted = true } Keys.onShortcutOverride: function(event) { event.accepted = true } MouseArea { anchors.fill: parent acceptedButtons: Qt.AllButtons hoverEnabled: true preventStealing: true onPressed: function(mouse) { mouse.accepted = true } onReleased: function(mouse) { mouse.accepted = true } onClicked: function(mouse) { mouse.accepted = true } onWheel: function(wheel) { wheel.accepted = true } } } corners: getCornersForBackground(index, groupview.count) } footer: Item { implicitHeight: 50 anchors { left: parent ? parent.left : undefined right: parent ? parent.right : undefined leftMargin: groupview.lrMargin rightMargin: groupview.lrMargin } RowLayout { anchors.fill: parent Button { id: addGroupButton Layout.alignment: Qt.AlignRight text: qsTr("Add group") implicitWidth: implicitContentWidth + 20 implicitHeight: 30 focusPolicy: Qt.StrongFocus activeFocusOnTab: true Component.onCompleted: { groupview.addGroupButton = addGroupButton } onActiveFocusChanged: { if (activeFocus) { groupview.positionViewAtEnd() } } Keys.onPressed: function(event) { if (event.key === Qt.Key_Tab || event.key === Qt.Key_Backtab) { groupview.blockInitialFocus = true groupview.focus = false event.accepted = false return } } onClicked: { groupview.focusNewlyCreatedItem = true dccData.requestCreateGroup(settings.userId) groupview.positionViewAtEnd() } } } } } } } } ================================================ FILE: src/plugin-accounts/qml/Accounts.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { name: "accounts" parentName: "root" displayName: qsTr("Account") description: qsTr("Account manager") icon: "accounts" weight: 60 } ================================================ FILE: src/plugin-accounts/qml/AccountsMain.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import Qt5Compat.GraphicalEffects import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS DccObject { AccountSettings { id: currentAccount name: "currentAccount" papaName: "accounts" userId: dccData.currentUserId() } // 其他账户 DccTitleObject { id: otherAcountsTitle name: "otherAcountsTitle" parentName: "accounts" displayName: qsTr("Other accounts") canSearch: settings.canSearch weight: 58 } DccObject { name: "otherAcounts" parentName: "accounts" weight: 60 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "otherAccountsItemView" parentName: "otherAcounts" weight: 10 pageType: DccObject.Item page: ListView { id: accountView implicitHeight: contentHeight implicitWidth: 400 clip: true boundsBehavior: Flickable.StopAtBounds snapMode: ListView.SnapOneItem activeFocusOnTab: true keyNavigationEnabled: true model: dccData.accountsModel() onActiveFocusChanged: { if (activeFocus && count > 0) { currentIndex = 0 } } onCurrentIndexChanged: { if (activeFocus && currentItem) { currentItem.forceActiveFocus() } } delegate: D.ItemDelegate { id: menuItemDelegate implicitWidth: accountView.width implicitHeight: Math.max(50, contentItem.implicitHeight + topPadding + bottomPadding) property alias separatorVisible: background.separatorVisible property real iconRadius: 8 property real iconSize: 32 corners: getCornersForBackground(index, accountView.count) backgroundVisible: false checkable: false focusPolicy: Qt.TabFocus activeFocusOnTab: true topPadding: topInset bottomPadding: bottomInset leftPadding: 10 rightPadding: 8 hoverEnabled: true icon { name: model.avatar width: menuItemDelegate.iconSize height: menuItemDelegate.iconSize } contentItem: RowLayout { Item { implicitWidth: icon.width + 10 implicitHeight: icon.height + 10 D.IconLabel { id: iconLabel anchors.centerIn: parent spacing: menuItemDelegate.spacing mirrored: menuItemDelegate.mirrored display: menuItemDelegate.display alignment: Qt.AlignLeft | Qt.AlignVCenter icon: D.DTK.makeIcon(menuItemDelegate.icon, menuItemDelegate.D.DciIcon) visible: false } Rectangle { id: mask width: menuItemDelegate.iconSize height: menuItemDelegate.iconSize radius: menuItemDelegate.iconRadius visible: false anchors.centerIn: parent } OpacityMask { anchors.centerIn: parent width: menuItemDelegate.iconSize height: menuItemDelegate.iconSize source: iconLabel maskSource: mask } Rectangle { id: onlineIndicator visible: model.online width: 10 height: 10 radius: 6 z: 10 color: "#67EF4A" border.color: "white" anchors { right: parent.right bottom: parent.bottom rightMargin: 3 bottomMargin: 3 } } } Loader { Layout.fillWidth: true Layout.alignment: Qt.AlignRight sourceComponent: RowLayout { Layout.fillWidth: true Layout.fillHeight: true ColumnLayout { Layout.leftMargin: 8 Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter spacing: 0 DccLabel { Layout.fillWidth: true text: model.display } DccLabel { Layout.fillWidth: true visible: text !== "" font: D.DTK.fontManager.t8 text: model.userType opacity: 0.5 } } // rightItem Control { id: control Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.topMargin: 5 Layout.bottomMargin: 5 contentItem: D.IconLabel { icon.name: "arrow_ordinary_right" icon.palette: D.DTK.makeIconPalette(control.palette) icon.mode: control.D.ColorSelector.controlState icon.theme: control.D.ColorSelector.controlTheme } } } } } background: DccItemBackground { id: background separatorVisible: true backgroundType: DccObject.ClickStyle } onClicked: { otherSettings.displayName = model.display otherSettings.userId = model.userId DccApp.showPage(otherSettings) } } onCountChanged: { otherAcountsTitle.visible = count > 0; } } } DccObject { name: "otherSettingsHolder" parentName: "accounts" pageType: DccObject.Item page: Item { } AccountSettings { id: otherSettings name: "otherAccountSettings" parentName: "otherSettingsHolder" papaName: name canSearch: false } } } } ================================================ FILE: src/plugin-accounts/qml/AutoLoginWarningDialog.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D D.DialogWindow { id: dialog icon: "dialog-warning" width: 400 minimumWidth: width minimumHeight: height maximumWidth: minimumWidth maximumHeight: minimumHeight property string userName: "default" ColumnLayout { width: dialog.width - 20 spacing: 30 Label { id: label Layout.fillWidth: true Layout.leftMargin: 10 Layout.rightMargin: 10 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter wrapMode: Text.WordWrap text: qsTr("\"Auto Login\" can be enabled for only one account, please disable it for the account \"%1\" first").arg(userName) } Button { Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 10 Layout.fillWidth: true text: qsTr("Ok") onClicked: { close() } } } } ================================================ FILE: src/plugin-accounts/qml/AvatarGridView.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import QtQuick.Effects GridView { id: gridView property string headerText property string currentAvatar property int headerHeight: 40 property int columsCount: 5 property bool isCustom: false property int itemSize: 60 property int spacing: 12 cellHeight: itemSize + spacing cellWidth: itemSize + spacing implicitHeight: Math.ceil(count / columsCount) * cellHeight + (headerText.length > 0 ? headerHeight : 0) implicitWidth: cellWidth * columsCount clip: true keyNavigationEnabled: true interactive: false Layout.alignment: Qt.AlignHCenter | Qt.AlignTop Layout.leftMargin: 50 Layout.rightMargin: 60 Layout.bottomMargin: 10 signal removeCustomAvatar(string filePath) signal requireFileDialog() header: Loader { active: headerText.length > 0 sourceComponent: Rectangle { anchors.leftMargin: 10 width: gridView.width height: headerLabel.implicitHeight + 2 color: "transparent" Component.onCompleted: gridView.headerHeight = headerLabel.implicitHeight + 10 Text { id: headerLabel text: gridView.headerText font: D.DTK.fontManager.t8 anchors.left: parent.left anchors.top: parent.top anchors.topMargin: 0 anchors.leftMargin: 4 color: palette.text } } } delegate: D.ItemDelegate { id: delegate property bool isAddButton: modelData == "add" property bool isSelected: !isAddButton && (gridView.currentAvatar === modelData) implicitHeight: gridView.cellHeight implicitWidth: gridView.cellWidth checkable: false onClicked: { if (!delegate.isAddButton) gridView.currentAvatar = modelData } Loader { active: delegate.isAddButton sourceComponent: Item { implicitHeight: gridView.cellHeight implicitWidth: gridView.cellWidth Button { id: control width: gridView.itemSize height: gridView.itemSize padding: 0 leftPadding: 0 rightPadding: 0 topPadding: 0 bottomPadding: 0 icon { name: modelData // TODO: icon size not Work!! dtk bug https://github.com/linuxdeepin/dtk/issues/207 height: gridView.itemSize width: gridView.itemSize } anchors.left: parent.left anchors.leftMargin: 2 anchors.verticalCenter: parent.verticalCenter onClicked: { requireFileDialog() } } } } // Keep a fixed square slot for each grid item to ensure visuals remain square Item { id: iconSlot width: gridView.itemSize height: gridView.itemSize anchors.left: parent.left anchors.leftMargin: 2 anchors.verticalCenter: parent.verticalCenter D.DciIcon { id: img palette: D.DTK.makeIconPalette(delegate.palette) mode: delegate.D.ColorSelector.controlState theme: delegate.D.ColorSelector.controlTheme fallbackToQIcon: false name: modelData // render at intended size, but keep centered inside square slot sourceSize: Qt.size(gridView.itemSize, gridView.itemSize) anchors.centerIn: parent visible: !delegate.isAddButton // false for MultiEffect need antialiasing: true } } // fake round image D.BoxShadow { id: boxShadow hollow: true anchors.fill: iconSlot shadowBlur: 3 spread: 3 shadowColor: delegate.palette.window cornerRadius: 6 } // antialiasing not work well // MultiEffect { // source: img // anchors.centerIn: parent // width: img.width // height: img.height // maskEnabled: true // maskSource: mask // maskThresholdMin: 0.5 // maskSpreadAtMin: 0.0 // antialiasing: true // } // Rectangle { // id: mask // antialiasing: true // anchors.fill: img // layer.enabled: true // visible: false // clip: true // radius: 6 // } // TODO: Not work well... // D.ItemViewport { // id: viewPort // sourceItem: img // radius: 6 // fixed: true // width: img.sourceSize.width // height: img.sourceSize.height // hideSource: true // antialiasing: true // anchors.centerIn: parent // } background: Rectangle { id: background radius: 8 anchors.fill: iconSlot anchors.margins: -2 color: "transparent" border.color: delegate.palette.highlight border.width: 1 visible: delegate.isSelected z: 10 } D.IconLabel { id: checkIcon z: 99 icon { name: "item_checked" width: 20 height: 20 palette: D.DTK.makeIconPalette(delegate.palette) mode: delegate.D.ColorSelector.controlState theme: delegate.D.ColorSelector.controlTheme } width: 20 height: 20 x: background.x + background.width - width / 2 - 3 y: background.y - height / 2 + 5 visible: delegate.isSelected } D.ActionButton { z: 99 visible: gridView.isCustom && !checkIcon.visible && !delegate.isAddButton focusPolicy: Qt.NoFocus anchors.right: parent.right anchors.top: parent.top icon { name: "entry_clear" width: 20 height: 20 } background: Rectangle { radius: 10 } onClicked: { console.log("need remove custom avatar..", modelData) removeCustomAvatar(modelData) } } } } ================================================ FILE: src/plugin-accounts/qml/AvatarSettingsDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Dialogs import QtQuick.Window import QtQml.Models import QtQuick.Layouts 1.15 import Qt.labs.qmlmodels import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import Qt.labs.platform 1.1 import org.deepin.dcc 1.0 D.DialogWindow { id: dialog property string userId: dccData.currentUserId() property string currentAvatar: dccData.avatar() width: 640 minimumWidth: width minimumHeight: height maximumWidth: minimumWidth maximumHeight: minimumHeight icon: "preferences-system" modality: Qt.WindowModal D.DWindow.enableSystemMove: !cropper.dragActived color: "transparent" signal accepted(); function cleanupTempFiles() { if (cropper && typeof cropper.getTempPreviewFiles === 'function') { const files = cropper.getTempPreviewFiles() if (files && files.length > 0) { dccData.cleanupTempPreviewFiles(files) cropper.clearTempPreviewFiles() } } } Component.onDestruction: { cleanupTempFiles() } Loader { id: fileDlgLoader active: false sourceComponent: FileDialog { id: fileDialog nameFilters: [ qsTr("Images") + "(*.png *.bmp *.jpg *.jpeg)" ] title: "Please choose an image" folder: StandardPaths.writableLocation(StandardPaths.PicturesLocation) onAccepted: { let selectedFile = fileDialog.selectedFile || fileDialog.file || fileDialog.fileUrl if (selectedFile) { let filePath = selectedFile.toString() const sourceFile = filePath.replace("file://", "") const saved = dccData.saveCustomAvatar(dialog.userId, sourceFile, "") if (saved && saved.length > 0) { dialog.currentAvatar = saved scrollView.filter = "icons/local" if (customEmptyAvatar && typeof customEmptyAvatar.needShow === 'function') { customEmptyAvatar.visible = customEmptyAvatar.needShow() } if (cropper && cropper.visible) { cropper.iconSource = dialog.currentAvatar cropper.imgScale = 1.0 } if (scrollView.isCustom && customLocalRow && typeof customLocalRow.refresh === 'function') { customLocalRow.refresh() customLocalRow.currentAvatar = dialog.currentAvatar } } else { dialog.currentAvatar = filePath } } fileDlgLoader.active = false } onRejected: { fileDlgLoader.active = false } } onLoaded: function () { fileDlgLoader.item.open() } } header: D.DialogTitleBar { // titlebar do not enbale blur again // enableInWindowBlendBlur: true icon.name: dialog.icon } RowLayout { spacing: 0 width: dialog.width Rectangle { id: leftBar color: "transparent" Layout.preferredWidth: 180 - DS.Style.dialogWindow.contentHMargin Layout.preferredHeight: dialog.height - 100 Layout.alignment: Qt.AlignTop Rectangle { x: -DS.Style.dialogWindow.contentHMargin y: -DS.Style.dialogWindow.titleBarHeight width: leftBar.width - x height: dialog.height + 10 color: "transparent" D.StyledBehindWindowBlur { anchors.fill: parent } } Rectangle { x: leftView.width y: -DS.Style.dialogWindow.titleBarHeight width: scrollView.width + DS.Style.dialogWindow.contentHMargin * 2 height: dialog.height color: palette.window } Rectangle { id: leftRightSplitter property D.Palette bgColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.05) normalDark: Qt.rgba(0, 0, 0, 0.5) } x: leftView.width - 1 y: -DS.Style.dialogWindow.titleBarHeight width: 1 height: dialog.height color: D.ColorSelector.bgColor } ListModel { id: listModel ListElement { name: QT_TR_NOOP("Human") filter: "icons/human" icon: "dcc_user_human" sections: "dimensional/dimensional_v2/flat" checked: true } ListElement { name: QT_TR_NOOP("Animal") filter: "icons/animal" icon: "dcc_user_animal" sections: "" } ListElement { name: QT_TR_NOOP("Scenery") filter: "icons/scenery" icon: "dcc_user_scenery" sections: "" } ListElement { name: QT_TR_NOOP("Illustration") filter: "icons/illustration" icon: "dcc_user_funny" sections: "" } ListElement { name: QT_TR_NOOP("Emoji") filter: "icons/emoji" icon: "dcc_user_emoji" sections: "" } ListElement { name: QT_TR_NOOP("custom") filter: "icons/local" icon: "dcc_user_custom" sections: "" } } D.ListView { id: leftView clip: true implicitHeight: 400 implicitWidth: parent.width Layout.alignment: Qt.AlignTop model: listModel delegate: D.ItemDelegate { id: itemDelegate text: qsTr(model.name) font: D.DTK.fontManager.t6 hoverEnabled: true icon { name: model.icon width: 16 height: 16 } implicitHeight: 30 implicitWidth: leftView.width - 10 checked: model.checked topPadding: 0 bottomPadding: 2 background: Rectangle { color: { if (itemDelegate.checked) { return parent.palette.highlight } else if (itemDelegate.hovered) { if (D.DTK.themeType == D.ApplicationHelper.LightType) return Qt.rgba(0, 0, 0, 0.1) else return Qt.rgba(1, 1, 1, 0.1) } else { return "transparent" } } radius: DS.Style.control.radius } onCheckedChanged: { if (checked) { let sections = model.sections.split('/') // reset model... scrollView.sections = [] scrollView.sections = sections.length > 0 ? sections : [""] scrollView.filter = model.filter scrollView.ScrollBar.vertical.position = 0 if (model.filter !== "icons/local") { if (dialog.currentAvatar && dialog.currentAvatar.length > 0) { const cacheDir = StandardPaths.writableLocation(StandardPaths.CacheLocation) const avatarDir = cacheDir + "/avatars/" const normalized = dialog.currentAvatar.replace("file://", "") const inCache = normalized.indexOf(avatarDir) === 0 if (inCache) dialog.currentAvatar = "" } } } } } } } ColumnLayout { Layout.fillWidth: true Layout.fillHeight: true Layout.preferredWidth: 460 Layout.minimumWidth: 460 Layout.maximumWidth: 460 CustomAvatarEmpatyArea { id: customEmptyAvatar visible: needShow() Layout.alignment: Qt.AlignHCenter Layout.rightMargin: 10 onIconDropped: function (url){ let filePath = url.toString() const sourceFile = filePath.replace("file://", "") const saved = dccData.saveCustomAvatar(dialog.userId, sourceFile, "") if (saved && saved.length > 0) { dialog.currentAvatar = saved scrollView.filter = "icons/local" if (customEmptyAvatar && typeof customEmptyAvatar.needShow === 'function') { customEmptyAvatar.visible = customEmptyAvatar.needShow() } if (cropper && cropper.visible) { cropper.iconSource = dialog.currentAvatar cropper.imgScale = 1.0 } if (scrollView.isCustom && customLocalRow && typeof customLocalRow.refresh === 'function') { customLocalRow.refresh() customLocalRow.currentAvatar = dialog.currentAvatar } } else { dialog.currentAvatar = filePath } } onRequireFileDialog: { fileDlgLoader.active = true } function needShow() { if (!scrollView.isCustom) return false let icons = dccData.avatars(dialog.userId, scrollView.filter, "") return icons.length <= 1 } Connections { target: dccData function onAvatarChanged(userId, avatar) { if (userId === dialog.userId && scrollView.isCustom) { customEmptyAvatar.visible = customEmptyAvatar.needShow() } } } } ScrollView { id: scrollView property list sections: [] property string filter property bool isCustom: filter === "icons/local" implicitHeight: 360 visible: !customEmptyAvatar.visible Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter | Qt.AlignTop padding: 0 topPadding: 0 bottomPadding: 0 leftPadding: 0 rightPadding: 0 clip: true contentHeight: layout.childrenRect.height contentWidth: width ScrollBar.vertical: ScrollBar { id: verticalBar parent: scrollView anchors.top: parent.top anchors.bottom: parent.bottom x: parent.width - width - 5 width: 10 policy: ScrollBar.AsNeeded visible: true } ColumnLayout { id: layout Layout.fillWidth: true width: scrollView.width implicitWidth: scrollView.width Item { id: customArea visible: scrollView.isCustom && !customEmptyAvatar.visible width: scrollView.width implicitHeight: childrenRect.height onVisibleChanged: { if (!visible) return let icons = dccData.avatars(dialog.userId, "icons/local", "") if (!icons || icons.length <= 1) { return } const currentAvatar = (dialog.currentAvatar || "").toString().replace("file://", "") let foundCurrent = false if (currentAvatar.length > 0) { for (let i = 1; i < icons.length; i++) { const iconPath = icons[i].toString().replace("file://", "") if (iconPath === currentAvatar) { foundCurrent = true break } } } if (!foundCurrent && icons.length > 1) { Qt.callLater(function() { cropper.iconSource = icons[1] }) } } CustomAvatarCropper { id: cropper anchors.top: parent.top anchors.horizontalCenter: parent.horizontalCenter iconSource: { const isCustom = dialog.currentAvatar.indexOf("/local/") >= 0 || dialog.currentAvatar.indexOf("/avatars/") >= 0 if (isCustom) { return dialog.currentAvatar } // 系统头像时,返回第一个自定义头像作为预览(如果有的话) let icons = dccData.avatars(dialog.userId, "icons/local", "") if (icons && icons.length > 1) { return icons[1] } return "" } onCroppedImage: function(file) { dialog.currentAvatar = file } onPreviewUpdated: function(previewFile) { if (customLocalRow) { customLocalRow.previewUrl = previewFile } } onIconSourceChanged: { if (customLocalRow) { customLocalRow.previewUrl = "" } } } CustomLocalAvatarsRow { id: customLocalRow anchors.top: cropper.bottom anchors.horizontalCenter: parent.horizontalCenter userId: dialog.userId currentAvatar: dialog.currentAvatar onCurrentAvatarChanged: { if (dialog.currentAvatar !== currentAvatar) dialog.currentAvatar = currentAvatar } onRequireFileDialog: fileDlgLoader.active = true } } Repeater { id: repeater model: scrollView.sections AvatarGridView { id: view visible: view.count > 0 && !scrollView.isCustom currentAvatar: dialog.currentAvatar onCurrentAvatarChanged: { if (dialog.currentAvatar !== currentAvatar) { dialog.currentAvatar = currentAvatar } if (cropper.visible) { cropper.iconSource = currentAvatar cropper.imgScale = 1.0 } } onRequireFileDialog: { fileDlgLoader.active = true } Connections { target: dccData function onAvatarChanged(userId, avatar) { if (userId === dialog.userId) { dialog.currentAvatar = avatar view.currentAvatar = avatar view.model = [] view.model = dccData.avatars(dialog.userId, scrollView.filter, modelData) customEmptyAvatar.visible = customEmptyAvatar.needShow() } } } headerText: { if (modelData === "dimensional") return qsTr("Cartoon style") else if (modelData === "dimensional_v2") return qsTr("Dimensional style") else if (modelData === "flat") return qsTr("Flat style") else return "" } model: dccData.avatars(dialog.userId, scrollView.filter, modelData) onIsCustomChanged: { if (isCustom && !customEmptyAvatar.visible) { let icons = dccData.avatars(dialog.userId, scrollView.filter, modelData) if (icons.length > 1) { dialog.currentAvatar = icons[1]; } } } } } } } RowLayout { spacing: 6 Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 6 Layout.topMargin: 2 Layout.leftMargin: 51 Layout.rightMargin: 59 Button { Layout.fillWidth: true text: qsTr("Cancel") onClicked: { // reset dialog.currentAvatar = "" close() } } D.RecommandButton { Layout.fillWidth: true text: qsTr("Save") onClicked: { if (scrollView.isCustom && cropper.visible && dialog.currentAvatar.length > 0) { cropper.cropToTemp(function (tmpFile) { if (tmpFile && tmpFile.length > 0) { const saved = dccData.saveCustomAvatar(dialog.userId, tmpFile, dialog.currentAvatar) if (saved && saved.length > 0) { dialog.currentAvatar = saved } } dialog.accepted() close() }) } else { dialog.accepted() close() } } } } } } } ================================================ FILE: src/plugin-accounts/qml/ComfirmDeleteDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D D.DialogWindow { id: dialog icon: "preferences-system" width: 400 minimumWidth: width minimumHeight: height maximumWidth: minimumWidth maximumHeight: minimumHeight signal requestDelete(bool deleteHome) ColumnLayout { width: dialog.width - 20 Label { Layout.alignment: Qt.AlignHCenter font: D.DTK.fontManager.t5 text: qsTr("Are you sure you want to delete this account?") } CheckBox { id: deleteHomeCheckbox Layout.alignment: Qt.AlignHCenter font: D.DTK.fontManager.t6 checked: true // default checked text: qsTr("Delete account directory") } RowLayout { Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 10 Layout.topMargin: 30 Layout.fillWidth: true Button { text: qsTr("Cancel") Layout.preferredWidth: 180 onClicked: { close() } } Item { Layout.fillWidth: true } D.WarningButton { text: qsTr("Delete") Layout.preferredWidth: 180 Layout.alignment: Qt.AlignRight onClicked: { requestDelete(deleteHomeCheckbox.checked) close() } } } } } ================================================ FILE: src/plugin-accounts/qml/ComfirmSafePage.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import org.deepin.dtk 1.0 as D D.DialogWindow { id: dialog icon: "preferences-system" width: 600 height: 180 minimumWidth: 600 minimumHeight: 180 maximumWidth: minimumWidth maximumHeight: minimumHeight property string msg signal requestShowSafePage() ColumnLayout { Label { Layout.alignment: Qt.AlignHCenter verticalAlignment: Text.AlignVCenter font: D.DTK.fontManager.t5 text: msg wrapMode: Text.WordWrap Layout.preferredWidth: dialog.width - 10 Layout.preferredHeight: 60 leftPadding: 10 rightPadding: 10 } RowLayout { Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 10 Layout.rightMargin: 10 Layout.leftMargin: 10 Layout.topMargin: 10 Layout.fillWidth: true Button { text: qsTr("Go to settings") Layout.fillWidth: true onClicked: { requestShowSafePage() close() } } D.WarningButton { text: qsTr("Cancel") Layout.fillWidth: true Layout.alignment: Qt.AlignRight onClicked: { close() } } } } } ================================================ FILE: src/plugin-accounts/qml/CreateAccountDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Dialogs import QtQuick.Window import QtQml.Models import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 import AccountsController 1.0 D.DialogWindow { id: dialog width: 460 minimumWidth: width minimumHeight: height maximumWidth: minimumWidth maximumHeight: minimumHeight icon: "preferences-system" modality: Qt.WindowModal title: qsTr("Create a new account") color: "transparent" signal accepted() header: D.DialogTitleBar { icon.name: dialog.icon } Rectangle { // 覆盖整个窗口,包括 DialogWindow 的边距 x: -DS.Style.dialogWindow.contentHMargin y: -DS.Style.dialogWindow.titleBarHeight width: dialog.width + DS.Style.dialogWindow.contentHMargin * 2 height: dialog.height + DS.Style.dialogWindow.titleBarHeight color: "transparent" parent: dialog.contentItem z: -1 D.StyledBehindWindowBlur { anchors.fill: parent blendColor: { if (valid) { return DS.Style.control.selectColor( dialog ? dialog.palette.window : undefined, Qt.rgba(1, 1, 1, 0.8), Qt.rgba(0.06, 0.06, 0.06, 0.8) ) } return DS.Style.control.selectColor( undefined, DS.Style.behindWindowBlur.lightNoBlurColor, DS.Style.behindWindowBlur.darkNoBlurColor ) } } } ColumnLayout { id: mainLayout width: dialog.width - 20 property int unifiedLabelWidth: -1 spacing: 0 FontMetrics { id: dialogFm font: D.DTK.fontManager.t6 } function calculateUnifiedLabelWidth() { var dialogTexts = [accountTypeLabel.text] for (var i = 0; i < namesModel.count; i++) { dialogTexts.push(namesModel.get(i).name) } var maxDialogWidth = 0 for (var i = 0; i < dialogTexts.length; i++) { var width = dialogFm.advanceWidth(dialogTexts[i]) if (width > maxDialogWidth) { maxDialogWidth = width } } var maxWidth = Math.max(maxDialogWidth, pwdLayout.maxLabelWidth) var finalWidth = maxWidth > 110 ? 110 : maxWidth unifiedLabelWidth = Math.ceil(finalWidth) pwdLayout.maxLabelWidth = Math.ceil(finalWidth) } Connections { target: pwdLayout function onLabelWidthCalculated() { mainLayout.calculateUnifiedLabelWidth() } } Connections { target: dccData function onAccountCreationFinished(resultType, message) { createButton.enabled = true switch (resultType) { case CreationResult.NoError: dialog.accepted() close() break case CreationResult.UserNameError: case CreationResult.UnknownError: let nameEdit = namesContainter.eidtItems[0] if (nameEdit) { nameEdit.showAlert = true nameEdit.alertText = message } break case CreationResult.PasswordError: case CreationResult.PasswordMatchError: if (pwdLayout.pwdContainter && pwdLayout.pwdContainter.eidtItems && pwdLayout.pwdContainter.eidtItems[0]) { pwdLayout.pwdContainter.eidtItems[0].showAlertText(message) } break case CreationResult.Canceled: break default: console.warn("Unknown creation result type:", resultType, message) break } } } Label { text: dialog.title font.bold: true Layout.alignment: Qt.AlignTop | Qt.AlignHCenter Layout.bottomMargin: 20 font.pixelSize: accountTypeLabel.font.pixelSize } RowLayout { implicitHeight: 30 Layout.alignment: Qt.AlignTop | Qt.AlignHCenter Layout.fillWidth: true Layout.bottomMargin: 20 Layout.leftMargin: 12 - DS.Style.dialogWindow.contentHMargin Layout.rightMargin: 6 - DS.Style.dialogWindow.contentHMargin spacing: 10 Label { id: accountTypeLabel height: 30 text: qsTr("Account type") Layout.preferredWidth: mainLayout.unifiedLabelWidth Layout.alignment: Qt.AlignVCenter font: D.DTK.fontManager.t6 elide: Text.ElideRight ToolTip.visible: accountTypeHoverHandler.hovered && truncated ToolTip.text: text HoverHandler { id: accountTypeHoverHandler } } ComboBox { id: userType implicitHeight: 30 padding: 0 Layout.alignment: Qt.AlignVCenter Layout.fillWidth: true model: dccData.userTypes(true) font: D.DTK.fontManager.t7 } } ListModel { id: namesModel ListElement { name: qsTr("UserName") placeholder: qsTr("Required") } ListElement { name: qsTr("FullName") placeholder: qsTr("Optional") } } Rectangle { id: namesContainter property var eidtItems: [] radius: 8 Layout.fillWidth: true Layout.alignment: Qt.AlignTop | Qt.AlignHCenter Layout.leftMargin: 12 - DS.Style.dialogWindow.contentHMargin Layout.rightMargin: 6 - DS.Style.dialogWindow.contentHMargin Layout.topMargin: 0 Layout.bottomMargin: 0 implicitHeight: 68 color: "transparent" function checkNames() { let edit0 = namesContainter.eidtItems[0] let edit1 = namesContainter.eidtItems[1] if (!edit0 || !edit1) return true let alertText = dccData.checkUsername(edit0.text) if (alertText.length > 0) { // TODO: dtk fixme, showAlert tip timeout cannot show alertText again edit0.showAlert = false edit0.showAlert = true edit0.alertText = alertText return false } alertText = dccData.checkFullname(edit1.text) if (alertText.length > 0) { edit1.showAlert = false edit1.showAlert = true edit1.alertText = alertText return false } return true } ColumnLayout { spacing: 8 Layout.topMargin: 0 Layout.bottomMargin: 0 anchors.fill: parent Repeater { model: namesModel delegate: D.ItemDelegate { Layout.fillWidth: true backgroundVisible: false checkable: false implicitHeight: 30 leftPadding: 0 rightPadding: 0 contentItem: RowLayout { height: parent.height spacing: 10 Label { Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter text: model.name Layout.preferredWidth: mainLayout.unifiedLabelWidth font: D.DTK.fontManager.t6 elide: Text.ElideRight ToolTip.visible: nameHoverHandler.hovered && truncated ToolTip.text: text HoverHandler { id: nameHoverHandler } } D.LineEdit { id: edit Layout.fillWidth: true Layout.alignment: Qt.AlignRight | Qt.AlignVCenter implicitHeight: 30 placeholderText: model.placeholder alertDuration: 3000 // can not past // validator: RegularExpressionValidator { // regularExpression: index ? /^[^:]{0,32}$/ : /[A-Za-z0-9-_]{0,32}$/ // } onTextChanged: { if (showAlert) showAlert = false if (index === 0) { var charRegex = /^[A-Za-z0-9-_]*$/ var lengthRegex = /^.{0,32}$/ var hasInvalidChars = !charRegex.test(text) var isTooLong = !lengthRegex.test(text) if (hasInvalidChars || isTooLong) { var filteredText = text filteredText = filteredText.replace(/[^A-Za-z0-9-_]/g, "") filteredText = filteredText.slice(0, 32) text = filteredText if (isTooLong) { alertText = qsTr("Username cannot exceed 32 characters") showAlert = true } else if (hasInvalidChars) { alertText = qsTr("Username can only contain letters, numbers, - and _") showAlert = true } } pwdLayout.currentName = text } else { var colonRegex = /:/ var lengthRegex = /^.{0,32}$/ var hasColon = colonRegex.test(text) var isTooLong = !lengthRegex.test(text) if (hasColon || isTooLong) { var filteredText = text filteredText = filteredText.replace(":", "") filteredText = filteredText.slice(0, 32) text = filteredText if (isTooLong) { alertText = qsTr("Full name cannot exceed 32 characters") showAlert = true } else if (hasColon) { alertText = qsTr("Full name cannot contain colons") showAlert = true } } } } Component.onCompleted: { namesContainter.eidtItems[index] = this } } } background: DccItemBackground { separatorVisible: true } } } } } PasswordLayout { id: pwdLayout currentPwdVisible: false Layout.leftMargin: 2 - DS.Style.dialogWindow.contentHMargin Layout.rightMargin: 6 - DS.Style.dialogWindow.contentHMargin Layout.topMargin: 0 Layout.bottomMargin: 7 name: { let nameEdit = namesContainter.eidtItems[0] if (nameEdit === undefined) return "" return nameEdit.text } } RowLayout { spacing: 10 Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 6 Layout.leftMargin: 6 - DS.Style.dialogWindow.contentHMargin Layout.rightMargin: 6 - DS.Style.dialogWindow.contentHMargin Button { Layout.fillWidth: true text: qsTr("Cancel") font: D.DTK.fontManager.t7 onClicked: { close() } } D.RecommandButton { id: createButton Layout.fillWidth: true text: qsTr("Create account") font: D.DTK.fontManager.t7 onClicked: { if (!namesContainter.checkNames()) return if (!pwdLayout.checkPassword()) return var info = pwdLayout.getPwdInfo() info["type"] = userType.currentIndex info["name"] = namesContainter.eidtItems[0].text info["fullname"] = namesContainter.eidtItems[1].text dccData.addUser(info) createButton.enabled = false } } } } } ================================================ FILE: src/plugin-accounts/qml/CustomAvatarCropper.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts import org.deepin.dtk 1.0 as D import Qt.labs.platform 1.1 Control { id: control property string iconSource property int cropSize: 120 property alias dragActived: imgContainter.dragActived property alias imgScale: img2.scale property string previewUrl: "" width: 430 height: 240 signal croppedImage(string file) signal previewUpdated(string previewFile) RowLayout { id: layout height: 190 Layout.fillWidth: true anchors.horizontalCenter: parent.horizontalCenter Rectangle { id: imgGrabber width: control.cropSize height: control.cropSize clip: true visible: false Image { id: sourceItem width: img2.width height: img2.height source: control.iconSource cache: false } } Rectangle { id: imgContainter property bool dragActived: false width: control.iconSource.length > 0 ? 190 : 120 height: width Layout.alignment: Qt.AlignTop | Qt.AlignHCenter clip: true color: control.iconSource.length > 0 ? "transparent" : control.palette.button radius: control.iconSource.length > 0 ? 0 : 18 Image { id: img2 property bool initialAligned: false // Fit strategy: fix height to cropSize, width by aspect ratio height: control.cropSize width: height * (sourceSize.height > 0 ? (sourceSize.width / sourceSize.height) : 1) x: (imgContainter.width - width) / 2 y: (imgContainter.height - height) / 2 source: control.iconSource cache: false onStatusChanged: { if (status === Image.Ready) { initialAligned = false img2.updatePos() } } onSourceChanged: initialAligned = false Component.onCompleted: img2.updatePos() function updatePos() { // Compute crop rect (fixed size cropSize centered in container) let cropStartX = (imgContainter.width - control.cropSize) / 2 let cropStartY = (imgContainter.height - control.cropSize) / 2 let cropEndX = cropStartX + control.cropSize let cropEndY = cropStartY + control.cropSize // Recompute size based on source aspect ratio let aspect = 1.0 if (img2.sourceSize.height > 0) { aspect = img2.sourceSize.width / img2.sourceSize.height if (aspect >= 1.0) { // Landscape: fit height, width by aspect img2.height = control.cropSize img2.width = control.cropSize * aspect } else { // Portrait: fit width, height by aspect img2.width = control.cropSize img2.height = control.cropSize / aspect } } let offsetX = (img2.scale - 1.0) * img2.width / 2 let offsetY = (img2.scale - 1.0) * img2.height / 2 // First time after image ready: center horizontally/vertically if (!initialAligned) { img2.x = (imgContainter.width - img2.width) / 2 img2.y = (imgContainter.height - img2.height) / 2 initialAligned = true } let visualX = img2.x - offsetX let visualY = img2.y - offsetY let visualW = img2.scale * img2.width let visualH = img2.scale * img2.height // Constrain both axes so that the scaled image always covers the crop square if (visualX > cropStartX) { img2.x = offsetX + cropStartX } else if (visualX + visualW < cropEndX) { img2.x = cropEndX - visualW + offsetX } if (visualY > cropStartY) { img2.y = offsetY + cropStartY } else if (visualY + visualH < cropEndY) { img2.y = cropEndY - visualH + offsetY } // Sync hidden grab source to crop rect origin sourceItem.scale = img2.scale sourceItem.x = img2.x - cropStartX sourceItem.y = img2.y - cropStartY } DragHandler { id: dragHandler onActiveChanged: { if (active) { timer.stop() } else { img2.updatePos() timer.restart() } } onTranslationChanged: img2.updatePos() } } MouseArea { anchors.fill: parent onPressed: function(mouse) { mouse.accepted = false boxShadow.shadowColor = "#88000000" imgContainter.dragActived = true timer.restart() } onWheel: function(wheel) { img2.updatePos() } } Timer { id: timer interval: 1000; onTriggered: { boxShadow.shadowColor = palette.window imgContainter.dragActived = false control.updatePreview() } } D.BoxShadow { id: boxShadow hollow: true anchors.fill: parent anchors.margins: Math.max(0, (imgContainter.width - control.cropSize) / 2) shadowBlur: 36 spread: 80 shadowColor: palette.window cornerRadius: 18 } } } RowLayout { anchors.top: layout.bottom anchors.topMargin: 10 anchors.horizontalCenter: parent.horizontalCenter spacing: 10 D.Label { text: qsTr("small") font: D.DTK.fontManager.t8 verticalAlignment: Text.AlignVCenter Layout.alignment: Qt.AlignVCenter } Slider { id: scaleSlider from: 1.0 to: 2.0 stepSize: 0.5 value: img2.scale implicitHeight: 24 handleType: Slider.HandleType.ArrowBottom Layout.alignment: Qt.AlignVCenter onValueChanged: { img2.scale = value img2.updatePos() } onPositionChanged: { boxShadow.shadowColor = "#88000000" imgContainter.dragActived = true timer.restart() } } D.Label { text: qsTr("big") font: D.DTK.fontManager.t8 verticalAlignment: Text.AlignVCenter Layout.alignment: Qt.AlignVCenter } } function cropToTemp(callback) { if (!control.iconSource || control.iconSource.length < 1) { if (callback) callback("") return } imgGrabber.grabToImage(function (result) { const tmp = StandardPaths.writableLocation(StandardPaths.TempLocation) + "/dcc_avatar_tmp.png" result.saveToFile(tmp) if (callback) callback(tmp) }) } property var _tempPreviewFiles: [] function updatePreview() { if (!control.iconSource || control.iconSource.length < 1) { control.previewUrl = "" return } imgGrabber.grabToImage(function (result) { let tmpDir = StandardPaths.writableLocation(StandardPaths.TempLocation).toString() tmpDir = tmpDir.replace("file://", "") const tmp = tmpDir + "/dcc_avatar_preview_" + Date.now() + ".png" result.saveToFile(tmp) control._tempPreviewFiles.push(tmp) control.previewUrl = "file://" + tmp control.previewUpdated(control.previewUrl) }) } function getTempPreviewFiles() { return control._tempPreviewFiles } function clearTempPreviewFiles() { control._tempPreviewFiles = [] control.previewUrl = "" } } ================================================ FILE: src/plugin-accounts/qml/CustomAvatarEmpatyArea.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Shapes import org.deepin.dtk 1.0 as D Control { id: control property real radius: 8 width: 430 height: 360 signal requireFileDialog() signal iconDropped(string file) Shape { id: shape anchors.centerIn: parent width: 400 height: 300 layer.enabled: true layer.samples: 4 layer.smooth: true ShapePath { strokeStyle: ShapePath.DashLine strokeWidth: 1 fillColor: { if (dropArea.containsDrag) { Qt.rgba(0, 0, 0, 0.08) } else if (mouseArea.pressed) { Qt.rgba(0, 0, 0, 0.10) } else if (mouseArea.containsMouse) { Qt.rgba(0, 0, 0, 0.05) } else { palette.window } } strokeColor: "gray" startX: control.radius startY: 0 PathLine { x: shape.width - control.radius; y: 0 } PathQuad { x: shape.width; y: control.radius; controlX: shape.width; controlY: 0 } PathLine { x: shape.width; y: shape.height - control.radius } PathQuad { x: shape.width - control.radius; y: shape.height; controlX: shape.width; controlY: shape.height } PathLine { x: control.radius; y: shape.height } PathQuad { x: 0; y: shape.height - control.radius; controlX: 0; controlY: shape.height } PathLine { x: 0; y: control.radius } PathQuad { x: control.radius; y: 0; controlX: 0; controlY: 0 } } MouseArea { id: mouseArea anchors.fill: parent hoverEnabled: true onClicked: { requireFileDialog() } } DropArea { id: dropArea anchors.fill: parent enabled: true onDropped: function (drop) { if (drop.hasUrls) { var filePath = drop.urls[0].toString() var ext = filePath.substring(filePath.lastIndexOf('.') + 1).toLowerCase() if (['png', 'bmp', 'jpg', 'jpeg'].indexOf(ext) === -1) { errorLabel.visible = true normalLabel.visible = false return } errorLabel.visible = false normalLabel.visible = true iconDropped(filePath) } } } } D.DciIcon { id: addIcon anchors.centerIn: parent name: "dcc_user_add_icon" sourceSize: Qt.size(64, 64) } D.Label { id: normalLabel width: 360 wrapMode: Text.WordWrap font: D.DTK.fontManager.t8 anchors.top: addIcon.bottom anchors.topMargin: 20 horizontalAlignment: Text.AlignHCenter anchors.horizontalCenter: parent.horizontalCenter text: qsTr("You haven't uploaded an avatar yet. Click or drag and drop to upload an image.") } D.Label { id: errorLabel width: 360 wrapMode: Text.WordWrap anchors.top: addIcon.bottom anchors.topMargin: 20 horizontalAlignment: Text.AlignHCenter anchors.horizontalCenter: parent.horizontalCenter visible: false text: qsTr("The uploaded file type is incorrect, please upload it again") } } ================================================ FILE: src/plugin-accounts/qml/CustomLocalAvatarsRow.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import Qt.labs.platform 1.1 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 Item { id: root property string userId property string filter: "icons/local" property string currentAvatar property string previewUrl: "" signal requireFileDialog() implicitHeight: 100 width: parent ? parent.width : 460 Component.onCompleted: { const currentNoQuery = (root.currentAvatar || "").toString().replace("file://", "") const isCustom = currentNoQuery.indexOf("/local/") >= 0 || currentNoQuery.indexOf("/avatars/") >= 0 if (isCustom) { // For custom avatars, try to get from cache const cached = dccData.customAvatarFromCache() if (cached && cached.length > 0) { root.currentAvatar = cached } } // For system avatars, keep the original currentAvatar value from dialog const tmp = row.icons row.icons = [] Qt.callLater(function(){ row.icons = tmp }) } RowLayout { id: row spacing: 12 anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter property var allIcons: dccData.avatars(root.userId, root.filter, "") property var icons: allIcons.slice(0, Math.min(5, allIcons.length)) Repeater { model: row.icons delegate: D.ItemDelegate { id: delegate property bool isAddButton: modelData == "add" property string modelPathNoQuery: (modelData || "").toString().replace("file://", "") property string currentNoQuery: (root.currentAvatar || "").toString().replace("file://", "") property bool currentIsCustom: currentNoQuery.indexOf("/local/") >= 0 || currentNoQuery.indexOf("/avatars/") >= 0 // 检查是否直接匹配,或者当前是自定义头像且列表中没有匹配项时选中第一个自定义头像 property bool isFirstCustomInList: !isAddButton && index === 1 property bool isSelected: { if (isAddButton) return false // 直接路径匹配 if (currentNoQuery.length > 0 && currentNoQuery === modelPathNoQuery) return true if (currentIsCustom && currentNoQuery.indexOf("/var/lib/") >= 0 && isFirstCustomInList) return true return false } implicitHeight: 72 implicitWidth: 72 checkable: false hoverEnabled: true background: Item {} onClicked: { if (!delegate.isAddButton) root.currentAvatar = modelData } // add 按钮 Loader { active: delegate.isAddButton sourceComponent: Item { implicitHeight: 72 implicitWidth: 72 Button { id: control width: 60 height: 60 padding: 0 leftPadding: 0 rightPadding: 0 topPadding: 0 bottomPadding: 0 icon { name: modelData height: 60 width: 60 } anchors.centerIn: parent onClicked: root.requireFileDialog() } } } // 普通头像项 Item { id: iconSlot width: 60 height: 60 anchors.centerIn: parent clip: true Rectangle { id: avatarContainer width: 60 height: 60 radius: 6 anchors.centerIn: parent clip: true visible: !delegate.isAddButton Image { id: img source: { if (delegate.isAddButton) return "" if (delegate.isSelected && root.previewUrl.length > 0) { return root.previewUrl } return modelData || "" } cache: false width: parent.width height: parent.height fillMode: Image.PreserveAspectCrop anchors.centerIn: parent antialiasing: true smooth: true } D.DciIcon { id: fallbackImg palette: D.DTK.makeIconPalette(delegate.palette) mode: delegate.D.ColorSelector.controlState theme: delegate.D.ColorSelector.controlTheme fallbackToQIcon: false name: modelData sourceSize: Qt.size(60, 60) anchors.centerIn: parent visible: img.status === Image.Error || img.status === Image.Null antialiasing: true } } } D.BoxShadow { id: boxShadow hollow: true anchors.fill: iconSlot shadowBlur: 3 spread: 3 shadowColor: delegate.palette.window cornerRadius: 6 } Rectangle { id: background radius: 8 anchors.fill: iconSlot anchors.margins: -2 color: "transparent" border.color: delegate.palette.highlight border.width: 1 visible: delegate.isSelected z: 10 } D.IconLabel { id: checkIcon z: 99 icon { name: "item_checked" width: 20 height: 20 palette: D.DTK.makeIconPalette(delegate.palette) mode: delegate.D.ColorSelector.controlState theme: delegate.D.ColorSelector.controlTheme } width: 20 height: 20 x: background.x + background.width - width / 2 - 3 y: background.y - height / 2 + 5 visible: delegate.isSelected } D.ActionButton { z: 99 visible: delegate.hovered && !delegate.isSelected && !delegate.isAddButton focusPolicy: Qt.NoFocus anchors.right: parent.right anchors.top: parent.top icon { name: "entry_clear" width: 20 height: 20 } background: Rectangle { radius: 10 } onClicked: { if (typeof dccData.deleteUserIcon === 'function') { dccData.deleteUserIcon(root.userId, modelData) } } } } } } function refresh() { row.allIcons = dccData.avatars(root.userId, root.filter, "") row.icons = row.allIcons.slice(0, Math.min(5, row.allIcons.length)) const curNoQuery = (root.currentAvatar || "") if (curNoQuery && row.icons.every(function(p){ return (p||"") !== curNoQuery })) { const idx = row.allIcons.findIndex(function(p){ return (p||"") === curNoQuery }) if (idx >= 0) { const addBtn = row.icons.length > 0 ? row.icons[0] : "add" const selected = row.allIcons[idx] let others = row.icons.slice(1, 5) others = others.filter(function(p){ return (p||"") !== curNoQuery }) row.icons = [addBtn].concat([selected]).concat(others).slice(0, Math.min(5, row.allIcons.length)) } } if (root.currentAvatar && row.allIcons.indexOf(root.currentAvatar) < 0) { const curNoQuery = (root.currentAvatar || "") const existsNoQuery = row.allIcons.some(function(p){ return (p||"") === curNoQuery }) if (!existsNoQuery) root.currentAvatar = "" } // Don't override currentAvatar from cache during refresh const tmp = row.icons row.icons = [] Qt.callLater(function(){ row.icons = tmp }) } Connections { target: dccData function onAvatarChanged(userId, avatar) { if (userId === root.userId) root.refresh() } } } ================================================ FILE: src/plugin-accounts/qml/EditActionLabel.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS D.LineEdit { id: edit property alias editBtn: editButton property alias alertText: panel.alertText property alias showAlert: panel.showAlert property alias metrics: fontMetrics property var completeText: "" signal finished() readOnly: true horizontalAlignment: TextInput.AlignLeft verticalAlignment: TextInput.AlignVCenter topPadding: 4 bottomPadding: 4 clearButton.visible: !readOnly rightPadding: clearButton.width + clearButton.anchors.rightMargin implicitHeight: 36 background: D.EditPanel { id: panel control: edit showBorder: !readOnly alertDuration: 3000 implicitWidth: DS.Style.edit.width implicitHeight: 32 anchors { fill: parent topMargin: 3 bottomMargin: 3 } backgroundColor: D.Palette { normal: Qt.rgba(1, 1, 1, 0) normalDark: Qt.rgba(1, 1, 1, 0) } } onEditingFinished: { if (edit.readOnly) return if (showAlert) showAlert = false finished() } FontMetrics { id: fontMetrics font: edit.font } D.ActionButton { id: editButton focusPolicy: Qt.StrongFocus width: 30 height: 30 icon.name: "dcc-edit" icon.width: DS.Style.edit.actionIconSize icon.height: DS.Style.edit.actionIconSize hoverEnabled: true background: Rectangle { anchors.fill: parent property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } anchors { right: edit.right verticalCenter: edit.verticalCenter } onClicked: { edit.readOnly = false edit.selectAll() edit.forceActiveFocus() } } } ================================================ FILE: src/plugin-accounts/qml/LoginMethod.qml ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS DccTitleObject { id: loginMethodTitle property string userId name: "loginMethodTitle" // parentName: "" displayName: qsTr("Login method") weight: 38 DccObject { name: loginMethodTitle.parentName + "loginMethod" parentName: loginMethodTitle.parentName description: qsTr("Password, wechat, biometric authentication, security key") canSearch: loginMethodTitle.canSearch weight: 40 pageType: DccObject.Item page: DccGroupView {} // DccObject { // name: loginMethodTitle.parentName + "WeChatScanQR" // parentName: loginMethodTitle.parentName + "loginMethod" // displayName: qsTr("WeChat scan QR code") // weight: 12 // pageType: DccObject.Editor // page: Switch { // } // } DccObject { name: loginMethodTitle.parentName + "loginMethodItem" + "password" parentName: loginMethodTitle.parentName + "loginMethod" displayName: qsTr("Password") canSearch: loginMethodTitle.canSearch weight: 20 DccObject { name: loginMethodTitle.parentName + "PasswordLoginTitle" parentName: loginMethodTitle.parentName + "loginMethodItem" + "password" displayName: qsTr("Password") canSearch: loginMethodTitle.canSearch weight: 12 pageType: DccObject.Item page: RowLayout { D.Label { Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter Layout.leftMargin: 10 font.bold: true font.pointSize: 14 text: dccObj.displayName } } onParentItemChanged: item => { if (item) item.topPadding = 10 } } DccObject { id: passwordGroupView name: loginMethodTitle.parentName + "PasswordGroupView" parentName: loginMethodTitle.parentName + "loginMethodItem" + "password" description: qsTr("Password, wechat, biometric authentication, security key") canSearch: loginMethodTitle.canSearch weight: 20 pageType: DccObject.Item page: DccGroupView {} DccObject { name: loginMethodTitle.parentName + "PasswordModify" parentName: passwordGroupView.name displayName: dccData.currentUserId() === loginMethodTitle.userId ? qsTr("Modify password") : qsTr("Reset password") canSearch: loginMethodTitle.canSearch backgroundType: DccObject.ClickStyle weight: 12 enabled: dccData.currentUserId() === loginMethodTitle.userId || (dccData.curUserIsSysAdmin() && !dccData.isOnline(loginMethodTitle.userId)) pageType: DccObject.Editor page: D.IconLabel { icon { name: "arrow_ordinary_right" palette: D.DTK.makeIconPalette(palette) } opacity: enabled ? 1 : 0.4 } onActive: { pmdLoader.active = true } Loader { id: pmdLoader active: false sourceComponent: PasswordModifyDialog { userId: loginMethodTitle.userId onClosing: function (close) { pmdLoader.active = false } } onLoaded: function () { pmdLoader.item.show() } } } DccObject { name: loginMethodTitle.parentName + "PasswordValidityDays" + "biometric" parentName: passwordGroupView.name displayName: qsTr("Validity days") canSearch: loginMethodTitle.canSearch weight: 12 pageType: DccObject.Editor page: D.SpinBox { id: sbAge from: 1 to: 99999 value: dccData.passwordAge(loginMethodTitle.userId) editable: true validator: RegularExpressionValidator { regularExpression: /[\d]{1,5}/ } textFromValue: function(value) { return value > 99998 ? qsTr("Always") : value } valueFromText: function(text, locale) { if (text === qsTr("Always")) return 99999 return text } onValueChanged: function() { timer.restart() if (!ti.activeFocus) ti.text = sbAge.textFromValue(sbAge.value, sbAge.locale) } onFocusChanged: { if (!focus) { sbAge.value = sbAge.valueFromText(ti.text, sbAge.locale) dccData.setPasswordAge(loginMethodTitle.userId, value) } } contentItem: TextInput { id: ti text: sbAge.textFromValue(sbAge.value, sbAge.locale) color: sbAge.palette.text readOnly: !sbAge.editable validator: sbAge.validator inputMethodHints: sbAge.inputMethodHints verticalAlignment: Text.AlignVCenter leftPadding: 10 maximumLength: 6 selectByMouse: true renderType: Text.NativeRendering onEditingFinished: sbAge.value = sbAge.valueFromText(text, sbAge.locale) onTextChanged: { if (text.length > 0 && text.charAt(0) === "0") { var trimmed = text.replace(/^0+/, "") text = trimmed } } onActiveFocusChanged: { if (activeFocus) { text = String(sbAge.value) } else { text = sbAge.textFromValue(sbAge.value, sbAge.locale) } } } Timer { id: timer interval: 1000 onTriggered: { dccData.setPasswordAge(loginMethodTitle.userId, sbAge.value) } } Connections { target: dccData function onPasswordAgeChanged(userId, age) { if (userId === loginMethodTitle.userId) { sbAge.value = dccData.passwordAge(loginMethodTitle.userId) } } } } } } } } } ================================================ FILE: src/plugin-accounts/qml/PasswordLayout.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 ColumnLayout { id: pwdLayout property string userId property string name: dccData.userName(pwdLayout.userId) property bool currentPwdVisible: true property string currentName: name Layout.fillWidth: true spacing: 0 property int maxLabelWidth: 100 signal requestClose() signal labelWidthCalculated() FontMetrics { id: fm font: D.DTK.fontManager.t6 } function maxWidth(font) { fm.font = font var texts = [] if (currentPwd.visible) { texts.push(currentPwd.label.text) } // 获取每个delegate中label的text for (var i = 0; i < pwdContainter.repeater.count; i++) { var delegateItem = pwdContainter.repeater.itemAt(i) if (delegateItem && delegateItem.contentItem) { texts.push(delegateItem.contentItem.label.text) } } var maxWidth = 0 for (var i = 0; i < texts.length; i++) { var width = fm.advanceWidth(texts[i]) if (width > maxWidth) { maxWidth = width } } var finalWidth = maxWidth > 110 ? 110 : maxWidth pwdLayout.maxLabelWidth = Math.ceil(finalWidth) } Component.onCompleted: { maxWidth(currentPwd.label.font) labelWidthCalculated() } function minWidth(font, text, width) { fm.font = font return Math.min(width, fm.advanceWidth(text) + 20) } function getPwdInfo() { var info = { "pwd": pwdContainter.eidtItems[0].text, "pwdRepeat": pwdContainter.eidtItems[1].text, "pwdHint": pwdContainter.eidtItems[2].text } if (currentPwd.visible) info["oldPwd"] = currentPwd.edit.text return info } function checkPassword() { return pwdContainter.checkPassword() } function showUserNameMatchPasswordAlert() { if (pwdContainter && pwdContainter.eidtItems && pwdContainter.eidtItems[0]) { pwdContainter.eidtItems[0].showAlertText(qsTr("The password cannot be the same as the username.")) } } function playErrorSound() { dccData.playSystemSound(14) } function focusAndSelectAll(edit) { if (edit) { edit.forceActiveFocus() if (edit.selectAll) { edit.selectAll() } else if (edit.select) { edit.select(0, edit.text.length) } } } PasswordItem { id: currentPwd visible: pwdLayout.currentPwdVisible label.text: qsTr("Current password") label.font: D.DTK.fontManager.t6 edit.placeholderText: qsTr("Required") implicitHeight: 30 Layout.leftMargin: 0 Layout.rightMargin: -DS.Style.dialogWindow.contentHMargin Layout.bottomMargin: 0 Loader { id: safepageLoader active: false property string msg sourceComponent: ComfirmSafePage { msg: safepageLoader.msg onClosing: function () { safepageLoader.active = false } onRequestShowSafePage: { dccData.showDefender() } } onLoaded: function () { safepageLoader.item.show() } } Connections { target: dccData function onPasswordModifyFinished(id, code, msg) { if (id !== pwdLayout.userId) return // no error, set pwd hint if (code === 0) { if (pwdContainter.eidtItems[2]) dccData.setPasswordHint(pwdLayout.userId, pwdContainter.eidtItems[2].text) pwdLayout.requestClose() return } let info = dccData.checkPasswordResult(code, msg, pwdLayout.name, pwdContainter.eidtItems[0].text) // wrong password if (info["oldPwd"] !== undefined && currentPwd.visible) { currentPwd.edit.showAlertText(info["oldPwd"]) focusAndSelectAll(currentPwd.edit) return } // new password error if (info["pwd"] !== undefined) pwdContainter.eidtItems[0].showAlertText(info["pwd"]) } function onShowSafetyPage(msg) { if (!safepageLoader.active) { safepageLoader.msg = msg safepageLoader.active = true } } } } RowLayout { id: pwdIndicator spacing: 4 Layout.alignment: Qt.AlignRight | Qt.AlignBottom Layout.rightMargin: 10 Layout.bottomMargin: 6 Layout.topMargin: 20 Label { id: pwdStrengthHintText text: "" Layout.rightMargin: 6 visible: false // if need text set visible } Repeater { id: indicatorRepeater readonly property var defaultModel: [ palette.button, palette.button, palette.button ] model: defaultModel delegate: Rectangle { implicitHeight: 4 height: 4 width: 10 color: modelData radius: 2 } } function updateIndicatorColors(level, colors) { // Note: slice() 拷贝一份 defaultModel 数组 // 如果直接等号后面赋值操作将会修改 defaultModel (就算是 readonly 也会?) let model = indicatorRepeater.defaultModel.slice() for (let i = 0; i < level; ++i) { model[i] = colors[level - 1] } indicatorRepeater.model = model } function update(level) { if (level > 0) { var colors = [ "#FF5736", "#FFAA00", "#15BB18" ] pwdStrengthHintText.color = colors[level - 1] if (level === 1) { pwdStrengthHintText.text = qsTr("Weak") } else if (level === 2) { pwdStrengthHintText.text = qsTr("Medium") } else if (level === 3) { pwdStrengthHintText.text = qsTr("Strong") } else { pwdStrengthHintText.text = "" } updateIndicatorColors(level, colors) } else { pwdStrengthHintText.text = "" indicatorRepeater.model = indicatorRepeater.defaultModel } } } ListModel { id: passwordModel ListElement { name: qsTr("New password") placeholder: qsTr("Required") echoButtonVisible: true } ListElement { name: qsTr("Repeat Password") placeholder: qsTr("Required") echoButtonVisible: true } ListElement { name: qsTr("Password hint") placeholder: qsTr("Optional") echoButtonVisible: false } } Rectangle { id: pwdContainter property var eidtItems: [] property alias repeater: repeater radius: 8 Layout.fillWidth: true Layout.alignment: Qt.AlignTop | Qt.AlignHCenter Layout.rightMargin: 0 Layout.topMargin: 4 - DS.Style.dialogWindow.contentHMargin Layout.bottomMargin: 30 implicitHeight: 150 color: "transparent" function emptyCheck(edit) { if (edit.text.length < 1) { edit.showAlertText(qsTr("Password cannot be empty")) focusAndSelectAll(edit) return false } return true } function checkPassword() { if (currentPwd.visible && !emptyCheck(currentPwd.edit)) return false let edit0 = pwdContainter.eidtItems[0] let edit1 = pwdContainter.eidtItems[1] let edit2 = pwdContainter.eidtItems[2] if (!edit0 || !edit1 || !edit2) return true if (!emptyCheck(edit0)) return false // password repeat test if (edit1.text.length < 1 || edit1.text !== edit0.text) { edit1.showAlertText(qsTr("Passwords do not match")) focusAndSelectAll(edit1) return false } // password notchanged test if (edit0.text.length < 1 || (currentPwd.visible && currentPwd.edit.text === edit0.text)) { edit0.showAlertText(qsTr("New password should differ from the current one")) focusAndSelectAll(edit0) return false } if (edit0.text === pwdLayout.currentName && pwdLayout.currentName.length > 0) { edit0.showAlertText(qsTr("The password cannot be the same as the username.")) focusAndSelectAll(edit0) return false } let alertText = "" // pwcheck verifyPassword alertText = dccData.checkPassword(pwdLayout.currentName, edit0.text) if (alertText.length > 0) { edit0.showAlertText(alertText) focusAndSelectAll(edit0) return false } // password hint test if (edit0.text.split('').filter(c => edit2.text.includes(c)).length > 0) { edit2.showAlertText(qsTr("The hint is visible to all users. Do not include the password here.")) focusAndSelectAll(edit2) return false } return true } ColumnLayout { id: pwdColumnLayout spacing: 10 anchors.fill: parent Repeater { id: repeater Layout.bottomMargin: 20 model: passwordModel delegate: D.ItemDelegate { implicitWidth: pwdColumnLayout.width backgroundVisible: false checkable: false clip: false z: (control && control.contentItem && control.contentItem.edit && control.contentItem.edit.showAlert) ? 100 : 1 implicitHeight: 30 leftPadding: pwdLayout.currentPwdVisible ? 0 : 10 rightPadding: 0 contentItem: PasswordItem { label.text: model.name label.font: D.DTK.fontManager.t6 edit { placeholderText: model.placeholder echoButtonVisible: model.echoButtonVisible } onTextChanged: function(text) { if (index == 0) { if (text.length > 0) { let lvl = dccData.passwordLevel(text) pwdIndicator.update(lvl) } else { pwdIndicator.update(0) } // Realtime validation (red border only, no tips). let edit0 = pwdContainter.eidtItems[0] if (!edit0) return if (text.length === 0) { edit0.showAlert = false edit0.alertText = "" edit0.hasErrorBorder = false return } // username match if (pwdLayout.currentName.length > 0 && text === pwdLayout.currentName) { edit0.showAlert = true edit0.alertText = "" edit0.hasErrorBorder = true return } let err = dccData.checkPasswordSilently(pwdLayout.currentName, text) edit0.showAlert = (err.length > 0) edit0.alertText = "" edit0.hasErrorBorder = (err.length > 0) } else if (index == 1) { // Repeat password: realtime red border when mismatch (no tips text yet) let edit0 = pwdContainter.eidtItems[0] let edit1 = pwdContainter.eidtItems[1] if (!edit0 || !edit1) return if (text.length === 0) { edit1.showAlert = false edit1.alertText = "" edit1.hasErrorBorder = false return } if (edit0.text.length > 0 && text !== edit0.text) { edit1.showAlert = true edit1.alertText = "" edit1.hasErrorBorder = true } else { edit1.showAlert = false edit1.alertText = "" edit1.hasErrorBorder = false } } } onEditingFinished: { // Validate and show tips on focus-out (v20 behavior) if (index == 0) { let edit0 = pwdContainter.eidtItems[0] if (!edit0) return if (edit0.text.length === 0) { edit0.showAlertText(qsTr("Password cannot be empty")) return } if (pwdLayout.currentName.length > 0 && edit0.text === pwdLayout.currentName) { edit0.showAlertText(qsTr("The password cannot be the same as the username.")) return } let err = dccData.checkPasswordSilently(pwdLayout.currentName, edit0.text) if (err.length > 0) { edit0.showAlertText(err) } else { edit0.showAlert = false edit0.alertText = "" edit0.hasErrorBorder = false } } else if (index == 1) { let edit0 = pwdContainter.eidtItems[0] let edit1 = pwdContainter.eidtItems[1] if (!edit0 || !edit1) return if (edit1.text.length === 0) { edit1.showAlertText(qsTr("Password cannot be empty")) return } if (edit0.text.length > 0 && edit1.text !== edit0.text) { edit1.showAlertText(qsTr("Passwords do not match")) } else { edit1.showAlert = false edit1.alertText = "" edit1.hasErrorBorder = false } } } Component.onCompleted: { pwdContainter.eidtItems[index] = this.edit } } background: DccItemBackground { separatorVisible: true focusBorderVisible: !(control && control.contentItem && control.contentItem.edit && (control.contentItem.edit.hasErrorBorder || control.contentItem.edit.showAlert)) } } } Label { text: qsTr("The hint is visible to all users. Do not include the password here.") wrapMode: Text.WordWrap Layout.alignment: Qt.AlignLeft Layout.rightMargin: 0 Layout.leftMargin: maxLabelWidth + 27 Layout.preferredWidth: pwdLayout.minWidth(font, text, pwdColumnLayout.width - Layout.leftMargin) font: D.DTK.fontManager.t8 } } } component PasswordItem : RowLayout { id: pwdItem property alias label: leftItem property alias edit: rightItem signal textChanged(string text) signal editingFinished() spacing: 10 Layout.alignment: Qt.AlignVCenter Label { id: leftItem Layout.preferredHeight: 30 font: D.DTK.fontManager.t6 elide: Text.ElideRight Layout.preferredWidth: pwdLayout.maxLabelWidth Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter verticalAlignment: Text.AlignVCenter ToolTip.visible: leftItemHoverHandler.hovered && truncated ToolTip.text: text HoverHandler { id: leftItemHoverHandler } } Item { id: editWrapper Layout.preferredHeight: 30 Layout.fillWidth: true Layout.alignment: Qt.AlignRight | Qt.AlignVCenter D.PasswordEdit { id: rightItem anchors.fill: parent property bool hasErrorBorder: false // Cache the normal focus color so we can restore it. property color normalHighlight: "transparent" Component.onCompleted: normalHighlight = palette.highlight palette.highlight: (hasErrorBorder || showAlert) ? "#FF5736" : normalHighlight topPadding: 0 bottomPadding: 0 font: D.DTK.fontManager.t7 canCopy: false canCut: false inputMethodHints: Qt.ImhHiddenText | Qt.ImhNoPredictiveText | Qt.ImhNoAutoUppercase verticalAlignment: TextInput.AlignVCenter echoMode: echoButtonVisible ? TextInput.Password : TextInput.Normal alertDuration: 3000 onTextChanged: { if (rightItem.hasErrorBorder) rightItem.hasErrorBorder = false if (!echoButtonVisible && text.length > 14) { rightItem.text = text.substring(0, 14) playErrorSound() return } pwdItem.textChanged(text) } onEditingFinished: { if (echoButtonVisible && pwdContainter.eidtItems[2] != rightItem) { if (text === pwdLayout.currentName && text.length > 0) { showAlertText(qsTr("The password cannot be the same as the username.")) } } pwdItem.editingFinished() } function showAlertText(text) { rightItem.hasErrorBorder = true rightItem.showAlert = false rightItem.showAlert = true rightItem.alertText = text } } } } } ================================================ FILE: src/plugin-accounts/qml/PasswordModifyDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Dialogs import QtQuick.Window import QtQml.Models import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 D.DialogWindow { id: dialog property string userId width: 460 minimumWidth: width minimumHeight: height maximumWidth: minimumWidth maximumHeight: minimumHeight icon: "preferences-system" modality: Qt.WindowModal title: isCurrent() ? qsTr("Modify password") : qsTr("Reset password") function isCurrent() { return dialog.userId === dccData.currentUserId() } ColumnLayout { width: dialog.width - 10 spacing: 0 Label { text: dialog.title font.bold: true Layout.leftMargin: 0 Layout.rightMargin: 20 font.pixelSize: cancelButton.font.pixelSize Layout.alignment: Qt.AlignTop | Qt.AlignHCenter } Label { text: { if (dialog.isCurrent()) return qsTr("Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure.") else return qsTr("Resetting the password will clear the data stored in the keyring.") } font: D.DTK.fontManager.t8 wrapMode: Text.WordWrap rightPadding: 10 leftPadding: 10 horizontalAlignment: Text.AlignHCenter Layout.preferredWidth: pwdLayout.minWidth(font, text, dialog.width - 12) Layout.leftMargin: 0 Layout.rightMargin: 10 Layout.alignment: Qt.AlignTop | Qt.AlignHCenter } PasswordLayout { id: pwdLayout userId: dialog.userId currentPwdVisible: dialog.isCurrent() Layout.leftMargin: 0 Layout.rightMargin: 18 Layout.fillWidth: true Layout.maximumWidth: dialog.width - 12 onRequestClose: { // no error, close dialog close() } } RowLayout { spacing: 6 Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 6 Layout.leftMargin: 0 Layout.rightMargin: 16 Button { id: cancelButton Layout.fillWidth: true text: qsTr("Cancel") font: D.DTK.fontManager.t7 onClicked: { close() } } D.RecommandButton { Layout.fillWidth: true text: qsTr("Modify password") font: D.DTK.fontManager.t7 onClicked: { if (!pwdLayout.checkPassword()) return dccData.setPassword(dialog.userId, pwdLayout.getPwdInfo()); } } } } } ================================================ FILE: src/plugin-accounts/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-authentication/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(pluginName authentication) file(GLOB_RECURSE authentication_SRCS "operation/*.cpp" "operation/*.h" "operation/qrc/${pluginName}.qrc" ) add_library(${pluginName} MODULE ${authentication_SRCS} ) pkg_check_modules(DEEPIN_PW_CHECK REQUIRED libdeepin_pw_check) pkg_check_modules(DaReader REQUIRED dareader) find_package(PolkitQt6-1) set(authentication_Libraries ${DCC_FRAME_Library} ${QT_NS}::DBus ${DTK_NS}::Core ${DTK_NS}::Gui ${QT_NS}::Concurrent PolkitQt6-1::Agent ${DEEPIN_PW_CHECK_LIBRARIES} ${DaReader_LIBRARIES} ) target_link_libraries(${pluginName} PRIVATE ${authentication_Libraries} ) dcc_install_plugin(NAME ${pluginName} TARGET ${pluginName}) ================================================ FILE: src/plugin-authentication/operation/abstractbiometriccontroller.cpp ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "abstractbiometriccontroller.h" namespace dccV25 { AbstractBiometricController::AbstractBiometricController(QObject *parent) : QObject(parent) { } void AbstractBiometricController::setAddStage(CharaMangerModel::AddInfoState stage) { if (m_addStage != stage) { m_addStage = stage; emit addStageChanged(); } } } // namespace dccV25 ================================================ FILE: src/plugin-authentication/operation/abstractbiometriccontroller.h ================================================ //SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "operation/charamangermodel.h" #include namespace dccV25 { class AbstractBiometricController : public QObject { Q_OBJECT Q_PROPERTY(CharaMangerModel::AddInfoState addStage READ addStage WRITE setAddStage NOTIFY addStageChanged) public: explicit AbstractBiometricController(QObject *parent = nullptr); virtual ~AbstractBiometricController() = default; CharaMangerModel::AddInfoState addStage() const { return m_addStage; } void setAddStage(CharaMangerModel::AddInfoState stage); virtual void startEnroll() = 0; virtual void stopEnroll() = 0; virtual void rename(const QString &oldName, const QString &newName) = 0; virtual void remove(const QString &id) = 0; virtual bool isAvailable() const { return true; } virtual QString getTypeName() const = 0; signals: void addStageChanged(); void enrollCompleted(); protected: CharaMangerModel::AddInfoState m_addStage = CharaMangerModel::AddInfoState::StartState; }; } // namespace dccV25 ================================================ FILE: src/plugin-authentication/operation/biometricauthcontroller.cpp ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "biometricauthcontroller.h" #include "dccfactory.h" #include namespace dccV25 { DCC_FACTORY_CLASS(BiometricAuthController) BiometricAuthController::BiometricAuthController(QObject *parent) : QObject(parent) , m_charaModel(new CharaMangerModel(this)) , m_charaWorker(new CharaMangerWorker(m_charaModel, this)) { // 注册QML类型 qmlRegisterType("org.deepin.dcc.account.biometric", 1, 0, "CharaMangerModel"); qmlRegisterType("org.deepin.dcc.account.biometric", 1, 0, "FaceAuthController"); qmlRegisterType("org.deepin.dcc.account.biometric", 1, 0, "FingerprintAuthController"); qmlRegisterType("org.deepin.dcc.account.biometric", 1, 0, "IrisAuthController"); // 创建子控制器 m_faceController = new FaceAuthController(m_charaModel, m_charaWorker, this); m_fingerprintController = new FingerprintAuthController(m_charaModel, m_charaWorker, this); m_irisController = new IrisAuthController(m_charaModel, m_charaWorker, this); } } // namespace dccV25 #include "biometricauthcontroller.moc" ================================================ FILE: src/plugin-authentication/operation/biometricauthcontroller.h ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "charamangerworker.h" #include "operation/charamangermodel.h" #include "faceauthcontroller.h" #include "fingerprintauthcontroller.h" #include "irisauthcontroller.h" namespace dccV25 { class BiometricAuthController : public QObject { Q_OBJECT Q_PROPERTY(CharaMangerModel *model MEMBER m_charaModel CONSTANT) // 直接暴露子控制器给QML使用 Q_PROPERTY(FaceAuthController *faceController MEMBER m_faceController CONSTANT) Q_PROPERTY(FingerprintAuthController *fingerprintController MEMBER m_fingerprintController CONSTANT) Q_PROPERTY(IrisAuthController *irisController MEMBER m_irisController CONSTANT) public: explicit BiometricAuthController(QObject *parent = nullptr); private: CharaMangerModel *m_charaModel = nullptr; CharaMangerWorker *m_charaWorker = nullptr; // 子控制器 FaceAuthController *m_faceController = nullptr; FingerprintAuthController *m_fingerprintController = nullptr; IrisAuthController *m_irisController = nullptr; }; } ================================================ FILE: src/plugin-authentication/operation/charamangerdbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "charamangerdbusproxy.h" #include #include #include #include #include #include const static QString CharaMangerService = QStringLiteral("org.deepin.dde.Authenticate1"); const static QString CharaMangerPath = QStringLiteral("/org/deepin/dde/Authenticate1/CharaManger"); const static QString CharaMangerInterface = QStringLiteral("org.deepin.dde.Authenticate1.CharaManger"); const static QString FingerprintPath = QStringLiteral("/org/deepin/dde/Authenticate1/Fingerprint"); const static QString FingerprintInterface = QStringLiteral("org.deepin.dde.Authenticate1.Fingerprint"); const static QString SessionManagerService = QStringLiteral("org.deepin.dde.SessionManager1"); const static QString SessionManagerPath = QStringLiteral("/org/deepin/dde/SessionManager1"); const static QString SessionManagerInterface = QStringLiteral("org.deepin.dde.SessionManager1"); const static QString PropertiesInterface = QStringLiteral("org.freedesktop.DBus.Properties"); const static QString PropertiesChanged = QStringLiteral("PropertiesChanged"); CharaMangerDBusProxy::CharaMangerDBusProxy(QObject *parent) : QObject(parent) , m_charaMangerInter(new QDBusInterface(CharaMangerService, CharaMangerPath, CharaMangerInterface, QDBusConnection::systemBus(), this)) , m_fingerprintInter(new QDBusInterface(CharaMangerService, FingerprintPath, FingerprintInterface, QDBusConnection::systemBus(), this)) , m_SMInter(new QDBusInterface(SessionManagerService, SessionManagerPath, SessionManagerInterface, QDBusConnection::sessionBus(), this)) { QDBusConnection::systemBus().connect(CharaMangerService, CharaMangerPath, PropertiesInterface, PropertiesChanged, this, SLOT(onPropertiesChanged(QDBusMessage))); QDBusConnection::systemBus().connect(CharaMangerService, FingerprintPath, PropertiesInterface, PropertiesChanged, this, SLOT(onPropertiesChanged(QDBusMessage))); QDBusConnection::sessionBus().connect(SessionManagerService, SessionManagerPath, PropertiesInterface, PropertiesChanged, this, SLOT(onPropertiesChanged(QDBusMessage))); connect(m_charaMangerInter, SIGNAL(EnrollStatus(const QString &, int , const QString &)),this,SIGNAL(EnrollStatusCharaManger(const QString &, int , const QString &))); connect(m_charaMangerInter, SIGNAL(CharaUpdated(const QString &, int)), this, SIGNAL(CharaUpdated(const QString &, int))); connect(m_charaMangerInter, SIGNAL(DriverChanged()), this, SIGNAL(DriverChanged())); connect(m_fingerprintInter, SIGNAL(EnrollStatus(const QString &, int , const QString &)),this,SIGNAL(EnrollStatusFingerprint(const QString &, int , const QString &))); connect(m_fingerprintInter, SIGNAL(Touch(const QString &, bool )),this,SIGNAL(Touch(const QString &, bool ))); } void CharaMangerDBusProxy::setFingerprintInterTimeout(int timeout) { m_fingerprintInter->setTimeout(timeout); } QString CharaMangerDBusProxy::List(const QString &driverName, int charaType) { QList argumentList; argumentList << QVariant::fromValue(driverName) << QVariant::fromValue(charaType); return QDBusPendingReply(m_charaMangerInter->asyncCallWithArgumentList(QStringLiteral("List"), argumentList)); } QString CharaMangerDBusProxy::driverInfo() { return qvariant_cast(m_charaMangerInter->property("DriverInfo")); } QDBusPendingReply CharaMangerDBusProxy::EnrollStart(const QString &driverName, int charaType, const QString &charaName) { QList argumentList; argumentList << QVariant::fromValue(driverName) << QVariant::fromValue(charaType) << QVariant::fromValue(charaName); return m_charaMangerInter->asyncCallWithArgumentList(QStringLiteral("EnrollStart"), argumentList); } QDBusPendingReply<> CharaMangerDBusProxy::EnrollStop() { QList argumentList; return m_charaMangerInter->asyncCallWithArgumentList(QStringLiteral("EnrollStop"), argumentList); } QDBusPendingReply<> CharaMangerDBusProxy::Delete(int charaType, const QString &charaName) { QList argumentList; argumentList << QVariant::fromValue(charaType) << QVariant::fromValue(charaName); return m_charaMangerInter->asyncCallWithArgumentList(QStringLiteral("Delete"), argumentList); } QDBusPendingReply<> CharaMangerDBusProxy::Rename(int charaType, const QString &oldName, const QString &newName) { QList argumentList; argumentList << QVariant::fromValue(charaType) << QVariant::fromValue(oldName) << QVariant::fromValue(newName); return m_charaMangerInter->asyncCallWithArgumentList(QStringLiteral("Rename"), argumentList); } void CharaMangerDBusProxy::setFingerprintTimeout(int timeout) { m_fingerprintInter->setTimeout(timeout); } QString CharaMangerDBusProxy::defaultDevice() { return qvariant_cast(m_fingerprintInter->property("DefaultDevice")); } QDBusPendingReply<> CharaMangerDBusProxy::Claim(const QString &username, bool claimed) { QList argumentList; argumentList << QVariant::fromValue(username) << QVariant::fromValue(claimed); return m_fingerprintInter->asyncCallWithArgumentList(QStringLiteral("Claim"), argumentList); } QDBusPendingReply<> CharaMangerDBusProxy::Enroll(const QString &finger) { QList argumentList; argumentList << QVariant::fromValue(finger); return m_fingerprintInter->asyncCallWithArgumentList(QStringLiteral("Enroll"), argumentList); } QStringList CharaMangerDBusProxy::ListFingers(const QString &username) { QList argumentList; argumentList << QVariant::fromValue(username); return QDBusPendingReply(m_fingerprintInter->asyncCallWithArgumentList(QStringLiteral("ListFingers"), argumentList)); } void CharaMangerDBusProxy::StopEnroll() { QList argumentList; m_fingerprintInter->asyncCallWithArgumentList(QStringLiteral("StopEnroll"), argumentList); } QDBusPendingReply<> CharaMangerDBusProxy::DeleteFinger(const QString &username, const QString &finger) { QList argumentList; argumentList << QVariant::fromValue(username) << QVariant::fromValue(finger); return m_fingerprintInter->asyncCallWithArgumentList(QStringLiteral("DeleteFinger"), argumentList); } QDBusPendingReply<> CharaMangerDBusProxy::RenameFinger(const QString &username, const QString &finger, const QString &newName) { QList argumentList; argumentList << QVariant::fromValue(username) << QVariant::fromValue(finger) << QVariant::fromValue(newName); return m_fingerprintInter->asyncCallWithArgumentList(QStringLiteral("RenameFinger"), argumentList); } void CharaMangerDBusProxy::onPropertiesChanged(const QDBusMessage &message) { QVariantMap changedProps = qdbus_cast(message.arguments().at(1).value()); for (QVariantMap::const_iterator it = changedProps.begin(); it != changedProps.end(); ++it) { QMetaObject::invokeMethod(this, it.key().toLatin1() + "Changed", Qt::DirectConnection, QGenericArgument(it.value().typeName(), it.value().data())); } } ================================================ FILE: src/plugin-authentication/operation/charamangerdbusproxy.h ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef CHARAMANGERDBUSPROXY_H #define CHARAMANGERDBUSPROXY_H #include #include #include #include class QDBusInterface; class QDBusMessage; class CharaMangerDBusProxy : public QObject { Q_OBJECT public: explicit CharaMangerDBusProxy(QObject *parent = nullptr); void setFingerprintInterTimeout(int timeout); public: // CharaManger QString List(const QString &driverName, int charaType); QString driverInfo(); QDBusPendingReply EnrollStart(const QString &driverName, int charaType, const QString &charaName); QDBusPendingReply<> EnrollStop(); QDBusPendingReply<> Delete(int charaType, const QString &charaName); QDBusPendingReply<> Rename(int charaType, const QString &oldName, const QString &newName); // Fingerprint void setFingerprintTimeout(int timeout); QString defaultDevice(); QDBusPendingReply<> Claim(const QString &username, bool claimed); QDBusPendingReply<> Enroll(const QString &finger); QStringList ListFingers(const QString &username); void StopEnroll(); QDBusPendingReply<> DeleteFinger(const QString &username, const QString &finger); QDBusPendingReply<> RenameFinger(const QString &username, const QString &finger, const QString &newName); signals: // CharaManger signals void CharaUpdated(const QString &charaName, int CharaType); void DriverChanged(); void EnrollStatusCharaManger(const QString &Sender, int Code, const QString &Msg); void DriverInfoChanged(const QString & value) const; // Fingerprint signals void EnrollStatusFingerprint(const QString &id, int code, const QString &msg); void DefaultDeviceChanged(const QString &defaultDevice); void Touch(const QString &id, bool pressed); // SessionManager singnals void LockedChanged(bool value) const; private slots: void onPropertiesChanged(const QDBusMessage &message); private: QDBusInterface *m_charaMangerInter; QDBusInterface *m_fingerprintInter; QDBusInterface *m_SMInter; }; #endif // CHARAMANGERDBUSPROXY_H ================================================ FILE: src/plugin-authentication/operation/charamangermodel.cpp ================================================ //SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "charamangermodel.h" #include #include #include CharaMangerModel::CharaMangerModel(QObject *parent) : QObject (parent) , m_isFaceDriverVaild(false) , m_facesList(QStringList()) , m_isIrisDriverVaild(false) , m_irisList(QStringList()) , m_charaVaild(false) { initFingerModel(); connect(this, &CharaMangerModel::vaildFingerChanged, this, &CharaMangerModel::checkCharaVaild); connect(this, &CharaMangerModel::vaildFaceDriverChanged, this, &CharaMangerModel::checkCharaVaild); connect(this, &CharaMangerModel::vaildIrisDriverChanged, this, &CharaMangerModel::checkCharaVaild); } void CharaMangerModel::setFaceDriverVaild(bool isVaild) { if (m_isFaceDriverVaild == isVaild) return; m_isFaceDriverVaild = isVaild; Q_EMIT vaildFaceDriverChanged(isVaild); } void CharaMangerModel::setFaceDriverName(const QString &driverName) { if (m_faceDriverName == driverName) return; m_faceDriverName = driverName; } void CharaMangerModel::setFacesList(const QStringList &faces) { if (faces == m_facesList) return; m_facesList = faces; Q_EMIT facesListChanged(faces); } void CharaMangerModel::setIrisDriverVaild(bool isVaild) { if (m_isIrisDriverVaild == isVaild) return; m_isIrisDriverVaild = isVaild; Q_EMIT vaildIrisDriverChanged(isVaild); } void CharaMangerModel::setIrisDriverName(const QString &driverName) { if (driverName == m_irisDriverName) return; m_irisDriverName = driverName; } void CharaMangerModel::setIrisList(const QStringList &iris) { if (iris == m_irisList) return; m_irisList.clear(); m_irisList = iris; Q_EMIT irisListChanged(iris); } void CharaMangerModel::setInputFaceFD(const int &fd) { Q_EMIT tryStartInputFace(fd); } void CharaMangerModel::setInputIrisFD(CharaMangerModel::AddInfoState state) { Q_EMIT tryStartInputIris(state); } void CharaMangerModel::initFingerModel() { m_isFingerVaild = false; m_predefineThumbsNames = { tr("Fingerprint1"), tr("Fingerprint2"), tr("Fingerprint3"), tr("Fingerprint4"), tr("Fingerprint5"), tr("Fingerprint6"), tr("Fingerprint7"), tr("Fingerprint8"), tr("Fingerprint9"), tr("Fingerprint10") }; m_progress = 0; } void CharaMangerModel::setFingerVaild(bool isVaild) { if (m_isFingerVaild == isVaild) return; m_isFingerVaild = isVaild; Q_EMIT vaildFingerChanged(isVaild); } void CharaMangerModel::setUserName(const QString &name) { if (m_userName != name) m_userName = name; } void CharaMangerModel::onFingerEnrollStatusChanged(int code, const QString& msg) { QJsonDocument jsonDocument; QJsonObject jsonObject; if (!msg.isEmpty()) { jsonDocument = QJsonDocument::fromJson(msg.toLocal8Bit()); jsonObject = jsonDocument.object(); } switch(code) { case ET_Completed: m_progress = 0; Q_EMIT enrollCompleted(); break; case ET_Failed: { m_progress = 0; QString title = tr("Scan failed"); QString msg = tr("Scan suspended"); do { QStringList keys = jsonObject.keys(); if (!keys.contains("subcode")) { break; } auto errCode = jsonObject.value("subcode").toInt(); switch(errCode) { case FC_RepeatTemplet: title = tr("The fingerprint already exists"); msg = tr("Please scan other fingers"); break; case FC_UnkownError: title = tr("Unknown error"); msg = tr("Scan suspended"); } break; } while(0); Q_EMIT enrollFailed(title, msg); break; } case ET_StagePass: { if (msg.isEmpty()) { // 厂商未给出进度值的情况,直接让进度值递减增加,无限趋近于100,直到录入完成 m_progress += (100 - m_progress)/3; Q_EMIT enrollStagePass(m_progress); break; } QStringList keys = jsonObject.keys(); if (!keys.contains("progress")) { // 厂商未给出进度值的情况,直接让进度值递减增加,无限趋近于100,直到录入完成 m_progress += (100 - m_progress)/3; Q_EMIT enrollStagePass(m_progress); break; } auto pro = jsonObject.value("progress").toInt(); Q_EMIT enrollStagePass(pro); break; } case ET_Retry: { QString title = tr("Cannot recognize"); QString msg = tr("Cannot recognize"); do { QStringList keys = jsonObject.keys(); if (!keys.contains("subcode")) { break; } auto errCode = jsonObject.value("subcode").toInt(); switch(errCode) { case RC_TouchTooShort: //接触时间过短 title = tr("Moved too fast"); msg = tr("Finger moved too fast, please do not lift until prompted"); break; case RC_ErrorFigure: //图像不可用 title = tr("Unclear fingerprint"); msg = tr("Clean your finger or adjust the finger position, and try again"); break; case RC_RepeatTouchData: //重复率过高 title = tr("Already scanned"); msg = tr("Adjust the finger position to scan your fingerprint fully"); break; case RC_RepeatFingerData: //重复手指 title = tr("The fingerprint already exists"); msg = tr("Please scan other fingers"); break; case RC_SwipeTooShort: //按压时间短 title = tr("Moved too fast"); msg = tr("Finger moved too fast. Please do not lift until prompted"); break; case RC_FingerNotCenter: //手指不在中间 msg = tr("Adjust the finger position to scan your fingerprint fully"); break; case RC_RemoveAndRetry: // 拿开手指从新扫描 msg = tr("Clean your finger or adjust the finger position, and try again"); break; case RC_CannotRecognize: title = tr("Cannot recognize"); msg = tr("Lift your finger and place it on the sensor again"); break; } break; } while(0); Q_EMIT enrollRetry(title, msg); break; } case ET_Disconnect: Q_EMIT enrollDisconnected(); break; default: break; } } void CharaMangerModel::onTouch(const QString &id, bool pressed) { Q_UNUSED(id) Q_UNUSED(pressed) } void CharaMangerModel::refreshEnrollResult(CharaMangerModel::EnrollResult enrollRes) { Q_EMIT enrollResult(enrollRes); } void CharaMangerModel::setThumbsList(const QStringList &thumbs) { if (thumbs != m_thumbsList) { m_thumbsList.clear(); m_thumbsList = thumbs; Q_EMIT thumbsListChanged(m_thumbsList); } } void CharaMangerModel::onEnrollStatusChanged(int code, const QString &msg) { // TODO: 处理所有录入状态提示信息 Q_UNUSED(msg); QString title = tr("Position your face inside the frame"); switch (code) { case STATUS_SUCCESS: Q_EMIT enrollInfoState(AddInfoState::Success, tr("Face enrolled")); break; case STATUS_CANCELED: break; case STATUS_NOT_REAL_HUMAN: title = tr("Position a human face please"); Q_EMIT enrollStatusTips(title); break; case STATUS_FACE_NOT_CENTER: title = tr("Position your face inside the frame"); Q_EMIT enrollStatusTips(title); break; case STATUS_FACE_TOO_BIG: title = tr("Keep away from the camera"); Q_EMIT enrollStatusTips(title); break; case STATUS_FACE_TOO_SMALL: title = tr("Get closer to the camera"); Q_EMIT enrollStatusTips(title); break; case STATUS_NO_FACE: title = tr("Position your face inside the frame"); Q_EMIT enrollStatusTips(title); break; case STATUS_FACE_TOO_MANY: title = tr("Do not position multiple faces inside the frame"); Q_EMIT enrollStatusTips(title); break; case STATUS_FACE_NOT_CLEARITY: title = tr("Make sure the camera lens is clean"); Q_EMIT enrollStatusTips(title); break; case STATUS_FACE_BRIGHTNESS: title = tr("Do not enroll in dark, bright or backlit environments"); Q_EMIT enrollStatusTips(title); break; case STATUS_FACE_COVERD: title = tr("Keep your face uncovered"); Q_EMIT enrollStatusTips(title); break; case STATUS_OVERTIME: Q_EMIT enrollInfoState(AddInfoState::Fail, tr("Scan timed out")); break; case STATUS_COLLAPSE: Q_EMIT enrollInfoState(AddInfoState::Fail, tr("Camera occupied!")); break; default: break; } } void CharaMangerModel::onEnrollIrisStatusChanged(int code, const QString &msg) { // TODO: 处理所有录入状态提示信息 未更新 Q_UNUSED(msg); QString title = tr("Position your face inside the frame"); switch (code) { case STATUS_IRIS_SUCCESS: Q_EMIT enrollIrisInfoState(AddInfoState::Success, tr("Face enrolled")); break; case STATUS_IRIS_TOO_BIG: break; case STATUS_IRIS_TOO_SMALL: title = tr("Position a human face please"); Q_EMIT enrollIrisStatusTips(title); break; case STATUS_IRIS_NO_FACE: title = tr("Position your face inside the frame"); Q_EMIT enrollIrisStatusTips(title); break; case STATUS_IRIS_NOT_CLEARITY: title = tr("Keep away from the camera"); Q_EMIT enrollIrisStatusTips(title); break; case STATUS_IRIS_BRIGHTNESS: title = tr("Get closer to the camera"); Q_EMIT enrollIrisStatusTips(title); break; case STATUS_IRIS_EYES_CLOSE: title = tr("Position your face inside the frame"); Q_EMIT enrollIrisStatusTips(title); break; case STATUS_IRIS_CANCELED: Q_EMIT enrollIrisInfoState(AddInfoState::Fail, tr("Cancel")); break; case STATUS_IRIS_Error: Q_EMIT enrollIrisInfoState(AddInfoState::Fail, tr("Camera occupied!")); break; case STATUS_IRIS_OVERTIME: Q_EMIT enrollIrisInfoState(AddInfoState::Fail, tr("Scan timed out")); break; default: break; } } void CharaMangerModel::onRefreshEnrollDate(const int &charaType) { if (charaType & FACE_CHARA) { Q_EMIT facesListChanged(this->facesList()); } if (charaType & IRIS_CHARA) { Q_EMIT irisListChanged(this->irisList()); } } bool CharaMangerModel::charaVaild() const { return m_charaVaild; } void CharaMangerModel::setCharaVaild(bool newCharaVaild) { if (m_charaVaild == newCharaVaild) return; m_charaVaild = newCharaVaild; emit charaVaildChanged(m_charaVaild); } ================================================ FILE: src/plugin-authentication/operation/charamangermodel.h ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef CHARAMANGERMODEL_H #define CHARAMANGERMODEL_H #include #define FACE_CHARA 4 #define IRIS_CHARA 64 class CharaMangerModel : public QObject { Q_OBJECT Q_PROPERTY(bool faceDriverVaild READ faceDriverVaild WRITE setFaceDriverVaild NOTIFY vaildFaceDriverChanged) Q_PROPERTY(bool fingerDriverVaild READ fingerVaild WRITE setFingerVaild NOTIFY vaildFingerChanged) Q_PROPERTY(bool irisDriverVaild READ irisDriverVaild WRITE setIrisDriverVaild NOTIFY vaildIrisDriverChanged) Q_PROPERTY(QStringList facesList READ facesList WRITE setFacesList NOTIFY facesListChanged) Q_PROPERTY(bool charaVaild READ charaVaild WRITE setCharaVaild NOTIFY charaVaildChanged) Q_PROPERTY(QStringList thumbsList READ thumbsList WRITE setThumbsList NOTIFY thumbsListChanged) Q_PROPERTY(QStringList irisList READ irisList WRITE setIrisList NOTIFY irisListChanged) public: /** * @brief The EnrollStatusType enum 人脸录入状态 */ enum EnrollFaceStatusType { STATUS_SUCCESS = 0, // 成功 STATUS_NOT_REAL_HUMAN, // 非人类 STATUS_FACE_NOT_CENTER, // 非中心 STATUS_FACE_TOO_BIG, // 脸太大 STATUS_FACE_TOO_SMALL, STATUS_NO_FACE, STATUS_FACE_TOO_MANY, // 多人 STATUS_FACE_NOT_CLEARITY, // 不清晰 STATUS_FACE_BRIGHTNESS, // 亮度 STATUS_FACE_COVERD, // 遮挡 STATUS_CANCELED, // 取消 STATUS_OVERTIME, // 超时 STATUS_COLLAPSE // 崩溃 }; /** * @brief The EnrollIrisStatusType enum */ enum EnrollIrisStatusType { STATUS_IRIS_SUCCESS = 0, // 成功 STATUS_IRIS_TOO_BIG, // 太大 STATUS_IRIS_TOO_SMALL, STATUS_IRIS_NO_FACE, STATUS_IRIS_NOT_CLEARITY, // 不清晰 STATUS_IRIS_BRIGHTNESS, // 亮度 STATUS_IRIS_EYES_CLOSE, // 闭目 STATUS_IRIS_CANCELED, // 取消 STATUS_IRIS_Error, // 崩溃 STATUS_IRIS_OVERTIME // 超时 }; /** * @brief The AddInfoState enum 录入的四种状态 */ enum AddInfoState { StartState, Success, Fail, Processing, }; Q_ENUM(AddInfoState) /** * @brief The EnrollResult enum 指纹 */ enum EnrollResult { Enroll_AuthFailed, Enroll_ClaimFailed, Enroll_Failed, Enroll_AuthSuccess, Count }; Q_ENUM(EnrollResult) enum EnrollStatusType { ET_Completed = 0, ET_Failed, ET_StagePass, ET_Retry, ET_Disconnect }; enum EnrollFailedCode { FC_UnkownError = 1, FC_RepeatTemplet, FC_EnrollBroken, FC_DataFull }; enum EnrollRetryCode { RC_TouchTooShort = 1, RC_ErrorFigure, RC_RepeatTouchData, RC_RepeatFingerData, RC_SwipeTooShort, RC_FingerNotCenter, RC_RemoveAndRetry, RC_CannotRecognize }; enum EnrollType { Type_Face = 0, Type_Finger, Type_Iris }; Q_ENUM(EnrollType) public: explicit CharaMangerModel(QObject *parent = nullptr); inline int faceCharaType() const { return FACE_CHARA; } inline int irisCharaType() const { return IRIS_CHARA; } inline bool faceDriverVaild() const { return m_isFaceDriverVaild; } void setFaceDriverVaild(bool isVaild); inline QString faceDriverName() const { return m_faceDriverName; } void setFaceDriverName(const QString &driverName); inline QStringList facesList() const { return m_facesList; } void setFacesList(const QStringList &faces); inline bool irisDriverVaild() const { return m_isIrisDriverVaild; } void setIrisDriverVaild(bool isVaild); inline QString irisDriverName() const { return m_irisDriverName; } void setIrisDriverName(const QString &driverName); inline QStringList irisList() const { return m_irisList; } void setIrisList(const QStringList &iris); /** * @brief onEnrollStatusChanged 录入状态信号,在录入过程中通过此信号提示当前录入状态 * @param code * @param msg */ void onEnrollStatusChanged(int code, const QString& msg); void onEnrollIrisStatusChanged(int code, const QString& msg); /** * @brief onRefreshEnrollDate 用于刷新用户已录入的数据( eg: 重命名失败后) * @param charaType 对应类型 */ void onRefreshEnrollDate(const int &charaType); void setInputFaceFD(const int &fd); void setInputIrisFD(CharaMangerModel::AddInfoState state); // Finger void initFingerModel(); inline QList getPredefineThumbsName() const { return m_predefineThumbsNames; } inline bool fingerVaild() const { return m_isFingerVaild; } void setFingerVaild(bool isVaild); inline QString userName() const { return m_userName; } void setUserName(const QString &name); inline QStringList thumbsList() const { return m_thumbsList; } void setThumbsList(const QStringList &thumbs); void onFingerEnrollStatusChanged(int code, const QString& msg); void onTouch(const QString &id, bool pressed); void resetProgress() { m_progress = 0; } void refreshEnrollResult(EnrollResult enrollRes); bool charaVaild() const; void setCharaVaild(bool newCharaVaild = true); Q_SIGNALS: void vaildFaceDriverChanged(const bool isVaild); void vaildIrisDriverChanged(const bool isVaild); void facesListChanged(const QStringList &faces); void irisListChanged(const QStringList &iris); /** * @brief enrollInfoState 注册录入状态 用于区分页面显示状态 注:仅处理成功录入失败状态 * @param state 录入的状态 * @param tips 对应的提示语 */ void enrollInfoState(AddInfoState state, const QString &tips); void enrollStatusTips(QString title); /** * @brief enrollIrisInfoState 注册虹膜录入状态 * @param state 录入状态 * @param tips 提示信息 */ void enrollIrisInfoState(AddInfoState state, const QString &tips); void enrollIrisStatusTips(QString title); /** * @brief tryStartInputFace tryStartInputIris 获取人脸虹膜文件标识符 * @param fd */ void tryStartInputFace(const int &fd); void tryStartInputIris(CharaMangerModel::AddInfoState state); // FInger void vaildFingerChanged(const bool isVaild); void thumbsListChanged(const QStringList &thumbs); void enrollFailed(QString title, QString msg); void enrollCompleted(); void enrollStagePass(int pro); void enrollRetry(QString title, QString msg); void enrollDisconnected(); void enrollResult(EnrollResult enrollRes); void lockedChanged(bool locked); //charaVaild void charaVaildChanged(const bool isVaild); private: void checkCharaVaild() { if (m_isIrisDriverVaild || m_isFaceDriverVaild || m_isFingerVaild) setCharaVaild(); else setCharaVaild(false); } // 人脸 QString m_faceDriverName; bool m_isFaceDriverVaild; QStringList m_facesList; // 虹膜 QString m_irisDriverName; bool m_isIrisDriverVaild; QStringList m_irisList; // 指纹 QString m_userName; bool m_isFingerVaild{false}; int m_progress; QStringList m_thumbsList; QList m_predefineThumbsNames; bool m_charaVaild; }; #endif // CHARAMANGERMODEL_H ================================================ FILE: src/plugin-authentication/operation/charamangerworker.cpp ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "charamangerworker.h" #include #include #include #include #include #include #include #include #include #include #include #include #define INPUT_TIME 30 CharaMangerWorker::CharaMangerWorker(CharaMangerModel *model, QObject *parent) : QObject(parent) , m_model(model) , m_charaMangerInter(new CharaMangerDBusProxy(this)) , m_stopTimer(new QTimer(this)) , m_fileDescriptor(nullptr) , m_currentInputCharaType(0) { m_stopTimer->setSingleShot(true); // 监测录入状态 connect(m_charaMangerInter, &CharaMangerDBusProxy::EnrollStatusCharaManger, this, &CharaMangerWorker::refreshUserEnrollStatus); // 若添加新信息 触发本信号 connect(m_charaMangerInter, &CharaMangerDBusProxy::CharaUpdated, this, &CharaMangerWorker::refreshUserEnrollList); // 获取设备信息 connect(m_charaMangerInter, &CharaMangerDBusProxy::DriverInfoChanged, this, &CharaMangerWorker::predefineDriverInfo); connect(m_charaMangerInter, &CharaMangerDBusProxy::DriverChanged, this, &CharaMangerWorker::refreshDriverInfo); //处理指纹后端的录入状态信号 connect(m_charaMangerInter, &CharaMangerDBusProxy::EnrollStatusFingerprint, m_model, [this](const QString &, int code, const QString &msg) { m_model->onFingerEnrollStatusChanged(code, msg); }); connect(m_charaMangerInter, &CharaMangerDBusProxy::DefaultDeviceChanged, this, &CharaMangerWorker::onDefaultDeviceChanged); //当前此信号末实现 connect(m_charaMangerInter, &CharaMangerDBusProxy::Touch, m_model, &CharaMangerModel::onTouch); connect(m_charaMangerInter, &CharaMangerDBusProxy::LockedChanged, m_model, &CharaMangerModel::lockedChanged); initCharaManger(); initFinger(); } CharaMangerWorker::~CharaMangerWorker() { if (m_fileDescriptor) { delete m_fileDescriptor; m_fileDescriptor = nullptr; } if (m_stopTimer) m_stopTimer->stop(); } void CharaMangerWorker::initCharaManger() { // 获取DeviceInfo属性 QDBusInterface charaManagerInter("org.deepin.dde.Authenticate1", "/org/deepin/dde/Authenticate1/CharaManger", "org.freedesktop.DBus.Properties", QDBusConnection::systemBus()); QDBusPendingCall call = charaManagerInter.asyncCall("Get", "org.deepin.dde.Authenticate1.CharaManger", "DriverInfo"); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, [this, call, watcher] { if (!call.isError()) { QDBusReply reply = call.reply(); predefineDriverInfo(reply.value().variant().toString()); } else { qWarning() << "Failed to get driver info: " << call.error().message(); } watcher->deleteLater(); }); // 录入时间超时 停止录入 connect(m_stopTimer, &QTimer::timeout, [this] { if (m_currentInputCharaType & FACE_CHARA) { m_model->onEnrollStatusChanged(CharaMangerModel::EnrollFaceStatusType::STATUS_OVERTIME, QString()); } if (m_currentInputCharaType & IRIS_CHARA) { m_model->onEnrollIrisStatusChanged(CharaMangerModel::EnrollIrisStatusType::STATUS_IRIS_OVERTIME, QString()); } stopEnroll(); }); } void CharaMangerWorker::initFinger() { struct passwd *pws; QString userId; pws = getpwuid(getuid()); userId = QString(pws->pw_name); auto defualtDevice = m_charaMangerInter->defaultDevice(); m_model->setFingerVaild(!defualtDevice.isEmpty()); m_model->setUserName(userId); if (!defualtDevice.isEmpty()) { refreshFingerEnrollList(userId); } } QMap CharaMangerWorker::parseDriverNameJsonData(const QString &mangerInfo) { QMap tmpInfo; if (mangerInfo.isEmpty()) return tmpInfo; QJsonDocument doc = QJsonDocument::fromJson(mangerInfo.toUtf8()); QJsonArray jInfo = doc.array(); for (QJsonValue jValue : jInfo) { QJsonObject jObj = jValue.toObject(); const QString tmpName = jObj["DriverName"].toString(); const uint tmpType = static_cast(jObj["CharaType"].toInt()); tmpInfo.insert(tmpName, tmpType); } return tmpInfo; } QStringList CharaMangerWorker::parseCharaNameJsonData(const QString &mangerInfo) { QMap tmpInfo; QStringList userInfoList; if (mangerInfo.isEmpty()) return QStringList(); QJsonDocument doc = QJsonDocument::fromJson(mangerInfo.toUtf8()); QJsonArray jInfo = doc.array(); for (QJsonValue jValue : jInfo) { QJsonObject jObj = jValue.toObject(); const QString tmpName = jObj["CharaName"].toString(); const uint64_t time = static_cast(jObj["Time"].toInt()); tmpInfo.insert(tmpName, time); QMap::Iterator it = tmpInfo.begin(); int index = 0; while (it != tmpInfo.end()) { if (time > it.value()) { index++; } it++; } userInfoList.insert(index, tmpName); } return userInfoList; } void CharaMangerWorker::predefineDriverInfo(const QString &driverInfo) { // 处理界面显示空设备 m_model->setFaceDriverVaild(false); m_model->setIrisDriverVaild(false); if (driverInfo.isNull()) { return; } QStringList faceDriverNames; QStringList irisDriverNames; // TODO: 处理设备信息 QMap driInfo = parseDriverNameJsonData(driverInfo); QMap::Iterator it; qDebug() << "info: " << driInfo.size() << driverInfo; // 记录driver信息 for (it = driInfo.begin(); it != driInfo.end(); ++it) { // 可用人脸driverName if (it.value() & FACE_CHARA) { faceDriverNames.append(it.key()); m_model->setFaceDriverVaild(false); } if (it.value() & IRIS_CHARA) { irisDriverNames.append(it.key()); m_model->setIrisDriverVaild(false); } } // 获取用户录入的数据 if (!faceDriverNames.isEmpty()) { m_model->setFaceDriverVaild(true); m_model->setFaceDriverName(faceDriverNames.at(0)); refreshUserEnrollList(faceDriverNames.at(0), FACE_CHARA); } else { m_model->setFaceDriverVaild(false); } if (!irisDriverNames.isEmpty()) { m_model->setIrisDriverVaild(true); m_model->setIrisDriverName(irisDriverNames.at(0)); refreshUserEnrollList(irisDriverNames.at(0), IRIS_CHARA); } else { m_model->setIrisDriverVaild(false); } } void CharaMangerWorker::refreshUserEnrollList(const QString &serviceName, const int &CharaType) { auto call = m_charaMangerInter->List(serviceName, CharaType); qDebug() << "CharaManger List : " << call; if (call.isEmpty()) { qDebug() << "facePrintInter ListFaces call Error or MangerList is empty! "; if (CharaType & FACE_CHARA) m_model->setFacesList(QStringList()); if (CharaType & IRIS_CHARA) m_model->setIrisList(QStringList()); return; } refreshUserInfo(call, CharaType); } void CharaMangerWorker::refreshUserInfo(const QString &EnrollInfo, const int &CharaType) { QStringList userInfoList = parseCharaNameJsonData(EnrollInfo); if (userInfoList.isEmpty()) { qDebug() << "get userInfo error! "; m_model->setFacesList(QStringList()); m_model->setIrisList(QStringList()); return; } if (CharaType & FACE_CHARA) m_model->setFacesList(userInfoList); if (CharaType & IRIS_CHARA) m_model->setIrisList(userInfoList); } void CharaMangerWorker::refreshDriverInfo() { auto driverInfo = m_charaMangerInter->driverInfo(); predefineDriverInfo(driverInfo); } void CharaMangerWorker::entollStart(const QString &driverName, const int &charaType, const QString &charaName) { qDebug() << " CharaMangerWorker::entollStart " << driverName << charaType << charaName; m_currentInputCharaType = charaType; m_fileDescriptor = new QDBusPendingReply(); *m_fileDescriptor = m_charaMangerInter->EnrollStart(driverName, charaType, charaName); Q_EMIT requestMainWindowEnabled(false); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(*m_fileDescriptor, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (m_fileDescriptor->isError()) { qDebug() << "get File Descriptor error! " << m_fileDescriptor->error(); } else { m_stopTimer->start(1000 * INPUT_TIME); if (charaType & FACE_CHARA) { Q_EMIT requestMainWindowEnabled(true); m_model->setInputFaceFD(m_fileDescriptor->value().fileDescriptor()); } if (charaType & IRIS_CHARA) { Q_EMIT requestMainWindowEnabled(true); m_model->setInputIrisFD(CharaMangerModel::AddInfoState::Processing); } } Q_EMIT requestMainWindowEnabled(true); watcher->deleteLater(); }); } void CharaMangerWorker::refreshUserEnrollStatus(const QString &senderid, const int &code, const QString &codeInfo) { Q_UNUSED(senderid); if (m_currentInputCharaType & FACE_CHARA) m_model->onEnrollStatusChanged(code, codeInfo); if (m_currentInputCharaType & IRIS_CHARA) m_model->onEnrollIrisStatusChanged(code, codeInfo); } void CharaMangerWorker::stopEnroll() { if (m_stopTimer) { m_stopTimer->stop(); } m_currentInputCharaType = -1; auto call = m_charaMangerInter->EnrollStop(); if (call.isError()) { qDebug() << "call stop Enroll " << call.error(); } QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [this]{ if (m_fileDescriptor) { delete m_fileDescriptor; m_fileDescriptor = nullptr; } sender()->deleteLater(); }); } void CharaMangerWorker::deleteCharaItem(const int &charaType, const QString &charaName) { m_charaMangerInter->Delete(charaType, charaName); } void CharaMangerWorker::renameCharaItem(const int &charaType, const QString &oldName, const QString &newName) { auto call = m_charaMangerInter->Rename(charaType, oldName, newName); call.waitForFinished(); if (call.isError()) { qDebug() << "call RenameFinger Error : " << call.error(); m_model->onRefreshEnrollDate(charaType); } } void CharaMangerWorker::tryEnroll(const QString &name, const QString &thumb) { m_charaMangerInter->setFingerprintInterTimeout(1000 * 60 * 60); auto callClaim = m_charaMangerInter->Claim(name, true); callClaim.waitForFinished(); if (callClaim.isError()) { qDebug() << "call Claim Error : " << callClaim.error(); m_model->refreshEnrollResult(CharaMangerModel::EnrollResult::Enroll_ClaimFailed); } else { m_charaMangerInter->setFingerprintInterTimeout(-1); auto callEnroll = m_charaMangerInter->Enroll(thumb); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(callEnroll, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (callEnroll.isError()) { qDebug() << "call Enroll Error : " << callEnroll.error(); m_charaMangerInter->Claim(name, false); m_model->refreshEnrollResult(CharaMangerModel::EnrollResult::Enroll_Failed); } else { Q_EMIT requestMainWindowEnabled(true); m_model->refreshEnrollResult(CharaMangerModel::EnrollResult::Enroll_AuthSuccess); } Q_EMIT requestMainWindowEnabled(true); watcher->deleteLater(); }); } m_charaMangerInter->setFingerprintInterTimeout(-1); } void CharaMangerWorker::refreshFingerEnrollList(const QString &id) { QStringList call = m_charaMangerInter->ListFingers(id); if (call.isEmpty()) { qDebug() << "m_charaMangerInter->ListFingers call Error"; m_model->setThumbsList(QStringList()); return; } else { qDebug() << "m_charaMangerInter->ListFingers"; } m_model->setThumbsList(call); } void CharaMangerWorker::stopFingerEnroll(const QString &userName) { qDebug() << "stopEnroll"; m_charaMangerInter->StopEnroll(); auto callClaim = m_charaMangerInter->Claim(userName, false); callClaim.waitForFinished(); if (callClaim.isError()) { qDebug() << "call Claim Error : " << callClaim.error(); } } void CharaMangerWorker::deleteFingerItem(const QString &userName, const QString &finger) { m_charaMangerInter->setFingerprintInterTimeout(1000 * 60 * 60); auto callClaim = m_charaMangerInter->Claim(userName, true); callClaim.waitForFinished(); if (callClaim.isError()) { qDebug() << "call Claim Error : " << callClaim.error(); m_model->refreshEnrollResult(CharaMangerModel::EnrollResult::Enroll_ClaimFailed); } else { m_charaMangerInter->setFingerprintInterTimeout(-1); auto call = m_charaMangerInter->DeleteFinger(userName, finger); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); QObject::connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { refreshFingerEnrollList(userName); sender()->deleteLater(); auto callStopClaim = m_charaMangerInter->Claim(userName, false); callStopClaim.waitForFinished(); if (callStopClaim.isError()) { qDebug() << "call stop Claim Error : " << callStopClaim.error(); } }); } m_charaMangerInter->setFingerprintInterTimeout(-1); } void CharaMangerWorker::renameFingerItem(const QString &userName, const QString &finger, const QString &newName) { auto call = m_charaMangerInter->RenameFinger(userName, finger, newName); call.waitForFinished(); if (call.isError()) { qWarning() << "call RenameFinger Error : " << call.error(); } refreshFingerEnrollList(userName); } void CharaMangerWorker::onDefaultDeviceChanged(const QString &device) { qInfo() << "Finger DefaultDeviceChanged: " << device; bool isDeviceAvailable = !device.isEmpty(); m_model->setFingerVaild(isDeviceAvailable); // Refresh fingerprint list when device is reconnected if (isDeviceAvailable) { refreshFingerEnrollList(m_model->userName()); } } ================================================ FILE: src/plugin-authentication/operation/charamangerworker.h ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef FACEIDWORKER_H #define FACEIDWORKER_H #include "charamangerdbusproxy.h" #include "charamangermodel.h" #include #include #include #include class CharaMangerWorker : public QObject { Q_OBJECT public: explicit CharaMangerWorker(CharaMangerModel *model, QObject *parent = nullptr); ~CharaMangerWorker(); void initCharaManger(); void initFinger(); private: /** * @brief parseJsonData 仅仅将 mangerInfo 进行数据转化 * @return 获取后端所有解析后的数据 */ QMap parseDriverNameJsonData(const QString& mangerInfo); QStringList parseCharaNameJsonData(const QString& mangerInfo); Q_SIGNALS: void tryStartInputFace(const int &fd); void tryStartInputIris(CharaMangerModel::AddInfoState state); void requestMainWindowEnabled(const bool isEnabled) const; public Q_SLOTS: void predefineDriverInfo(const QString &driverInfo); /** * @brief refreshUserEnrollList 获取用户录入信息 * @param driverName 驱动名称 * @param CharaType 对应生物特征 */ void refreshUserEnrollList(const QString &driverName, const int &CharaType); void refreshUserInfo(const QString &EnrollInfo, const int &CharaType); void refreshDriverInfo(); /** * @brief entollStart 处理认证接口 * @param driverName * @param charaType * @param charaName */ void entollStart(const QString &driverName, const int &charaType, const QString &charaName); /** * @brief refreshUserEnrollStatus 获取设备录入状态 * @param senderid dbus对应senderID * @param code 对应信息 * @param codeInfo 信息描述 */ void refreshUserEnrollStatus(const QString &senderid, const int &code, const QString &codeInfo); void stopEnroll(); /** * @brief deleteFaceidItem 删除对应录入信息 * @param charaType 唯一值 * @param charaName 对应名称 */ void deleteCharaItem(const int &charaType, const QString &charaName); void renameCharaItem(const int &charaType, const QString &oldName, const QString &newName); // Fingerprint void tryEnroll(const QString &name, const QString &thumb); void refreshFingerEnrollList(const QString &id); void stopFingerEnroll(const QString& userName); void deleteFingerItem(const QString& userName, const QString& finger); void renameFingerItem(const QString& userName, const QString& finger, const QString& newName); void onDefaultDeviceChanged(const QString &device); private: CharaMangerModel *m_model; CharaMangerDBusProxy *m_charaMangerInter; /** * @brief m_stopTimer 开始录入进行计时 1Min后若没有录入成功则失败 * 注: timer stop时机 */ QTimer *m_stopTimer; QDBusPendingReply* m_fileDescriptor; /** * @brief m_currentInputCharaType 当前录入方式 注:确保唯一性 */ int m_currentInputCharaType; }; #endif // FACEIDWORKER_H ================================================ FILE: src/plugin-authentication/operation/faceauthcontroller.cpp ================================================ //SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "faceauthcontroller.h" #include #include #include #include #include #define FACEID_NUM 5 #define Faceimg_SIZE 210 DGUI_USE_NAMESPACE namespace dccV25 { FaceAuthController::FaceAuthController(CharaMangerModel *model, CharaMangerWorker *worker, QObject *parent) : AbstractBiometricController(parent) , m_model(model) , m_worker(worker) { // 设置主题类型 DGuiApplicationHelper::ColorType type = DGuiApplicationHelper::instance()->themeType(); if (type == DGuiApplicationHelper::LightType) { m_themeType = "light"; } else if (type == DGuiApplicationHelper::DarkType) { m_themeType = "dark"; } connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [this](DGuiApplicationHelper::ColorType type) { if (type == DGuiApplicationHelper::LightType) { m_themeType = "light"; } else if (type == DGuiApplicationHelper::DarkType) { m_themeType = "dark"; } }); // 连接信号 connect(m_model, &CharaMangerModel::tryStartInputFace, this, &FaceAuthController::onTryStartInputFace); connect(m_model, &CharaMangerModel::enrollStatusTips, this, &FaceAuthController::onEnrollStatusTips); connect(m_model, &CharaMangerModel::enrollInfoState, this, &FaceAuthController::onEnrollInfoState); } void FaceAuthController::startEnroll() { QString newName; for (int i = 0; i < FACEID_NUM; ++i) { newName = tr("Faceprint") + QString("%1").arg(i + 1); if (!m_model->facesList().contains(newName)) { break; } } setAddStage(CharaMangerModel::Processing); m_enrollFaceTips = ""; emit enrollFaceTipsChanged(); m_faceImgContent = ""; emit faceImgContentChanged(); m_enrollFaceInProgress = true; m_worker->entollStart(m_model->faceDriverName(), m_model->faceCharaType(), newName); } void FaceAuthController::stopEnroll() { m_enrollFaceInProgress = false; m_worker->stopEnroll(); setAddStage(CharaMangerModel::StartState); } void FaceAuthController::rename(const QString &oldName, const QString &newName) { m_worker->renameCharaItem(m_model->faceCharaType(), oldName, newName); m_worker->refreshUserEnrollList(m_model->faceDriverName(), m_model->faceCharaType()); } void FaceAuthController::remove(const QString &id) { m_worker->deleteCharaItem(m_model->faceCharaType(), id); } bool FaceAuthController::isAvailable() const { return m_model->faceDriverVaild(); } QString FaceAuthController::getTypeName() const { return tr("Face"); } QString FaceAuthController::faceImgContent() const { return m_faceImgContent; } bool FaceAuthController::enrollFaceSuccess() const { return m_enrollFaceSuccess; } QString FaceAuthController::enrollFaceTips() const { return m_enrollFaceTips; } void FaceAuthController::onEnrollStatusTips(const QString &tips) { m_enrollFaceTips = tips; emit enrollFaceTipsChanged(); } void FaceAuthController::onEnrollInfoState(CharaMangerModel::AddInfoState state, const QString &tips) { m_enrollFaceSuccess = state == CharaMangerModel::AddInfoState::Success; m_enrollFaceTips = m_enrollFaceSuccess ? tr("Use your face to unlock the device and make settings later") : tips; emit enrollFaceSuccessChanged(); emit enrollFaceTipsChanged(); emit enrollCompleted(); stopEnroll(); if (m_enrollFaceSuccess) { m_worker->refreshUserEnrollList(m_model->faceDriverName(), m_model->faceCharaType()); setAddStage(CharaMangerModel::Success); } else { setAddStage(CharaMangerModel::Fail); } } void FaceAuthController::onTryStartInputFace(int fd) { qDebug() << "add updateFaceImgContent to fd:" << fd; DA_read_frames(fd, this, updateFaceImgContent); } void FaceAuthController::updateFaceImgContent(void* const context, const DA_img *const img) { if (!context) return; FaceAuthController *controller = static_cast(context); // Do not update after enroll completed. if (!controller->m_enrollFaceInProgress) return; QImage im((uchar *)img->data, img->width, img->height, QImage::Format_RGB888); QPixmap sourcePix = QPixmap::fromImage(im); int sourceSize = qMin(img->width, img->height); int offsetX = (img->width - sourceSize) / 2; int offsetY = (img->height - sourceSize) / 2; QPixmap croppedPix = sourcePix.copy(offsetX, offsetY, sourceSize, sourceSize) .scaled(Faceimg_SIZE, Faceimg_SIZE, Qt::KeepAspectRatio, Qt::SmoothTransformation); // 创建圆形遮罩 QPixmap pix(Faceimg_SIZE, Faceimg_SIZE); pix.fill(Qt::transparent); QPainter painter(&pix); painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform); QPainterPath path; path.addEllipse(0, 0, Faceimg_SIZE, Faceimg_SIZE); painter.setClipPath(path); painter.drawPixmap(0, 0, croppedPix); QBuffer buffer; buffer.open(QIODevice::WriteOnly); pix.save(&buffer, "PNG"); QString encode = buffer.data().toBase64(); controller->m_faceImgContent = QString("%1,%2").arg("data:image/png;base64").arg(encode); buffer.close(); emit controller->faceImgContentChanged(); } } // namespace dccV25 ================================================ FILE: src/plugin-authentication/operation/faceauthcontroller.h ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "abstractbiometriccontroller.h" #include "charamangerworker.h" // 前向声明 struct DA_img; namespace dccV25 { class FaceAuthController : public AbstractBiometricController { Q_OBJECT Q_PROPERTY(QString faceImgContent READ faceImgContent NOTIFY faceImgContentChanged FINAL) Q_PROPERTY(bool enrollFaceSuccess READ enrollFaceSuccess NOTIFY enrollFaceSuccessChanged FINAL) Q_PROPERTY(QString enrollFaceTips READ enrollFaceTips NOTIFY enrollFaceTipsChanged FINAL) public: explicit FaceAuthController(CharaMangerModel *model, CharaMangerWorker *worker, QObject *parent = nullptr); public slots: // 实现抽象接口 void startEnroll() override; void stopEnroll() override; void rename(const QString &oldName, const QString &newName) override; void remove(const QString &id) override; bool isAvailable() const override; QString getTypeName() const override; // 人脸特有的属性和方法 QString faceImgContent() const; bool enrollFaceSuccess() const; QString enrollFaceTips() const; signals: void faceImgContentChanged(); void enrollFaceSuccessChanged(); void enrollFaceTipsChanged(); private slots: void onEnrollStatusTips(const QString &tips); void onEnrollInfoState(CharaMangerModel::AddInfoState state, const QString &tips); void onTryStartInputFace(int fd); private: static void updateFaceImgContent(void *const context, const DA_img *const img); private: CharaMangerModel *m_model; CharaMangerWorker *m_worker; QString m_faceImgContent; QString m_enrollFaceTips; bool m_enrollFaceSuccess = false; bool m_enrollFaceInProgress = false; QString m_themeType; }; } // namespace dccV25 ================================================ FILE: src/plugin-authentication/operation/fingerprintauthcontroller.cpp ================================================ //SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "fingerprintauthcontroller.h" #include DGUI_USE_NAMESPACE namespace dccV25 { FingerprintAuthController::FingerprintAuthController(CharaMangerModel *model, CharaMangerWorker *worker, QObject *parent) : AbstractBiometricController(parent) , m_model(model) , m_worker(worker) , m_fingerLiftTimer(new QTimer(this)) , m_fingerAni(new QVariantAnimation(this)) { // 设置主题类型 DGuiApplicationHelper::ColorType type = DGuiApplicationHelper::instance()->themeType(); if (type == DGuiApplicationHelper::LightType) { m_themeType = "light"; } else if (type == DGuiApplicationHelper::DarkType) { m_themeType = "dark"; } connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [this](DGuiApplicationHelper::ColorType type) { if (type == DGuiApplicationHelper::LightType) { m_themeType = "light"; } else if (type == DGuiApplicationHelper::DarkType) { m_themeType = "dark"; } }); // 初始化指纹相关设置 connect(m_model, &CharaMangerModel::thumbsListChanged, this, &FingerprintAuthController::onThumbsListChanged); onThumbsListChanged(m_model->thumbsList()); onFingerEnrollStagePass(0); m_fingerLiftTimer->setSingleShot(true); m_fingerLiftTimer->setInterval(1000); m_fingerAni->setDuration(1000); m_fingerAni->setEasingCurve(QEasingCurve::OutCubic); // 连接信号 connect(m_model, &CharaMangerModel::enrollCompleted, this, &FingerprintAuthController::onFingerEnrollCompleted); connect(m_model, &CharaMangerModel::enrollStagePass, this, &FingerprintAuthController::onFingerEnrollStagePass); connect(m_model, &CharaMangerModel::enrollFailed, this, &FingerprintAuthController::onFingerEnrollFailed); connect(m_model, &CharaMangerModel::enrollDisconnected, this, &FingerprintAuthController::onFingerEnrollDisconnected); connect(m_model, &CharaMangerModel::enrollRetry, this, &FingerprintAuthController::onFingerEnrollRetry); connect(m_fingerLiftTimer, &QTimer::timeout, this, &FingerprintAuthController::onFingerLiftTimerTimeout); connect(m_fingerAni, &QVariantAnimation::valueChanged, this, &FingerprintAuthController::onFingerAniValueChanged); } void FingerprintAuthController::startEnroll() { // 先刷新指纹列表,确保获取到最新的设备状态 m_worker->refreshFingerEnrollList(m_model->userName()); QString newFingerName; auto thumbList = m_model->thumbsList(); for (const auto &predefineName : m_model->getPredefineThumbsName()) { if (!thumbList.contains(predefineName)) { newFingerName = predefineName; break; } } setAddStage(CharaMangerModel::Processing); onFingerEnrollStagePass(0); m_worker->tryEnroll(m_model->userName(), newFingerName); } void FingerprintAuthController::stopEnroll() { m_worker->stopFingerEnroll(m_model->userName()); m_worker->refreshFingerEnrollList(m_model->userName()); } void FingerprintAuthController::rename(const QString &oldName, const QString &newName) { m_worker->renameFingerItem(m_model->userName(), oldName, newName); } void FingerprintAuthController::remove(const QString &id) { m_worker->deleteFingerItem(m_model->userName(), id); } bool FingerprintAuthController::isAvailable() const { return m_model->fingerVaild(); } QString FingerprintAuthController::getTypeName() const { return tr("Fingerprint"); } void FingerprintAuthController::onThumbsListChanged(const QStringList &thumbs) { Q_UNUSED(thumbs) // TODO } void FingerprintAuthController::onFingerEnrollRetry(const QString &title, const QString &msg) { m_fingerTipTitle = title; m_fingerTipMessage = msg; emit fingerTipsChanged(); } void FingerprintAuthController::onFingerEnrollStagePass(int pro) { int startValue = m_fingerPro * 1.5; int endValue = pro * 1.5; if (m_fingerAni->state() == QVariantAnimation::Running) { m_fingerAni->stop(); } m_fingerAni->setStartValue(startValue); m_fingerAni->setEndValue(endValue); QMetaObject::invokeMethod(m_fingerAni, "start", Qt::QueuedConnection); m_fingerPro = pro; if (m_fingerPro == 0) { m_isStageOne = true; m_fingertipImagePath = QString(":/icons/deepin/builtin/icons/%1/icons/finger/fingerprint_animation_%1_%2.png").arg(m_themeType).arg(0, 5, 10, QChar('0')); m_fingerTipTitle = tr("Place your finger"); m_fingerTipMessage = tr("Place your finger firmly on the sensor until you're asked to lift it"); } else { int idx = m_fingerPro / 2; idx = idx > 50 ? 50 : idx; if (m_fingerPro > 0 && m_fingerPro < 35) { m_fingerTipTitle = tr("Lift your finger"); m_fingerTipMessage = tr("Lift your finger and place it on the sensor again"); m_fingerLiftTimer->start(); } else if (m_fingerPro >= 35 && m_fingerPro < 100) { if (m_isStageOne == true) { m_isStageOne = false; m_fingerTipTitle = tr("Scan the edges of your fingerprint"); m_fingerTipMessage = tr("Adjust the position to scan the edges of your fingerprint"); } else { m_fingerTipTitle = tr("Scan the edges of your fingerprint"); m_fingerTipMessage = tr("Lift your finger and do that again"); m_fingerLiftTimer->start(); } } else { m_fingerTipTitle = tr("Fingerprint added"); m_fingerTipMessage = tr(""); } } Q_EMIT fingerTipsChanged(); } void FingerprintAuthController::onFingerEnrollFailed(const QString &title, const QString &msg) { m_fingerTipTitle = title; m_fingerTipMessage = msg; m_fingertipImagePath = "user_biometric_fingerprint_lose"; setAddStage(CharaMangerModel::Fail); emit fingerTipsChanged(); stopEnroll(); } void FingerprintAuthController::onFingerEnrollCompleted() { onFingerEnrollStagePass(100); setAddStage(CharaMangerModel::Success); emit enrollCompleted(); stopEnroll(); } void FingerprintAuthController::onFingerEnrollDisconnected() { m_fingerTipTitle = tr("Scan Suspended"); m_fingerTipMessage = tr("Scan Suspended"); setAddStage(CharaMangerModel::Fail); emit fingerTipsChanged(); stopEnroll(); } void FingerprintAuthController::onFingerLiftTimerTimeout() { if (m_addStage == CharaMangerModel::Fail || m_addStage == CharaMangerModel::Success) { return; } QString m_defTitle; QString m_defTip; if (m_fingerPro > 0 && m_fingerPro < 35) { m_defTitle = tr("Place your finger"); m_defTip = tr("Place your finger firmly on the sensor until you're asked to lift it"); } else if (m_fingerPro >= 35 && m_fingerPro < 100) { m_defTitle = tr("Scan the edges of your fingerprint"); m_defTip = tr("Place the edges of your fingerprint on the sensor"); } else { m_fingerLiftTimer->stop(); return; } m_fingerTipTitle = m_defTitle; m_fingerTipMessage = m_defTip; emit fingerTipsChanged(); } void FingerprintAuthController::onFingerAniValueChanged(const QVariant &index) { if (m_addStage == CharaMangerModel::Fail) { return; } if (index == 150) { m_fingertipImagePath = "user_biometric_fingerprint_success"; } else { m_fingertipImagePath = QString(":/icons/deepin/builtin/icons/%1/icons/finger/fingerprint_animation_%1_%2.png").arg(m_themeType).arg(index.toInt(), 5, 10, QChar('0')); } emit fingerTipsChanged(); } } // namespace dccV25 ================================================ FILE: src/plugin-authentication/operation/fingerprintauthcontroller.h ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "abstractbiometriccontroller.h" #include "charamangerworker.h" #include #include namespace dccV25 { class FingerprintAuthController : public AbstractBiometricController { Q_OBJECT Q_PROPERTY(QString fingertipImagePath MEMBER m_fingertipImagePath NOTIFY fingerTipsChanged) Q_PROPERTY(QString fingerTitleTip MEMBER m_fingerTipTitle NOTIFY fingerTipsChanged) Q_PROPERTY(QString fingerMsgTip MEMBER m_fingerTipMessage NOTIFY fingerTipsChanged) public: explicit FingerprintAuthController(CharaMangerModel *model, CharaMangerWorker *worker, QObject *parent = nullptr); public slots: // 实现抽象接口 void startEnroll() override; void stopEnroll() override; void rename(const QString &oldName, const QString &newName) override; void remove(const QString &id) override; bool isAvailable() const override; QString getTypeName() const override; // 公共访问器方法 QString fingertipImagePath() const { return m_fingertipImagePath; } QString fingerTitleTip() const { return m_fingerTipTitle; } QString fingerMsgTip() const { return m_fingerTipMessage; } signals: void fingerTipsChanged(); private slots: void onThumbsListChanged(const QStringList &thumbs); void onFingerEnrollRetry(const QString &title, const QString &msg); void onFingerEnrollStagePass(int pro); void onFingerEnrollFailed(const QString &title, const QString &msg); void onFingerEnrollCompleted(); void onFingerEnrollDisconnected(); void onFingerLiftTimerTimeout(); void onFingerAniValueChanged(const QVariant &pro); private: CharaMangerModel *m_model; CharaMangerWorker *m_worker; QString m_fingertipImagePath; QString m_fingerTipTitle; QString m_fingerTipMessage; int m_fingerPro = 0; bool m_isStageOne = false; QTimer *m_fingerLiftTimer = nullptr; QVariantAnimation *m_fingerAni = nullptr; QString m_themeType; }; } // namespace dccV25 ================================================ FILE: src/plugin-authentication/operation/irisauthcontroller.cpp ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "irisauthcontroller.h" #include #include #define IRISID_NUM 5 DGUI_USE_NAMESPACE namespace dccV25 { IrisAuthController::IrisAuthController(CharaMangerModel *model, CharaMangerWorker *worker, QObject *parent) : AbstractBiometricController(parent) , m_model(model) , m_worker(worker) { // 设置主题类型 DGuiApplicationHelper::ColorType type = DGuiApplicationHelper::instance()->themeType(); if (type == DGuiApplicationHelper::LightType) { m_themeType = "light"; } else if (type == DGuiApplicationHelper::DarkType) { m_themeType = "dark"; } connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, [this](DGuiApplicationHelper::ColorType type) { if (type == DGuiApplicationHelper::LightType) { m_themeType = "light"; } else if (type == DGuiApplicationHelper::DarkType) { m_themeType = "dark"; } }); // 连接信号(预留) connect(m_model, &CharaMangerModel::tryStartInputIris, this, &IrisAuthController::onTryStartInputIris); connect(m_model, &CharaMangerModel::enrollIrisStatusTips, this, &IrisAuthController::onEnrollIrisStatusTips); connect(m_model, &CharaMangerModel::enrollIrisInfoState, this, &IrisAuthController::onEnrollIrisInfoState); } void IrisAuthController::startEnroll() { auto irislist = m_model->irisList(); if (irislist.size() >= IRISID_NUM) { return; } QString newName; for (int i = 0; i < IRISID_NUM; ++i) { newName = tr("Iris") + QString("%1").arg(i + 1); if (!irislist.contains(newName)) { break; } } setAddStage(CharaMangerModel::Processing); m_worker->entollStart(m_model->irisDriverName(), m_model->irisCharaType(), newName); } void IrisAuthController::stopEnroll() { m_enrollIrisInProgress = false; m_worker->stopEnroll(); setAddStage(CharaMangerModel::StartState); } void IrisAuthController::rename(const QString &oldName, const QString &newName) { m_worker->renameCharaItem(m_model->irisCharaType(), oldName, newName); m_worker->refreshUserEnrollList(m_model->irisDriverName(), m_model->irisCharaType()); Q_UNUSED(oldName) Q_UNUSED(newName) } void IrisAuthController::remove(const QString &id) { m_worker->deleteCharaItem(m_model->irisCharaType(), id); Q_UNUSED(id) } bool IrisAuthController::isAvailable() const { return m_model->irisDriverVaild(); } QString IrisAuthController::getTypeName() const { return tr("Iris"); } QString IrisAuthController::irisImgContent() const { return m_irisImgContent; } bool IrisAuthController::enrollIrisSuccess() const { return m_enrollIrisSuccess; } QString IrisAuthController::enrollIrisTips() const { return m_enrollIrisTips; } void IrisAuthController::onEnrollIrisStatusTips(const QString &tips) { m_enrollIrisTips = tips; emit enrollIrisTipsChanged(); } void IrisAuthController::onEnrollIrisInfoState(CharaMangerModel::AddInfoState state, const QString &tips) { m_enrollIrisSuccess = state == CharaMangerModel::AddInfoState::Success; m_enrollIrisTips = m_enrollIrisSuccess ? tr("Use your iris to unlock the device and make settings later") : tips; emit enrollIrisSuccessChanged(); emit enrollIrisTipsChanged(); emit enrollCompleted(); stopEnroll(); if (m_enrollIrisSuccess) { m_worker->refreshUserEnrollList(m_model->irisDriverName(), m_model->irisCharaType()); setAddStage(CharaMangerModel::Success); } else { setAddStage(CharaMangerModel::Fail); } } void IrisAuthController::onTryStartInputIris(CharaMangerModel::AddInfoState state) { Q_UNUSED(state) onEnrollIrisStatusTips(""); } } // namespace dccV25 ================================================ FILE: src/plugin-authentication/operation/irisauthcontroller.h ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "abstractbiometriccontroller.h" #include "charamangerworker.h" #include namespace dccV25 { class IrisAuthController : public AbstractBiometricController { Q_OBJECT Q_PROPERTY(QString irisImgContent READ irisImgContent NOTIFY irisImgContentChanged FINAL) Q_PROPERTY(bool enrollIrisSuccess READ enrollIrisSuccess NOTIFY enrollIrisSuccessChanged FINAL) Q_PROPERTY(QString enrollIrisTips READ enrollIrisTips NOTIFY enrollIrisTipsChanged FINAL) public: explicit IrisAuthController(CharaMangerModel *model, CharaMangerWorker *worker, QObject *parent = nullptr); public slots: // 实现抽象接口 void startEnroll() override; void stopEnroll() override; void rename(const QString &oldName, const QString &newName) override; void remove(const QString &id) override; bool isAvailable() const override; QString getTypeName() const override; // 虹膜特有的属性和方法(预留) QString irisImgContent() const; bool enrollIrisSuccess() const; QString enrollIrisTips() const; signals: void irisImgContentChanged(); void enrollIrisSuccessChanged(); void enrollIrisTipsChanged(); private slots: void onEnrollIrisStatusTips(const QString &tips); void onEnrollIrisInfoState(CharaMangerModel::AddInfoState state, const QString &tips); void onTryStartInputIris(CharaMangerModel::AddInfoState state); private: CharaMangerModel *m_model; CharaMangerWorker *m_worker; QString m_irisImgContent; QString m_enrollIrisTips; bool m_enrollIrisSuccess = false; bool m_enrollIrisInProgress = false; QString m_themeType; }; } // namespace dccV25 ================================================ FILE: src/plugin-authentication/operation/qrc/authentication.qrc ================================================ icons/dcc_nav_authentication_42px.svg icons/dcc_nav_authentication_84px.svg icons/dark/icons/icon_face-fail.svg icons/dark/icons/icon_face-start.svg icons/dark/icons/icon_face-success.svg icons/dark/icons/icon_unknown_device.svg icons/light/icons/icon_face-fail.svg icons/light/icons/icon_face-start.svg icons/light/icons/icon_face-success.svg icons/light/icons/icon_unknown_device.svg icons/light/icons/finger/fingerprint_light.svg icons/dark/icons/finger/fingerprint_light.svg icons/light/icons/finger/fingerprint_animation_light_00000.png icons/light/icons/finger/fingerprint_animation_light_00001.png icons/light/icons/finger/fingerprint_animation_light_00002.png icons/light/icons/finger/fingerprint_animation_light_00003.png icons/light/icons/finger/fingerprint_animation_light_00004.png icons/light/icons/finger/fingerprint_animation_light_00005.png icons/light/icons/finger/fingerprint_animation_light_00006.png icons/light/icons/finger/fingerprint_animation_light_00007.png icons/light/icons/finger/fingerprint_animation_light_00008.png icons/light/icons/finger/fingerprint_animation_light_00009.png icons/light/icons/finger/fingerprint_animation_light_00010.png icons/light/icons/finger/fingerprint_animation_light_00011.png icons/light/icons/finger/fingerprint_animation_light_00012.png icons/light/icons/finger/fingerprint_animation_light_00013.png icons/light/icons/finger/fingerprint_animation_light_00014.png icons/light/icons/finger/fingerprint_animation_light_00015.png icons/light/icons/finger/fingerprint_animation_light_00016.png icons/light/icons/finger/fingerprint_animation_light_00017.png icons/light/icons/finger/fingerprint_animation_light_00018.png icons/light/icons/finger/fingerprint_animation_light_00019.png icons/light/icons/finger/fingerprint_animation_light_00020.png icons/light/icons/finger/fingerprint_animation_light_00021.png icons/light/icons/finger/fingerprint_animation_light_00022.png icons/light/icons/finger/fingerprint_animation_light_00023.png icons/light/icons/finger/fingerprint_animation_light_00024.png icons/light/icons/finger/fingerprint_animation_light_00025.png icons/light/icons/finger/fingerprint_animation_light_00026.png icons/light/icons/finger/fingerprint_animation_light_00027.png icons/light/icons/finger/fingerprint_animation_light_00028.png icons/light/icons/finger/fingerprint_animation_light_00029.png icons/light/icons/finger/fingerprint_animation_light_00030.png icons/light/icons/finger/fingerprint_animation_light_00031.png icons/light/icons/finger/fingerprint_animation_light_00032.png icons/light/icons/finger/fingerprint_animation_light_00033.png icons/light/icons/finger/fingerprint_animation_light_00034.png icons/light/icons/finger/fingerprint_animation_light_00035.png icons/light/icons/finger/fingerprint_animation_light_00036.png icons/light/icons/finger/fingerprint_animation_light_00037.png icons/light/icons/finger/fingerprint_animation_light_00038.png icons/light/icons/finger/fingerprint_animation_light_00039.png icons/light/icons/finger/fingerprint_animation_light_00040.png icons/light/icons/finger/fingerprint_animation_light_00041.png icons/light/icons/finger/fingerprint_animation_light_00042.png icons/light/icons/finger/fingerprint_animation_light_00043.png icons/light/icons/finger/fingerprint_animation_light_00044.png icons/light/icons/finger/fingerprint_animation_light_00045.png icons/light/icons/finger/fingerprint_animation_light_00046.png icons/light/icons/finger/fingerprint_animation_light_00047.png icons/light/icons/finger/fingerprint_animation_light_00048.png icons/light/icons/finger/fingerprint_animation_light_00049.png icons/light/icons/finger/fingerprint_animation_light_00050.png icons/light/icons/finger/fingerprint_animation_light_00051.png icons/light/icons/finger/fingerprint_animation_light_00052.png icons/light/icons/finger/fingerprint_animation_light_00053.png icons/light/icons/finger/fingerprint_animation_light_00054.png icons/light/icons/finger/fingerprint_animation_light_00055.png icons/light/icons/finger/fingerprint_animation_light_00056.png icons/light/icons/finger/fingerprint_animation_light_00057.png icons/light/icons/finger/fingerprint_animation_light_00058.png icons/light/icons/finger/fingerprint_animation_light_00059.png icons/light/icons/finger/fingerprint_animation_light_00060.png icons/light/icons/finger/fingerprint_animation_light_00061.png icons/light/icons/finger/fingerprint_animation_light_00062.png icons/light/icons/finger/fingerprint_animation_light_00063.png icons/light/icons/finger/fingerprint_animation_light_00064.png icons/light/icons/finger/fingerprint_animation_light_00065.png icons/light/icons/finger/fingerprint_animation_light_00066.png icons/light/icons/finger/fingerprint_animation_light_00067.png icons/light/icons/finger/fingerprint_animation_light_00068.png icons/light/icons/finger/fingerprint_animation_light_00069.png icons/light/icons/finger/fingerprint_animation_light_00070.png icons/light/icons/finger/fingerprint_animation_light_00071.png icons/light/icons/finger/fingerprint_animation_light_00072.png icons/light/icons/finger/fingerprint_animation_light_00073.png icons/light/icons/finger/fingerprint_animation_light_00074.png icons/light/icons/finger/fingerprint_animation_light_00075.png icons/light/icons/finger/fingerprint_animation_light_00076.png icons/light/icons/finger/fingerprint_animation_light_00077.png icons/light/icons/finger/fingerprint_animation_light_00078.png icons/light/icons/finger/fingerprint_animation_light_00079.png icons/light/icons/finger/fingerprint_animation_light_00080.png icons/light/icons/finger/fingerprint_animation_light_00081.png icons/light/icons/finger/fingerprint_animation_light_00082.png icons/light/icons/finger/fingerprint_animation_light_00083.png icons/light/icons/finger/fingerprint_animation_light_00084.png icons/light/icons/finger/fingerprint_animation_light_00085.png icons/light/icons/finger/fingerprint_animation_light_00086.png icons/light/icons/finger/fingerprint_animation_light_00087.png icons/light/icons/finger/fingerprint_animation_light_00088.png icons/light/icons/finger/fingerprint_animation_light_00089.png icons/light/icons/finger/fingerprint_animation_light_00090.png icons/light/icons/finger/fingerprint_animation_light_00091.png icons/light/icons/finger/fingerprint_animation_light_00092.png icons/light/icons/finger/fingerprint_animation_light_00093.png icons/light/icons/finger/fingerprint_animation_light_00094.png icons/light/icons/finger/fingerprint_animation_light_00095.png icons/light/icons/finger/fingerprint_animation_light_00096.png icons/light/icons/finger/fingerprint_animation_light_00097.png icons/light/icons/finger/fingerprint_animation_light_00098.png icons/light/icons/finger/fingerprint_animation_light_00099.png icons/light/icons/finger/fingerprint_animation_light_00100.png icons/light/icons/finger/fingerprint_animation_light_00101.png icons/light/icons/finger/fingerprint_animation_light_00102.png icons/light/icons/finger/fingerprint_animation_light_00103.png icons/light/icons/finger/fingerprint_animation_light_00104.png icons/light/icons/finger/fingerprint_animation_light_00105.png icons/light/icons/finger/fingerprint_animation_light_00106.png icons/light/icons/finger/fingerprint_animation_light_00107.png icons/light/icons/finger/fingerprint_animation_light_00108.png icons/light/icons/finger/fingerprint_animation_light_00109.png icons/light/icons/finger/fingerprint_animation_light_00110.png icons/light/icons/finger/fingerprint_animation_light_00111.png icons/light/icons/finger/fingerprint_animation_light_00112.png icons/light/icons/finger/fingerprint_animation_light_00113.png icons/light/icons/finger/fingerprint_animation_light_00114.png icons/light/icons/finger/fingerprint_animation_light_00115.png icons/light/icons/finger/fingerprint_animation_light_00116.png icons/light/icons/finger/fingerprint_animation_light_00117.png icons/light/icons/finger/fingerprint_animation_light_00118.png icons/light/icons/finger/fingerprint_animation_light_00119.png icons/light/icons/finger/fingerprint_animation_light_00120.png icons/light/icons/finger/fingerprint_animation_light_00121.png icons/light/icons/finger/fingerprint_animation_light_00122.png icons/light/icons/finger/fingerprint_animation_light_00123.png icons/light/icons/finger/fingerprint_animation_light_00124.png icons/light/icons/finger/fingerprint_animation_light_00125.png icons/light/icons/finger/fingerprint_animation_light_00126.png icons/light/icons/finger/fingerprint_animation_light_00127.png icons/light/icons/finger/fingerprint_animation_light_00128.png icons/light/icons/finger/fingerprint_animation_light_00129.png icons/light/icons/finger/fingerprint_animation_light_00130.png icons/light/icons/finger/fingerprint_animation_light_00131.png icons/light/icons/finger/fingerprint_animation_light_00132.png icons/light/icons/finger/fingerprint_animation_light_00133.png icons/light/icons/finger/fingerprint_animation_light_00134.png icons/light/icons/finger/fingerprint_animation_light_00135.png icons/light/icons/finger/fingerprint_animation_light_00136.png icons/light/icons/finger/fingerprint_animation_light_00137.png icons/light/icons/finger/fingerprint_animation_light_00138.png icons/light/icons/finger/fingerprint_animation_light_00139.png icons/light/icons/finger/fingerprint_animation_light_00140.png icons/light/icons/finger/fingerprint_animation_light_00141.png icons/light/icons/finger/fingerprint_animation_light_00142.png icons/light/icons/finger/fingerprint_animation_light_00143.png icons/light/icons/finger/fingerprint_animation_light_00144.png icons/light/icons/finger/fingerprint_animation_light_00145.png icons/light/icons/finger/fingerprint_animation_light_00146.png icons/light/icons/finger/fingerprint_animation_light_00147.png icons/light/icons/finger/fingerprint_animation_light_00148.png icons/light/icons/finger/fingerprint_animation_light_00149.png icons/dark/icons/finger/fingerprint_animation_dark_00000.png icons/dark/icons/finger/fingerprint_animation_dark_00001.png icons/dark/icons/finger/fingerprint_animation_dark_00002.png icons/dark/icons/finger/fingerprint_animation_dark_00003.png icons/dark/icons/finger/fingerprint_animation_dark_00004.png icons/dark/icons/finger/fingerprint_animation_dark_00005.png icons/dark/icons/finger/fingerprint_animation_dark_00006.png icons/dark/icons/finger/fingerprint_animation_dark_00007.png icons/dark/icons/finger/fingerprint_animation_dark_00008.png icons/dark/icons/finger/fingerprint_animation_dark_00009.png icons/dark/icons/finger/fingerprint_animation_dark_00010.png icons/dark/icons/finger/fingerprint_animation_dark_00011.png icons/dark/icons/finger/fingerprint_animation_dark_00012.png icons/dark/icons/finger/fingerprint_animation_dark_00013.png icons/dark/icons/finger/fingerprint_animation_dark_00014.png icons/dark/icons/finger/fingerprint_animation_dark_00015.png icons/dark/icons/finger/fingerprint_animation_dark_00016.png icons/dark/icons/finger/fingerprint_animation_dark_00017.png icons/dark/icons/finger/fingerprint_animation_dark_00018.png icons/dark/icons/finger/fingerprint_animation_dark_00019.png icons/dark/icons/finger/fingerprint_animation_dark_00020.png icons/dark/icons/finger/fingerprint_animation_dark_00021.png icons/dark/icons/finger/fingerprint_animation_dark_00022.png icons/dark/icons/finger/fingerprint_animation_dark_00023.png icons/dark/icons/finger/fingerprint_animation_dark_00024.png icons/dark/icons/finger/fingerprint_animation_dark_00025.png icons/dark/icons/finger/fingerprint_animation_dark_00026.png icons/dark/icons/finger/fingerprint_animation_dark_00027.png icons/dark/icons/finger/fingerprint_animation_dark_00028.png icons/dark/icons/finger/fingerprint_animation_dark_00029.png icons/dark/icons/finger/fingerprint_animation_dark_00030.png icons/dark/icons/finger/fingerprint_animation_dark_00031.png icons/dark/icons/finger/fingerprint_animation_dark_00032.png icons/dark/icons/finger/fingerprint_animation_dark_00033.png icons/dark/icons/finger/fingerprint_animation_dark_00034.png icons/dark/icons/finger/fingerprint_animation_dark_00035.png icons/dark/icons/finger/fingerprint_animation_dark_00036.png icons/dark/icons/finger/fingerprint_animation_dark_00037.png icons/dark/icons/finger/fingerprint_animation_dark_00038.png icons/dark/icons/finger/fingerprint_animation_dark_00039.png icons/dark/icons/finger/fingerprint_animation_dark_00040.png icons/dark/icons/finger/fingerprint_animation_dark_00041.png icons/dark/icons/finger/fingerprint_animation_dark_00042.png icons/dark/icons/finger/fingerprint_animation_dark_00043.png icons/dark/icons/finger/fingerprint_animation_dark_00044.png icons/dark/icons/finger/fingerprint_animation_dark_00045.png icons/dark/icons/finger/fingerprint_animation_dark_00046.png icons/dark/icons/finger/fingerprint_animation_dark_00047.png icons/dark/icons/finger/fingerprint_animation_dark_00048.png icons/dark/icons/finger/fingerprint_animation_dark_00049.png icons/dark/icons/finger/fingerprint_animation_dark_00050.png icons/dark/icons/finger/fingerprint_animation_dark_00051.png icons/dark/icons/finger/fingerprint_animation_dark_00052.png icons/dark/icons/finger/fingerprint_animation_dark_00053.png icons/dark/icons/finger/fingerprint_animation_dark_00054.png icons/dark/icons/finger/fingerprint_animation_dark_00055.png icons/dark/icons/finger/fingerprint_animation_dark_00056.png icons/dark/icons/finger/fingerprint_animation_dark_00057.png icons/dark/icons/finger/fingerprint_animation_dark_00058.png icons/dark/icons/finger/fingerprint_animation_dark_00059.png icons/dark/icons/finger/fingerprint_animation_dark_00060.png icons/dark/icons/finger/fingerprint_animation_dark_00061.png icons/dark/icons/finger/fingerprint_animation_dark_00062.png icons/dark/icons/finger/fingerprint_animation_dark_00063.png icons/dark/icons/finger/fingerprint_animation_dark_00064.png icons/dark/icons/finger/fingerprint_animation_dark_00065.png icons/dark/icons/finger/fingerprint_animation_dark_00066.png icons/dark/icons/finger/fingerprint_animation_dark_00067.png icons/dark/icons/finger/fingerprint_animation_dark_00068.png icons/dark/icons/finger/fingerprint_animation_dark_00069.png icons/dark/icons/finger/fingerprint_animation_dark_00070.png icons/dark/icons/finger/fingerprint_animation_dark_00071.png icons/dark/icons/finger/fingerprint_animation_dark_00072.png icons/dark/icons/finger/fingerprint_animation_dark_00073.png icons/dark/icons/finger/fingerprint_animation_dark_00074.png icons/dark/icons/finger/fingerprint_animation_dark_00075.png icons/dark/icons/finger/fingerprint_animation_dark_00076.png icons/dark/icons/finger/fingerprint_animation_dark_00077.png icons/dark/icons/finger/fingerprint_animation_dark_00078.png icons/dark/icons/finger/fingerprint_animation_dark_00079.png icons/dark/icons/finger/fingerprint_animation_dark_00080.png icons/dark/icons/finger/fingerprint_animation_dark_00081.png icons/dark/icons/finger/fingerprint_animation_dark_00082.png icons/dark/icons/finger/fingerprint_animation_dark_00083.png icons/dark/icons/finger/fingerprint_animation_dark_00084.png icons/dark/icons/finger/fingerprint_animation_dark_00085.png icons/dark/icons/finger/fingerprint_animation_dark_00086.png icons/dark/icons/finger/fingerprint_animation_dark_00087.png icons/dark/icons/finger/fingerprint_animation_dark_00088.png icons/dark/icons/finger/fingerprint_animation_dark_00089.png icons/dark/icons/finger/fingerprint_animation_dark_00090.png icons/dark/icons/finger/fingerprint_animation_dark_00091.png icons/dark/icons/finger/fingerprint_animation_dark_00092.png icons/dark/icons/finger/fingerprint_animation_dark_00093.png icons/dark/icons/finger/fingerprint_animation_dark_00094.png icons/dark/icons/finger/fingerprint_animation_dark_00095.png icons/dark/icons/finger/fingerprint_animation_dark_00096.png icons/dark/icons/finger/fingerprint_animation_dark_00097.png icons/dark/icons/finger/fingerprint_animation_dark_00098.png icons/dark/icons/finger/fingerprint_animation_dark_00099.png icons/dark/icons/finger/fingerprint_animation_dark_00100.png icons/dark/icons/finger/fingerprint_animation_dark_00101.png icons/dark/icons/finger/fingerprint_animation_dark_00102.png icons/dark/icons/finger/fingerprint_animation_dark_00103.png icons/dark/icons/finger/fingerprint_animation_dark_00104.png icons/dark/icons/finger/fingerprint_animation_dark_00105.png icons/dark/icons/finger/fingerprint_animation_dark_00106.png icons/dark/icons/finger/fingerprint_animation_dark_00107.png icons/dark/icons/finger/fingerprint_animation_dark_00108.png icons/dark/icons/finger/fingerprint_animation_dark_00109.png icons/dark/icons/finger/fingerprint_animation_dark_00110.png icons/dark/icons/finger/fingerprint_animation_dark_00111.png icons/dark/icons/finger/fingerprint_animation_dark_00112.png icons/dark/icons/finger/fingerprint_animation_dark_00113.png icons/dark/icons/finger/fingerprint_animation_dark_00114.png icons/dark/icons/finger/fingerprint_animation_dark_00115.png icons/dark/icons/finger/fingerprint_animation_dark_00116.png icons/dark/icons/finger/fingerprint_animation_dark_00117.png icons/dark/icons/finger/fingerprint_animation_dark_00118.png icons/dark/icons/finger/fingerprint_animation_dark_00119.png icons/dark/icons/finger/fingerprint_animation_dark_00120.png icons/dark/icons/finger/fingerprint_animation_dark_00121.png icons/dark/icons/finger/fingerprint_animation_dark_00122.png icons/dark/icons/finger/fingerprint_animation_dark_00123.png icons/dark/icons/finger/fingerprint_animation_dark_00124.png icons/dark/icons/finger/fingerprint_animation_dark_00125.png icons/dark/icons/finger/fingerprint_animation_dark_00126.png icons/dark/icons/finger/fingerprint_animation_dark_00127.png icons/dark/icons/finger/fingerprint_animation_dark_00128.png icons/dark/icons/finger/fingerprint_animation_dark_00129.png icons/dark/icons/finger/fingerprint_animation_dark_00130.png icons/dark/icons/finger/fingerprint_animation_dark_00131.png icons/dark/icons/finger/fingerprint_animation_dark_00132.png icons/dark/icons/finger/fingerprint_animation_dark_00133.png icons/dark/icons/finger/fingerprint_animation_dark_00134.png icons/dark/icons/finger/fingerprint_animation_dark_00135.png icons/dark/icons/finger/fingerprint_animation_dark_00136.png icons/dark/icons/finger/fingerprint_animation_dark_00137.png icons/dark/icons/finger/fingerprint_animation_dark_00138.png icons/dark/icons/finger/fingerprint_animation_dark_00139.png icons/dark/icons/finger/fingerprint_animation_dark_00140.png icons/dark/icons/finger/fingerprint_animation_dark_00141.png icons/dark/icons/finger/fingerprint_animation_dark_00142.png icons/dark/icons/finger/fingerprint_animation_dark_00143.png icons/dark/icons/finger/fingerprint_animation_dark_00144.png icons/dark/icons/finger/fingerprint_animation_dark_00145.png icons/dark/icons/finger/fingerprint_animation_dark_00146.png icons/dark/icons/finger/fingerprint_animation_dark_00147.png icons/dark/icons/finger/fingerprint_animation_dark_00148.png icons/dark/icons/finger/fingerprint_animation_dark_00149.png icons/user_biometric_face.dci icons/user_biometric_face_add.dci icons/user_biometric_face_lose.dci icons/user_biometric_face_success.dci icons/user_biometric_fingerprint.dci icons/user_biometric_fingerprint_add.dci icons/user_biometric_fingerprint_lose.dci icons/user_biometric_fingerprint_success.dci icons/user_biometric_iris.dci icons/scan_loader.dci icons/dcc_edit.dci icons/dcc_delete.dci icons/iris_add.dci icons/iris_lose.dci icons/iris_scan.dci icons/iris_scanning.dci icons/iris_success.dci ================================================ FILE: src/plugin-authentication/qml/AddFaceinfoDialog.qml ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Dialogs import QtQuick.Window import QtQml.Models 2.1 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 import org.deepin.dcc.account.biometric 1.0 D.DialogWindow { id: dialog width: 360 height: 500 minimumWidth: width maximumWidth: minimumWidth modality: Qt.WindowModal title: qsTr("Enroll Face") onVisibleChanged: function() { if (listview.currentIndex != 0 && !visible) { dccData.faceController.stopEnroll() } } D.ListView { id: listview implicitWidth: dialog.width - dialog.leftPadding - dialog.rightPadding implicitHeight: 500 - DS.Style.dialogWindow.titleBarHeight - DS.Style.dialogWindow.contentHMargin spacing: DS.Style.dialogWindow.contentHMargin model: itemModel orientation: ListView.Horizontal layoutDirection: Qt.LeftToRight snapMode: ListView.SnapOneItem boundsBehavior: Flickable.StopAtBounds highlightRangeMode: ListView.StrictlyEnforceRange highlightMoveDuration: 0 interactive: false ObjectModel { id: itemModel // 添加前 ColumnLayout { id: firstPage height: listview.implicitHeight width: listview.implicitWidth property bool disclaimerAccepted: false Label { Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: dialog.title font: D.DTK.fontManager.t5 } Item { Layout.preferredHeight: 20 } D.DciIcon { name: "user_biometric_face_add" Layout.alignment: Qt.AlignCenter } Item { Layout.fillHeight: true } ScrollView { id: infoScrollView Layout.fillHeight: true Layout.fillWidth: true Layout.leftMargin: 10 Layout.rightMargin: 10 Layout.preferredHeight: Math.min(infoLabel.implicitHeight, 120) ScrollBar.horizontal.policy: ScrollBar.AlwaysOff ScrollBar.vertical.policy: ScrollBar.AsNeeded Component.onCompleted: { if (contentItem) { contentItem.interactive = true contentItem.flickableDirection = Flickable.VerticalFlick contentItem.boundsBehavior = Flickable.DragAndOvershootBounds } } Label { id: infoLabel width: infoScrollView.availableWidth font: D.DTK.fontManager.t8 wrapMode: Text.WordWrap text: qsTr("Face recognition does not support liveness detection, and the verification method may carry risks.\n\ To ensure successful entry:\n\ 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.).\n\ 2. Ensure sufficient lighting and avoid direct sunlight.") horizontalAlignment: Text.AlignLeft color: D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.7) : Qt.rgba(1, 1, 1, 0.7) } } Item { Layout.fillHeight: true } Column { Layout.alignment: Qt.AlignCenter Layout.fillWidth: true spacing: 0 // 计算是否需要换行显示 property bool needWrap: { // 估算文本宽度,如果总宽度超过可用空间则换行 var checkboxWidth = agreeCheckbox.implicitWidth var buttonWidth = disclaimerButton.implicitWidth var availableWidth = listview.implicitWidth - 40 // 减去边距 return (checkboxWidth + buttonWidth) > availableWidth } Row { visible: !parent.needWrap anchors.horizontalCenter: parent.horizontalCenter spacing: 0 CheckBox { id: agreeCheckbox text: qsTr("I have read and agree to the") anchors.verticalCenter: parent.verticalCenter checked: firstPage.disclaimerAccepted onCheckedChanged: firstPage.disclaimerAccepted = checked } D.ToolButton { id: disclaimerButton text: qsTr("Disclaimer") padding: 0 background: null font: agreeCheckbox.font anchors.verticalCenter: parent.verticalCenter anchors.baseline: agreeCheckbox.baseline textColor: D.Palette { normal { common: D.DTK.makeColor(D.Color.Highlight) } normalDark: normal hovered { common: D.DTK.makeColor(D.Color.Highlight).lightness(+30) } hoveredDark: hovered } onClicked: { listview.currentIndex = 3 } } } // 换行显示时的布局 Column { visible: parent.needWrap anchors.horizontalCenter: parent.horizontalCenter spacing: 0 CheckBox { id: agreeCheckboxWrapped anchors.horizontalCenter: parent.horizontalCenter text: qsTr("I have read and agree to the") checked: firstPage.disclaimerAccepted onCheckedChanged: firstPage.disclaimerAccepted = checked // 移除组件默认的边距 topPadding: 0 bottomPadding: 0 } D.ToolButton { id: disclaimerButtonWrapped anchors.horizontalCenter: parent.horizontalCenter text: qsTr("Disclaimer") padding: 0 topPadding: 0 bottomPadding: 0 background: null font: agreeCheckbox.font textColor: D.Palette { normal { common: D.DTK.makeColor(D.Color.Highlight) } normalDark: normal hovered { common: D.DTK.makeColor(D.Color.Highlight).lightness(+30) } hoveredDark: hovered } onClicked: { listview.currentIndex = 3 } } } } D.RecommandButton { spacing: 10 Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 0 Layout.leftMargin: 0 Layout.rightMargin: 0 Layout.fillWidth: true text: qsTr("Next") enabled: firstPage.disclaimerAccepted onClicked: { dccData.faceController.startEnroll(); dialog.hide() } } } // 添加中 ColumnLayout { height: listview.implicitHeight width: listview.implicitWidth spacing: 0 Label { text: dialog.title Layout.alignment: Qt.AlignTop | Qt.AlignHCenter font: D.DTK.fontManager.t5 } Item { Layout.preferredHeight: 40 } Item { id: facePreviewItem Layout.alignment: Qt.AlignCenter Layout.preferredWidth: 250 Layout.preferredHeight: 250 D.DciIcon { id: faceImg visible: dccData.faceController.addStage === CharaMangerModel.Processing && dccData.faceController.faceImgContent !== "" anchors.centerIn: parent name: dccData.faceController.faceImgContent sourceSize: Qt.size(210, 210) } Control { id: loaderControl visible: dccData.faceController.addStage === CharaMangerModel.Processing contentItem: D.DciIcon { id: shortProgressCircle anchors.fill: parent sourceSize: Qt.size(250, 250) name: "scan_loader" palette: D.DTK.makeIconPalette(loaderControl.palette) } } Timer { repeat: true running: loaderControl.visible interval: 50 onTriggered: { loaderControl.rotation = loaderControl.rotation + 360 / 49 } } } Item { visible: dccData.faceController.addStage === CharaMangerModel.Processing Layout.preferredHeight: 50 } Label { text: dccData.faceController.enrollFaceTips Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font: D.DTK.fontManager.t8 wrapMode: Text.WordWrap color: D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.7) : Qt.rgba(1, 1, 1, 0.7) } Item { Layout.fillHeight: true } } // 完成页面 ColumnLayout { height: listview.implicitHeight width: listview.implicitWidth Label { Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: dialog.title font: D.DTK.fontManager.t5 } Item { Layout.preferredHeight: 50 } D.DciIcon { name: dccData.faceController.enrollFaceSuccess ? "user_biometric_face_success" : "user_biometric_face_lose"; Layout.alignment: Qt.AlignCenter sourceSize: Qt.size(150, 150) } Item { Layout.preferredHeight: 30 } Label { visible: dccData.faceController.addStage === CharaMangerModel.Success || dccData.faceController.addStage === CharaMangerModel.Fail Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter wrapMode: Text.WordWrap color: D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1) text: dccData.faceController.addStage === CharaMangerModel.Success ? qsTr("Face enrolled") : qsTr("Failed to enroll your face") } Label { text: dccData.faceController.enrollFaceTips Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font: D.DTK.fontManager.t8 wrapMode: Text.WordWrap color: D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.7) : Qt.rgba(1, 1, 1, 0.7) } Item { Layout.fillHeight: true } RowLayout { id: successBtnLayout visible: dccData.faceController.addStage === CharaMangerModel.Success spacing: 10 Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 0 Layout.leftMargin: 0 Layout.rightMargin: 0 Button { Layout.fillWidth: true text: qsTr("Done") onClicked: { dccData.faceController.stopEnroll() dialog.close() } } } RowLayout { id: failedBtnLayout visible: dccData.faceController.addStage === CharaMangerModel.Fail spacing: 10 Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 0 Layout.leftMargin: 0 Layout.rightMargin: 0 Button { Layout.fillWidth: true text: qsTr("Cancel") onClicked: { dialog.close(); } } D.RecommandButton { Layout.fillWidth: true text: qsTr("Retry Enroll") onClicked: { listview.currentIndex = 0 } } } } // 免责声明 DisclaimerControl { id: disclaimerControl height: listview.implicitHeight width: listview.implicitWidth content: qsTr(`"Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS.`) onCancelClicked: { listview.currentIndex = 0 firstPage.disclaimerAccepted = false } onAgreeClicked: { listview.currentIndex = 0 firstPage.disclaimerAccepted = true } } } Connections { target: dccData.faceController function onAddStageChanged() { if (dccData.faceController.addStage === CharaMangerModel.Success) { listview.currentIndex = 2 } else if (dccData.faceController.addStage === CharaMangerModel.Fail) { listview.currentIndex = 2 } } } Connections { target: dccData.model function onTryStartInputFace(res) { listview.currentIndex = 1 dialog.show() } } } } ================================================ FILE: src/plugin-authentication/qml/AddFingerDialog.qml ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Dialogs import QtQuick.Window import QtQml.Models 2.1 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 import org.deepin.dcc.account.biometric 1.0 D.DialogWindow { id: dialog width: 360 height: 500 minimumWidth: width maximumWidth: minimumWidth modality: Qt.WindowModal title: qsTr("Enroll Finger") onVisibleChanged: function() { if (listview.currentIndex != 0 && !visible) { dccData.fingerprintController.stopEnroll() } } onActiveChanged: function() { if (listview.currentIndex == 1 && !active) { dccData.fingerprintController.stopEnroll() } } D.ListView { id: listview implicitWidth: dialog.width - dialog.leftPadding - dialog.rightPadding implicitHeight: 500 - DS.Style.dialogWindow.titleBarHeight - DS.Style.dialogWindow.contentHMargin spacing: DS.Style.dialogWindow.contentHMargin model: itemModel orientation: ListView.Horizontal layoutDirection: Qt.LeftToRight snapMode: ListView.SnapOneItem boundsBehavior: Flickable.StopAtBounds highlightRangeMode: ListView.StrictlyEnforceRange highlightMoveDuration: 0 interactive: false ObjectModel { id: itemModel ColumnLayout { height: ListView.view.implicitHeight width: ListView.view.implicitWidth Label { Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: dialog.title } Item { Layout.preferredHeight: 50 } D.DciIcon { name: "user_biometric_fingerprint_add" Layout.alignment: Qt.AlignCenter } Item { Layout.fillHeight: true } Label { Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter Layout.leftMargin: 10 Layout.rightMargin: 10 font: D.DTK.fontManager.t8 wrapMode: Text.WordWrap text: qsTr("Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger.") color: D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.7) : Qt.rgba(1, 1, 1, 0.7) horizontalAlignment: Text.AlignHCenter } Item { Layout.fillHeight: true } Row { Layout.alignment: Qt.AlignCenter CheckBox { id: agreeCheckbox text: qsTr("I have read and agree to the") } D.ToolButton { text: qsTr("Disclaimer") padding: 0 background: null font: agreeCheckbox.font textColor: D.Palette { normal { common: D.DTK.makeColor(D.Color.Highlight) } normalDark: normal hovered { common: D.DTK.makeColor(D.Color.Highlight).lightness(+30) } hoveredDark: hovered } onClicked: { listview.currentIndex = 2 } } } D.RecommandButton { spacing: 10 Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 0 Layout.leftMargin: 0 Layout.rightMargin: 0 Layout.fillWidth: true text: qsTr("Next") enabled: agreeCheckbox.checked onClicked: { dccData.fingerprintController.startEnroll(); dialog.hide() } } } ColumnLayout { height: ListView.view.implicitHeight width: ListView.view.implicitWidth Label { text: dialog.title Layout.alignment: Qt.AlignTop | Qt.AlignHCenter } Item { Layout.alignment: Qt.AlignCenter Layout.preferredWidth: 200 Layout.preferredHeight: 200 D.DciIcon { id: loaderIcon anchors.centerIn: parent name: dccData.fingerprintController.fingertipImagePath retainWhileLoading: true sourceSize: Qt.size(150, 150) } } Label { Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter wrapMode: Text.WordWrap color: D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1) text: dccData.fingerprintController.fingerTitleTip } Label { Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter wrapMode: Text.WordWrap font: D.DTK.fontManager.t8 color: D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.7) : Qt.rgba(1, 1, 1, 0.7) text: dccData.fingerprintController.fingerMsgTip } Item { Layout.minimumHeight: 60 Layout.fillHeight: true } RowLayout { id: successBtnLayout visible: dccData.fingerprintController.addStage === CharaMangerModel.Success spacing: 10 Layout.bottomMargin: 0 Layout.leftMargin: 0 Layout.rightMargin: 0 Button { Layout.fillWidth: true text: qsTr("Done") onClicked: { dialog.close() } } } RowLayout { id: failedBtnLayout visible: dccData.fingerprintController.addStage === CharaMangerModel.Fail spacing: 10 Layout.bottomMargin: 0 Layout.leftMargin: 0 Layout.rightMargin: 0 Button { Layout.fillWidth: true text: qsTr("Cancel") onClicked: { dccData.fingerprintController.stopEnroll() dialog.close() } } D.RecommandButton { Layout.fillWidth: true text: qsTr("Retry Enroll") onClicked: { listview.currentIndex = 0 } } } RowLayout { id: processBtnLayout visible: dccData.fingerprintController.addStage === CharaMangerModel.Processing spacing: 10 Layout.bottomMargin: 0 Layout.leftMargin: 0 Layout.rightMargin: 0 Button { Layout.fillWidth: true text: qsTr("Cancel") onClicked: { dccData.fingerprintController.stopEnroll() dialog.close() } } } } DisclaimerControl { id: disclaimerControl height: ListView.view.implicitHeight width: ListView.view.implicitWidth content: qsTr(`"Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS.`) onCancelClicked: { listview.currentIndex = 0 agreeCheckbox.checked = false } onAgreeClicked: { listview.currentIndex = 0 agreeCheckbox.checked = true } } } Connections { target: dccData.model function onEnrollResult(res) { switch(res) { case CharaMangerModel.Enroll_AuthSuccess: listview.currentIndex = 1 dialog.show() } } } } } ================================================ FILE: src/plugin-authentication/qml/AddIrisDialog.qml ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Dialogs import QtQuick.Window import QtQml.Models 2.1 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 import org.deepin.dcc.account.biometric 1.0 D.DialogWindow { id: dialog width: 360 height: 500 minimumWidth: width maximumWidth: minimumWidth modality: Qt.WindowModal title: qsTr("Enroll Iris") onVisibleChanged: function() { if (listview.currentIndex != 0 && !visible) { dccData.irisController.stopEnroll() } } D.ListView { id: listview implicitWidth: dialog.width - dialog.leftPadding - dialog.rightPadding implicitHeight: 500 - DS.Style.dialogWindow.titleBarHeight - DS.Style.dialogWindow.contentHMargin spacing: DS.Style.dialogWindow.contentHMargin model: itemModel orientation: ListView.Horizontal layoutDirection: Qt.LeftToRight snapMode: ListView.SnapOneItem boundsBehavior: Flickable.StopAtBounds highlightRangeMode: ListView.StrictlyEnforceRange highlightMoveDuration: 0 interactive: false ObjectModel { id: itemModel // 添加前 ColumnLayout { height: ListView.view.implicitHeight width: ListView.view.implicitWidth Label { Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: dialog.title } Item { Layout.preferredHeight: 50 } D.DciIcon { name: "iris_add" Layout.alignment: Qt.AlignCenter } Item { Layout.fillHeight: true } Label { Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter Layout.leftMargin: 10 Layout.rightMargin: 10 font: D.DTK.fontManager.t8 wrapMode: Text.WordWrap text: qsTr("Please keep an eye on the device and ensure that both eyes are within the collection area") horizontalAlignment: Text.AlignHCenter color: D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.7) : Qt.rgba(1, 1, 1, 0.7) } Item { Layout.fillHeight: true } Row { Layout.alignment: Qt.AlignCenter spacing: 0 CheckBox { id: agreeCheckbox text: qsTr("I have read and agree to the") } D.ToolButton { text: qsTr("Disclaimer") padding: 0 background: null font: agreeCheckbox.font textColor: D.Palette { normal { common: D.DTK.makeColor(D.Color.Highlight) } normalDark: normal hovered { common: D.DTK.makeColor(D.Color.Highlight).lightness(+30) } hoveredDark: hovered } onClicked: { listview.currentIndex = 3 } } } D.RecommandButton { spacing: 10 Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 0 Layout.leftMargin: 0 Layout.rightMargin: 0 Layout.fillWidth: true text: qsTr("Next") enabled: agreeCheckbox.checked onClicked: { dccData.irisController.startEnroll(); dialog.hide() } } } // 添加中 ColumnLayout { height: ListView.view.implicitHeight width: ListView.view.implicitWidth spacing: 0 Label { text: dialog.title Layout.alignment: Qt.AlignTop | Qt.AlignHCenter } Item { Layout.preferredHeight: 40 } Item { Layout.alignment: Qt.AlignCenter Layout.preferredWidth: 250 Layout.preferredHeight: 250 D.DciIcon { visible: dccData.irisController.addStage === CharaMangerModel.Processing anchors.centerIn: parent name: "iris_scan" sourceSize: Qt.size(250, 250) } Control { id: loaderControl visible: dccData.irisController.addStage === CharaMangerModel.Processing contentItem: D.DciIcon { id: shortProgressCircle anchors.fill: parent sourceSize: Qt.size(250, 250) name: "iris_scanning" palette: D.DTK.makeIconPalette(loaderControl.palette) } } // loaderControl 旋转动画 RotationAnimation { target: loaderControl property: "rotation" from: 0 to: 360 duration: 2000 running: loaderControl.visible loops: Animation.Infinite } } Item { visible: dccData.irisController.addStage === CharaMangerModel.Processing Layout.preferredHeight: 50 } Label { text: dccData.irisController.enrollIrisTips Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font: D.DTK.fontManager.t8 wrapMode: Text.WordWrap color: D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.7) : Qt.rgba(1, 1, 1, 0.7) } Item { Layout.fillHeight: true } } // 完成页面 ColumnLayout { height: ListView.view.implicitHeight width: ListView.view.implicitWidth Label { Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: dialog.title } Item { Layout.preferredHeight: 50 } D.DciIcon { name: dccData.irisController.enrollIrisSuccess ? "iris_success" : "iris_lose"; Layout.alignment: Qt.AlignCenter sourceSize: Qt.size(150, 150) } Item { Layout.preferredHeight: 30 } Label { visible: dccData.irisController.addStage === CharaMangerModel.Success || dccData.irisController.addStage === CharaMangerModel.Fail Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter wrapMode: Text.WordWrap color: D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1) text: dccData.irisController.addStage === CharaMangerModel.Success ? qsTr("Iris enrolled") : qsTr("Failed to enroll your iris") } Label { text: dccData.irisController.enrollIrisTips Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font: D.DTK.fontManager.t8 wrapMode: Text.WordWrap color: D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.7) : Qt.rgba(1, 1, 1, 0.7) } Item { Layout.fillHeight: true } RowLayout { id: successBtnLayout visible: dccData.irisController.addStage === CharaMangerModel.Success spacing: 10 Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 0 Layout.leftMargin: 0 Layout.rightMargin: 0 Button { Layout.fillWidth: true text: qsTr("Done") onClicked: { dccData.irisController.stopEnroll() dialog.close() } } } RowLayout { id: failedBtnLayout visible: dccData.irisController.addStage === CharaMangerModel.Fail spacing: 10 Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 0 Layout.leftMargin: 0 Layout.rightMargin: 0 Button { Layout.fillWidth: true text: qsTr("Cancel") onClicked: { dialog.close(); } } D.RecommandButton { Layout.fillWidth: true text: qsTr("Retry Enroll") onClicked: { listview.currentIndex = 0 } } } } // 免责声明 DisclaimerControl { id: disclaimerControl height: ListView.view.implicitHeight width: ListView.view.implicitWidth content: qsTr(`"Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS.`) onCancelClicked: { listview.currentIndex = 0 agreeCheckbox.checked = false } onAgreeClicked: { listview.currentIndex = 0 agreeCheckbox.checked = true } } } Connections { target: dccData.irisController function onAddStageChanged() { if (dccData.irisController.addStage === CharaMangerModel.Success) { listview.currentIndex = 2 } else if (dccData.irisController.addStage === CharaMangerModel.Fail) { listview.currentIndex = 2 } } } Connections { target: dccData.model function onTryStartInputIris(res) { listview.currentIndex = 1 dialog.show() } } } } ================================================ FILE: src/plugin-authentication/qml/Authentication.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 import QtQuick 2.15 import QtQuick.Controls 2.15 DccObject { id: authentication property bool hasFingerprint: false property bool hasChara: false name: "authentication" parentName: "accountsloginMethod" displayName: qsTr("Biometric Authentication") weight: 30 visible: (hasFingerprint || hasChara) && !DccApp.isTreeland() DccDBusInterface { property var driverInfo service: "org.deepin.dde.Authenticate1" path: "/org/deepin/dde/Authenticate1/CharaManger" inter: "org.deepin.dde.Authenticate1.CharaManger" connection: DccDBusInterface.SystemBus onDriverInfoChanged: { let jsonData = JSON.parse(driverInfo) let found = false for (var i = 0; i < jsonData.length; i++) { if (jsonData[i].CharaType !== 0) { authentication.hasChara = true return } } authentication.hasChara = found } } DccDBusInterface { property var defaultDevice service: "org.deepin.dde.Authenticate1" path: "/org/deepin/dde/Authenticate1/Fingerprint" inter: "org.deepin.dde.Authenticate1.Fingerprint" connection: DccDBusInterface.SystemBus onDefaultDeviceChanged: { authentication.hasFingerprint = defaultDevice !== "" } } } ================================================ FILE: src/plugin-authentication/qml/AuthenticationMain.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc.account.biometric 1.0 DccObject { id: root property var objParentName: "authentication" DccTitleObject { name: "BiometricAuthenticationTitle" parentName: objParentName weight: 10 displayName: qsTr("Biometric Authentication") } DccRepeater { id: rep model: [ { authTitle: qsTr("Face"), authDescription: qsTr("Up to 5 facial data can be entered"), authIcon: "user_biometric_face", authType: CharaMangerModel.Type_Face, available: dccData.model.faceDriverVaild, max: 5 }, { authTitle: qsTr("Fingerprint"), authDescription: qsTr("Identifying user identity through scanning fingerprints"), authIcon: "user_biometric_fingerprint", authType: CharaMangerModel.Type_Finger, available: dccData.model.fingerDriverVaild, max: 10 }, { authTitle: qsTr("Iris"), authDescription: qsTr("Identity recognition through iris scanning"), authIcon: "user_biometric_iris", authType: CharaMangerModel.Type_Iris, available: dccData.model.irisDriverVaild, max: 5 } ] property var listDatas: [dccData.model.facesList, dccData.model.thumbsList, dccData.model.irisList] delegate: DccObject { id: authenticationGroupView name: "authenticationGroupView" parentName: root.objParentName weight: 20 + index pageType: DccObject.Item visible: modelData.available page: DccGroupView {} DccObject { id: repeaterHeaderView name: "repeaterHeaderView" parentName: root.objParentName + "/authenticationGroupView" description: modelData.authDescription displayName: modelData.authTitle icon: modelData.authIcon backgroundType: DccObject.Normal property bool listVisible: false property real iconSize: 30 weight: 20 pageType: DccObject.Editor page: RowLayout { Control { id: control contentItem: D.DciIcon { Layout.rightMargin: 5 name: "arrow_ordinary_up" sourceSize: Qt.size(12, 12) theme: D.DTK.themeType palette: D.DTK.makeIconPalette(control.palette) rotation: repeaterHeaderView.listVisible ? 0 : 180 Behavior on rotation { NumberAnimation { duration: 100 } } } } } Connections { target: repeaterHeaderView.parentItem function onClicked() { repeaterHeaderView.listVisible = !repeaterHeaderView.listVisible; } } } DccRepeater { id: itemRep property var authType: modelData.authType model: repeaterHeaderView.listVisible ? rep.listDatas[index] : [] delegate: DccObject { name: modelData parentName: authenticationGroupView.name displayName: modelData pageType: DccObject.Item weight: 30 + index page: RowLayout { id: layout function requestRename(id, newName) { switch (itemRep.authType) { case CharaMangerModel.Type_Face: dccData.faceController.rename(id, newName); break; case CharaMangerModel.Type_Finger: dccData.fingerprintController.rename(id, newName); break; case CharaMangerModel.Type_Iris: dccData.irisController.rename(id, newName); break; } } function requestDelete(id) { switch (itemRep.authType) { case CharaMangerModel.Type_Face: dccData.faceController.remove(id); break; case CharaMangerModel.Type_Finger: dccData.fingerprintController.remove(id); break; case CharaMangerModel.Type_Iris: dccData.irisController.remove(id); break; } } Rectangle { id: textInputBackground property D.Palette alertBackgroundColor: DS.Style.edit.alertBackground Layout.leftMargin: 10 Layout.preferredHeight: DS.Style.itemDelegate.height Layout.maximumWidth: 200 Layout.minimumWidth: textInputItem.contentWidth + 16 radius: 4 color: alert.visible ? D.ColorSelector.alertBackgroundColor : "transparent" TextInput { id: textInputItem property int maxLength: 15 anchors.fill: parent anchors.leftMargin: 8 anchors.rightMargin: 8 text: modelData verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignLeft focus: false wrapMode: Text.NoWrap readOnly: true focusPolicy: Qt.NoFocus color: palette.text clip: true selectByMouse: true onTextEdited: { // 实时检测:过滤非法字符并限制长度 var filteredText = text; // 过滤非法字符(只允许字母、数字、中文、下划线) filteredText = filteredText.replace(/[^A-Za-z0-9\u4e00-\u9fa5_]/g, ""); // 检查是否超长 if (filteredText.length > maxLength) { alert.show(qsTr("No more than 15 characters")); filteredText = filteredText.slice(0, maxLength); } if (text !== filteredText) { text = filteredText; } } onEditingFinished: { if (!checkInputInvalid()) { text = modelData; textInputItem.text = Qt.binding(function() { return modelData }) return; } focus = false; if (modelData !== textInputItem.text) { layout.requestRename(modelData, text); } textInputItem.text = Qt.binding(function() { return modelData }) } onFocusChanged: { if (!focus) readOnly = true; } Keys.onEnterPressed: { focus = false; } Keys.onReturnPressed: { focus = false; } function checkInputInvalid() { var reg = /^[A-Za-z0-9\u4e00-\u9fa5_]+$/; var isValid = text.length === 0 || reg.test(textInputItem.text); var isOverLength = textInputItem.text.length > maxLength; var isEmpty = textInputItem.text.length === 0; var nameList = []; switch (itemRep.authType) { case CharaMangerModel.Type_Face: nameList = dccData.model.facesList; break; case CharaMangerModel.Type_Finger: nameList = dccData.model.thumbsList; break; case CharaMangerModel.Type_Iris: nameList = dccData.model.irisList; break; } var isDuplicate = nameList.includes(textInputItem.text) && textInputItem.text !== modelData; if (isEmpty) { alert.show(qsTr("The name cannot be empty")); } else if (!isValid && isOverLength) { alert.show(qsTr("Use letters, numbers and underscores only, and no more than 15 characters")); } else if (!isValid) { alert.show(qsTr("Use letters, numbers and underscores only")); } else if (isOverLength) { alert.show(qsTr("No more than 15 characters")); } else if (isDuplicate) { alert.show(qsTr("This name already exists")); } else { return true; } return false; } } } D.AlertToolTip { id: alert target: layout timeout: 3000 visible: false function show(msg) { text = msg; visible = true; } } Item { Layout.fillWidth: true } D.ToolButton { id: editButton visible: hoverHandler.hovered icon.name: "dcc_edit" background: Rectangle { color: "transparent" } onClicked: { textInputItem.readOnly = false; textInputItem.focus = true; } } D.ToolButton { id: deleteButton visible: hoverHandler.hovered icon.name: "dcc_delete" background: Rectangle { color: "transparent" } onClicked: { layout.requestDelete(modelData); } } HoverHandler { id: hoverHandler } } } } DccObject { name: root.objParentName + "FaceAuthentication" visible: repeaterHeaderView.listVisible && rep.listDatas[index].length < modelData.max parentName: authenticationGroupView.name pageType: DccObject.Item weight: 50 page: RowLayout { D.ToolButton { implicitHeight: DS.Style.itemDelegate.height Layout.leftMargin: 5 textColor: D.Palette { normal { common: D.DTK.makeColor(D.Color.Highlight) } normalDark: normal hovered { common: D.DTK.makeColor(D.Color.Highlight).lightness(+30) } hoveredDark: hovered } text: qsTr("Add a new %1 ...").arg(modelData.authTitle) font: D.DTK.fontManager.t6 background: Item {} onClicked: { startEnrollByType(modelData.authType); } function startEnrollByType(type) { switch (type) { case CharaMangerModel.Type_Face: addFaceDialogLoader.active = true; addFaceDialogLoader.item.show(); break; case CharaMangerModel.Type_Finger: addFingerDialogLoader.active = true; addFingerDialogLoader.item.show(); break; case CharaMangerModel.Type_Iris: addIrisDialogLoader.active = true; addIrisDialogLoader.item.show(); break; } } } } } Loader { id: addFaceDialogLoader active: false sourceComponent: AddFaceinfoDialog { onClosing: function (close) { addFaceDialogLoader.active = false; } } } Loader { id: addFingerDialogLoader active: false sourceComponent: AddFingerDialog { onClosing: function (close) { addFingerDialogLoader.active = false; } } } Loader { id: addIrisDialogLoader active: false sourceComponent: AddIrisDialog { onClosing: function (close) { addIrisDialogLoader.active = false; } } } } } } ================================================ FILE: src/plugin-authentication/qml/DisclaimerControl.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS ColumnLayout { id: control property alias content: label.text signal cancelClicked() signal agreeClicked() spacing: 5 Label { Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: qsTr("Disclaimer") font: D.DTK.fontManager.t5 } ScrollView { id: scrollView Layout.fillWidth: true Layout.fillHeight: true Layout.topMargin: 15 ScrollBar.horizontal.policy: ScrollBar.AlwaysOff contentWidth: scrollView.width D.Label { id: label width: scrollView.availableWidth wrapMode: Text.WordWrap font: D.DTK.fontManager.t8 } } RowLayout { spacing: 10 Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.topMargin: 0 Layout.leftMargin: 0 Layout.rightMargin: 0 Button { Layout.fillWidth: true text: qsTr("Cancel") onClicked: { control.cancelClicked() } } D.RecommandButton { Layout.fillWidth: true text: qsTr("Agree") onClicked: { control.agreeClicked() } } } } ================================================ FILE: src/plugin-bluetooth/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(BlueTooth_Name blueTooth) file(GLOB_RECURSE blueTooth_SRCS "operation/*.cpp" "operation/*.h" "operation/qrc/bluetooth.qrc" ) add_library(${BlueTooth_Name} MODULE ${blueTooth_SRCS} operation/bluetoothdevicemodel.h operation/bluetoothdevicemodel.cpp operation/bluetoothadaptersmodel.h operation/bluetoothadaptersmodel.cpp ) set(BlueTooth_Libraries ${DCC_FRAME_Library} ${QT_NS}::DBus ${DTK_NS}::Gui ) target_link_libraries(${BlueTooth_Name} PRIVATE ${BlueTooth_Libraries} ) dcc_install_plugin(NAME ${BlueTooth_Name} TARGET ${BlueTooth_Name}) ================================================ FILE: src/plugin-bluetooth/operation/bluetoothadapter.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "bluetoothadapter.h" #include "bluetoothdbusproxy.h" #include #include #include #include #include Q_LOGGING_CATEGORY(DdcBluetoothAdapter, "dcc-bluetooth-adapter") BluetoothAdapter::BluetoothAdapter(BluetoothDBusProxy *proxy, QObject *parent) : QObject(parent) , m_id("") , m_name("") , m_powered(false) , m_discovering(false) , m_discoverable(false) , m_myDevices(new BluetoothDeviceModel(this)) , m_otherDevices(new BluetoothDeviceModel(this)) , m_myDeviceVisible(false) , m_bluetoothDBusProxy(proxy) { } void BluetoothAdapter::setName(const QString &name) { if (name != m_name) { m_name = name; Q_EMIT nameChanged(name); } } void BluetoothAdapter::addDevice(const BluetoothDevice *device) { if (!deviceById(device->id())) { m_devicesId << device->id(); m_devices[device->id()] = device; connect(device, &BluetoothDevice::stateChanged, this, &BluetoothAdapter::onDeviceStateChanged, Qt::UniqueConnection); //打印配对设备信息,方便查看设备显示顺序 if (device->paired()) { qCDebug(DdcBluetoothAdapter) << "BluetoothAdapter add device " << device->name(); if (device->state() != BluetoothDevice::StateConnected) { m_myDevices->addDevice(const_cast(device)); } else { m_myDevices->insertItem(0, const_cast(device)); } setMyDeviceVisible(true); } else { qCDebug(DdcBluetoothAdapter) << "BluetoothAdapter add other device " << device->name(); m_otherDevices->insertItem(m_otherDevices->rowCount(), const_cast(device)); } Q_EMIT deviceAdded(device); } } void BluetoothAdapter::removeDevice(const QString &deviceId) { const BluetoothDevice *device = nullptr; device = deviceById(deviceId); if (device) { m_devicesId.removeOne(deviceId); m_devices.remove(deviceId); m_myDevices->removeDevice(deviceId); m_otherDevices->removeDevice(deviceId); setMyDeviceVisible(m_myDevices->rowCount()); Q_EMIT deviceRemoved(deviceId); } } void BluetoothAdapter::setPowered(bool powered, bool discovering) { if (!powered) { Q_EMIT closeDetailPage(); } if (powered != m_powered || (powered && m_powered && discovering != m_discovering)) { m_powered = powered; m_discovering = discovering; Q_EMIT poweredChanged(powered, discovering); } } void BluetoothAdapter::setAdapterPowered(const bool &powered) { // 关闭蓝牙之前删除历史蓝牙设备列表,确保完全是删除后再设置开关 if (powered) { m_bluetoothDBusProxy->SetAdapterPowered(QDBusObjectPath(id()), true, this, SLOT(onSetAdapterPowered()), SLOT(onSetAdapterPoweredError())); } else { m_bluetoothDBusProxy->ClearUnpairedDevice(this, SLOT(onClearUnpairedDevice())); } } void BluetoothAdapter::onClearUnpairedDevice() { m_bluetoothDBusProxy->SetAdapterPowered(QDBusObjectPath(id()), false, this, SLOT(onSetAdapterPowered()), SLOT(onSetAdapterPoweredError())); } void BluetoothAdapter::onSetAdapterPowered() { Q_EMIT loadStatus(); } void BluetoothAdapter::onSetAdapterPoweredError() { Q_EMIT poweredChanged(powered(), discovering()); } void BluetoothAdapter::onDeviceStateChanged() { BluetoothDevice *device = qobject_cast(sender()); if (device) { updateDeviceData(device); } } bool BluetoothAdapter::otherDeviceVisible() const { return m_otherDeviceVisible; } void BluetoothAdapter::setOtherDeviceVisible(bool newOtherDeviceVisible) { m_otherDeviceVisible = newOtherDeviceVisible; } bool BluetoothAdapter::myDeviceVisible() const { return m_myDeviceVisible; } void BluetoothAdapter::setMyDeviceVisible(bool newMyDeviceVisible) { qDebug() << "BluetoothAdapter setMyDeviceVisible :" << newMyDeviceVisible << m_myDeviceVisible; if (newMyDeviceVisible != m_myDeviceVisible) { m_myDeviceVisible = newMyDeviceVisible; Q_EMIT myDeviceVisibleChanged(m_id); } } BluetoothDeviceModel *BluetoothAdapter::otherDevices() const { return m_otherDevices; } void BluetoothAdapter::updateDeviceData(BluetoothDevice *device) { if (device->paired()) { qCDebug(DdcBluetoothAdapter) << "BluetoothAdapter add device " << device->name(); m_otherDevices->removeDevice(device->id()); if (m_myDevices->containDevice(device)) { m_myDevices->updateData(device); } else { if (device->state() != BluetoothDevice::StateConnected) { m_myDevices->addDevice(const_cast(device)); } else { m_myDevices->insertItem(0, const_cast(device)); } setMyDeviceVisible(true); } } else { qCDebug(DdcBluetoothAdapter) << "BluetoothAdapter add other device " << device->name(); m_myDevices->removeDevice(device->id()); if (m_otherDevices->containDevice(device)) { m_otherDevices->updateData(device); } else { m_otherDevices->insertItem(m_otherDevices->rowCount(), const_cast(device)); } setMyDeviceVisible(m_myDevices->rowCount()); } } void BluetoothAdapter::setdisplaySwitch(bool displaySwitch) { m_otherDevices->setDisplaySwitch(displaySwitch); m_otherDevices->updateAllData(); } BluetoothDeviceModel *BluetoothAdapter::myDevices() const { return m_myDevices; } void BluetoothAdapter::setDiscoverabled(const bool discoverable) { if (m_discoverable == discoverable) { return; } m_discoverable = discoverable; Q_EMIT discoverableChanged(discoverable); } QMap BluetoothAdapter::devices() const { return m_devices; } QList BluetoothAdapter::devicesId() const { return m_devicesId; } const BluetoothDevice *BluetoothAdapter::deviceById(const QString &id) const { return m_devices.keys().contains(id) ? m_devices[id] : nullptr; } void BluetoothAdapter::setId(const QString &id) { m_id = id; m_myDevices->setAdapterId(id); m_otherDevices->setAdapterId(id); } void BluetoothAdapter::inflate(const QJsonObject &obj) { const QString path = obj["Path"].toString(); const QString alias = obj["Alias"].toString(); const bool powered = obj["Powered"].toBool(); const bool discovering = obj["Discovering"].toBool(); const bool discovered = obj["Discoverable"].toBool(); setDiscoverabled(discovered); setId(path); setName(alias); setPowered(powered, discovering); QDBusObjectPath dPath(path); m_bluetoothDBusProxy->GetDevices(dPath, this, SLOT(onGetDevices(QString))); } void BluetoothAdapter::inflateDevice(BluetoothDevice *device, const QJsonObject &deviceObj) { const QString id = deviceObj["Path"].toString(); const QString addr = deviceObj["Address"].toString(); const QString alias = deviceObj["Alias"].toString(); const QString name = deviceObj["Name"].toString(); const bool paired = deviceObj["Paired"].toBool(); const BluetoothDevice::State state = BluetoothDevice::State(deviceObj["State"].toInt()); const bool connectState = deviceObj["ConnectState"].toBool(); const QString icon = deviceObj["Icon"].toString(); const int battery = deviceObj["Battery"].toInt(); // if (icon == "audio-card") { // m_connectingAudioDevice = (BluetoothDevice::StateAvailable == state); // } // FIXME: If the name and alias of the Bluetooth device are both empty, it will not be updated by default. // To solve the problem of blank device name display. if (alias.isEmpty() && name.isEmpty()) return; device->setId(id); device->setAddress(addr); device->setName(name); device->setAlias(alias); device->setPaired(paired); device->setState(state, connectState); device->setDeviceType(icon); device->setBattery(battery); } void BluetoothAdapter::onGetDevices(QString replyStr) { QStringList tmpList; QJsonDocument doc = QJsonDocument::fromJson(replyStr.toUtf8()); QJsonArray arr = doc.array(); for (QJsonValue val : arr) { const QString id = val.toObject()["Path"].toString(); const QString name = val.toObject()["Name"].toString(); const BluetoothDevice *result = deviceById(id); BluetoothDevice *device = const_cast(result); if (!device) { device = new BluetoothDevice(this); } else { if (device->name() != name) removeDevice(device->id()); } inflateDevice(device, val.toObject()); addDevice(device); tmpList << id; } for (const BluetoothDevice *device : devices()) { if (!tmpList.contains(device->id())) { removeDevice(device->id()); BluetoothDevice *target = const_cast(device); if (target) target->deleteLater(); } } } ================================================ FILE: src/plugin-bluetooth/operation/bluetoothadapter.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCC_BLUETOOTH_ADAPTER_H #define DCC_BLUETOOTH_ADAPTER_H #include #include "bluetoothdevice.h" #include "bluetoothdevicemodel.h" class QJsonObject; class BluetoothDBusProxy; class BluetoothAdapter : public QObject { Q_OBJECT public: explicit BluetoothAdapter(BluetoothDBusProxy *proxy, QObject *parent = 0); inline QString name() const { return m_name; } void setName(const QString &name); inline QString id() const { return m_id; } void setId(const QString &id); QMap devices() const; QList devicesId() const; const BluetoothDevice *deviceById(const QString &id) const; inline bool powered() const { return m_powered; } void setPowered(bool powered, bool discovering); void setAdapterPowered(const bool &powered); inline bool discoverabled() const { return m_discoverable; } void setDiscoverabled(const bool discoverable); inline bool discovering() const { return m_discovering; } void inflate(const QJsonObject &obj); void inflateDevice(BluetoothDevice *device, const QJsonObject &deviceObj); BluetoothDeviceModel *myDevices() const; BluetoothDeviceModel *otherDevices() const; void updateDeviceData(BluetoothDevice *device); void setdisplaySwitch(bool displaySwitch); bool myDeviceVisible() const; void setMyDeviceVisible(bool newMyDeviceVisible); bool otherDeviceVisible() const; void setOtherDeviceVisible(bool newOtherDeviceVisible); public Q_SLOTS: void addDevice(const BluetoothDevice *device); void removeDevice(const QString &deviceId); void onGetDevices(QString replyStr); Q_SIGNALS: void nameChanged(const QString &name) const; void deviceAdded(const BluetoothDevice *device) const; void deviceRemoved(const QString &deviceId) const; void poweredChanged(const bool &powered, const bool &discovering) const; void loadStatus() const; void discoverableChanged(const bool &discoverable) const; void closeDetailPage() const; void myDeviceVisibleChanged(const QString &id); private Q_SLOTS: void onClearUnpairedDevice(); void onSetAdapterPowered(); void onSetAdapterPoweredError(); void onDeviceStateChanged(); private: QString m_id; QString m_name; bool m_powered; bool m_discovering; bool m_discoverable; QMap m_devices; BluetoothDeviceModel* m_myDevices; BluetoothDeviceModel* m_otherDevices; bool m_myDeviceVisible = false; bool m_otherDeviceVisible = false; //按序存放设备id,确定设备显示顺序 QList m_devicesId; BluetoothDBusProxy *m_bluetoothDBusProxy; }; #endif // DCC_BLUETOOTH_ADAPTER_H ================================================ FILE: src/plugin-bluetooth/operation/bluetoothadaptersmodel.cpp ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "bluetoothadaptersmodel.h" BlueToothAdaptersModel::BlueToothAdaptersModel(QObject *parent) : QAbstractListModel(parent) { } void BlueToothAdaptersModel::updateAdapter(BluetoothAdapter *adapter) { for(int index = 0; index < m_bluetoothAdapterList.count(); index++ ) { const BluetoothAdapter *item = m_bluetoothAdapterList.at(index); if (item->id() == adapter->id()) { QModelIndex modelIndex = createIndex(index, 0); qDebug() << "updateAdapter data: " << adapter->name() << adapter->discovering(); emit dataChanged(modelIndex, modelIndex, {}); return; } } addAdapter(adapter); } int BlueToothAdaptersModel::rowCount(const QModelIndex &parent) const { // For list models only the root node (an invalid parent) should return the list's size. For all // other (valid) parents, rowCount() should return 0 so that it does not become a tree model. if (parent.isValid()) return 0; return m_bluetoothAdapterList.count(); } QVariant BlueToothAdaptersModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (index.row() < 0 || index.row() >= m_bluetoothAdapterList.count()) return QVariant(); const BluetoothAdapter* bluetoothAdapterData = m_bluetoothAdapterList[index.row()]; switch (role) { case Name: return bluetoothAdapterData->name(); case Id: return bluetoothAdapterData->id(); case Powered: return bluetoothAdapterData->powered(); case Discovering: return bluetoothAdapterData->discovering(); case Discoverabled: return bluetoothAdapterData->discoverabled(); case NameDetail: return bluetoothAdapterData->powered() ? tr("Bluetooth is turned on, and the name is displayed as \"%1\"").arg(bluetoothAdapterData->name()) : tr("Bluetooth is turned off, and the name is displayed as \"%1\"").arg(bluetoothAdapterData->name()) ; case MyDevice: return QVariant::fromValue(bluetoothAdapterData->myDevices()); case OtherDevice: return QVariant::fromValue(bluetoothAdapterData->otherDevices()); case MyDeviceVisiable: return bluetoothAdapterData->myDeviceVisible() && bluetoothAdapterData->powered(); case OtherDeviceVisiable: return bluetoothAdapterData->otherDeviceVisible(); default: break; } return QVariant(); } void BlueToothAdaptersModel::addAdapter(BluetoothAdapter* adapter) { int row = rowCount(); beginInsertRows(QModelIndex(), row, row); m_bluetoothAdapterList.append(adapter); endInsertRows(); connect(adapter, &BluetoothAdapter::myDeviceVisibleChanged, this, &BlueToothAdaptersModel::onUpdateAdapter); } void BlueToothAdaptersModel::removeAdapter(const QString &adapterId) { for(int index = 0; index < m_bluetoothAdapterList.count(); index++ ) { const BluetoothAdapter *item = m_bluetoothAdapterList.at(index); if (item->id() == adapterId) { removeRows(index, 1); return; } } } bool BlueToothAdaptersModel::insertRows(int row, int count, const QModelIndex &parent) { beginInsertRows(parent, row, row + count - 1); // FIXME: Implement me! endInsertRows(); return true; } bool BlueToothAdaptersModel::removeRows(int row, int count, const QModelIndex &parent) { beginRemoveRows(parent, row, row + count - 1); disconnect(m_bluetoothAdapterList[row], &BluetoothAdapter::myDeviceVisibleChanged, this, &BlueToothAdaptersModel::onUpdateAdapter); m_bluetoothAdapterList.remove(row); endRemoveRows(); return true; } void BlueToothAdaptersModel::setDisplaySwitch(bool newDisplaySwitch) { for (auto item : m_bluetoothAdapterList) { item->setdisplaySwitch(newDisplaySwitch); } } void BlueToothAdaptersModel::onUpdateAdapter(const QString &adapterId) { for(int index = 0; index < m_bluetoothAdapterList.count(); index++ ) { const BluetoothAdapter *item = m_bluetoothAdapterList.at(index); if (item->id() == adapterId) { QModelIndex modelIndex = createIndex(index, 0); emit dataChanged(modelIndex, modelIndex, {}); return; } } } ================================================ FILE: src/plugin-bluetooth/operation/bluetoothadaptersmodel.h ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef BLUETOOTHADAPTERSMODEL_H #define BLUETOOTHADAPTERSMODEL_H #include #include "bluetoothadapter.h" class BlueToothAdaptersModel : public QAbstractListModel { Q_OBJECT public: enum bluethoothAdapterRoles { Name = Qt::UserRole + 1, Id, Powered, Discovering, Discoverabled, NameDetail, MyDevice, OtherDevice, MyDeviceVisiable, OtherDeviceVisiable }; explicit BlueToothAdaptersModel(QObject *parent = nullptr); void updateAdapter(BluetoothAdapter* adapter); // Basic functionality: int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; void addAdapter(BluetoothAdapter* adapter); void removeAdapter(const QString &adapterId); // Add data: bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; // Remove data: bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; QHash roleNames() const override { QHash roles; roles[Name] = "name"; roles[Id] = "id"; roles[Powered] = "powered"; roles[Discovering] = "discovering"; roles[Discoverabled] = "discoverabled"; roles[NameDetail] = "nameDetail"; roles[MyDevice] = "myDevice"; roles[OtherDevice] = "otherDevice"; roles[MyDeviceVisiable] = "myDeviceVisiable"; roles[OtherDeviceVisiable] = "otherDeviceVisiable"; return roles; } public Q_SLOTS: void setDisplaySwitch(bool newDisplaySwitch); void onUpdateAdapter(const QString & adapterId); private: QList m_bluetoothAdapterList; }; #endif // BLUETOOTHADAPTERSMODEL_H ================================================ FILE: src/plugin-bluetooth/operation/bluetoothdbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "bluetoothdbusproxy.h" #include #include #include #include const static QString BluetoothService = "org.deepin.dde.Bluetooth1"; const static QString BluetoothPath = "/org/deepin/dde/Bluetooth1"; const static QString BluetoothInterface = "org.deepin.dde.Bluetooth1"; const static QString AirPlaneModeService = "org.deepin.dde.AirplaneMode1"; const static QString AirPlaneModePath = "/org/deepin/dde/AirplaneMode1"; const static QString AirPlaneModeInterface = "org.deepin.dde.AirplaneMode1"; BluetoothDBusProxy::BluetoothDBusProxy(QObject *parent) : QObject(parent) , m_bluetoothInter(new DDBusInterface(BluetoothService, BluetoothPath, BluetoothInterface, QDBusConnection::sessionBus(), this)) , m_airPlaneModeInter(new DDBusInterface(AirPlaneModeService, AirPlaneModePath, AirPlaneModeInterface, QDBusConnection::systemBus(), this)) { } void BluetoothDBusProxy::showBluetoothTransDialog(const QString &address, const QStringList &files) { QDBusMessage message = QDBusMessage::createMethodCall("com.deepin.filemanager.filedialog", "/com/deepin/filemanager/filedialogmanager", "com.deepin.filemanager.filedialogmanager", "showBluetoothTransDialog"); message << address << files; QDBusConnection::sessionBus().asyncCall(message); } bool BluetoothDBusProxy::bluetoothIsValid() { return m_bluetoothInter->isValid(); } // Bluetooth PROPERTY uint BluetoothDBusProxy::state() { return qvariant_cast(m_bluetoothInter->property("State")); } bool BluetoothDBusProxy::transportable() { return qvariant_cast(m_bluetoothInter->property("Transportable")); } bool BluetoothDBusProxy::canSendFile() { return qvariant_cast(m_bluetoothInter->property("CanSendFile")); } bool BluetoothDBusProxy::displaySwitch() { return qvariant_cast(m_bluetoothInter->property("DisplaySwitch")); } void BluetoothDBusProxy::setDisplaySwitch(bool value) { m_bluetoothInter->setProperty("DisplaySwitch", QVariant::fromValue(value)); } // AirplaneMode PROPERTY bool BluetoothDBusProxy::enabled() { return qvariant_cast(m_airPlaneModeInter->property("Enabled")); } void BluetoothDBusProxy::ClearUnpairedDevice() { m_bluetoothInter->asyncCall(QStringLiteral("ClearUnpairedDevice")); } void BluetoothDBusProxy::ClearUnpairedDevice(QObject *receiver, const char *member) { QList argumentList; m_bluetoothInter->callWithCallback(QStringLiteral("ClearUnpairedDevice"), argumentList, receiver, member); } void BluetoothDBusProxy::SetAdapterPowered(const QDBusObjectPath &adapter, bool powered) { m_bluetoothInter->asyncCall(QStringLiteral("SetAdapterPowered"), QVariant::fromValue(adapter), QVariant::fromValue(powered)); } void BluetoothDBusProxy::SetAdapterPowered(const QDBusObjectPath &adapter, bool powered, QObject *receiver, const char *member, const char *errorSlot) { QList argumentList; argumentList << QVariant::fromValue(adapter); argumentList << QVariant::fromValue(powered); m_bluetoothInter->callWithCallback(QStringLiteral("SetAdapterPowered"), argumentList, receiver, member, errorSlot); } void BluetoothDBusProxy::DisconnectDevice(const QDBusObjectPath &device) { m_bluetoothInter->asyncCall(QStringLiteral("DisconnectDevice"), QVariant::fromValue(device)); } void BluetoothDBusProxy::RemoveDevice(const QDBusObjectPath &adapter, const QDBusObjectPath &device) { m_bluetoothInter->asyncCall(QStringLiteral("RemoveDevice"), QVariant::fromValue(adapter), QVariant::fromValue(device)); } void BluetoothDBusProxy::ConnectDevice(const QDBusObjectPath &device, const QDBusObjectPath &adapter) { m_bluetoothInter->asyncCall(QStringLiteral("ConnectDevice"), QVariant::fromValue(device), QVariant::fromValue(adapter)); } QString BluetoothDBusProxy::GetDevices(const QDBusObjectPath &adapter) { return QDBusPendingReply(m_bluetoothInter->asyncCall(QStringLiteral("GetDevices"), QVariant::fromValue(adapter))); } void BluetoothDBusProxy::GetDevices(const QDBusObjectPath &adapter, QObject *receiver, const char *member) { QList argumentList; argumentList << QVariant::fromValue(adapter); m_bluetoothInter->callWithCallback(QStringLiteral("GetDevices"), argumentList, receiver, member); } QString BluetoothDBusProxy::GetAdapters() { return QDBusPendingReply(m_bluetoothInter->asyncCall(QStringLiteral("GetAdapters"))); } void BluetoothDBusProxy::SetAdapterAlias(const QDBusObjectPath &adapter, const QString &alias) { m_bluetoothInter->asyncCall(QStringLiteral("SetAdapterAlias"), QVariant::fromValue(adapter), QVariant::fromValue(alias)); } void BluetoothDBusProxy::SetDeviceAlias(const QDBusObjectPath &device, const QString &alias) { m_bluetoothInter->asyncCall(QStringLiteral("SetDeviceAlias"), QVariant::fromValue(device), QVariant::fromValue(alias)); } void BluetoothDBusProxy::RequestDiscovery(const QDBusObjectPath &adapter) { m_bluetoothInter->asyncCall(QStringLiteral("RequestDiscovery"), QVariant::fromValue(adapter)); } void BluetoothDBusProxy::Confirm(const QDBusObjectPath &device, bool accept) { m_bluetoothInter->asyncCall(QStringLiteral("Confirm"), QVariant::fromValue(device), QVariant::fromValue(accept)); } void BluetoothDBusProxy::SetAdapterDiscovering(const QDBusObjectPath &adapter, bool discovering) { m_bluetoothInter->asyncCall(QStringLiteral("SetAdapterDiscovering"), QVariant::fromValue(adapter), QVariant::fromValue(discovering)); } void BluetoothDBusProxy::SetAdapterDiscoverable(const QDBusObjectPath &adapter, bool discoverable) { m_bluetoothInter->asyncCall(QStringLiteral("SetAdapterDiscoverable"), QVariant::fromValue(adapter), QVariant::fromValue(discoverable)); } ================================================ FILE: src/plugin-bluetooth/operation/bluetoothdbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef BLUETOOTHDBUSPROXY_H #define BLUETOOTHDBUSPROXY_H #include #include class QDBusInterface; class QDBusMessage; class QDBusObjectPath; using Dtk::Core::DDBusInterface; class BluetoothDBusProxy : public QObject { Q_OBJECT public: explicit BluetoothDBusProxy(QObject *parent = nullptr); void showBluetoothTransDialog(const QString &address, const QStringList &files); // Bluetooth bool bluetoothIsValid(); Q_PROPERTY(uint State READ state NOTIFY StateChanged) uint state(); Q_PROPERTY(bool Transportable READ transportable NOTIFY TransportableChanged) bool transportable(); Q_PROPERTY(bool CanSendFile READ canSendFile NOTIFY CanSendFileChanged) bool canSendFile(); Q_PROPERTY(bool DisplaySwitch READ displaySwitch WRITE setDisplaySwitch NOTIFY DisplaySwitchChanged) bool displaySwitch(); void setDisplaySwitch(bool value); // AirplaneMode Q_PROPERTY(bool Enabled READ enabled NOTIFY EnabledChanged) bool enabled(); Q_SIGNALS: // SIGNALS // Bluetooth void AdapterAdded(const QString &adapterJSON); void AdapterRemoved(const QString &adapterJSON); void AdapterPropertiesChanged(const QString &adapterJSON); void DeviceAdded(const QString &devJSON); void DeviceRemoved(const QString &devJSON); void DevicePropertiesChanged(const QString &devJSON); void Cancelled(const QDBusObjectPath &device); void RequestAuthorization(const QDBusObjectPath &device); void RequestConfirmation(const QDBusObjectPath &device, const QString &passkey); void RequestPasskey(const QDBusObjectPath &device); void RequestPinCode(const QDBusObjectPath &device); void DisplayPasskey(const QDBusObjectPath &device, uint passkey, uint entered); void DisplayPinCode(const QDBusObjectPath &device, const QString &pinCode); // property changed signals void StateChanged(uint value) const; void TransportableChanged(bool value) const; void CanSendFileChanged(bool value) const; void DisplaySwitchChanged(bool value) const; // AirplaneMode // property changed signals void EnabledChanged(bool value) const; public Q_SLOTS: // METHODS // Bluetooth void ClearUnpairedDevice(); void ClearUnpairedDevice(QObject *receiver, const char *member); void SetAdapterPowered(const QDBusObjectPath &adapter, bool powered); void SetAdapterPowered(const QDBusObjectPath &adapter, bool powered, QObject *receiver, const char *member, const char *errorSlot); void DisconnectDevice(const QDBusObjectPath &device); void RemoveDevice(const QDBusObjectPath &adapter, const QDBusObjectPath &device); void ConnectDevice(const QDBusObjectPath &device, const QDBusObjectPath &adapter); QString GetDevices(const QDBusObjectPath &adapter); void GetDevices(const QDBusObjectPath &adapter, QObject *receiver, const char *member); QString GetAdapters(); void SetAdapterAlias(const QDBusObjectPath &adapter, const QString &alias); void SetDeviceAlias(const QDBusObjectPath &device, const QString &alias); void RequestDiscovery(const QDBusObjectPath &adapter); void Confirm(const QDBusObjectPath &device, bool accept); void SetAdapterDiscovering(const QDBusObjectPath &adapter, bool discovering); void SetAdapterDiscoverable(const QDBusObjectPath &adapter, bool discoverable); private: DDBusInterface *m_bluetoothInter; DDBusInterface *m_airPlaneModeInter; }; #endif // BLUETOOTHDBUSPROXY_H ================================================ FILE: src/plugin-bluetooth/operation/bluetoothdevice.cpp ================================================ // SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "bluetoothdevice.h" BluetoothDevice::BluetoothDevice(QObject *parent) : QObject(parent) , m_id("") , m_name("") , m_paired(false) , m_trusted(false) , m_connecting(false) , m_connectState(false) , m_state(StateUnavailable) { } void BluetoothDevice::setId(const QString &id) { m_id = id; } void BluetoothDevice::setAddress(const QString &addr) { m_address = addr; } void BluetoothDevice::setName(const QString &name) { if (name != m_name) { m_name = name; Q_EMIT nameChanged(name); } } void BluetoothDevice::setAlias(const QString &alias) { if (alias != m_alias) { m_alias = alias; Q_EMIT aliasChanged(alias); } } void BluetoothDevice::setPaired(bool paired) { if (paired != m_paired) { m_paired = paired; Q_EMIT pairedChanged(paired); } } void BluetoothDevice::setState(const State &state, bool connectState) { if ((state != m_state) || (connectState != m_connectState)) { m_state = state; m_connectState = connectState; Q_EMIT stateChanged(state, connectState); } } void BluetoothDevice::setTrusted(bool trusted) { if (trusted != m_trusted) { m_trusted = trusted; Q_EMIT trustedChanged(trusted); } } void BluetoothDevice::setConnecting(bool connecting) { if (connecting != m_connecting) { m_connecting = connecting; Q_EMIT connectingChanged(connecting); } } void BluetoothDevice::setBattery(int battery) { if (m_battery != battery) { m_battery = battery; Q_EMIT batteryChanged(battery); } } void BluetoothDevice::setDeviceType(const QString &deviceType) { m_deviceType = deviceType2Icon.contains(deviceType) ? deviceType2Icon[deviceType] : "bluetooth_other"; } bool BluetoothDevice::canSendFile() const { // 目前pc和手机可以发送蓝牙文件 if ((m_deviceType == "bluetooth_pc") || (m_deviceType == "bluetooth_phone")) { return true; } return false; } QDebug &operator<<(QDebug &stream, const BluetoothDevice *device) { stream << "BluetoothDevice name:" << device->name() << " paired:" << device->paired() << " state:" << device->state(); return stream; } ================================================ FILE: src/plugin-bluetooth/operation/bluetoothdevice.h ================================================ // SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCC_BLUETOOTH_DEVICE_H #define DCC_BLUETOOTH_DEVICE_H #include #include // INFO: when meet problem, view the link underline // https://github.com/bluez/bluez/blob/master/src/dbus-common.c#L53-L115 static const QMap deviceType2Icon { {"unknow","bluetooth_other"}, {"computer","bluetooth_pc"}, {"phone","bluetooth_phone"}, {"video-display","bluetooth_vidicon"}, {"multimedia-player","bluetooth_tv"}, {"scanner","bluetooth_scaner"}, {"input-keyboard","bluetooth_keyboard"}, {"input-mouse","bluetooth_mouse"}, {"input-gaming","bluetooth_other"}, {"input-tablet","bluetooth_touchpad"}, {"audio-card","bluetooth_pheadset"}, {"audio-headset","bluetooth_pheadset"}, {"audio-headphones","bluetooth_headset"}, {"network-wireless","bluetooth_lan"}, {"camera-video","bluetooth_vidicon"}, {"printer","bluetooth_print"}, {"camera-photo","bluetooth_camera"}, {"modem","bluetooth_other"} }; class BluetoothDevice : public QObject { Q_OBJECT public: enum State { StateUnavailable = 0, StateAvailable = 1, StateConnected = 2, StateDisconnecting = 3 }; Q_ENUM(State) public: explicit BluetoothDevice(QObject *parent = nullptr); inline QString id() const { return m_id; } void setId(const QString &id); inline int battery() const { return m_battery; } void setBattery(const int battery); inline QString address() const { return m_address; } void setAddress(const QString &addr); inline QString name() const { return m_name; } void setName(const QString &name); inline QString alias() const { return m_alias; } void setAlias(const QString &alias); inline bool paired() const { return m_paired; } void setPaired(bool paired); inline State state() const { return m_state; } void setState(const State &state, bool connectState); inline bool trusted() const { return m_trusted; } void setTrusted(bool trusted); inline bool connecting() const { return m_connecting; } void setConnecting(bool connecting); inline QString deviceType() const { return m_deviceType; } void setDeviceType(const QString &deviceType); inline bool connectState() const { return m_connectState; } bool canSendFile() const; Q_SIGNALS: void nameChanged(const QString &name) const; void aliasChanged(const QString &alias) const; void pairedChanged(const bool &paired) const; void stateChanged(const State &state, bool paired) const; void trustedChanged(const bool trusted) const; void connectingChanged(const bool &connecting) const; void batteryChanged(const int battery) const; private: QString m_id; QString m_address; QString m_name; QString m_alias; QString m_deviceType; bool m_paired; bool m_trusted; bool m_connecting; bool m_connectState; State m_state; int m_battery = 0; }; QDebug &operator<<(QDebug &stream, const BluetoothDevice *device); #endif // DCC_BLUETOOTH_DEVICE_H ================================================ FILE: src/plugin-bluetooth/operation/bluetoothdevicemodel.cpp ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "bluetoothdevicemodel.h" BluetoothDeviceModel::BluetoothDeviceModel(QObject *parent) : QAbstractListModel(parent) , m_displaySwitch(false) { } void BluetoothDeviceModel::addDevice(BluetoothDevice *device) { int row = rowCount(); beginInsertRows(QModelIndex(), row, row); m_deviceData.append(device); endInsertRows(); } void BluetoothDeviceModel::removeDevice(const QString &deviceId) { for (int index = 0; index < m_deviceData.count(); index++) { const BluetoothDevice *item = m_deviceData.at(index); if (item->id() == deviceId) { removeRows(index, 1); return; } } } int BluetoothDeviceModel::deviceIndex(const QString &deviceId) { for (int index = 0; index < m_deviceData.count(); index++) { if (m_deviceData.at(index)->id() == deviceId) { return index; } } return -1; } bool BluetoothDeviceModel::containDevice(BluetoothDevice *device) { return m_deviceData.contains(device); } void BluetoothDeviceModel::updateData(BluetoothDevice *device) { for (int index = 0; index < m_deviceData.count(); index++) { const BluetoothDevice *item = m_deviceData.at(index); if (item->id() == device->id()) { bool isConnected = (device->state() == BluetoothDevice::StateConnected && device->connectState()); if (isConnected && index > 0) { moveToTop(device->id()); QModelIndex modelIndex = createIndex(0, 0); emit dataChanged(modelIndex, modelIndex, {Name, ConnectStatus, ConnectStatusText, Battery, BatteryIconPath}); } else if (!isConnected) { reorderDevices(); } else { QModelIndex modelIndex = createIndex(index, 0); emit dataChanged(modelIndex, modelIndex, {Name, ConnectStatus, ConnectStatusText, Battery, BatteryIconPath}); } return; } } qDebug() << " updateAdapter new device : " << device->id(); addDevice(device); reorderDevices(); } void BluetoothDeviceModel::updateAllData() { for (int index = 0; index < m_deviceData.count(); index++) { QModelIndex modelIndex = createIndex(index, 0); emit dataChanged(modelIndex, modelIndex, {}); } } void BluetoothDeviceModel::moveToTop(const QString &deviceId) { int currentIndex = deviceIndex(deviceId); if (currentIndex <= 0) { return; } beginMoveRows(QModelIndex(), currentIndex, currentIndex, QModelIndex(), 0); BluetoothDevice* device = m_deviceData.takeAt(currentIndex); m_deviceData.prepend(device); endMoveRows(); } void BluetoothDeviceModel::reorderDevices() { QList connectedDevices; QList disconnectedDevices; for (int i = 0; i < m_deviceData.count(); i++) { BluetoothDevice* device = m_deviceData.at(i); if (device->state() == BluetoothDevice::StateConnected && device->connectState()) { connectedDevices.append(device); } else { disconnectedDevices.append(device); } } if (connectedDevices.isEmpty() || disconnectedDevices.isEmpty()) { updateAllData(); return; } QList newOrder; newOrder.append(connectedDevices); newOrder.append(disconnectedDevices); bool orderChanged = false; if (newOrder.count() == m_deviceData.count()) { for (int i = 0; i < newOrder.count(); i++) { if (newOrder.at(i) != m_deviceData.at(i)) { orderChanged = true; break; } } } else { orderChanged = true; } if (orderChanged) { beginResetModel(); m_deviceData = newOrder; endResetModel(); } else { updateAllData(); } } int BluetoothDeviceModel::rowCount(const QModelIndex &parent) const { // For list models only the root node (an invalid parent) should return the list's size. For all // other (valid) parents, rowCount() should return 0 so that it does not become a tree model. if (parent.isValid()) return 0; return m_deviceData.count(); } QVariant BluetoothDeviceModel::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() >= m_deviceData.count()) return QVariant(); const BluetoothDevice* bluetoothDeviceData = m_deviceData[index.row()]; switch (role) { case Name: return bluetoothDeviceData->alias().isEmpty() ? bluetoothDeviceData->name() : bluetoothDeviceData->alias(); case Id: return bluetoothDeviceData->id(); case Visiable: return displaySwitch() ? true : !bluetoothDeviceData->name().isEmpty(); case IconName: return bluetoothDeviceData->deviceType(); case ConnectStatusText: return getConnectStatusText((int)bluetoothDeviceData->state(), bluetoothDeviceData->connectState()); case ConnectStatus: return getConnectStatus(bluetoothDeviceData->state(), bluetoothDeviceData->connectState()); case AdapterId: return adapterId(); case Battery: return QString("%1%").arg(bluetoothDeviceData->battery()); case BatteryIconPath: return getBatteryIconPath(bluetoothDeviceData->battery()); case CanSendFile: return bluetoothDeviceData->canSendFile(); case Address: return bluetoothDeviceData->address(); default: break; } return QVariant(); } void BluetoothDeviceModel::insertItem(int index, BluetoothDevice *device) { if (index < 0 || index > m_deviceData.size()) return; // 确保索引有效 beginInsertRows(QModelIndex(), index, index); m_deviceData.insert(index, device); endInsertRows(); } bool BluetoothDeviceModel::removeRows(int row, int count, const QModelIndex &parent) { beginRemoveRows(parent, row, row + count - 1); m_deviceData.remove(row); endRemoveRows(); return true; } QString BluetoothDeviceModel::adapterId() const { return m_adapterId; } void BluetoothDeviceModel::setAdapterId(const QString &newAdapterId) { m_adapterId = newAdapterId; } bool BluetoothDeviceModel::displaySwitch() const { return m_displaySwitch; } void BluetoothDeviceModel::setDisplaySwitch(bool newDisplaySwitch) { m_displaySwitch = newDisplaySwitch; } QString BluetoothDeviceModel::getConnectStatusText(int state, bool connectState) const { if (state == BluetoothDevice::StateConnected && connectState) { return tr("Connected"); } else if (state == BluetoothDevice::StateUnavailable || state == BluetoothDevice::StateDisconnecting) { return tr("Not connected"); } return ""; } QString BluetoothDeviceModel::getBatteryIconPath(int percentage) const { /* 0-5%、6-10%、11%-20%、21-30%、31-40%、41-50%、51-60%、61%-70%、71-80%、81-90%、91-100% */ QString percentageStr; if (percentage <= 5) { percentageStr = "000"; } else if (percentage <= 10) { percentageStr = "010"; } else if (percentage <= 20) { percentageStr = "020"; } else if (percentage <= 30) { percentageStr = "030"; } else if (percentage <= 40) { percentageStr = "040"; } else if (percentage <= 50) { percentageStr = "050"; } else if (percentage <= 60) { percentageStr = "060"; } else if (percentage <= 70) { percentageStr = "070"; } else if (percentage <= 80) { percentageStr = "080"; } else if (percentage <= 90) { percentageStr = "090"; } else if (percentage <= 100) { percentageStr = "100"; } else { percentageStr = "unknow"; } QString iconName = QString("battery-%1-symbolic").arg(percentageStr); return "qrc:/icons/deepin/builtin/icons/" + iconName + "_20px.svg"; } int BluetoothDeviceModel::getConnectStatus(BluetoothDevice::State state, bool connectState) const { if (state == BluetoothDevice::StateConnected) { return connectState ? state : BluetoothDevice::StateUnavailable; } return state; } ================================================ FILE: src/plugin-bluetooth/operation/bluetoothdevicemodel.h ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef BLUETOOTHDEVICEMODEL_H #define BLUETOOTHDEVICEMODEL_H #include #include "bluetoothdevice.h" class BluetoothDeviceModel : public QAbstractListModel { Q_OBJECT public: enum deviceRoles { Name = Qt::UserRole + 1, Id, Visiable, IconName, ConnectStatus, ConnectStatusText, AdapterId, Battery, BatteryIconPath, CanSendFile, Address }; explicit BluetoothDeviceModel(QObject *parent = nullptr); void addDevice(BluetoothDevice* device); void removeDevice(const QString &deviceId); int deviceIndex(const QString &deviceId); bool containDevice(BluetoothDevice* device); void updateData(BluetoothDevice* device); void updateAllData(); void moveToTop(const QString &deviceId); void reorderDevices(); // Basic functionality: int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; void insertItem(int index, BluetoothDevice* device); // Remove data: bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; QHash roleNames() const override { QHash roles; roles[Name] = "name"; roles[Id] = "id"; roles[Visiable] = "visiable"; roles[IconName] = "iconName"; roles[ConnectStatus] = "connectStatus"; roles[ConnectStatusText] = "connectStatusText"; roles[AdapterId] = "adapterId"; roles[Battery] = "battery"; roles[BatteryIconPath] = "batteryIconPath"; roles[CanSendFile] = "canSendFile"; roles[Address] = "address"; return roles; } QString adapterId() const; void setAdapterId(const QString &newAdapterId); bool displaySwitch() const; void setDisplaySwitch(bool newDisplaySwitch); QString getConnectStatusText(int state, bool connectState) const; QString getBatteryIconPath(int percentage) const; int getConnectStatus(BluetoothDevice::State state, bool connectState) const; private: QString m_adapterId; bool m_displaySwitch; QList m_deviceData; }; #endif // BLUETOOTHDEVICEMODEL_H ================================================ FILE: src/plugin-bluetooth/operation/bluetoothinteraction.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "bluetoothinteraction.h" #include "dccfactory.h" #include BluetoothInteraction::BluetoothInteraction(QObject *parent) : QObject{ parent } , m_model(new BluetoothModel(this)) , m_work(new BluetoothWorker(m_model, this)) { m_work->activate(); qmlRegisterType("dcc", 1, 0, "BluetoothWorker"); qmlRegisterType("dcc", 1, 0, "BluetoothModel"); } BluetoothModel *BluetoothInteraction::model() const { return m_model; } void BluetoothInteraction::setModel(BluetoothModel *newModel) { m_model = newModel; } BluetoothWorker *BluetoothInteraction::work() const { return m_work; } void BluetoothInteraction::setWork(BluetoothWorker *newWork) { m_work = newWork; } DCC_FACTORY_CLASS(BluetoothInteraction) #include "bluetoothinteraction.moc" ================================================ FILE: src/plugin-bluetooth/operation/bluetoothinteraction.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef BLUETOOTHINTERACTION_H #define BLUETOOTHINTERACTION_H #include #include "bluetoothmodel.h" #include "bluetoothworker.h" class BluetoothInteraction : public QObject { Q_OBJECT public: explicit BluetoothInteraction(QObject *parent = nullptr); Q_INVOKABLE BluetoothModel *model() const; void setModel(BluetoothModel *newModel); Q_INVOKABLE BluetoothWorker *work() const; void setWork(BluetoothWorker *newWork); signals: private: BluetoothModel* m_model; BluetoothWorker* m_work; }; #endif // BLUETOOTHINTERACTION_H ================================================ FILE: src/plugin-bluetooth/operation/bluetoothmodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "bluetoothmodel.h" BluetoothModel::BluetoothModel(QObject *parent) : QObject(parent) , m_transPortable(false) , m_canSendFile(false) , m_airplaneEnable(false) , m_displaySwitch(false) , m_showBluetooth(false) , m_blueToothAdaptersModel(new BlueToothAdaptersModel(this)) { m_adapters.clear(); connect(this, &BluetoothModel::displaySwitchChanged, m_blueToothAdaptersModel, &BlueToothAdaptersModel::setDisplaySwitch); connect(this, &BluetoothModel::adpaterListChanged, this, [ this ] { setShowBluetooth(m_adapters.count()); }); } void BluetoothModel::addAdapter(BluetoothAdapter *adapter) { if (!adapterById(adapter->id())) { adapter->setdisplaySwitch(displaySwitch()); m_adapters[adapter->id()] = adapter; m_adapterIds << adapter->id(); Q_EMIT adapterAdded(adapter); Q_EMIT adpaterListChanged(); m_blueToothAdaptersModel->addAdapter(adapter); return; } adapter->deleteLater(); } const BluetoothAdapter *BluetoothModel::removeAdapater(const QString &adapterId) { const BluetoothAdapter *adapter = nullptr; adapter = adapterById(adapterId); if (adapter) { m_adapters.remove(adapterId); m_adapterIds.removeOne(adapterId); m_blueToothAdaptersModel->removeAdapter(adapterId); Q_EMIT adapterRemoved(adapter); Q_EMIT adpaterListChanged(); } return adapter; } QList BluetoothModel::adapters() const { QList allAdapters = m_adapters.values(); std::sort(allAdapters.begin(), allAdapters.end(), [ & ](const BluetoothAdapter *adapter1, const BluetoothAdapter *adapter2) { return m_adapterIds.indexOf(adapter1->id()) < m_adapterIds.indexOf(adapter2->id()); }); return allAdapters; } const BluetoothAdapter *BluetoothModel::adapterById(const QString &id) { return m_adapters.keys().contains(id) ? m_adapters[id] : nullptr; } /** * @brief BluetoothModel::canTransportable * @return * 返回值表示是否能传输蓝牙文件 */ bool BluetoothModel::canTransportable() const { return m_transPortable; } /** * @brief BluetoothModel::setTransportable * @param transPortable * 设置是否能传输蓝牙文件 */ void BluetoothModel::setTransportable(const bool transPortable) { if (m_transPortable != transPortable) { m_transPortable = transPortable; Q_EMIT transportableChanged(transPortable); } } void BluetoothModel::setCanSendFile(const bool canSendFile) { if (m_canSendFile != canSendFile) { m_canSendFile = canSendFile; Q_EMIT canSendFileChanged(canSendFile); } } void BluetoothModel::setAirplaneEnable(bool enable) { if (m_airplaneEnable == enable) return; m_airplaneEnable = enable; Q_EMIT airplaneEnableChanged(m_airplaneEnable); } void BluetoothModel::setDisplaySwitch(bool on) { if (m_displaySwitch == on) return; m_displaySwitch = on; Q_EMIT displaySwitchChanged(m_displaySwitch); } bool BluetoothModel::showBluetooth() const { return m_showBluetooth; } void BluetoothModel::setShowBluetooth(bool newShowBluetooth) { if (m_showBluetooth == newShowBluetooth) return; m_showBluetooth = newShowBluetooth; emit showBluetoothChanged(); } bool BluetoothModel::airplaneEnable() const { return m_airplaneEnable; } BlueToothAdaptersModel *BluetoothModel::blueToothAdaptersModel() const { return m_blueToothAdaptersModel; } void BluetoothModel::updateAdaptersModel(BluetoothAdapter *data) { m_blueToothAdaptersModel->updateAdapter(data); } ================================================ FILE: src/plugin-bluetooth/operation/bluetoothmodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCC_BLUETOOTH_BLUETOOTHMODEL_H #define DCC_BLUETOOTH_BLUETOOTHMODEL_H #include #include #include "bluetoothadapter.h" #include "bluetoothadaptersmodel.h" class BluetoothModel : public QObject { Q_OBJECT Q_PROPERTY(bool displaySwitch READ displaySwitch NOTIFY displaySwitchChanged FINAL) Q_PROPERTY(bool airplaneEnable READ airplaneEnable NOTIFY airplaneEnableChanged FINAL) Q_PROPERTY(bool showBluetooth READ showBluetooth NOTIFY showBluetoothChanged FINAL) QML_NAMED_ELEMENT(BluetoothModel) QML_SINGLETON public: explicit BluetoothModel(QObject *parent = nullptr); QList adapters() const; const BluetoothAdapter *adapterById(const QString &id); bool canTransportable() const; inline bool canSendFile() const { return m_canSendFile; } inline bool displaySwitch() const { return m_displaySwitch; } Q_INVOKABLE BlueToothAdaptersModel *blueToothAdaptersModel() const; void updateAdaptersModel(BluetoothAdapter* data); bool airplaneEnable() const; bool showBluetooth() const; void setShowBluetooth(bool newShowBluetooth); public Q_SLOTS: void addAdapter(BluetoothAdapter *adapter); const BluetoothAdapter *removeAdapater(const QString &adapterId); void setTransportable(const bool transPortable); void setCanSendFile(const bool canSendFile); void setAirplaneEnable(bool enable); void setDisplaySwitch(bool on); Q_SIGNALS: void adapterAdded(const BluetoothAdapter *adapter) const; void adapterRemoved(const BluetoothAdapter *adapter) const; void adpaterListChanged(); void transportableChanged(const bool transPortable) const; void canSendFileChanged(const bool canSendFile) const; void airplaneEnableChanged(bool enable) const; void displaySwitchChanged(bool on) const; void showBluetoothChanged(); private: QMap m_adapters; QStringList m_adapterIds; bool m_transPortable; bool m_canSendFile; bool m_airplaneEnable; bool m_displaySwitch; friend class BluetoothWorker; bool m_showBluetooth; BlueToothAdaptersModel* m_blueToothAdaptersModel; }; #endif // DCC_BLUETOOTH_BLUETOOTHMODEL_H ================================================ FILE: src/plugin-bluetooth/operation/bluetoothworker.cpp ================================================ // SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "bluetoothworker.h" #include "bluetoothdbusproxy.h" #include #include #include #include #include #include #include #include DGUI_USE_NAMESPACE Q_LOGGING_CATEGORY(DdcBluetoothWorkder, "dcc-bluetooth-worker") BluetoothWorker::BluetoothWorker(BluetoothModel *model, QObject *parent) : QObject(parent) , m_bluetoothDBusProxy(new BluetoothDBusProxy(this)) , m_model(model) , m_connectingAudioDevice(false) , m_state(m_bluetoothDBusProxy->state()) { // clang-format off connect(m_bluetoothDBusProxy, &BluetoothDBusProxy::StateChanged, this, &BluetoothWorker::onStateChanged); connect(m_bluetoothDBusProxy, &BluetoothDBusProxy::AdapterAdded, this, &BluetoothWorker::addAdapter); connect(m_bluetoothDBusProxy, &BluetoothDBusProxy::AdapterRemoved, this, &BluetoothWorker::removeAdapter); connect(m_bluetoothDBusProxy, &BluetoothDBusProxy::AdapterPropertiesChanged, this, &BluetoothWorker::onAdapterPropertiesChanged); connect(m_bluetoothDBusProxy, &BluetoothDBusProxy::DeviceAdded, this, &BluetoothWorker::addDevice); connect(m_bluetoothDBusProxy, &BluetoothDBusProxy::DeviceRemoved, this, &BluetoothWorker::removeDevice); connect(m_bluetoothDBusProxy, &BluetoothDBusProxy::DevicePropertiesChanged, this, &BluetoothWorker::onDevicePropertiesChanged); connect(m_bluetoothDBusProxy, &BluetoothDBusProxy::TransportableChanged, m_model, &BluetoothModel::setTransportable); connect(m_bluetoothDBusProxy, &BluetoothDBusProxy::CanSendFileChanged, m_model, &BluetoothModel::setCanSendFile); connect(m_bluetoothDBusProxy, &BluetoothDBusProxy::DisplaySwitchChanged, m_model, &BluetoothModel::setDisplaySwitch); m_model->setTransportable(m_bluetoothDBusProxy->transportable()); m_model->setCanSendFile(m_bluetoothDBusProxy->canSendFile()); m_model->setDisplaySwitch(m_bluetoothDBusProxy->displaySwitch()); connect(m_bluetoothDBusProxy, &BluetoothDBusProxy::EnabledChanged, m_model, &BluetoothModel::setAirplaneEnable); m_model->setAirplaneEnable(m_bluetoothDBusProxy->enabled()); //第一次调用时传true,refresh 函数会使用同步方式去获取蓝牙设备数据 //避免出现当dbus调用控制中心接口直接显示蓝牙模块时, //因为异步的数据获取使控制中心设置了蓝牙模块不可见, //而出现没办法显示蓝牙模块 refresh(true); // clang-format on } BluetoothWorker::~BluetoothWorker() { } void BluetoothWorker::onStateChanged(uint state) { // 当蓝牙状态由0变成大于0时,强制刷新蓝牙列表 if (!m_state && state > 0) refresh(true); m_state = state; } void BluetoothWorker::activate() { if (!m_bluetoothDBusProxy->bluetoothIsValid()) { return; } blockDBusSignals(false); m_bluetoothDBusProxy->ClearUnpairedDevice(); refresh(); } void BluetoothWorker::deactivate() { blockDBusSignals(true); } void BluetoothWorker::blockDBusSignals(bool block) { if (!m_bluetoothDBusProxy->bluetoothIsValid()) { return; } m_bluetoothDBusProxy->blockSignals(block); } void BluetoothWorker::disconnectDevice(const QString & deviceId) { QDBusObjectPath path(deviceId); m_bluetoothDBusProxy->DisconnectDevice(path); qCDebug(DdcBluetoothWorkder) << "disconnect from device: " << deviceId; } void BluetoothWorker::ignoreDevice(const QString &deviceId, const QString adapterId) { m_bluetoothDBusProxy->RemoveDevice(QDBusObjectPath(adapterId), QDBusObjectPath(deviceId)); qCDebug(DdcBluetoothWorkder) << "ignore device: " << deviceId; } void BluetoothWorker::onAdapterPropertiesChanged(const QString &json) { const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); const QJsonObject obj = doc.object(); const QString id = obj["Path"].toString(); BluetoothAdapter *adapter = const_cast(m_model->adapterById(id)); if (adapter) { adapter->inflate(obj); m_model->updateAdaptersModel(adapter); } } void BluetoothWorker::onDevicePropertiesChanged(const QString &json) { const QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); const QJsonObject obj = doc.object(); const QString id = obj["Path"].toString(); const QString name = obj["Name"].toString(); for (const BluetoothAdapter *adapter : m_model->adapters()) { BluetoothAdapter *adapterPointer = const_cast(adapter); BluetoothDevice *device = const_cast(adapter->deviceById(id)); if (device) { if (device->name() == name) { adapterPointer->inflateDevice(device, obj); adapterPointer->updateDeviceData(device); } else { if (!adapterPointer) return; adapterPointer->removeDevice(device->id()); adapterPointer->inflateDevice(device, obj); adapterPointer->addDevice(device); } } } } void BluetoothWorker::addAdapter(const QString &json) { QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); QJsonObject obj = doc.object(); BluetoothAdapter *adapter = new BluetoothAdapter(m_bluetoothDBusProxy, m_model); adapter->inflate(obj); m_model->addAdapter(adapter); } void BluetoothWorker::removeAdapter(const QString &json) { QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); QJsonObject obj = doc.object(); const QString id = obj["Path"].toString(); const BluetoothAdapter *result = m_model->removeAdapater(id); BluetoothAdapter *adapter = const_cast(result); if (adapter) { adapter->deleteLater(); adapter = nullptr; } } void BluetoothWorker::addDevice(const QString &json) { QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); QJsonObject obj = doc.object(); const QString adapterId = obj["AdapterPath"].toString(); const QString id = obj["Path"].toString(); const int battery = obj["Battery"].toInt(); const BluetoothAdapter *result = m_model->adapterById(adapterId); BluetoothAdapter *adapter = const_cast(result); if (adapter) { const BluetoothDevice *result1 = adapter->deviceById(id); BluetoothDevice *device = const_cast(result1); if (!device) device = new BluetoothDevice(adapter); device->setBattery(battery); adapter->inflateDevice(device, obj); adapter->addDevice(device); } } void BluetoothWorker::removeDevice(const QString &json) { QJsonDocument doc = QJsonDocument::fromJson(json.toUtf8()); QJsonObject obj = doc.object(); const QString adapterId = obj["AdapterPath"].toString(); const QString id = obj["Path"].toString(); const BluetoothAdapter *result = m_model->adapterById(adapterId); BluetoothAdapter *adapter = const_cast(result); if (adapter) { adapter->removeDevice(id); } } void BluetoothWorker::refresh(bool beFirst) { Q_UNUSED(beFirst) if (!m_bluetoothDBusProxy->bluetoothIsValid()) return; const QString replyStr = m_bluetoothDBusProxy->GetAdapters(); QJsonDocument doc = QJsonDocument::fromJson(replyStr.toUtf8()); QJsonArray arr = doc.array(); for (QJsonValue val : arr) { BluetoothAdapter *adapter = new BluetoothAdapter(m_bluetoothDBusProxy, m_model); adapter->inflate(val.toObject()); m_model->addAdapter(adapter); } } void BluetoothWorker::setDeviceAlias(const QString &deviceId, const QString &alias) { m_bluetoothDBusProxy->SetDeviceAlias(QDBusObjectPath(deviceId), alias); } void BluetoothWorker::setAdapterDiscoverable(const QString &path) { m_bluetoothDBusProxy->RequestDiscovery(QDBusObjectPath(path)); } void BluetoothWorker::setAdapterDiscovering(const QString &path, bool enable) { m_bluetoothDBusProxy->SetAdapterDiscovering(QDBusObjectPath(path), enable); } void BluetoothWorker::playErrorSound() { DDesktopServices::playSystemSoundEffect(DDesktopServices::SSE_Error); } bool BluetoothWorker::displaySwitch() { return m_bluetoothDBusProxy->property("DisplaySwitch").toBool(); } void BluetoothWorker::setAdapterPowered(const QString adapterId, bool powered) { const BluetoothAdapter *adapter = m_model->adapterById(adapterId); if (adapter) { const_cast(adapter)->setAdapterPowered(powered); } } void BluetoothWorker::setAdapterDiscoverable(const QString adapterId, bool discoverable) { QDBusObjectPath path(adapterId); m_bluetoothDBusProxy->SetAdapterDiscoverable(path, discoverable); } void BluetoothWorker::setAdapterAlias(const QString adapterId, const QString &alias) { m_bluetoothDBusProxy->SetAdapterAlias(QDBusObjectPath(adapterId), alias); } void BluetoothWorker::connectDevice(const QString &deviceId, const QString adapterId) { // INFO: when is headset, not connect twice const BluetoothAdapter *adapter = m_model->adapterById(adapterId); if (adapter == nullptr) return; const BluetoothDevice *device = adapter->deviceById(deviceId); if (device && (device->deviceType() == "audio-headset" || device->deviceType() == "audio-headphones") && device->state() == BluetoothDevice::StateAvailable) { return; } for (const BluetoothAdapter *a : m_model->adapters()) { for (const BluetoothDevice *d : a->devices()) { BluetoothDevice *vd = const_cast(d); if (vd) vd->setConnecting(d == device); } } QDBusObjectPath path(device->id()); m_bluetoothDBusProxy->ConnectDevice(path, QDBusObjectPath(adapter->id())); qCDebug(DdcBluetoothWorkder) << "connect to device: " << device->name(); } void BluetoothWorker::jumpToAirPlaneMode() { QDBusMessage message = QDBusMessage::createMethodCall("com.deepin.dde.ControlCenter", // 服务名 "/com/deepin/dde/ControlCenter", // 对象路径 "com.deepin.dde.ControlCenter", // 接口名 "ShowPage"); // 方法名 message << "network/airplaneMode"; QDBusConnection::sessionBus().asyncCall(message); } void BluetoothWorker::setDisplaySwitch(const bool &on) { m_bluetoothDBusProxy->setDisplaySwitch(on); } void BluetoothWorker::showBluetoothTransDialog(const QString &address, const QStringList &files) { qDebug() << " showBluetoothTransDialog: " << address << files; QStringList fileList; for (auto filePath : files) { filePath = filePath.remove("file://"); fileList.append(filePath); } m_bluetoothDBusProxy->showBluetoothTransDialog(address, fileList); } void BluetoothWorker::ignoreDevice(const BluetoothAdapter *adapter, const BluetoothDevice *device) { Q_UNUSED(adapter) Q_UNUSED(device) } ================================================ FILE: src/plugin-bluetooth/operation/bluetoothworker.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCC_BLUETOOTH_BLUETOOTHWORKER_H #define DCC_BLUETOOTH_BLUETOOTHWORKER_H #include #include "bluetoothmodel.h" class QDBusObjectPath; class BluetoothDBusProxy; class BluetoothWorker : public QObject { Q_OBJECT public: explicit BluetoothWorker(BluetoothModel *model, QObject *parent = nullptr); BluetoothModel *model() { return m_model; } void activate(); void deactivate(); void blockDBusSignals(bool block); bool displaySwitch(); Q_INVOKABLE void setAdapterPowered(const QString adapterId, bool powered); Q_INVOKABLE void setAdapterDiscoverable(const QString adapterId, bool discoverable); Q_INVOKABLE void setAdapterAlias(const QString adapterId, const QString &alias); Q_INVOKABLE void connectDevice(const QString & deviceId, const QString adapterId); Q_INVOKABLE void jumpToAirPlaneMode(); Q_INVOKABLE void setDeviceAlias(const QString &deviceId, const QString &alias); Q_INVOKABLE void disconnectDevice(const QString & deviceId); Q_INVOKABLE void ignoreDevice(const QString & deviceId, const QString adapterId); Q_INVOKABLE void setAdapterDiscovering(const QString &path, bool enable); Q_INVOKABLE void playErrorSound(); public Q_SLOTS: void ignoreDevice(const BluetoothAdapter *adapter, const BluetoothDevice *device); void setAdapterDiscoverable(const QString &path); void setDisplaySwitch(const bool &on); void showBluetoothTransDialog(const QString &address, const QStringList &files); private Q_SLOTS: void onAdapterPropertiesChanged(const QString &json); void onDevicePropertiesChanged(const QString &json); void addAdapter(const QString &json); void removeAdapter(const QString &json); void addDevice(const QString &json); void removeDevice(const QString &json); void refresh(bool beFirst = false); void onStateChanged(uint state); private: BluetoothWorker(BluetoothWorker const &) = delete; BluetoothWorker &operator=(BluetoothWorker const &) = delete; ~BluetoothWorker(); BluetoothDBusProxy *m_bluetoothDBusProxy; BluetoothModel *m_model; bool m_connectingAudioDevice; uint m_state; }; #endif // DCC_BLUETOOTH_BLUETOOTHWORKER_H ================================================ FILE: src/plugin-bluetooth/operation/qrc/bluetooth.qrc ================================================ icons/dcc_nav_bluetooth_42px.svg icons/dcc_nav_bluetooth_84px.svg texts/bluetooth_other_16px.svg texts/dcc_edit_12px.svg texts/dcc_refresh_12px.svg dark/icons/battery-000-symbolic_20px.svg dark/icons/battery-010-symbolic_20px.svg dark/icons/battery-020-symbolic_20px.svg dark/icons/battery-030-symbolic_20px.svg dark/icons/battery-040-symbolic_20px.svg dark/icons/battery-050-symbolic_20px.svg dark/icons/battery-060-symbolic_20px.svg dark/icons/battery-070-symbolic_20px.svg dark/icons/battery-080-symbolic_20px.svg dark/icons/battery-090-symbolic_20px.svg dark/icons/battery-100-symbolic_20px.svg dark/icons/battery-unknow-symbolic_20px.svg light/icons/battery-000-symbolic_20px.svg light/icons/battery-010-symbolic_20px.svg light/icons/battery-020-symbolic_20px.svg light/icons/battery-030-symbolic_20px.svg light/icons/battery-040-symbolic_20px.svg light/icons/battery-050-symbolic_20px.svg light/icons/battery-060-symbolic_20px.svg light/icons/battery-070-symbolic_20px.svg light/icons/battery-080-symbolic_20px.svg light/icons/battery-090-symbolic_20px.svg light/icons/battery-100-symbolic_20px.svg light/icons/battery-unknow-symbolic_20px.svg icons/bluetoothNomal.dci icons/bluetooth_option.dci icons/bluetooth_redo.dci texts/bluetooth_camera_16px.svg texts/bluetooth_clang_16px.svg texts/bluetooth_keyboard_16px.svg texts/bluetooth_lan_16px.svg texts/bluetooth_laptop_16px.svg texts/bluetooth_microphone_16px.svg texts/bluetooth_mouse_16px.svg texts/bluetooth_pad_16px.svg texts/bluetooth_pc.svg texts/bluetooth_pen_16px.svg texts/bluetooth_pheadset_16px.svg texts/bluetooth_phone_16px.svg texts/bluetooth_print_16px.svg texts/bluetooth_scaner_16px.svg texts/bluetooth_touchpad_16px.svg texts/bluetooth_tv_16px.svg texts/bluetooth_video_16px.svg texts/bluetooth_vidicon_16px.svg icons/bluetooth_camera_16px.svg icons/bluetooth_clang_16px.svg icons/bluetooth_keyboard_16px.svg icons/bluetooth_lan_16px.svg icons/bluetooth_laptop_16px.svg icons/bluetooth_microphone_16px.svg icons/bluetooth_mouse_16px.svg icons/bluetooth_other_16px.svg icons/bluetooth_pad_16px.svg icons/bluetooth_pc_16px.svg icons/bluetooth_pen_16px.svg icons/bluetooth_pheadset_16px.svg icons/bluetooth_phone_16px.svg icons/bluetooth_print_16px.svg icons/bluetooth_scaner_16px.svg icons/bluetooth_touchpad_16px.svg icons/bluetooth_tv_16px.svg icons/bluetooth_video_16px.svg icons/bluetooth_vidicon_16px.svg icons/battery-000-symbolic_20px.svg icons/battery-010-symbolic_20px.svg icons/battery-020-symbolic_20px.svg icons/battery-030-symbolic_20px.svg icons/battery-040-symbolic_20px.svg icons/battery-050-symbolic_20px.svg icons/battery-060-symbolic_20px.svg icons/battery-070-symbolic_20px.svg icons/battery-080-symbolic_20px.svg icons/battery-090-symbolic_20px.svg icons/battery-100-symbolic_20px.svg icons/battery-unknow-symbolic_20px.svg ================================================ FILE: src/plugin-bluetooth/qml/Adapters.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dcc 1.0 import QtQuick.Layouts 1.15 DccObject{ property bool isUserClosingBluetooth: false // 跟踪用户是否正在关闭蓝牙 // 监听蓝牙状态变化,当真正开启时重置隐藏状态 Connections { target: model function onPoweredChanged(poweredState, discoveringState) { if (model.powered && isUserClosingBluetooth) { // 蓝牙已真正开启,重置隐藏状态 isUserClosingBluetooth = false; } } } DccObject { name: "blueToothCtl" + model.id parentName: "blueToothAdapters" + model.id + index weight: 10 pageType: DccObject.Item page: DccGroupView { spacing: 0 isGroup: false } BluetoothCtl{ hideWhenUserClosing: isUserClosingBluetooth onUserClickedClose: { // 用户点击关闭时立即隐藏 isUserClosingBluetooth = true } onUserClickedOpen: { // 用户点击开启时显示 isUserClosingBluetooth = false } } } DccObject { name: "myDevice" + model.id parentName: "blueToothAdapters" + model.id + index weight: 30 pageType: DccObject.Item visible: model.powered && !isUserClosingBluetooth page: DccGroupView { spacing: 0 isGroup: false } MyDevice{} } DccObject { name: "otherDevice" + model.id parentName: "blueToothAdapters" + model.id + index weight: 40 pageType: DccObject.Item visible: model.powered && !isUserClosingBluetooth page: DccGroupView { spacing: 0 isGroup: false } OtherDevice{ hideWhenUserClosing: isUserClosingBluetooth } } } ================================================ FILE: src/plugin-bluetooth/qml/BlueTooth.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dcc 1.0 DccObject { id: root name: "bluetooth" parentName: "device" displayName: qsTr("Bluetooth") description: qsTr("Bluetooth settings, devices") visible: false icon: "bluetoothNomal" weight: 10 DccDBusInterface { id: bluetoothDbus service: "org.deepin.dde.Bluetooth1" path: "/org/deepin/dde/Bluetooth1" inter: "org.deepin.dde.Bluetooth1" connection: DccDBusInterface.SessionBus function errorSlot(adapters) { console.log("bluetooth GetAdapters errorSlot : ", adapters) } function getAdaptersSlot(adapters) { console.log(" bluetooth onGetAdapters", adapters) if (adapters === "[]") { root.visible = false } else { root.visible = true } } function onAdapterAdded(adapters) { root.visible = true } function onAdapterRemoved(adapters) { bluetoothDbus.callWithCallback("GetAdapters", [], getAdaptersSlot, errorSlot) } Component.onCompleted: { callWithCallback("GetAdapters", [], getAdaptersSlot, errorSlot) } } } ================================================ FILE: src/plugin-bluetooth/qml/BlueToothDeviceListView.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 import org.deepin.dtk.style 1.0 as DS import QtQuick.Window 2.15 import Qt.labs.platform Rectangle { id: root property alias deviceModel: repeater.model property bool backgroundVisible: true property bool showMoreBtn: true property bool showPowerStatus: true property bool showConnectStatus: true signal clicked(int index, bool checked) color: "transparent" implicitHeight: layoutView.height Layout.fillWidth: true ColumnLayout { id: layoutView width: parent.width clip: true spacing: 0 Repeater { id: repeater delegate: D.ItemDelegate { readonly property bool showSendFile: model.canSendFile && model.connectStatus === 2 id: itemCtl Layout.fillWidth: true Layout.fillHeight: true topPadding: 0 bottomPadding: 0 cascadeSelected: true visible: model.visiable backgroundVisible: root.backgroundVisible icon.name: model.iconName contentFlow: true hoverEnabled: true corners: getCornersForBackground(index, repeater.count) background: DccItemBackground { separatorVisible: true } content: Rectangle { width: parent.width implicitHeight: Math.max(50, deviceRow.statusItem.implicitHeight + 10) color: "transparent" MouseArea { anchors.fill: parent onDoubleClicked: { console.log("双击了项 ", model.id, model.adapterId); // 处理双击事件 if (model.connectStatus !== 2) { dccData.work().connectDevice(model.id, model.adapterId) } } } RowLayout { id: deviceRow property alias statusItem: status width: parent.width anchors.fill: parent ColumnLayout { id: status Layout.fillHeight: true Layout.fillWidth: true spacing: 0 Layout.leftMargin: 10 implicitHeight: Math.max(myDeviceName.implicitHeight, loader.implicitHeight) + 10 Label { id: myDeviceName text: model.name font: D.DTK.fontManager.t6 horizontalAlignment: Qt.AlignLeft verticalAlignment: Qt.AlignVCenter elide: Text.ElideRight Layout.fillWidth: true Layout.fillHeight: !showConnectStatus } Loader { id: loader active: showConnectStatus sourceComponent: RowLayout { id: deatilShow Layout.fillWidth: true Layout.fillHeight: true Label { id: nameDetail width: 60 text: model.connectStatusText horizontalAlignment: Qt.AlignLeft verticalAlignment: Qt.AlignTop font: D.DTK.fontManager.t10 Layout.fillHeight: true wrapMode: Text.WordWrap maximumLineCount: 2 height: Math.min(implicitHeight, 30) } D.DciIcon { id: powerIcon visible: model.battery !== "0%" width: 20 name: model.batteryIconPath sourceSize: Qt.size(14, 14) } Label { id: power visible: model.battery !== "0%" text: model.battery horizontalAlignment: Qt.AlignLeft verticalAlignment: Qt.AlignTop font.pointSize: 8 } } } } Loader { id: nameEditLoader active: false visible: active Layout.fillWidth: true Layout.fillHeight: true Layout.topMargin: 10 Layout.bottomMargin: 10 sourceComponent: D.LineEdit { id: nameEdit text: model.name onEditingFinished: { nameEditLoader.active = false deviceRow.statusItem.visible = true itemCtl.hoverEnabled = true console.log("set device name ", model.id, nameEdit.text) dccData.work().setDeviceAlias(model.id, nameEdit.text) } onVisibleChanged: { if (visible) { text = model.name } } Keys.onPressed: function(event) { if (event.key === Qt.Key_Return) { nameEdit.forceActiveFocus(false); // 结束编辑 } } Component.onCompleted: { nameEdit.forceActiveFocus(true) nameEdit.selectAll() } } } RowLayout { id: rowCtl Layout.alignment: Qt.AlignRight | Qt.AlignVCenter spacing: 10 D.BusyIndicator { id: connectBusyIndicator implicitHeight: 20 implicitWidth: 20 Layout.rightMargin: showMoreBtn ? 0 : 10 Layout.alignment: Qt.AlignVCenter running: model.connectStatus === 1 visible: model.connectStatus === 1 } D.ToolButton { id: connectBtn implicitHeight: 30 background.visible: true text: model.connectStatus === 2 ? qsTr("Disconnect") : qsTr("Connect") enabled: model.connectStatus === 2 || model.connectStatus === 0 font: D.DTK.fontManager.t6 visible: itemCtl.hovered && model.connectStatus !== 1 Layout.alignment: Qt.AlignVCenter onClicked: { if (model.connectStatus === 2) { dccData.work().disconnectDevice(model.id) } else { dccData.work().connectDevice(model.id, model.adapterId) } } } Loader { active: showMoreBtn visible: active Layout.alignment: Qt.AlignRight sourceComponent: D.ActionButton { id: moreBtn palette.windowText: D.ColorSelector.textColor icon.name: "bluetooth_option" icon.width: 16 icon.height: 16 implicitHeight: 30 implicitWidth: 30 flat: !hovered property bool menuShown: false background: Rectangle { property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } D.Menu { id: contextMenu implicitWidth: 150 D.MenuItem { id: connectDev padding: 0 text: model.connectStatus === 2 ? qsTr("Disconnect") : qsTr("Connect") enabled: model.connectStatus === 2 || model.connectStatus === 0 onTriggered: { if (model.connectStatus === 2) { dccData.work().disconnectDevice(model.id) } else { dccData.work().connectDevice(model.id, model.adapterId) } } } D.MenuItem { id: sendFile padding: 0 text: qsTr("Send Files") visible: itemCtl.showSendFile height : sendFile.visible ? implicitHeight : 0 topPadding: sendFile.visible ? undefined : 0 bottomPadding: sendFile.visible ? undefined : 0 onTriggered: { fileDlg.open() } } D.MenuItem { id: rename text: qsTr("Rename") padding: 0 onTriggered: { nameEditLoader.active = true deviceRow.statusItem.visible = false itemCtl.hoverEnabled = false } } D.MenuSeparator { } D.MenuItem { id: removeDev text: qsTr("Remove Device") enabled: model.connectStatus === 2 || model.connectStatus === 0 padding: 0 onTriggered: { dccData.work().ignoreDevice(model.id, model.adapterId) } } } FileDialog { id: fileDlg title: qsTr("Select file") fileMode: FileDialog.OpenFiles folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation) onAccepted: { console.log(" Select file : ", fileDlg.files) dccData.work().showBluetoothTransDialog(model.address, fileDlg.files) } } MouseArea { anchors.fill: parent hoverEnabled: true onEntered: { moreBtn.menuShown = contextMenu.visible } onClicked: { console.log(" contextMenu 单击事件 "); if (moreBtn.menuShown) { moreBtn.menuShown = false return } // 在点击位置下方显示菜单 // 获取按钮的全局位置,确保菜单在按钮的正下方显示 var buttonGlobalX = moreBtn.x + moreBtn.width / 2 - contextMenu.width var buttonGlobalY = moreBtn.y + moreBtn.height + 5 contextMenu.popup(buttonGlobalX, buttonGlobalY) moreBtn.menuShown = true } } } } } } } } } } } ================================================ FILE: src/plugin-bluetooth/qml/BlueToothMain.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dcc 1.0 import QtQuick.Layouts 1.15 import Qt.labs.platform 1.1 import Qt.labs.qmlmodels 1.2 DccObject{ name: "bluetoothSetting" parentName: "bluetooth" weight: 10 pageType: DccObject.Item page: DccGroupView { spacing: 0 isGroup: false } DccRepeater { model: dccData.model().blueToothAdaptersModel() delegate: DccObject { name: "blueToothAdapters" + model.id + index parentName: "bluetoothSetting" weight: 10 pageType: DccObject.Item page: DccGroupView { spacing: 0 isGroup: false } Adapters{} } } } ================================================ FILE: src/plugin-bluetooth/qml/BluetoothCtl.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import org.deepin.dtk 1.0 as D import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dcc 1.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 import org.deepin.dtk.style 1.0 as DS DccObject{ signal userClickedClose() signal userClickedOpen() property bool hideWhenUserClosing: false // 接收来自父组件的隐藏状态 DccObject { name: "blueToothSwitch" parentName: "blueToothCtl" + model.id displayName: model.name pageType: DccObject.Item weight: 10 backgroundType: DccObject.Normal page: RowLayout { id: root Layout.fillWidth: true spacing: 0 property bool isSwitching: false Connections { target: model function onPoweredChanged(poweredState, discoveringState) { if (!dccData.model().airplaneEnable) { if (deviceSwitch.checked !== model.powered) { deviceSwitch.checked = model.powered; } } else { if (deviceSwitch.checked) { deviceSwitch.checked = false; } } if (deviceSwitch.checked === model.powered || dccData.model().airplaneEnable) { if (isSwitching) { if (model.powered && !dccData.model().airplaneEnable) { dccData.work().setAdapterDiscovering(model.id, true); dccData.work().setAdapterDiscoverable(model.id); } else { dccData.work().setAdapterDiscovering(model.id, false); } } isSwitching = false; } else { isSwitching = true; } } } DciIcon { id: deviceIcon Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter name: "bluetoothNomal" sourceSize: Qt.size(24, 24) Layout.preferredHeight: 50 Layout.preferredWidth: 40 } ColumnLayout { spacing: 0 id: devName Layout.fillWidth: true Label { id: myDeviceName Layout.alignment: Qt.AlignLeft text: dccObj.displayName font: DTK.fontManager.t6 horizontalAlignment: Qt.AlignLeft verticalAlignment: Qt.AlignBottom leftPadding: 0 topPadding: 5 elide: Text.ElideRight Layout.fillWidth: true } Rectangle { color: "transparent" id: nameDetaillay Layout.fillWidth: true implicitHeight: Math.max(nameDetail.height, editBtn.height) + 5 Label { id: nameDetail anchors.left: parent.left anchors.top: parent.top width: Math.min(implicitWidth, parent.width - editBtn.implicitWidth - 10) text: model.nameDetail horizontalAlignment: Qt.AlignLeft verticalAlignment: Text.AlignTop font: DTK.fontManager.t10 elide: Text.ElideRight wrapMode: Text.WordWrap maximumLineCount: 2 height: Math.min(implicitHeight, 40) } ToolButton { id: editBtn anchors.left: nameDetail.right anchors.verticalCenter: nameDetail.verticalCenter font: DTK.fontManager.t10 text: qsTr("Edit") background: null hoverEnabled: true implicitHeight: 20 textColor: Palette { normal { common: DTK.makeColor(Color.Highlight) } normalDark: normal hovered { common: DTK.makeColor(Color.Highlight).lightness(+10) } hoveredDark: hovered pressed { common: DTK.makeColor(Color.Highlight).lightness(-10) } pressedDark: pressed } onClicked: { nameEdit.visible = true devName.visible =false nameEdit.forceActiveFocus(true) nameEdit.selectAll() } } } } LineEdit { id: nameEdit visible: false Layout.fillWidth: true // implicitWidth: root.width - deviceSwitch.width - 40 - 32 text: myDeviceName.text topPadding: 5 bottomPadding: 5 Layout.rightMargin: 10 implicitHeight: 30 onTextChanged: { if (text.length > 64) { text = text.substr(0, 64); // 截断到31个字符 nameEdit.alertText = qsTr("Bluetooth name cannot exceed 64 characters") nameEdit.showAlert = true dccData.work().playErrorSound() alertTimer.start() } else { nameEdit.showAlert = false } } Timer { id: alertTimer interval: 2000 repeat: false onTriggered: { nameEdit.showAlert = false } } function updateAlias() { if (nameEdit.text === "") { nameEdit.text = myDeviceName.text } else { dccData.work().setAdapterAlias(model.id, nameEdit.text) } nameEdit.visible = false devName.visible = true } onEditingFinished: { updateAlias() } onFocusChanged: { if (!focus) { updateAlias() } } Keys.onPressed: { if (event.key === Qt.Key_Return) { nameEdit.forceActiveFocus(false); // 结束编辑 } } } BusyIndicator { id: initAnimation running: true visible: isSwitching implicitWidth: 32 implicitHeight: 32 } Switch { id: deviceSwitch Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.rightMargin: 10 enabled: !dccData.model().airplaneEnable && !isSwitching checked: !dccData.model().airplaneEnable && model.powered Component.onCompleted: { if (dccData.model().airplaneEnable) { if (checked) checked = false; } else { if (checked !== model.powered) { checked = model.powered; } } } Connections { target: dccData.model() function onAirplaneEnableChanged(airplaneModeEnabled) { if (airplaneModeEnabled) { checked = false; } else { checked = model.powered; } } } onClicked: { if (enabled) { isSwitching = true; // 立即发送信号通知父组件 if (!checked) { // 用户点击关闭蓝牙 userClickedClose(); } else { // 用户点击开启蓝牙 userClickedOpen(); } dccData.work().setAdapterPowered(model.id, checked); } } } } } DccObject { name: "blueToothSwitch" parentName: "blueToothCtl" + model.id icon: "audio" pageType: DccObject.Item weight: 20 visible: !dccData.model().airplaneEnable && model.powered && !hideWhenUserClosing page: RowLayout { CheckBox { checked: model.discoverabled Layout.alignment: Qt.AlignLeft leftPadding: 10 text: qsTr("Allow other Bluetooth devices to find this device") onCheckedChanged: { dccData.work().setAdapterDiscoverable(model.id ,checked) } } } } DccObject { name: "airplaneModeTips" parentName: "blueToothCtl" + model.id pageType: DccObject.Item weight: 30 visible: dccData.model().airplaneEnable page: Item { height: 25 Label { id: airplaneModeTextLabel text: qsTr("To use the Bluetooth function, please turn off") anchors.left: parent.left anchors.top: parent.top font.pointSize: 8 width: implicitWidth } Label { id: airplaneModeLinkLabel text: "" + qsTr("Airplane Mode") +"" anchors.left: airplaneModeTextLabel.right anchors.top: parent.top font.pointSize: 8 textFormat: Text.RichText width: implicitWidth // 超链接点击事件 onLinkActivated: function(url) { console.log("点击的链接是: " + url) dccData.work().jumpToAirPlaneMode() } MouseArea { anchors.fill: parent hoverEnabled: true cursorShape: Qt.ArrowCursor acceptedButtons: Qt.NoButton onEntered: { cursorShape = Qt.PointingHandCursor; } onExited: { cursorShape = Qt.ArrowCursor; } } } } } } ================================================ FILE: src/plugin-bluetooth/qml/MyDevice.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dcc 1.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 DccObject{ DccObject { name: "myDeviceTitle" parentName: "myDevice" + model.id displayName: qsTr("My Devices") weight: 10 pageType: DccObject.Item visible: model.myDeviceVisiable page: Label { leftPadding: 10 font.bold: true font.pixelSize: DTK.fontManager.t5.pixelSize text: dccObj.displayName } } DccObject { name: "myDeviceList" parentName: "myDevice" + model.id weight: 11 backgroundType: DccObject.Normal visible: model.myDeviceVisiable pageType: DccObject.Item page: BlueToothDeviceListView { deviceModel: model.myDevice onClicked: function (index, checked) { } } } } ================================================ FILE: src/plugin-bluetooth/qml/OtherDevice.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dcc 1.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 DccObject{ property bool refreshEnable: true property bool lastPoweredState: false // 记录上次蓝牙开关状态 property bool hideWhenUserClosing: false // 接收来自父组件的隐藏状态 Connections { target: DccApp function onActiveObjectChanged(object) { if (object.name === "bluetooth") { refreshEnable = true // 初始化状态记录 lastPoweredState = model.powered if (model.powered && !model.discovering) { deferDiscoverTimer.restart() } } } } // 监听蓝牙开关状态变化,确保重新开启时能立即启动扫描 Connections { target: model function onPoweredChanged(poweredState, discoveringState) { if (model.powered && !dccData.model().airplaneEnable) { // 蓝牙开启时,重置刷新状态 refreshEnable = true // 只有当蓝牙从关闭变为开启时才立即启动扫描 if (!lastPoweredState && !model.discovering) { dccData.work().setAdapterDiscovering(model.id, true); dccData.work().setAdapterDiscoverable(model.id); } } // 更新状态记录 lastPoweredState = model.powered } } Timer { id: autoRefreshTimer interval: 5000 repeat: false onTriggered: { if (model.powered && refreshEnable && !model.discovering) { dccData.work().setAdapterDiscoverable(model.id) } } } Timer { id: deferDiscoverTimer interval: 300 repeat: false onTriggered: { if (model.powered && !model.discovering) { dccData.work().setAdapterDiscoverable(model.id) } } } DccObject { name: "OtherDeviceTitle" parentName: "otherDevice" + model.id displayName: qsTr("Other Devices") weight: 10 visible: model.powered pageType: DccObject.Item page: ColumnLayout { Label { Layout.leftMargin: 10 font.bold: true font.pixelSize: DTK.fontManager.t5.pixelSize text: dccObj.displayName } } } DccObject { name: "blueToothSwitch" parentName: "otherDevice" + model.id pageType: DccObject.Item weight: 20 visible: model.powered && !hideWhenUserClosing page: RowLayout { CheckBox { Layout.leftMargin: 10 Layout.alignment: Qt.AlignLeft checked: dccData.model().displaySwitch text: qsTr("Show Bluetooth devices without names") onCheckedChanged: { dccData.work().setDisplaySwitch(checked) } } IconButton { id: redobtn Layout.alignment: Qt.AlignRight flat: true visible: !model.discovering icon.name: "redo" onClicked: { dccData.work().setAdapterDiscoverable(model.id) } } BusyIndicator { id: scanAnimation Layout.alignment: Qt.AlignRight running: model.discovering visible: model.discovering implicitWidth: 20 implicitHeight: 20 } } Component.onCompleted: { if (typeof DccApp !== 'undefined' && DccApp.activeObject && DccApp.activeObject.name === "bluetooth") { if (model.powered && !model.discovering) { deferDiscoverTimer.restart() } } } } Connections { target: model function onDiscoveringChanged() { if (!model.discovering && model.powered && refreshEnable) { autoRefreshTimer.restart() } else if (model.discovering) { // 正在扫描时停止定时器 autoRefreshTimer.stop() } } } DccObject { name: "otherDeviceList" parentName: "otherDevice" + model.id weight: 40 visible: model.powered backgroundType: DccObject.Normal pageType: DccObject.Item page: BlueToothDeviceListView { id: deviceListView showMoreBtn: false showConnectStatus: false showPowerStatus: false Timer { interval: 300 repeat: false running: true onTriggered: { deviceListView.deviceModel = model.otherDevice } } onClicked: function (index, checked) { } onVisibleChanged: { refreshEnable = visible } } } } ================================================ FILE: src/plugin-bluetooth/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-commoninfo/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(CommonInfo_Name commonInfo) pkg_check_modules(DEEPIN_PW_CHECK REQUIRED libdeepin_pw_check) file(GLOB_RECURSE commonInfo_SRCS "operation/*.cpp" "operation/*.h" "operation/qrc/commoninfo.qrc" ) add_library(${CommonInfo_Name} MODULE ${commonInfo_SRCS} operation/grubmenulistmodel.h operation/grubmenulistmodel.cpp ) set(CommonInfo_Libraries ${DCC_FRAME_Library} ${QT_NS}::DBus ${DTK_NS}::Gui ) target_link_libraries(${CommonInfo_Name} PRIVATE ${CommonInfo_Libraries} ${DEEPIN_PW_CHECK_LIBRARIES} ) dcc_install_plugin(NAME ${CommonInfo_Name} TARGET ${CommonInfo_Name}) ================================================ FILE: src/plugin-commoninfo/operation/commoninfointeraction.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "commoninfointeraction.h" #include "dccfactory.h" #include CommonInfoInteraction::CommonInfoInteraction(QObject *parent) : QObject{ parent } , m_work(NULL) , m_mode(NULL) { qmlRegisterType("org.deepin.dcc.systemInfo", 1, 0, "CommonInfoWork"); qmlRegisterType("org.deepin.dcc.systemInfo", 1, 0, "CommonInfoModel"); m_mode = new CommonInfoModel(this); m_work = new CommonInfoWork(m_mode, this); m_work->active(); } CommonInfoWork *CommonInfoInteraction::work() const { return m_work; } void CommonInfoInteraction::setWork(CommonInfoWork *newWork) { m_work = newWork; } CommonInfoModel *CommonInfoInteraction::mode() const { return m_mode; } void CommonInfoInteraction::setMode(CommonInfoModel *newMode) { m_mode = newMode; } DCC_FACTORY_CLASS(CommonInfoInteraction) #include "commoninfointeraction.moc" ================================================ FILE: src/plugin-commoninfo/operation/commoninfointeraction.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef COMMONINFOINTERACTION_H #define COMMONINFOINTERACTION_H #include "commoninfomodel.h" #include "commoninfowork.h" #include class CommonInfoInteraction : public QObject { Q_OBJECT public: explicit CommonInfoInteraction(QObject *parent = nullptr); Q_INVOKABLE CommonInfoWork *work() const; void setWork(CommonInfoWork *newWork); Q_INVOKABLE CommonInfoModel *mode() const; void setMode(CommonInfoModel *newMode); signals: private: CommonInfoWork* m_work; CommonInfoModel* m_mode; }; #endif // COMMONINFOINTERACTION_H ================================================ FILE: src/plugin-commoninfo/operation/commoninfomodel.cpp ================================================ // SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "commoninfomodel.h" #include #include #include namespace { Q_LOGGING_CATEGORY(dcCommonLog, "org.deepin.dde.dcc.commoninfo") } CommonInfoModel::CommonInfoModel(QObject *parent) : QObject(parent) , m_bootDelay(false) , m_themeEnabled(false) , m_updating(false) , m_joinUeProgram(false) , m_activation(false) , m_plymouthscale(0) , m_plymouththeme(QString()) , m_GrubAnimationModel(new GrubAnimationModel(this)) , m_GrubMenuListModel(new GrubMenuListModel(this)) , m_debugLogCurrentIndex(0) , m_needShowModalDialog(false) { } void CommonInfoModel::setEntryLists(const QStringList &list) { if (list != m_entryLists) { m_entryLists = list; Q_EMIT entryListsChanged(list); } } void CommonInfoModel::setThemeEnabled(const bool enabled) { if (m_themeEnabled != enabled) { m_themeEnabled = enabled; Q_EMIT themeEnabledChanged(m_themeEnabled); } } void CommonInfoModel::setShowGrubEditAuth(const bool enabled) { m_isShowGrubEditAuth = enabled; } void CommonInfoModel::setGrubEditAuthEnabled(const bool enabled) { m_grubEditAuthEnabled = enabled; Q_EMIT grubEditAuthEnabledChanged(m_grubEditAuthEnabled); } void CommonInfoModel::setDefaultEntry(const QString &entry) { if (m_defaultEntry != entry) { m_defaultEntry = entry; Q_EMIT defaultEntryChanged(entry); } m_GrubMenuListModel->updateCheckIndex(m_defaultEntry); } void CommonInfoModel::setUpdating(bool updating) { if (updating != m_updating) { m_updating = updating; Q_EMIT updatingChanged(updating); } } void CommonInfoModel::setUeProgram(const bool ueProgram) { if (m_joinUeProgram != ueProgram) { m_joinUeProgram = ueProgram; } Q_EMIT ueProgramChanged(m_joinUeProgram); } void CommonInfoModel::setDeveloperModeState(const bool state) { if (m_developerModeState != state) { m_developerModeState = state; Q_EMIT developerModeStateChanged(state); } } void CommonInfoModel::setIsLogin(const bool log) { if (m_isLogin == log) return; m_isLogin = log; Q_EMIT isLoginChenged(log); } bool CommonInfoModel::bootDelay() const { return m_bootDelay; } void CommonInfoModel::setBootDelay(bool bootDelay) { if (m_bootDelay != bootDelay) { m_bootDelay = bootDelay; Q_EMIT bootDelayChanged(bootDelay); } } void CommonInfoModel::setActivation(bool value) { if (m_activation != value) { m_activation = value; Q_EMIT LicenseStateChanged(value); } } QPixmap CommonInfoModel::background() const { return m_background; } void CommonInfoModel::setBackground(const QPixmap &background) { m_background = background; Q_EMIT backgroundChanged(background); } bool CommonInfoModel::ueProgram() const { return m_joinUeProgram; } bool CommonInfoModel::developerModeState() const { return m_developerModeState; } void CommonInfoModel::setPlymouthScale(int scale) { m_plymouthscale = scale; m_GrubAnimationModel->updateCheckIndex(scale, false); Q_EMIT plymouthScaleChanged(scale); } void CommonInfoModel::setPlymouthTheme(const QString &themeName) { m_plymouththeme = themeName; Q_EMIT plymouthThemeChanged(themeName); } bool CommonInfoModel::isDeveloperMode() const { return m_isDeveloperMode; } bool CommonInfoModel::readOnlyProtectionEnabled() const { return m_readOnlyProtectionEnabled; } void CommonInfoModel::setBootWallpaperEnabled(bool bootWallpaperEnabled) { if (m_bootWallpaperEnabled != bootWallpaperEnabled) { m_bootWallpaperEnabled = bootWallpaperEnabled; Q_EMIT bootWallpaperEnabledChanged(); } } bool CommonInfoModel::bootWallpaperEnabled() const { return m_bootWallpaperEnabled; } void CommonInfoModel::setBootGrubUserNameVisible(bool bootGrubUserNameVisible) { if (m_bootGrubUserNameVisible != bootGrubUserNameVisible) { m_bootGrubUserNameVisible = bootGrubUserNameVisible; Q_EMIT bootGrubUserNameVisibleChanged(); } } bool CommonInfoModel::bootGrubUserNameVisible() const { return m_bootGrubUserNameVisible; } void CommonInfoModel::setIsDeveloperMode(bool newIsDeveloperMode) { if (m_isDeveloperMode == newIsDeveloperMode) return; m_isDeveloperMode = newIsDeveloperMode; emit isDeveloperModeChanged(); } void CommonInfoModel::setReadOnlyProtectionEnabled(bool enabled) { qCDebug(dcCommonLog) << "setReadOnlyProtectionEnabled:" << enabled; m_readOnlyProtectionEnabled = enabled; emit readOnlyProtectionEnabledChanged(); } bool CommonInfoModel::needShowModalDialog() const { return m_needShowModalDialog; } void CommonInfoModel::setNeedShowModalDialog(bool newNeedShowModalDialog) { if (m_needShowModalDialog == newNeedShowModalDialog) return; m_needShowModalDialog = newNeedShowModalDialog; emit needShowModalDialogChanged(); } QString CommonInfoModel::grubThemePath() const { return m_grubThemePath; } void CommonInfoModel::setGrubThemePath(const QString &newGrubThemePath) { m_grubThemePath = newGrubThemePath; emit grubThemePathChanged(); } int CommonInfoModel::debugLogCurrentIndex() const { return m_debugLogCurrentIndex; } void CommonInfoModel::setDebugLogCurrentIndex(int newDebugLogCurrentIndex) { if (m_debugLogCurrentIndex == newDebugLogCurrentIndex) return; m_debugLogCurrentIndex = newDebugLogCurrentIndex; emit debugLogCurrentIndexChanged(); } GrubAnimationModel *CommonInfoModel::grubAnimationModel() { return m_GrubAnimationModel; } GrubMenuListModel * CommonInfoModel::grubMenuListModel() { return m_GrubMenuListModel; } bool CommonInfoModel::isCommunitySystem() const { return Dtk::Core::DSysInfo::UosCommunity == Dtk::Core::DSysInfo::DSysInfo::uosEditionType(); } ================================================ FILE: src/plugin-commoninfo/operation/commoninfomodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "grubanimationmodel.h" #include "grubmenulistmodel.h" #include #include #include class CommonInfoModel : public QObject { Q_OBJECT QML_NAMED_ELEMENT(CommonInfoModel) QML_SINGLETON Q_PROPERTY(bool bootDelay READ bootDelay NOTIFY bootDelayChanged FINAL) Q_PROPERTY(bool themeEnabled READ themeEnabled NOTIFY themeEnabledChanged FINAL) Q_PROPERTY(bool grubEditAuthEnabled READ grubEditAuthEnabled NOTIFY grubEditAuthEnabledChanged FINAL) Q_PROPERTY(int debugLogCurrentIndex READ debugLogCurrentIndex NOTIFY debugLogCurrentIndexChanged FINAL) Q_PROPERTY(bool developerModeState READ developerModeState NOTIFY developerModeStateChanged FINAL) Q_PROPERTY(bool isLogin READ isLogin NOTIFY isLoginChenged FINAL) Q_PROPERTY(bool isActivate READ isActivate NOTIFY LicenseStateChanged FINAL) Q_PROPERTY(QString grubThemePath READ grubThemePath NOTIFY grubThemePathChanged FINAL) Q_PROPERTY(bool needShowModalDialog READ needShowModalDialog NOTIFY needShowModalDialogChanged FINAL) Q_PROPERTY(bool isDeveloperMode READ isDeveloperMode NOTIFY isDeveloperModeChanged FINAL) Q_PROPERTY(bool readOnlyProtectionEnabled READ readOnlyProtectionEnabled NOTIFY readOnlyProtectionEnabledChanged FINAL) Q_PROPERTY(bool bootWallpaperEnabled READ bootWallpaperEnabled NOTIFY bootWallpaperEnabledChanged FINAL) Q_PROPERTY(bool bootGrubUserNameVisible READ bootGrubUserNameVisible NOTIFY bootGrubUserNameVisibleChanged FINAL) public: explicit CommonInfoModel(QObject *parent = nullptr); void setEntryLists(const QStringList &list); inline QStringList entryLists() const { return m_entryLists;} inline QString defaultEntry() const { return m_defaultEntry;} bool bootDelay() const; bool themeEnabled() const { return m_themeEnabled; } inline bool isShowGrubEditAuth() { return m_isShowGrubEditAuth; } bool grubEditAuthEnabled() { return m_grubEditAuthEnabled; } inline bool updating() const { return m_updating; } QPixmap background() const; void setBackground(const QPixmap &background); bool ueProgram() const; // for user experience program bool developerModeState() const; inline bool isLogin() const { return m_isLogin; } inline bool isActivate() const { return m_activation; } void setActivation(bool value); inline int plymouthScale() const { return m_plymouthscale; } inline QString plymouthTheme() const { return m_plymouththeme; } Q_INVOKABLE GrubAnimationModel *grubAnimationModel(); Q_INVOKABLE GrubMenuListModel *grubMenuListModel(); Q_INVOKABLE bool isCommunitySystem() const; int debugLogCurrentIndex() const; void setDebugLogCurrentIndex(int newDebugLogCurrentIndex); QString grubThemePath() const; void setGrubThemePath(const QString &newGrubThemePath); bool needShowModalDialog() const; void setNeedShowModalDialog(bool newNeedShowModalDialog); bool isDeveloperMode() const; bool readOnlyProtectionEnabled() const; void setBootWallpaperEnabled(bool bootWallpaperEnabled); bool bootWallpaperEnabled() const; void setBootGrubUserNameVisible(bool bootGrubUserNameVisible); bool bootGrubUserNameVisible() const; Q_SIGNALS: void bootDelayChanged(const bool enabled) const; void themeEnabledChanged(const bool enabled) const; void grubEditAuthEnabledChanged(const bool enabled) const; void entryListsChanged(const QStringList &list); void defaultEntryChanged(const QString &entry); void updatingChanged(const bool &updating); void backgroundChanged(const QPixmap &pixmap); void ueProgramChanged(const bool enable) const; // for user experience program void developerModeStateChanged(const bool enable) const; void isLoginChenged(bool log) const; void LicenseStateChanged(bool state); void plymouthScaleChanged(int scale); void plymouthThemeChanged(const QString &themeName); void GrubAnimationModelChanged(); void debugLogCurrentIndexChanged(); void grubThemePathChanged(); void needShowModalDialogChanged(); void isDeveloperModeChanged(); void readOnlyProtectionEnabledChanged(); void bootWallpaperEnabledChanged(); void bootGrubUserNameVisibleChanged(); public Q_SLOTS: void setBootDelay(bool bootDelay); void setThemeEnabled(const bool enabled); void setShowGrubEditAuth(const bool enabled); void setGrubEditAuthEnabled(const bool enabled); void setDefaultEntry(const QString &entry); void setUpdating(bool updating); void setUeProgram(const bool ueProgram); // for user experience program void setDeveloperModeState(const bool state); void setIsLogin(const bool log); void setPlymouthScale(int scale); void setPlymouthTheme(const QString &themeName); void setIsDeveloperMode(bool newIsDeveloperMode); void setReadOnlyProtectionEnabled(bool enabled); private: bool m_bootDelay; bool m_themeEnabled; bool m_isShowGrubEditAuth = false; bool m_grubEditAuthEnabled = false; bool m_updating; QStringList m_entryLists; QString m_defaultEntry; QPixmap m_background; bool m_joinUeProgram; // for user experience program bool m_developerModeState{false}; // for developer mode state bool m_isLogin{false}; bool m_activation; int m_plymouthscale; QString m_plymouththeme; QString m_grubThemePath; GrubAnimationModel* m_GrubAnimationModel; GrubMenuListModel* m_GrubMenuListModel; int m_debugLogCurrentIndex; bool m_needShowModalDialog; bool m_isDeveloperMode; bool m_readOnlyProtectionEnabled{false}; bool m_bootWallpaperEnabled{true}; bool m_bootGrubUserNameVisible{true}; }; ================================================ FILE: src/plugin-commoninfo/operation/commoninfoproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "commoninfoproxy.h" #include #include #include #include #include #include #include #include namespace { Q_LOGGING_CATEGORY(dcCommonLog, "dcc.commoninfo") } const QString &GrubService = QStringLiteral("org.deepin.dde.Grub2"); const QString &GrubPath = QStringLiteral("/org/deepin/dde/Grub2"); const QString &GrubInterface = QStringLiteral("org.deepin.dde.Grub2"); const QString &GrubThemePath = QStringLiteral("/org/deepin/dde/Grub2/Theme"); const QString &GrubThemeInterface = QStringLiteral("org.deepin.dde.Grub2.Theme"); const QString &GrubEditAuthPath = QStringLiteral("/org/deepin/dde/Grub2/EditAuthentication"); const QString &GrubEditAuthInterface = QStringLiteral("org.deepin.dde.Grub2.EditAuthentication"); const QString &DeepinIdService = QStringLiteral("com.deepin.deepinid"); const QString &DeepinIdPath = QStringLiteral("/com/deepin/deepinid"); const QString &DeepinIdInterface = QStringLiteral("com.deepin.deepinid"); const QString &LicenseService = QStringLiteral("com.deepin.license"); const QString &LicensePath = QStringLiteral("/com/deepin/license/Info"); const QString &LicenseInterface = QStringLiteral("com.deepin.license.Info"); const QString &UserexperienceService = QStringLiteral("com.deepin.userexperience.Daemon"); const QString &UserexperiencePath = QStringLiteral("/com/deepin/userexperience/Daemon"); const QString &UserexperienceInterface = QStringLiteral("com.deepin.userexperience.Daemon"); const QString &PlyMouthScaleService = QStringLiteral("org.deepin.dde.Daemon1"); const QString &PlyMouthScalePath = QStringLiteral("/org/deepin/dde/Daemon1"); const QString &PlyMouthScaleInterface = QStringLiteral("org.deepin.dde.Daemon1"); const QString &SyncHelperService = QStringLiteral("com.deepin.sync.Helper"); const QString &SyncHelperPath = QStringLiteral("/com/deepin/sync/Helper"); const QString &SyncHelperInterface = QStringLiteral("com.deepin.sync.Helper"); static const QString &ACLHelperService = QStringLiteral("com.deepin.daemon.ACL"); static const QString &ACLHelperPath = QStringLiteral("/com/uos/usec/DeveloperMode"); static const QString &ACLHelperInterface = QStringLiteral("com.uos.usec.DeveloperMode"); static const QString &ReadOnlyProtectionService = QStringLiteral("org.deepin.dde.Daemon1"); static const QString &ReadOnlyProtectionPath = QStringLiteral("/org/deepin/dde/Daemon1"); static const QString &ReadOnlyProtectionInterface = QStringLiteral("org.deepin.dde.Daemon1"); // 判断是否可以使用ACL服务来处理开发者模式 static bool isACLActivatable() { const bool enableACL = qEnvironmentVariableIsSet("DCC_ACL_ENABLED"); if (enableACL) return true; if (!QDBusConnection::systemBus().interface()->isServiceRegistered(ACLHelperService)) return false; QDBusInterface interface(ACLHelperService, ACLHelperPath, ACLHelperInterface, QDBusConnection::systemBus()); return interface.isValid(); } CommonInfoProxy::CommonInfoProxy(QObject *parent) : QObject(parent) , m_grubInter(new DDBusInterface(GrubService, GrubPath, GrubInterface, QDBusConnection::systemBus(), this)) , m_grubThemeInter(new DDBusInterface(GrubService, GrubThemePath, GrubThemeInterface, QDBusConnection::systemBus(), this)) , m_grubEditAuthInter(new DDBusInterface(GrubService, GrubEditAuthPath, GrubEditAuthInterface, QDBusConnection::systemBus(), this)) , m_deepinIdInter(nullptr) , m_licenseInter(new DDBusInterface(LicenseService, LicensePath, LicenseInterface, QDBusConnection::systemBus(), this)) , m_userexperienceInter(new DDBusInterface(UserexperienceService, UserexperiencePath, UserexperienceInterface, QDBusConnection::sessionBus(), this)) , m_grubScaleInter(new DDBusInterface(PlyMouthScaleService, PlyMouthScalePath, PlyMouthScaleInterface, QDBusConnection::systemBus(), this)) , m_syncHelperInter(nullptr) , m_aclInter(nullptr) { // in this function, it will wait for 50 seconds finall return m_grubScaleInter->setTimeout(50000); QDBusConnection::systemBus().connect( GrubService, GrubThemePath, GrubThemeInterface, "BackgroundChanged", this, SIGNAL(BackgroundChanged()) ); QDBusConnection::systemBus().connect( LicenseService, LicensePath, LicenseInterface, "LicenseStateChange", this, SLOT(onLicenseStateChanged())); m_isACLController = isACLActivatable(); if (m_isACLController) { qInfo(dcCommonLog) << "DeveloperMode uses ACL service to work."; } else { qInfo(dcCommonLog) << "ACL is unActivatable, DeveloperMode uses deepinId service to work."; } if (m_isACLController) { m_aclInter = new DDBusInterface(ACLHelperService, ACLHelperPath, ACLHelperInterface, QDBusConnection::systemBus(), this); if (!m_aclInter->isValid()) { qWarning(dcCommonLog) << "ACL is invalid, error msg:" << m_aclInter->lastError(); } QDBusConnection::systemBus().connect(ACLHelperService, ACLHelperPath, ACLHelperInterface, "NotifyDeveloperMode", this, SIGNAL(DeveloperModeChanged(bool))); QDBusConnection::systemBus().connect(ACLHelperService, ACLHelperPath, ACLHelperInterface, "NotifyDeveloperMode", this, SIGNAL(DeviceUnlockedChanged(bool))); QDBusConnection::systemBus().connect(ACLHelperService, ACLHelperPath, ACLHelperInterface, "NotifyDeveloperModeError", this, SLOT(onACLError(quint32))); } else { m_syncHelperInter = new DDBusInterface(SyncHelperService, SyncHelperPath, SyncHelperInterface, QDBusConnection::systemBus(), this); m_deepinIdInter = new DDBusInterface(DeepinIdService, DeepinIdPath, DeepinIdInterface, QDBusConnection::sessionBus(), this); QDBusConnection::sessionBus().connect(DeepinIdService, DeepinIdPath, DeepinIdInterface, "Error", this, SIGNAL(onDeepinIdError(const int, const QString &))); } } bool CommonInfoProxy::IsLogin() { if (m_isACLController) { qWarning(dcCommonLog) << "Don't need to check isLogin deepinId when using ACL service."; return false; } else { return qvariant_cast(m_deepinIdInter->property("IsLogin")); } } bool CommonInfoProxy::DeviceUnlocked() { if (m_isACLController) { QDBusReply reply = m_aclInter->call("GetDeveloperModeStatus"); if (reply.isValid()) { return reply.value(); } qWarning(dcCommonLog) << "Failed to GetDeveloperModeStatus"; return false; } else { return qvariant_cast(m_deepinIdInter->property("DeviceUnlocked")); } } void CommonInfoProxy::UnlockDevice() { if (m_isACLController) { QDBusPendingCall call = m_aclInter->asyncCall("AsyncEnableDeveloperModeCompatible"); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *w) { if (w->isError()) { qWarning(dcCommonLog) << "EnableDeveloperModeCompatible DBus call failed:" << w->error().message(); Q_EMIT developModeError("1001"); } w->deleteLater(); }); } else { m_deepinIdInter->asyncCall("UnlockDevice"); } } void CommonInfoProxy::Login() { if (m_isACLController) { qWarning(dcCommonLog) << "Don't need login deepinId when using ACL service."; } else { m_deepinIdInter->asyncCall("Login"); } } QStringList CommonInfoProxy::GetSimpleEntryTitles() { QDBusReply reply = m_grubInter->call(QStringLiteral("GetSimpleEntryTitles")); if (reply.isValid()) return reply.value(); return {}; } bool CommonInfoProxy::EnableTheme() { return qvariant_cast(m_grubInter->property("EnableTheme")); } void CommonInfoProxy::setEnableTheme(const bool value) { QDBusPendingCall call = m_grubInter->asyncCallWithArgumentList("SetEnableTheme", { value }); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { Q_EMIT resetEnableTheme(); } else { Q_EMIT EnableThemeChanged(value); } watcher->deleteLater(); }); } bool CommonInfoProxy::Updating() { return qvariant_cast(m_grubInter->property("Updating")); } QString CommonInfoProxy::DefaultEntry() { return qvariant_cast(m_grubInter->property("DefaultEntry")); } void CommonInfoProxy::setDefaultEntry(const QString &entry) { m_grubInter->asyncCallWithArgumentList("SetDefaultEntry", { entry }); } uint CommonInfoProxy::Timeout() { return qvariant_cast(m_grubInter->property("Timeout")); } void CommonInfoProxy::setTimeout(const uint timeout) { QList argumentList; argumentList << QVariant::fromValue(timeout); m_grubInter->callWithCallback(QStringLiteral("SetTimeout"), argumentList, this, nullptr, SLOT(onSetTimeoutError(QDBusError))); } QStringList CommonInfoProxy::EnabledUsers() { return qvariant_cast(m_grubEditAuthInter->property("EnabledUsers")); } void CommonInfoProxy::DisableUser(const QString &username) { QDBusPendingCall call = m_grubEditAuthInter->asyncCallWithArgumentList("Disable", { username }); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { Q_EMIT resetGrubEditAuthEnabled(); } watcher->deleteLater(); }); } void CommonInfoProxy::EnableUser(const QString &username, const QString &password) { QDBusPendingCall call = m_grubEditAuthInter->asyncCallWithArgumentList("Enable", { username, password }); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { Q_EMIT resetGrubEditAuthEnabled(); } watcher->deleteLater(); }); } QDBusPendingCall CommonInfoProxy::SetScalePlymouth(int scale) { return m_grubScaleInter->asyncCallWithArgumentList("ScalePlymouth", { scale }); } bool CommonInfoProxy::DeveloperMode() { if (m_isACLController) { return DeviceUnlocked(); } else { return qvariant_cast(m_syncHelperInter->property("DeveloperMode")); } } QString CommonInfoProxy::Background() { QDBusReply reply = m_grubThemeInter->call(QStringLiteral("GetBackground")); if (reply.isValid()) return reply.value(); return QString(); } void CommonInfoProxy::setBackground(const QString &name) { m_grubThemeInter->asyncCallWithArgumentList("SetBackgroundSourceFile", { name }); } int CommonInfoProxy::AuthorizationState() { return qvariant_cast(m_licenseInter->property("AuthorizationState")); } int CommonInfoProxy::LicenseState() { return qvariant_cast(m_licenseInter->property("LicenseState")); } void CommonInfoProxy::Enable(const bool value) { m_userexperienceInter->asyncCallWithArgumentList("Enable", { value }); } bool CommonInfoProxy::IsEnabled() { QDBusReply reply = m_userexperienceInter->call(QStringLiteral("IsEnabled")); if (reply.isValid()) return reply.value(); return false; } void CommonInfoProxy::Notify(const QString &inAppName, const uint replacesId, const QString &appIcon, const QString &summary, const QString &body, const QStringList &actions, const QVariantMap &hints, const int expireTimeout) { Dtk::Core::DUtil::DNotifySender(summary).appName(inAppName).replaceId(replacesId).appIcon(appIcon).appBody(body).actions(actions).hints(hints).timeOut(expireTimeout).call(); } bool CommonInfoProxy::isACLController() const { return m_isACLController; } bool CommonInfoProxy::setReadOnlyProtectionEnabled(bool enabled) { qCInfo(dcCommonLog) << "setReadOnlyProtectionEnabled:" << enabled; auto call = DDBusSender::system() .service(ReadOnlyProtectionService) .path(ReadOnlyProtectionPath) .interface(ReadOnlyProtectionInterface) .method("SetReadOnlyProtection") .arg(enabled) .call(); call.waitForFinished(); if (call.isError()) { qCWarning(dcCommonLog) << "setReadOnlyProtectionEnabled failed:" << call.error().message(); return false; } return true; } void CommonInfoProxy::onDeepinIdError(const int code, const QString &msg) { Q_UNUSED(code); QString msgCode = msg; msgCode = msgCode.split(":").at(0); Q_EMIT developModeError(msgCode); } void CommonInfoProxy::onACLError(quint32 exitCode) { if (exitCode != 256) { qWarning(dcCommonLog) << "AsyncEnableDeveloperModeCompatible DBus call exitCode:" << exitCode; Q_EMIT developModeError("1001"); } } void CommonInfoProxy::onLicenseStateChanged() { const auto state = AuthorizationState(); Q_EMIT AuthorizationStateChanged(state); } void CommonInfoProxy::onSetTimeoutError(const QDBusError &error) { Q_UNUSED(error); Q_EMIT resetBootDelay(); } ================================================ FILE: src/plugin-commoninfo/operation/commoninfoproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include using Dtk::Core::DDBusInterface; class CommonInfoProxy : public QObject { Q_OBJECT public: explicit CommonInfoProxy(QObject *parent = nullptr); // deepin id Q_PROPERTY(bool IsLogin READ IsLogin NOTIFY IsLoginChanged) bool IsLogin(); Q_PROPERTY(bool DeviceUnlocked READ DeviceUnlocked NOTIFY DeviceUnlockedChanged) bool DeviceUnlocked(); void UnlockDevice(); void Login(); // grub2 QStringList GetSimpleEntryTitles(); Q_PROPERTY(bool EnableTheme READ EnableTheme WRITE setEnableTheme NOTIFY EnableThemeChanged) bool EnableTheme(); void setEnableTheme(const bool value); Q_PROPERTY(bool Updating READ Updating NOTIFY UpdatingChanged) bool Updating(); Q_PROPERTY(QString DefaultEntry READ DefaultEntry WRITE setDefaultEntry NOTIFY DefaultEntryChanged) QString DefaultEntry(); void setDefaultEntry(const QString &entry); Q_PROPERTY(uint Timeout READ Timeout WRITE setTimeout NOTIFY TimeoutChanged) uint Timeout(); void setTimeout(const uint timeout); // grub2.EditAuth Q_PROPERTY(QStringList EnabledUsers READ EnabledUsers NOTIFY EnabledUsersChanged) QStringList EnabledUsers(); void DisableUser(const QString &username); void EnableUser(const QString &username, const QString &password); // grub2.Theme Q_PROPERTY(QString Background READ Background WRITE setBackground NOTIFY BackgroundChanged) QString Background(); void setBackground(const QString &name); // license Q_PROPERTY(int AuthorizationState READ AuthorizationState NOTIFY AuthorizationStateChanged) int AuthorizationState(); Q_PROPERTY(int LicenseState READ LicenseState NOTIFY LicenseStateChanged) int LicenseState(); // userexperience void Enable(const bool value); bool IsEnabled(); // notification void Notify(const QString &inAppName, const uint replacesId, const QString &appIcon, const QString &summary, const QString &body, const QStringList &actions, const QVariantMap &hints, const int expireTimeout); // groubScale QDBusPendingCall SetScalePlymouth(int scale); Q_PROPERTY(bool DeveloperMode READ DeveloperMode NOTIFY DeveloperModeChanged) bool DeveloperMode(); bool isACLController() const; // Solid System Read-Only Protection bool setReadOnlyProtectionEnabled(bool enabled); Q_SIGNALS: // SIGNALS // deepin id void IsLoginChanged(const bool value); void DeviceUnlockedChanged(const bool value); void DeveloperModeChanged(const bool value); // grub2 void EnableThemeChanged(const bool value); void UpdatingChanged(const bool value); void DefaultEntryChanged(const QString &entry); void TimeoutChanged(const uint value); // grub2.EditAuth void EnabledUsersChanged(const QStringList &users); // grub2.Theme void BackgroundChanged(); // license void AuthorizationStateChanged(const int code); void LicenseStateChanged(const int code); void developModeError(const QString &msgCode); // reset signals void resetEnableTheme(); void resetGrubEditAuthEnabled(); void resetBootDelay(); private Q_SLOTS: void onDeepinIdError(const int code, const QString &msg); void onACLError(quint32 exitCode); void onLicenseStateChanged(); void onSetTimeoutError(const QDBusError &error); private: DDBusInterface *m_grubInter; DDBusInterface *m_grubThemeInter; DDBusInterface *m_grubEditAuthInter; DDBusInterface *m_deepinIdInter; DDBusInterface *m_licenseInter; DDBusInterface *m_userexperienceInter; DDBusInterface *m_grubScaleInter; DDBusInterface *m_syncHelperInter; DDBusInterface *m_aclInter = nullptr; bool m_isACLController = false; }; ================================================ FILE: src/plugin-commoninfo/operation/commoninfowork.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "commoninfowork.h" #include "commoninfomodel.h" #include "commoninfoproxy.h" #include "utils.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include Q_LOGGING_CATEGORY(DccCommonInfoWork, "dcc-commoninfo-work"); #define IS_COMMUNITY_SYSTEM (DSysInfo::UosCommunity == DSysInfo::uosEditionType()) // 是否是社区版 std::mutex SCALE_SETTING_GUARD; static const QString PlyMouthConf = QStringLiteral("/etc/plymouth/plymouthd.conf"); static const QString kTmpGrubBgDir = QStringLiteral("/tmp/dcc-grub-backgrounds"); constexpr const char* const BOOT_WALLPAPER_ENABLED = "bootWallpaperEnabled"; constexpr const char* const BOOT_GRUB_USERNAME_VISIBLE = "bootGrubUserNameVisible"; const QString &GRUB_EDIT_AUTH_ACCOUNT("root"); const QStringList &SYSTEM_LOCAL_LIST { "zh_CN", "zh_HK", "zh_TW", "ug_CN", // 维语 "bo_CN" // 藏语 }; const QMap &SYSTEM_LOCAL_MAP { {"zh_CN", "zh_CN"}, {"zh_HK", "zh_HK"}, {"zh_TW", "zh_TW"}, }; static const QString getLicensePath(const QString &filePath, const QString &type) { const QString& locale { QLocale::system().name() }; QString lang = SYSTEM_LOCAL_LIST.contains(locale) ? locale : "en_US"; QString path = QString(filePath).arg(lang).arg(type); if (QFile(path).exists()) return path; else return QString(filePath).arg("en_US").arg(type); } static QString getUserExpContent() { QString userExpContent = getLicensePath("/usr/share/protocol/userexperience-agreement/User-Experience-Program-License-Agreement-CN-%1.md", ""); if (DSysInfo::isCommunityEdition()) { userExpContent = getLicensePath("/usr/share/deepin-deepinid-client/privacy/User-Experience-Program-License-Agreement-Community/User-Experience-Program-License-Agreement-CN-%1.md", ""); return userExpContent; } QFile newfile(userExpContent); if (false == newfile.exists()) { userExpContent = getLicensePath("/usr/share/deepin-deepinid-client/privacy/User-Experience-Program-License-Agreement/User-Experience-Program-License-Agreement-CN-%1.md", ""); QFile file(userExpContent); if (false == file.exists()) { userExpContent = getLicensePath("/usr/share/deepin-deepinid-client/privacy/User-Experience-Program-License-Agreement-%1.md", ""); } } return userExpContent; } static const QString getDevelopModeLicense(const QString &filePath, const QString &type) { const QString& locale { QLocale::system().name() }; QString lang; if (SYSTEM_LOCAL_MAP.keys().contains(locale)) { lang = { SYSTEM_LOCAL_MAP.value(QLocale::system().name(), "en_US") }; } if (lang.isEmpty()) { lang = { SYSTEM_LOCAL_MAP.value(QLocale::system().name(), "en_US") }; } QString path = QString(filePath).arg(lang).arg(type); QFile license(path); if (!license.open(QIODevice::ReadOnly)) return QString(); const QByteArray buf = license.readAll(); license.close(); return buf; } static void notifyInfo(const QString &summary) { DUtil::DNotifySender(summary) .appIcon("") .appName("org.deepin.dde.control-center") .timeOut(5000) .call(); } static void notifyInfoWithBody(const QString &summary, const QString &body) { DUtil::DNotifySender(summary) .appIcon("") .appName("org.deepin.dde.control-center") .appBody(body) .timeOut(5000) .call(); } QDBusArgument &operator<<(QDBusArgument &argument, const DebugArg &debugArg) { argument.beginStructure(); argument << debugArg.module; argument << debugArg.state; argument.endStructure(); return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, DebugArg&debugArg) { argument.beginStructure(); argument >> debugArg.module; argument >> debugArg.state; argument.endStructure(); return argument; } CommonInfoWork::CommonInfoWork(CommonInfoModel *model, QObject *parent) : QObject(parent) , m_commomModel(model) , m_commonInfoProxy(new CommonInfoProxy(this)) , m_title("") , m_content("") , m_scaleIsSetting(false) , m_debugConfigInter(new QDBusInterface("org.deepin.DebugConfig", "/org/deepin/DebugConfig", "org.deepin.DebugConfig", QDBusConnection::systemBus(), this)) , m_inter(new QDBusInterface("com.deepin.sync.Helper", "/com/deepin/sync/Helper", "com.deepin.sync.Helper", QDBusConnection::systemBus(), this)) , m_dtkConfig(Dtk::Core::DConfig::create("org.deepin.dde.control-center", "org.deepin.dde.control-center.commoninfo", QString(), this)) { //注册类型 qRegisterMetaType("DebugArg"); qDBusRegisterMetaType(); qRegisterMetaType("DebugArgList"); qDBusRegisterMetaType(); qRegisterMetaType("DMIInfo"); qDBusRegisterMetaType(); qRegisterMetaType("HardwareInfo"); qDBusRegisterMetaType(); //监听开发者在线认证失败的错误接口信息 connect(m_commonInfoProxy, &CommonInfoProxy::developModeError, this, &CommonInfoWork::onDevelopModeError); connect(m_commonInfoProxy, &CommonInfoProxy::IsLoginChanged, m_commomModel, &CommonInfoModel::setIsLogin); connect(m_commonInfoProxy, &CommonInfoProxy::DeviceUnlockedChanged, m_commomModel, &CommonInfoModel::setDeveloperModeState); connect(m_commonInfoProxy, &CommonInfoProxy::DefaultEntryChanged, m_commomModel, &CommonInfoModel::setDefaultEntry); // connect(m_commonInfoProxy, &CommonInfoProxy::EnableThemeChanged, m_commomModel, &CommonInfoModel::setThemeEnabled); connect(m_commonInfoProxy, &CommonInfoProxy::EnableThemeChanged, m_commomModel, [this](bool ThemeEnable) { m_commomModel->setGrubThemePath(m_commonInfoProxy->Background()); m_commomModel->setThemeEnabled(ThemeEnable); }); connect(m_commonInfoProxy, &CommonInfoProxy::TimeoutChanged, m_commomModel, [this] (const uint timeout) { m_commomModel->setBootDelay(timeout > 1); }); connect(m_commonInfoProxy, &CommonInfoProxy::UpdatingChanged, m_commomModel, &CommonInfoModel::setUpdating); connect(m_commonInfoProxy, &CommonInfoProxy::BackgroundChanged, m_commomModel, [this] () { if (!m_commomModel->themeEnabled()) { setEnableTheme(true); m_commomModel->setThemeEnabled(true); } QString backgroundPath = m_commonInfoProxy->Background(); QPixmap pix = QPixmap(backgroundPath); m_commomModel->setGrubThemePath(backgroundPath); m_commomModel->setBackground(pix); m_tmpBackgroundPath.clear(); QDir dir(kTmpGrubBgDir); if (dir.exists()) { dir.removeRecursively(); } }); connect(m_commonInfoProxy, &CommonInfoProxy::EnabledUsersChanged, m_commomModel, [this] (const QStringList &users) { m_commomModel->setGrubEditAuthEnabled(users.contains(GRUB_EDIT_AUTH_ACCOUNT)); }); connect(m_commonInfoProxy, &CommonInfoProxy::AuthorizationStateChanged, m_commomModel, [this] (const int code) { m_commomModel->setActivation(code == 1 || code == 3); }); connect(m_commonInfoProxy, &CommonInfoProxy::resetEnableTheme, this, [=](){ m_commomModel->themeEnabledChanged(m_commomModel->themeEnabled()); }); connect(m_commonInfoProxy, &CommonInfoProxy::resetGrubEditAuthEnabled, this, &CommonInfoWork::resetEditAuthEnabled); connect(m_commonInfoProxy, &CommonInfoProxy::resetBootDelay, this, [=](){ Q_EMIT m_commomModel->bootDelayChanged(m_commomModel->bootDelay()); }); connect(m_commonInfoProxy, &CommonInfoProxy::DeveloperModeChanged, m_commomModel, &CommonInfoModel::setIsDeveloperMode); initDtkConfig(); } CommonInfoWork::~CommonInfoWork() { if (m_process) { //如果控制中心被强制关闭,需要用kill来杀掉没有被关闭的窗口 kill(static_cast<__pid_t>(m_process->processId()), 15); m_process->deleteLater(); m_process = nullptr; } } void CommonInfoWork::active() { m_commomModel->setShowGrubEditAuth(true); m_commomModel->setIsLogin(m_commonInfoProxy->IsLogin()); m_commomModel->setDeveloperModeState(m_commonInfoProxy->DeviceUnlocked()); m_commomModel->setIsDeveloperMode(m_commonInfoProxy->DeveloperMode()); m_commomModel->setThemeEnabled(m_commonInfoProxy->EnableTheme()); m_commomModel->setBootDelay(m_commonInfoProxy->Timeout() > 1); m_commomModel->setGrubEditAuthEnabled(m_commonInfoProxy->EnabledUsers().contains(GRUB_EDIT_AUTH_ACCOUNT)); m_commomModel->setUpdating(m_commonInfoProxy->Updating()); updateImmutableWritableStatus(); m_commomModel->setReadOnlyProtectionEnabled(isReadOnlyProtectionEnabled()); auto AuthorizationState = m_commonInfoProxy->AuthorizationState(); m_commomModel->setActivation(AuthorizationState == 1 || AuthorizationState == 3); m_commomModel->setUeProgram(m_commonInfoProxy->IsEnabled()); m_commomModel->setEntryLists(m_commonInfoProxy->GetSimpleEntryTitles()); m_commomModel->setDefaultEntry(m_commonInfoProxy->DefaultEntry()); initGrubAnimationModel(); initGrubMenuListModel(); initDebugLogLevel(); m_commomModel->setGrubThemePath(m_commonInfoProxy->Background()); } void CommonInfoWork::initGrubAnimationModel() { QList> scaleThemeList; if (IS_COMMUNITY_SYSTEM) { scaleThemeList.append(QPair(2, "boot_deepin")); scaleThemeList.append(QPair(1, "boot_deepin")); } else { scaleThemeList.append(QPair(2, "boot_uos")); scaleThemeList.append(QPair(1, "boot_uos")); } auto [factor, themeName] = getPlyMouthInformation(); m_commomModel->setPlymouthScale(factor); m_commomModel->setPlymouthTheme(themeName); QList list; for (auto item : scaleThemeList) { GrubAnimationData tempData; tempData.startAnimation = false; tempData.imagePath = item.second; tempData.text = item.first == 2 ? tr("Large size") : tr("Small size"); tempData.plymouthScale = item.first; tempData.checkStatus = factor == item.first; if (item.first == 2) { tempData.scale = 1; } else if (item.first == 1) { tempData.scale = 0.65; } else { tempData.scale = 1; } list.append(tempData); } m_commomModel->grubAnimationModel()->initData(list); } void CommonInfoWork::initGrubMenuListModel() { QList list; for (QString item : m_commomModel->entryLists()) { GrubMenuData data; data.text = item; data.checkStatus = QString::compare(m_commomModel->defaultEntry(), item, Qt::CaseSensitive) == 0; list.append(data); } m_commomModel->grubMenuListModel()->initData(list); } void CommonInfoWork::initDebugLogLevel() { QStringList arg = {"all"}; QDBusPendingCall state = m_debugConfigInter->asyncCall("GetState", arg); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(state, this); connect(watcher, &QDBusPendingCallWatcher::finished, [this, watcher, state] { if (!state.isError()) { QDBusReply res = state.reply(); qInfo() << "GetState:" << res.value(); bool debugState = res.value().first() == "debug"; int index = debugState ? 1 : 0; m_commomModel->setDebugLogCurrentIndex(index); } else { qWarning() << "GetState failed:" << state.error(); } watcher->deleteLater(); }); } void CommonInfoWork::initDtkConfig() { if (!m_dtkConfig) return; connect(m_dtkConfig, &Dtk::Core::DConfig::valueChanged, this, &CommonInfoWork::onDTKConfigChanged); const QStringList configKeys = { BOOT_WALLPAPER_ENABLED, BOOT_GRUB_USERNAME_VISIBLE }; for (const QString& key : configKeys) { onDTKConfigChanged(key); } } QString CommonInfoWork::verifyPassword(QString text) { PwqualityManager::ERROR_TYPE error = PwqualityManager::instance()->verifyPassword("", text, PwqualityManager::CheckType::Grub2); return error != PwqualityManager::ERROR_TYPE::PW_NO_ERR ? PwqualityManager::instance()->getErrorTips(error, PwqualityManager::CheckType::Grub2) : ""; } void CommonInfoWork::jumpToSecurityCenter() { DDBusSender() .service("com.deepin.defender.hmiscreen") .interface("com.deepin.defender.hmiscreen") .path("/com/deepin/defender/hmiscreen") .method(QString("ShowPage")) .arg(QString("securitytools")) .arg(QString("application-safety")) .call(); } void CommonInfoWork::setLogDebug(int index) { const bool isOn = index == 1; const QString &state = isOn ? "debug" : "warning"; qInfo() << "SetDebug arg:" << state; DebugArg arg; arg.state = state; arg.module = "all"; DebugArgList argList; argList << arg; QDBusPendingCall reply = m_debugConfigInter->asyncCall("SetDebug", QVariant::fromValue(argList)); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this); connect(watcher, &QDBusPendingCallWatcher::finished, [watcher, reply, this] { if (reply.isError()) { qWarning() << "SetDebug failed:" << reply.error(); } // Todo 由于org.deepin.DebugConfig后端AllDebugLevel属性变化后没有发送信号,当前临时手动取数据,后端加上信号后改成监听信号 initDebugLogLevel(); watcher->deleteLater(); }); } void CommonInfoWork::importCertificate(QString filePath) { filePath = filePath.remove("file://"); //读取机器信息证书 QFile fFile(filePath); if (!fFile.open(QIODevice::ReadOnly)) { qDebug() << "Can't open file for writing"; } QByteArray data = fFile.readAll(); QDBusMessage msg = m_inter->call("EnableDeveloperMode", data); //当返回信息为错误接口信息才处理 if (msg.type() == QDBusMessage::MessageType::ErrorMessage) { //系统通知弹窗qdbus 接口 QDBusInterface tInterNotify("org.deepin.dde.Notification1", "/org/deepin/dde/Notification1", "org.deepin.dde.Notification1", QDBusConnection::sessionBus()); //初始化Notify 七个参数 QString in0(QObject::tr("dde-control-center")); uint in1 = 0; QString in2("preferences-system"); QString in3(""); QString in4(""); QStringList in5; QVariantMap in6; int in7 = 5000; //截取error接口 1001:未导入证书 1002:未登录 1003:无法获取硬件信息 1004:网络异常 1005:证书加载失败 1006:签名验证失败 1007:文件保存失败 QString msgcode = msg.errorMessage(); msgcode = msgcode.split(":").at(0); if (msgcode == "1001") { in3 = tr("Failed to get root access"); } else if (msgcode == "1002") { in3 = tr("Please sign in to your Union ID first"); } else if (msgcode == "1003") { in3 = tr("Cannot read your PC information"); } else if (msgcode == "1004") { in3 = tr("No network connection"); } else if (msgcode == "1005") { in3 = tr("Certificate loading failed, unable to get root access"); } else if (msgcode == "1006") { in3 = tr("Signature verification failed, unable to get root access"); } else if (msgcode == "1007") { in3 = tr("Failed to get root access"); } //系统通知认证失败 无法进入开发模式 tInterNotify.call("Notify", in0, in1, in2, in3, in4, in5, in6, in7); } } void CommonInfoWork::exportMessage(QString filePath) { filePath = filePath.remove("file://"); qDebug() << " importCertificate file path : " << filePath; QDBusInterface licenseInfo("com.deepin.sync.Helper", "/com/deepin/sync/Helper", "com.deepin.sync.Helper", QDBusConnection::systemBus()); QDBusReply hardwareInfo = licenseInfo.call(QDBus::AutoDetect, "GetHardware"); QString fileName = filePath; if (fileName.isEmpty()) return; QFile file(fileName); if (!file.open(QIODevice::ReadWrite)) qWarning() << "File open error, file name: " << fileName; else qInfo() << "Open file: " << fileName; // 使用QJsonObject对象插入键值对。 QJsonObject jsonObject; auto hardwareInfoValue = hardwareInfo.value(); auto hardwareDMIValue = hardwareInfo.value().dmi; jsonObject.insert("id", hardwareInfoValue.id); jsonObject.insert("hostname", hardwareInfoValue.hostName); jsonObject.insert("username", hardwareInfoValue.username); jsonObject.insert("cpu", hardwareInfoValue.cpu); jsonObject.insert("laptop", hardwareInfoValue.laptop); jsonObject.insert("memory", hardwareInfoValue.memory); jsonObject.insert("network_cards", hardwareInfoValue.networkCards); QJsonObject objectDMI; objectDMI.insert("bios_vendor", hardwareDMIValue.biosVendor); objectDMI.insert("bios_version", hardwareDMIValue.biosVersion); objectDMI.insert("bios_date", hardwareDMIValue.biosDate); objectDMI.insert("board_name", hardwareDMIValue.boardName); objectDMI.insert("board_serial", hardwareDMIValue.boardSerial); objectDMI.insert("board_vendor", hardwareDMIValue.boardVendor); objectDMI.insert("board_version", hardwareDMIValue.boardVersion); objectDMI.insert("product_name", hardwareDMIValue.productName); objectDMI.insert("product_family", hardwareDMIValue.productFamily); objectDMI.insert("product_serial", hardwareDMIValue.producctSerial); objectDMI.insert("product_uuid", hardwareDMIValue.productUUID); objectDMI.insert("product_version", hardwareDMIValue.productVersion); jsonObject.insert("dmi", objectDMI); //使用QJsonDocument设置该json对象 QJsonDocument jsonDoc; jsonDoc.setObject(jsonObject); //将json以文本形式写入文件并关闭文件 file.write(jsonDoc.toJson()); file.close(); } void CommonInfoWork::resetEditAuthEnabled() { Q_EMIT m_commomModel->grubEditAuthEnabledChanged(m_commomModel->grubEditAuthEnabled()); } void CommonInfoWork::setReadOnlyProtectionEnabled(bool enabled) { auto ret = m_commonInfoProxy->setReadOnlyProtectionEnabled(enabled); if (!ret) { qCWarning(DccCommonInfoWork) << "setReadOnlyProtectionEnabled failed, enabled:" << enabled; } updateImmutableWritableStatus(); const bool status = isReadOnlyProtectionEnabled(); if (enabled == status) { qCInfo(DccCommonInfoWork) << "setReadOnlyProtectionEnabled applied successfully, enabled:" << enabled; const QStringList rebootCommand{"dbus-send", "--session", "--print-reply", "--dest=org.deepin.dde.ShutdownFront1", "/org/deepin/dde/ShutdownFront1", "org.deepin.dde.ShutdownFront1.Restart"}; DUtil::DNotifySender("") .appBody(tr("Restart device to finish applying Solid System Read-Only Protection settings")) .actions({"reboot", tr("Restart now"), "dismiss", tr("Dismiss")}) .hints({ {"x-deepin-action-reboot", rebootCommand} }) .timeOut(5000) .call(); } else { qCWarning(DccCommonInfoWork) << "setReadOnlyProtectionEnabled failed to apply, enabled:" << enabled; } m_commomModel->setReadOnlyProtectionEnabled(status); } bool CommonInfoWork::showReadOnlyProtection() const { if (!existImmutableWritable()) { qCDebug(DccCommonInfoWork) << "showReadOnlyProtection: false, immutable writable not exist"; return false; } if (isImmutableAutoRecovery()) { qCDebug(DccCommonInfoWork) << "showReadOnlyProtection: false, immutable writable in auto recovery"; return false; } Dtk::Core::DConfig config("org.deepin.dde.control-center.commoninfo"); bool ret = config.value("showReadOnlyProtection", true).toBool(); qCDebug(DccCommonInfoWork) << "showReadOnlyProtection:" << ret; return ret; } void CommonInfoWork::onDTKConfigChanged(const QString& key) { if (!m_dtkConfig || !m_dtkConfig->isValid()) { qCWarning(DccCommonInfoWork) << "Invalid CommonInfo DConfig."; return; } if (!m_commomModel) { qCWarning(DccCommonInfoWork) << "Invalid CommonInfo Model."; return; } if (key == BOOT_WALLPAPER_ENABLED) m_commomModel->setBootWallpaperEnabled(m_dtkConfig->value(key).toBool()); else if (key == BOOT_GRUB_USERNAME_VISIBLE) m_commomModel->setBootGrubUserNameVisible(m_dtkConfig->value(key).toBool()); } void CommonInfoWork::setBootDelay(bool value) { qDebug()<<" CommonInfoWork::setBootDelay value = "<< value; m_commonInfoProxy->setTimeout(value ? 5 : 1); } void CommonInfoWork::setEnableTheme(bool value) { m_commonInfoProxy->setEnableTheme(value); } void CommonInfoWork::disableGrubEditAuth() { m_commonInfoProxy->DisableUser(GRUB_EDIT_AUTH_ACCOUNT); } void CommonInfoWork::onSetGrubEditPasswd(const QString &password, const bool &isReset) { Q_UNUSED(isReset); // 密码加密后发送到后端存储 m_commonInfoProxy->EnableUser(GRUB_EDIT_AUTH_ACCOUNT, passwdEncrypt(password)); } void CommonInfoWork::setDefaultEntry(const QString &entry) { m_commonInfoProxy->setDefaultEntry(entry); } void CommonInfoWork::setBackground(const QString &path) { QFileInfo fileInfo(path); QString realPath = path; if (fileInfo.exists() && fileInfo.isSymLink()) { realPath = fileInfo.symLinkTarget(); if (QFileInfo(realPath).isRelative()) { realPath = fileInfo.dir().absoluteFilePath(realPath); } qCDebug(DccCommonInfoWork) << "Resolved symlink" << path << "to" << realPath; } QString suffix = QFileInfo(realPath).suffix(); if (suffix.isEmpty()) { suffix = "img"; } QString baseName = QFileInfo(realPath).completeBaseName(); if (baseName.isEmpty()) { baseName = "dcc_bg"; } QDir tmpDir(kTmpGrubBgDir); if (!tmpDir.exists()) { tmpDir.mkpath("."); } QString tmpName = tmpDir.filePath(QString("%1_%2.%3") .arg(baseName) .arg(QDateTime::currentMSecsSinceEpoch()) .arg(suffix)); bool copied = QFile::copy(realPath, tmpName); if (copied) { m_tmpBackgroundPath = tmpName; m_commonInfoProxy->setBackground(tmpName); } else { m_tmpBackgroundPath.clear(); m_commonInfoProxy->setBackground(realPath); } } void CommonInfoWork::setUeProgram(bool enabled) { QString current_date = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm::ss.zzz"); if (enabled) { qInfo("suser opened experience project switch."); // 打开license-dialog必要的三个参数:标题、license文件路径、checkBtn的Text QString allowContent(tr("Agree and Join User Experience Program")); // license路径 m_content = getUserExpContent(); m_process = new QProcess(this); auto pathType = "-c"; if (!SYSTEM_LOCAL_LIST.contains(QLocale::system().name())) pathType = "-e"; auto themeType = Dtk::Gui::DGuiApplicationHelper::instance()->themeType(); QString theme = themeType == Dtk::Gui::DGuiApplicationHelper::DarkType ? "dark" : "light"; m_process->start("dde-license-dialog", QStringList() << "-t" << m_title << pathType << m_content << "-a" << allowContent << "-p" << theme); qDebug()<<" Deliver content QStringList() = "<<"dde-license-dialog" << "-t" << m_title << pathType << m_content << "-a" << allowContent << "-p" << theme; connect(m_process, static_cast(&QProcess::finished), this, [=](int result) { if (96 == result) { m_commonInfoProxy->Enable(enabled); m_commomModel->setUeProgram(enabled); } else { m_commomModel->setUeProgram(!enabled); qInfo() << QString("On %1, users cancel the switch to join the user experience program!").arg(current_date); } m_process->deleteLater(); m_process = nullptr; }); } else { m_commonInfoProxy->Enable(enabled); m_commomModel->setUeProgram(enabled); } } void CommonInfoWork::closeUeProgram() { if (m_process) { m_process->kill(); } } void CommonInfoWork::setEnableDeveloperMode(bool enabled) { QDateTime current_date_time = QDateTime::currentDateTime(); QString current_date = current_date_time.toString("yyyy-MM-dd hh:mm::ss.zzz"); if (!enabled) return; // 打开license-dialog必要的三个参数:标题、license文件路径、checkBtn的Text QString title(tr("The Disclaimer of Developer Mode")); QString allowContent(tr("Agree and Request Root Access")); // license内容 QString content = getDevelopModeLicense(":/systeminfo/license/deepin-end-user-license-agreement_developer_community_%1.txt", ""); QString contentPath = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation).append("tmpDeveloperMode.txt");// 临时存储路径 QFile *contentFile = new QFile(contentPath); // 如果文件不存在,则创建文件 if (!contentFile->exists()) { contentFile->open(QIODevice::WriteOnly); contentFile->close(); } // 写入文件内容 if (!contentFile->open(QFile::ReadWrite | QIODevice::Text | QIODevice::Truncate)) return; contentFile->write(content.toLocal8Bit()); contentFile->close(); m_commomModel->setNeedShowModalDialog(true); auto pathType = "-c"; QStringList sl; sl << "zh_CN" << "zh_TW"; if (!sl.contains(QLocale::system().name())) pathType = "-e"; auto themeType = Dtk::Gui::DGuiApplicationHelper::instance()->themeType(); QString theme = themeType == Dtk::Gui::DGuiApplicationHelper::DarkType ? "dark" : "light"; m_process = new QProcess(this); m_process->start("dde-license-dialog", QStringList() << "-t" << title << pathType << contentPath << "-a" << allowContent << "-p" << theme); connect(m_process, static_cast(&QProcess::finished), this, [=](int result) { if (96 == result) { m_commonInfoProxy->UnlockDevice(); } else { qInfo() << QString("On %1, Remove developer mode Disclaimer!").arg(current_date); } m_commomModel->setNeedShowModalDialog(false); contentFile->remove(); contentFile->deleteLater(); m_process->deleteLater(); m_process = nullptr; }); } void CommonInfoWork::login() { m_commonInfoProxy->Login(); } QString CommonInfoWork::passwdEncrypt(const QString &password) { if (password.isEmpty()) { qCWarning(DccCommonInfoWork) << "Empty password provided"; return QString(); } QProcess pbkdf2; pbkdf2.setProgram("grub-mkpasswd-pbkdf2"); pbkdf2.setProcessChannelMode(QProcess::SeparateChannels); pbkdf2.start(); if (!pbkdf2.waitForStarted()) { qCWarning(DccCommonInfoWork) << "Failed to start grub-mkpasswd-pbkdf2:" << pbkdf2.errorString(); return QString(); } // 通过标准输入传递密码(避免命令行注入) // grub-mkpasswd-pbkdf2 期望格式: password\npassword\n QString input = password + "\n" + password + "\n"; pbkdf2.write(input.toUtf8()); pbkdf2.closeWriteChannel(); if (!pbkdf2.waitForFinished()) { qCWarning(DccCommonInfoWork) << "grub-mkpasswd-pbkdf2 execution failed:" << pbkdf2.errorString(); return QString(); } if (pbkdf2.exitCode() != 0) { qCWarning(DccCommonInfoWork) << "grub-mkpasswd-pbkdf2 exited with code:" << pbkdf2.exitCode() << "stderr:" << pbkdf2.readAllStandardError(); return QString(); } // 解析输出:grep PBKDF2 并提取第4个字段 QString output = QString::fromUtf8(pbkdf2.readAllStandardOutput()); QStringList lines = output.split('\n', Qt::SkipEmptyParts); for (const QString &line : lines) { if (line.contains("PBKDF2")) { QStringList fields = line.split(QRegularExpression("\\s+"), Qt::SkipEmptyParts); if (fields.size() >= 4) { return fields.at(3); // 返回第4个字段(下标3) } } } qCWarning(DccCommonInfoWork) << "Failed to parse PBKDF2 output"; return QString(); } std::pair CommonInfoWork::getPlyMouthInformation() { QSettings settings(PlyMouthConf, QSettings::IniFormat); QString themeName = settings.value("Daemon/Theme").toString(); static QStringList ScaleLowDpiThemeNames = {"deepin-logo", "deepin-ssd-logo", "uos-ssd-logo"}; static QStringList ScaleHighDpiThemeNames = {"deepin-hidpi-logo", "deepin-hidpi-ssd-logo", "uos-hidpi-ssd-logo"}; if (ScaleLowDpiThemeNames.contains(themeName)) { return {1, themeName}; } else if (ScaleHighDpiThemeNames.contains(themeName)) { return {2, themeName}; } return {0, QString()}; } bool CommonInfoWork::existImmutableWritable() const { return m_immutableWritableStatus != "error"; } bool CommonInfoWork::isImmutableAutoRecovery() const { return m_immutableWritableStatus == "overlay"; } bool CommonInfoWork::isReadOnlyProtectionEnabled() const { return m_immutableWritableStatus == "remount"; } static QString getDeepinImmutableWritableStatus() { QProcess process; process.setProgram("/usr/bin/deepin-immutable-writable"); process.setArguments({"status", "-j"}); process.start(); process.waitForFinished(5000); if (process.exitCode() != 0) { qWarning() << "deepin-immutable-writable status command failed, exit code:" << process.exitCode(); return QString("error"); } const QByteArray data = process.readAllStandardOutput(); // 解析 JSON 格式的输出 QJsonParseError error; QJsonDocument doc = QJsonDocument::fromJson(data, &error); if (error.error != QJsonParseError::NoError) { qWarning() << "Failed to parse deepin-immutable-writable JSON output:" << error.errorString(); return QString("error"); } QJsonObject rootObj = doc.object(); // 检查返回状态 int code = rootObj.value("code").toInt(-1); if (code != 0) { qWarning() << "deepin-immutable-writable returned error code:" << code << "message:" << rootObj.value("message").toString(); return QString("error"); } QJsonObject dataObj = rootObj.value("data").toObject(); QJsonObject confObj = dataObj.value("conf").toObject(); bool enable = confObj.value("enable").toBool(false); bool clearAfterReboot = confObj.value("clearAfterReboot").toBool(false); bool cleanData = confObj.value("cleanData").toBool(false); // Enable 为 true, 表明功能已开启 // ClearAfterReboot和CleanData在开启无忧还原的时候才会是true if (clearAfterReboot && cleanData) { return QStringLiteral("overlay"); // 无忧还原 } else if (!enable) { return QStringLiteral("remount"); // 只读保护 } return QString(); } void CommonInfoWork::updateImmutableWritableStatus() { m_immutableWritableStatus = getDeepinImmutableWritableStatus(); } void CommonInfoWork::onDevelopModeError(const QString &msgCode) { //初始化Notify 七个参数 QString in0(QObject::tr("dde-control-center")); uint in1 = 0; QString in2("preferences-system"); QString in3(""); QString in4(""); QStringList in5; QVariantMap in6; int in7 = 5000; //截取error接口 1001:未导入证书 1002:未登录 1003:无法获取硬件信息 1004:网络异常 1005:证书加载失败 1006:签名验证失败 1007:文件保存失败 if (msgCode == "1001") { in3 = tr("Failed to get root access"); } else if (msgCode == "1002") { in3 = tr("Please sign in to your Union ID first"); } else if (msgCode == "1003") { in3 = tr("Cannot read your PC information"); } else if (msgCode == "1004") { in3 = tr("No network connection"); } else if (msgCode == "1005") { in3 = tr("Certificate loading failed, unable to get root access"); } else if (msgCode == "1006") { in3 = tr("Signature verification failed, unable to get root access"); } else if (msgCode == "1007") { in3 = tr("Failed to get root access"); } //系统通知 认证失败 无法进入开发模式 m_commonInfoProxy->Notify(in0, in1, in2, in3, in4, in5, in6, in7); } void CommonInfoWork::setPlymouthFactor(int factor) { if (factor == m_commomModel->plymouthScale()) { return; } if (m_scaleIsSetting) { return; } std::lock_guard guard(SCALE_SETTING_GUARD); m_scaleIsSetting = true; m_commomModel->grubAnimationModel()->updateCheckIndex(factor, true); QDBusPendingCall call = m_commonInfoProxy->SetScalePlymouth(factor); notifyInfo(tr("Start setting the new boot animation, please wait for a minute")); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, watcher, call] { if (call.isError()) { qCWarning(DccCommonInfoWork) << "DBus Error: " << call.error(); } auto [factor, themeName] = getPlyMouthInformation(); m_commomModel->setPlymouthTheme(themeName); m_commomModel->setPlymouthScale(factor); notifyInfoWithBody(tr("Setting new boot animation finished"), tr("The settings will be applied after rebooting the system")); m_scaleIsSetting = false; watcher->deleteLater(); Q_EMIT settingScaling(false); }); Q_EMIT settingScaling(true); } bool CommonInfoWork::isSecurityCenterInstalled() { auto isDbusNameAvailable = [](const QDBusConnection &conn, const QString &serviceName) -> bool { auto *iface = conn.interface(); if (!iface) return false; return iface->isServiceRegistered(serviceName); }; if (isDbusNameAvailable(QDBusConnection::sessionBus(), QStringLiteral("com.deepin.defender.hmiscreen"))) return true; if (isDbusNameAvailable(QDBusConnection::systemBus(), QStringLiteral("com.deepin.defender.AutostartManager"))) return true; return QFileInfo::exists("/usr/libexec/deepin/deepin-defender"); } bool CommonInfoWork::isACLController() const { return m_commonInfoProxy->isACLController(); } ================================================ FILE: src/plugin-commoninfo/operation/commoninfowork.h ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include "pwqualitymanager.h" #include class QProcess; class CommonInfoProxy; class CommonInfoModel; namespace Dtk::Core { class DConfig; } struct DebugArg { QString module; QString state; }; Q_DECLARE_METATYPE(DebugArg) typedef QList DebugArgList; Q_DECLARE_METATYPE(DebugArgList) class CommonInfoWork : public QObject { Q_OBJECT public: explicit CommonInfoWork(CommonInfoModel *model, QObject *parent = nullptr); virtual ~CommonInfoWork(); void active(); bool isSettingPlymouth() { return m_scaleIsSetting; } void initGrubAnimationModel(); void initGrubMenuListModel(); void initDebugLogLevel(); void initDtkConfig(); Q_INVOKABLE QString verifyPassword(QString text); Q_INVOKABLE void jumpToSecurityCenter(); Q_INVOKABLE void setLogDebug(int index); Q_INVOKABLE void importCertificate(QString filePath); Q_INVOKABLE void exportMessage(QString filePath); Q_INVOKABLE void setBackground(const QString &path); Q_INVOKABLE bool isSecurityCenterInstalled(); Q_INVOKABLE bool isACLController() const; public Q_SLOTS: void setBootDelay(bool value); void setEnableTheme(bool value); void setDefaultEntry(const QString &entry); void disableGrubEditAuth(); void onSetGrubEditPasswd(const QString &password, const bool &isReset); void setUeProgram(bool enabled); void closeUeProgram(); void setEnableDeveloperMode(bool enabled); void login(); void onDevelopModeError(const QString &msgCode); void setPlymouthFactor(int factor); void resetEditAuthEnabled(); void setReadOnlyProtectionEnabled(bool enabled); bool showReadOnlyProtection() const; void onDTKConfigChanged(const QString& key); Q_SIGNALS: void settingScaling(bool); private: QString passwdEncrypt(const QString &password); std::pair getPlyMouthInformation(); void updateImmutableWritableStatus(); bool existImmutableWritable() const; bool isImmutableAutoRecovery() const; bool isReadOnlyProtectionEnabled() const; private: CommonInfoModel *m_commomModel; CommonInfoProxy *m_commonInfoProxy; QProcess *m_process = nullptr; QString m_title; QString m_content; bool m_scaleIsSetting; QDBusInterface *m_debugConfigInter; QDBusInterface *m_inter; QString m_tmpBackgroundPath; QString m_immutableWritableStatus; Dtk::Core::DConfig *m_dtkConfig = nullptr; }; class DMIInfo { public: DMIInfo(){} friend QDebug operator<<(QDebug debug, const DMIInfo &info) { debug << QString("DMIInfo(") << info.biosVendor << ", " << info.biosVersion << ", " << info.biosDate << ", " << info.boardName << ", " << info.boardSerial << ", " << info.boardVendor << ", " << info.boardVersion << ", " << info.productName << ", " << info.productFamily << ", " << info.producctSerial << ", " << info.productUUID << ", " << info.productVersion << ")"; return debug; } friend const QDBusArgument &operator>>(const QDBusArgument &arg, DMIInfo &info) { arg.beginStructure(); arg >> info.biosVendor >> info.biosVersion >> info.biosDate >> info.boardName >> info.boardSerial >> info.boardVendor >> info.boardVersion >> info.productName >> info.productFamily >> info.producctSerial >> info.productUUID >> info.productVersion; arg.endStructure(); return arg; } friend QDBusArgument &operator<<(QDBusArgument &arg, const DMIInfo &info) { arg.beginStructure(); arg << info.biosVendor << info.biosVersion << info.biosDate << info.boardName << info.boardSerial << info.boardVendor << info.boardVersion << info.productName << info.productFamily << info.producctSerial << info.productUUID << info.productVersion; arg.endStructure(); return arg; } public: QString biosVendor{""}; QString biosVersion{""}; QString biosDate{""}; QString boardName{""}; QString boardSerial{""}; QString boardVendor{""}; QString boardVersion{""}; QString productName{""}; QString productFamily{""}; QString producctSerial{""}; QString productUUID{""}; QString productVersion{""}; }; class HardwareInfo { public: HardwareInfo(){} friend QDebug operator<<(QDebug debug, const HardwareInfo &info) { debug << "HardwareInfo(" <>(const QDBusArgument &arg, HardwareInfo &info) { arg.beginStructure(); arg >> info.id >> info.hostName >> info.username >> info.os >> info.cpu >> info.laptop >> info.memory >> info.diskTotal >> info.networkCards >> info.diskList >> info.dmi; arg.endStructure(); return arg; } public: QString id{""}; QString hostName{""}; QString username{""}; QString os{""}; QString cpu{""}; bool laptop{false}; qint64 memory{0}; qint64 diskTotal{0}; QString networkCards{""}; QString diskList{""}; DMIInfo dmi; }; Q_DECLARE_METATYPE(DMIInfo) Q_DECLARE_METATYPE(HardwareInfo) ================================================ FILE: src/plugin-commoninfo/operation/grubanimationmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later #include "grubanimationmodel.h" GrubAnimationModel::GrubAnimationModel(QObject *parent) : QAbstractListModel(parent) { } void GrubAnimationModel::initData(const QList &data) { m_grubAnimationDataList.clear(); for (GrubAnimationData item : data) { m_grubAnimationDataList.append({item.imagePath, item.text, item.checkStatus, item.startAnimation, item.scale, item.plymouthScale}); } } void GrubAnimationModel::addAnimation(const GrubAnimationData &data) { int row = rowCount(); beginInsertRows(QModelIndex(), row, row); m_grubAnimationDataList.append({data.imagePath, data.text, data.checkStatus, data.startAnimation, data.scale, data.plymouthScale}); endInsertRows(); } int GrubAnimationModel::rowCount(const QModelIndex &parent) const { // For list models only the root node (an invalid parent) should return the list's size. For all // other (valid) parents, rowCount() should return 0 so that it does not become a tree model. if (parent.isValid()) return 0; return m_grubAnimationDataList.count(); } QVariant GrubAnimationModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.row() < 0 || index.row() >= m_grubAnimationDataList.count()) return QVariant(); const GrubAnimationData &grubAnimationData = m_grubAnimationDataList[index.row()]; // qDebug() << " ================== " << role << grubAnimationData.text << grubAnimationData.checkStatus; if (role == Qt::DisplayRole || role == ImagePath) { return grubAnimationData.imagePath; } else if (role == Text) { return grubAnimationData.text; } else if (role == CheckStatus) { return grubAnimationData.checkStatus; } else if (role == StartAnimation) { return grubAnimationData.startAnimation; } else if (role == Scale) { return grubAnimationData.scale; } else if (role == PlymouthScale) { return grubAnimationData.plymouthScale; } return QVariant(); } bool GrubAnimationModel::insertRows(int row, int count, const QModelIndex &parent) { beginInsertRows(parent, row, row + count - 1); // FIXME: Implement me! endInsertRows(); return true; } bool GrubAnimationModel::removeRows(int row, int count, const QModelIndex &parent) { beginRemoveRows(parent, row, row + count - 1); // FIXME: Implement me! endRemoveRows(); return true; } QHash GrubAnimationModel::roleNames() const { QHash roles; roles[ImagePath] = "imagePath"; roles[Text] = "text"; roles[CheckStatus] = "checkStatus"; roles[StartAnimation] = "startAnimation"; roles[Scale] = "scale"; roles[PlymouthScale] = "plymouthScale"; return roles; } void GrubAnimationModel::addModel(const GrubAnimationData &data) { int row = rowCount(); beginInsertRows(QModelIndex(), row, row); m_grubAnimationDataList.append(data); endInsertRows(); } void GrubAnimationModel::updateCheckIndex(int plymouthScale, bool startAnimation) { for (int index = 0; index < m_grubAnimationDataList.count(); index++) { m_grubAnimationDataList[index].checkStatus = false; m_grubAnimationDataList[index].startAnimation = startAnimation; if (plymouthScale == m_grubAnimationDataList[index].plymouthScale) { m_grubAnimationDataList[index].checkStatus = true; } QModelIndex modelIndex = createIndex(index, 0); Q_EMIT dataChanged(modelIndex, modelIndex, {CheckStatus, StartAnimation}); } } ================================================ FILE: src/plugin-commoninfo/operation/grubanimationmodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later #ifndef GRUBANIMATIONMODEL_H #define GRUBANIMATIONMODEL_H #include struct GrubAnimationData { QString imagePath; QString text; bool checkStatus; bool startAnimation; double scale; int plymouthScale; }; class GrubAnimationModel : public QAbstractListModel { Q_OBJECT enum grubAnimationDataRoles{ ImagePath = Qt::UserRole + 1, Text, CheckStatus, StartAnimation, Scale, PlymouthScale, }; public: explicit GrubAnimationModel(QObject *parent = nullptr); void initData(const QList &data); void addAnimation(const GrubAnimationData& data); // Basic functionality: int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; // Add data: bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; // Remove data: bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; // 角色名映射 QHash roleNames() const override; void addModel(const GrubAnimationData &data); void updateCheckIndex(int plymouthScale, bool startAnimation); private: QList m_grubAnimationDataList; }; #endif // GRUBANIMATIONMODEL_H ================================================ FILE: src/plugin-commoninfo/operation/grubmenulistmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later #include "grubmenulistmodel.h" GrubMenuListModel::GrubMenuListModel(QObject *parent) : QAbstractListModel(parent) { } void GrubMenuListModel::initData(const QList &data) { m_grubMenuDataList.clear(); for (GrubMenuData item : data) { m_grubMenuDataList.append({item.text, item.checkStatus}); } } void GrubMenuListModel::addGrubMenu(const GrubMenuData &data) { int row = rowCount(); beginInsertRows(QModelIndex(), row, row); m_grubMenuDataList.append({data.text, data.checkStatus}); endInsertRows(); } int GrubMenuListModel::rowCount(const QModelIndex &parent) const { // For list models only the root node (an invalid parent) should return the list's size. For all // other (valid) parents, rowCount() should return 0 so that it does not become a tree model. if (parent.isValid()) return 0; return m_grubMenuDataList.count(); } QVariant GrubMenuListModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); const GrubMenuData &grubMenuData = m_grubMenuDataList[index.row()]; if (role == Qt::DisplayRole || role == Text) { return grubMenuData.text; } else if (role == CheckStatus) { return grubMenuData.checkStatus; } return QVariant(); } QHash GrubMenuListModel::roleNames() const { QHash roles; roles[Text] = "text"; roles[CheckStatus] = "checkStatus"; return roles; } void GrubMenuListModel::updateCheckIndex(const QString &text) { for (int index = 0; index < m_grubMenuDataList.count(); index++) { m_grubMenuDataList[index].checkStatus = false; if (QString::compare(text, m_grubMenuDataList[index].text, Qt::CaseSensitive) == 0) { m_grubMenuDataList[index].checkStatus = true; } QModelIndex modelIndex = createIndex(index, 0); Q_EMIT dataChanged(modelIndex, modelIndex, {CheckStatus}); } } ================================================ FILE: src/plugin-commoninfo/operation/grubmenulistmodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later #ifndef GRUBMENULISTMODEL_H #define GRUBMENULISTMODEL_H #include struct GrubMenuData { QString text; bool checkStatus; }; class GrubMenuListModel : public QAbstractListModel { Q_OBJECT enum grubMenuListModelRoles{ Text = Qt::UserRole + 1, CheckStatus }; public: explicit GrubMenuListModel(QObject *parent = nullptr); void initData(const QList &data); void addGrubMenu(const GrubMenuData &data); // Basic functionality: int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; // 角色名映射 QHash roleNames() const override; void updateCheckIndex(const QString &text); private: QList m_grubMenuDataList; }; #endif // GRUBMENULISTMODEL_H ================================================ FILE: src/plugin-commoninfo/operation/pwqualitymanager.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "pwqualitymanager.h" #include #include DCORE_USE_NAMESPACE PwqualityManager::PwqualityManager() : m_passwordMinLen(0) , m_passwordMaxLen(0) { } PwqualityManager *PwqualityManager::instance() { static PwqualityManager pwquality; return &pwquality; } PwqualityManager::ERROR_TYPE PwqualityManager::verifyPassword(const QString &user, const QString &password, CheckType checkType) { switch (checkType) { case PwqualityManager::Default: { ERROR_TYPE error = deepin_pw_check(user.toLocal8Bit().data(), password.toLocal8Bit().data(), LEVEL_STRICT_CHECK, nullptr); if (error == PW_ERR_PW_REPEAT) { error = PW_NO_ERR; } return error; } case PwqualityManager::Grub2: { // LEVEL_STRICT_CHECK? ERROR_TYPE error = deepin_pw_check_grub2(user.toLocal8Bit().data(), password.toLocal8Bit().data(), LEVEL_STANDARD_CHECK, nullptr); if (error == PW_ERR_PW_REPEAT) { error = PW_NO_ERR; } return error; } } return PW_NO_ERR; } PASSWORD_LEVEL_TYPE PwqualityManager::GetNewPassWdLevel(const QString &newPasswd) { return get_new_passwd_strength_level(newPasswd.toLocal8Bit().data()); } QString PwqualityManager::getErrorTips(PwqualityManager::ERROR_TYPE type, CheckType checkType) { int passwordPalimdromeNum = (checkType == Default ? get_pw_palimdrome_num(LEVEL_STRICT_CHECK) : get_pw_palimdrome_num_grub2(LEVEL_STRICT_CHECK)); int passwordMonotoneCharacterNum = (checkType == Default ? get_pw_monotone_character_num(LEVEL_STRICT_CHECK) : get_pw_monotone_character_num_grub2(LEVEL_STRICT_CHECK)); int passwordConsecutiveSameCharacterNum = (checkType == Default ? get_pw_consecutive_same_character_num(LEVEL_STRICT_CHECK) : get_pw_consecutive_same_character_num_grub2(LEVEL_STRICT_CHECK)); m_passwordMinLen = (checkType == Default ? get_pw_min_length(LEVEL_STRICT_CHECK) : get_pw_min_length_grub2(LEVEL_STRICT_CHECK)); m_passwordMaxLen = (checkType == Default ? get_pw_max_length(LEVEL_STRICT_CHECK) : get_pw_max_length_grub2(LEVEL_STRICT_CHECK)); //通用校验规则 QMap PasswordFlagsStrMap = { {PW_ERR_PASSWORD_EMPTY, tr("Password cannot be empty")}, {PW_ERR_LENGTH_SHORT, tr("Password must have at least %1 characters").arg(m_passwordMinLen)}, {PW_ERR_LENGTH_LONG, tr("Password must be no more than %1 characters").arg(m_passwordMaxLen)}, {PW_ERR_CHARACTER_INVALID, tr("Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\\{}[]:\"'<>,.?/)")}, {PW_ERR_PALINDROME, tr("No more than %1 palindrome characters please").arg(passwordPalimdromeNum)}, {PW_ERR_PW_MONOTONE, tr("No more than %1 monotonic characters please").arg(passwordMonotoneCharacterNum)}, {PW_ERR_PW_CONSECUTIVE_SAME, tr("No more than %1 repeating characters please").arg(passwordConsecutiveSameCharacterNum)}, }; //服务器版校验规则 if (DSysInfo::UosServer == DSysInfo::uosType()) { PasswordFlagsStrMap[PW_ERR_CHARACTER_INVALID] = tr("Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\\{}[]:\"'<>,.?/)"); PasswordFlagsStrMap[PW_ERR_PALINDROME] = tr("Password must not contain more than 4 palindrome characters"); PasswordFlagsStrMap[PW_ERR_WORD] = tr("Do not use common words and combinations as password"); PasswordFlagsStrMap[PW_ERR_PW_MONOTONE] = tr("Create a strong password please"); PasswordFlagsStrMap[PW_ERR_PW_CONSECUTIVE_SAME] = tr("Create a strong password please"); PasswordFlagsStrMap[PW_ERR_PW_FIRST_UPPERM] = tr("Do not use common words and combinations as password"); } //规则校验以外的情况统一返回密码不符合安全要求 if (PasswordFlagsStrMap.value(type).isEmpty()) { PasswordFlagsStrMap[type] = tr("It does not meet password rules"); } return PasswordFlagsStrMap.value(type); } ================================================ FILE: src/plugin-commoninfo/operation/pwqualitymanager.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef DEEPIN_INSTALLER_PWQUALITY_MANAGER_H #define DEEPIN_INSTALLER_PWQUALITY_MANAGER_H #include #include #include class PwqualityManager : public QObject { Q_OBJECT public: typedef PW_ERROR_TYPE ERROR_TYPE; enum CheckType { Default, Grub2 }; /** * @brief PwqualityManager::instance 构造一个 单例 * @return 返回一个静态实例 */ static PwqualityManager* instance(); /** * @brief PwqualityManager::verifyPassword 校验密码 * @param password 带检密码字符串 * @return 若找到,返回text,反之返回空 */ ERROR_TYPE verifyPassword(const QString &user, const QString &password, CheckType checkType = Default); PASSWORD_LEVEL_TYPE GetNewPassWdLevel(const QString &newPasswd); QString getErrorTips(ERROR_TYPE type, CheckType checkType = Default); private: PwqualityManager(); PwqualityManager(const PwqualityManager&) = delete; int m_passwordMinLen; int m_passwordMaxLen; }; #endif // DEEPIN_INSTALLER_PWQUALITY_MANAGER_H ================================================ FILE: src/plugin-commoninfo/operation/qrc/commoninfo.qrc ================================================ icons/dcc_nav_commoninfo_42px.svg icons/dcc_nav_commoninfo_84px.svg icons/inner_shadow.dci icons/selected.dci icons/tick.dci icons/develop_bind.dci ================================================ FILE: src/plugin-commoninfo/operation/utils.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef UTILS_H #define UTILS_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include DCORE_USE_NAMESPACE inline const QMargins ZeroMargins(0, 0, 0, 0); inline constexpr int ComboxWidgetHeight = 48; inline constexpr int SwitchWidgetHeight = 36; inline constexpr int ComboxTitleWidth = 110; inline constexpr qint32 ActionIconSize=30;//大图标角标大小 inline constexpr qint32 ActionListSize=26;//list图标角标大小 const DSysInfo::UosType UosType = DSysInfo::uosType(); const DSysInfo::UosEdition UosEdition = DSysInfo::uosEditionType(); const bool IsServerSystem = (DSysInfo::UosServer == UosType);//是否是服务器版 const bool IsCommunitySystem = (DSysInfo::UosCommunity == UosEdition);//是否是社区版 const bool IsProfessionalSystem = (DSysInfo::UosProfessional == UosEdition);//是否是专业版 const bool IsHomeSystem = (DSysInfo::UosHome == UosEdition);//是否是个人版 const bool IsEducationSystem = (DSysInfo::UosEducation == UosEdition); // 是否是教育版 const bool IsDeepinDesktop = (DSysInfo::DeepinDesktop == DSysInfo::deepinType());//是否是Deepin桌面 const bool IsNotDeepinUos = !DSysInfo::isDeepin(); // 是否是 Deepin/Uos 以外的发行版 template T valueByQSettings(const QStringList& configFiles, const QString& group, const QString& key, const QVariant& failback) { for (const QString& path : configFiles) { QSettings settings(path, QSettings::IniFormat); if (!group.isEmpty()) { settings.beginGroup(group); } const QVariant& v = settings.value(key); if (v.isValid()) { T t = v.value(); return t; } } return failback.value(); } inline QPixmap loadPixmap(const QString &path) { qreal ratio = 1.0; QPixmap pixmap; const qreal devicePixelRatio = qApp->devicePixelRatio(); if (!qFuzzyCompare(ratio, devicePixelRatio)) { QImageReader reader; reader.setFileName(qt_findAtNxFile(path, devicePixelRatio, &ratio)); if (reader.canRead()) { reader.setScaledSize(reader.size() * (devicePixelRatio / ratio)); pixmap = QPixmap::fromImage(reader.read()); pixmap.setDevicePixelRatio(devicePixelRatio); } } else { pixmap.load(path); } return pixmap; } #endif // UTILS_H ================================================ FILE: src/plugin-commoninfo/qml/BootPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.11 import QtQuick.Controls 2.4 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import QtQuick.Effects import org.deepin.dtk 1.0 import Qt5Compat.GraphicalEffects import org.deepin.dcc 1.0 DccObject { DccObject { name: "grubSettingText" parentName: "bootMenu" displayName: qsTr("Startup Settings") weight: 10 pageType: DccObject.Item page: Label { leftPadding: 14 font.pixelSize: DTK.fontManager.t5.pixelSize font.weight: 500 color: DTK.themeType === ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1) text: dccObj.displayName } } DccObject { name: "grubSettingList" parentName: "bootMenu" weight: 20 pageType: DccObject.Item page: Rectangle { readonly property int itemDelegateMinWidth: parent.width readonly property int itemDelegateMaxWidth: 600 readonly property int itemDelegateHeight: 40 id: grublist implicitWidth: parent.width implicitHeight: menuViewList.height + 20 color: "transparent" Layout.fillWidth: true Layout.topMargin: 0 DropArea { anchors.fill: parent keys: ["text/uri-list"] enabled: dccData.mode().bootWallpaperEnabled onDropped: (drop) => { if (drop.hasUrls) { let filePath = drop.urls[0].toString() if (filePath.endsWith(".png") || filePath.endsWith(".jpg") || filePath.endsWith(".jpeg") || filePath.endsWith(".bmp")) { console.log("Image dropped:", filePath) if (filePath.startsWith("file://")) { filePath = filePath.substring(7) } dccData.work().setBackground(filePath) } else { console.log("Dropped file is not a supported image:", filePath) } } } } Image { id: image source: "file://" + dccData.mode().grubThemePath + "?timestamp=" + Date.now() asynchronous: true anchors.fill: parent width: parent.width height: menuViewList.height fillMode: Image.PreserveAspectCrop mipmap: true layer.enabled: true layer.effect: MultiEffect { maskEnabled: true maskSource: imageMask antialiasing: true maskThresholdMin: 0.5 maskSpreadAtMin: 1.0 } } Rectangle { id: overlayLayer anchors.fill: image color: "#33000000" radius: 10 antialiasing: true smooth: true layer.enabled: true layer.effect: MultiEffect { maskEnabled: true maskSource: imageMask antialiasing: true maskThresholdMin: 0.5 maskSpreadAtMin: 1.0 } } Item { id: imageMask anchors.fill: image layer.enabled: true visible: false Rectangle { anchors.fill: parent anchors.margins: 0.5 radius: 10 color: "white" } } Rectangle { visible: dccData.mode().grubThemePath === "" anchors.fill: image color: "black" radius: 10 antialiasing: true smooth: true } Column { spacing: 5 leftPadding: 10 rightPadding: 10 id: menuViewList Layout.fillWidth: true width: parent.width height: childrenRect.height clip: false Label { id: grubSettingText width: grublist.implicitWidth - 30 topPadding: 10 bottomPadding: 5 leftPadding: 10 elide: Text.ElideRight text: qsTr("You can click the menu to change the default startup items, or drag the image to the window to change the background image.") font: DTK.fontManager.t8 color: "white" opacity: 0.7 TextMetrics { id: textMetrics font: grubSettingText.font text: grubSettingText.text } ToolTip { text: grubSettingText.text visible: grubSettingMouseArea.containsMouse && textMetrics.width > grubSettingText.width } MouseArea { id: grubSettingMouseArea anchors.fill: parent hoverEnabled: true } } // 在图片背景上使用Repeater Repeater { id: grubMenuList model: dccData.mode().grubMenuListModel() delegate: Rectangle { width: grublist.width - 20 height: 30 color: "transparent" Rectangle { id: backgru property bool isHovered: false width: grublist.width - 20 height: 30 radius: 8 color: { if (model.checkStatus) { return "#34FFFFFF" } else if (isHovered) { return "#1AFFFFFF" } else { return "transparent" } } RowLayout { Layout.alignment: Qt.AlignVCenter width: parent.width height: 30 Label { height: 20 Layout.alignment: Qt.AlignLeft Layout.leftMargin: 10 horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter text: model.text font: DTK.fontManager.t6 color: "white" } DccCheckIcon { Layout.alignment: Qt.AlignRight Layout.rightMargin: 10 checked: model.checkStatus visible: model.checkStatus size: 16 } } MouseArea { anchors.fill: parent hoverEnabled: true onClicked: { dccData.work().setDefaultEntry(model.text) } onEntered: { parent.isHovered = true } onExited: { parent.isHovered = false } } } } } } } } DccObject { name: "startDelay" parentName: "bootMenu" displayName: qsTr("grub start delay") weight: 30 pageType: DccObject.Editor backgroundType: DccObject.Normal page: Switch { id: bootDelaySwitch Layout.alignment: Qt.AlignRight checked: dccData.mode().bootDelay Connections { target: dccData.mode() function onBootDelayChanged() { bootDelaySwitch.checked = dccData.mode().bootDelay } } onCheckedChanged: { if (dccData.mode().bootDelay != checked) { dccData.work().setBootDelay(checked) } } } } DccObject { name: "grubTheme" parentName: "bootMenu" displayName: qsTr("theme") description: qsTr("After turning on the theme, you can see the theme background when you turn on the computer") weight: 40 pageType: DccObject.Editor backgroundType: DccObject.Normal page: Switch { Layout.alignment: Qt.AlignRight checked: dccData.mode().themeEnabled onCheckedChanged: { if (checked != dccData.mode().themeEnabled) { dccData.work().setEnableTheme(checked) } } } } DccObject { name: "bootMenuVerification" parentName: "bootMenu" visible: !dccData.mode().isCommunitySystem() displayName: qsTr("Boot menu verification") description: qsTr("After opening, entering the menu editing requires a password.") weight: 50 backgroundType: DccObject.Normal pageType: DccObject.Item page: RowLayout { property var passwordDlgStatus: {"Init" : 0, "Cancel" : 1, "Sure" : 2} property int dlgStatus: passwordDlgStatus.Init Column { spacing: 0 Layout.topMargin: 4 Layout.bottomMargin: 9 Layout.fillWidth: true Layout.maximumWidth: parent.width - 100 Label { text: dccObj.displayName font: DTK.fontManager.t6 horizontalAlignment: Qt.AlignLeft verticalAlignment: Qt.AlignVCenter leftPadding: 15 bottomPadding: 4 } Row { spacing: 0 width: parent.width clip: true Label { id: descriptionLabel text: dccObj.description font: DTK.fontManager.t10 horizontalAlignment: Qt.AlignLeft verticalAlignment: Qt.AlignVCenter leftPadding: 15 opacity: 0.5 elide: Text.ElideRight width: Math.min(implicitWidth, changePasswordLabel.visible ? (parent.width - changePasswordLabel.implicitWidth - 15) : (parent.width - 15)) TextMetrics { id: descriptionTextMetrics font: descriptionLabel.font text: descriptionLabel.text } ToolTip { text: dccObj.description visible: descriptionMouseArea.containsMouse && descriptionLabel.implicitWidth > descriptionLabel.width } MouseArea { id: descriptionMouseArea anchors.fill: parent hoverEnabled: true } } Label { id: changePasswordLabel text: "" + qsTr("Change Password") +"" visible: dccData.mode().grubEditAuthEnabled horizontalAlignment: Qt.AlignLeft verticalAlignment: Qt.AlignVCenter font: DTK.fontManager.t10 color:"#5A000000" // 超链接点击事件 onLinkActivated: function(url) { console.log("点击的链接是: " + url) dlgStatus = passwordDlgStatus.Init passwordDlg.show() } } Item { id: item width: Math.max(0, parent.width - descriptionLabel.width - (changePasswordLabel.visible ? changePasswordLabel.implicitWidth : 0)) } } } Row { Layout.alignment: Qt.AlignRight Switch { id: verificationSwitch rightPadding: 13 bottomPadding: 5 checked: dccData.mode().grubEditAuthEnabled onCheckedChanged: { if (checked && !dccData.mode().grubEditAuthEnabled) { passwordDlg.show() return } if (!checked && dccData.mode().grubEditAuthEnabled) { dccData.work().disableGrubEditAuth() return } } } DialogWindow { id: passwordDlg width: 360 height: columnLayout.implicitHeight + 50 icon: "preferences-system" flags: Qt.Dialog | Qt.WindowCloseButtonHint modality: Qt.ApplicationModal onVisibleChanged: { if (visible) { newPasswordEdit.text = "" repeatPasswordEdit.text = "" newPasswordEdit.showAlert = false repeatPasswordEdit.showAlert = false submitbtn.enabled = false dlgStatus = passwordDlgStatus.Init } } onClosing: function(close) { close.accepted = true if (dlgStatus !== passwordDlgStatus.Sure) { dlgStatus = passwordDlgStatus.Init dccData.work().resetEditAuthEnabled() } } ColumnLayout { id: columnLayout width: parent.width spacing: 0 Label { id: passwdTitle Layout.topMargin: 10 Layout.bottomMargin: 10 Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: parent.width - 20 Layout.leftMargin: 10 Layout.rightMargin: 10 font: DTK.fontManager.t5 text: dccData.mode().grubEditAuthEnabled ? qsTr("Change boot menu verification password") : qsTr("Set the boot menu authentication password") wrapMode: Text.Wrap horizontalAlignment: Text.AlignHCenter } Label { Layout.alignment: Qt.AlignLeft horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter Layout.leftMargin: 5 font: DTK.fontManager.t6 text: qsTr("User Name :") Layout.preferredWidth: 50 visible: dccData.mode().bootGrubUserNameVisible } LineEdit { id: userEdit text: qsTr("root") readOnly: true enabled: false clearButton.visible: true Layout.preferredWidth: parent.width visible: dccData.mode().bootGrubUserNameVisible } Label { height: 20 topPadding: 10 Layout.preferredWidth: 60 Layout.alignment: Qt.AlignLeft horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter Layout.leftMargin: 5 font: DTK.fontManager.t6 text: qsTr("New Password :") } PasswordEdit { id: newPasswordEdit placeholderText: qsTr("Required") Layout.preferredWidth: parent.width height: 30 showAlert: false canCopy: false canCut: false Timer { id: newPasswordAlertTimer interval: 3000 repeat: false onTriggered: { newPasswordEdit.showAlert = false } } onTextChanged: { newPasswordAlertTimer.stop() console.log(" newPasswordEdit text changed ", newPasswordEdit.text) if (newPasswordEdit.text.length === 0) { submitbtn.enabled = false if (repeatPasswordEdit.text.length !== 0) { newPasswordEdit.alertText = qsTr("Password cannot be empty") newPasswordEdit.showAlert = true newPasswordAlertTimer.start() } else { newPasswordEdit.showAlert = false } return } var errorText = dccData.work().verifyPassword(newPasswordEdit.text) console.log(" newPasswordEdit text changed ", errorText) if (errorText.length !== 0) { newPasswordEdit.alertText = errorText newPasswordEdit.showAlert = true newPasswordAlertTimer.start() submitbtn.enabled = false } else { newPasswordEdit.showAlert = false if (repeatPasswordEdit.text.length > 0) { if (repeatPasswordEdit.text !== newPasswordEdit.text) { repeatPasswordEdit.alertText = qsTr("Passwords do not match") repeatPasswordEdit.showAlert = true repeatPasswordAlertTimer.start() submitbtn.enabled = false } else { repeatPasswordEdit.showAlert = false submitbtn.enabled = true } } else { submitbtn.enabled = false } } } } Label { height: 20 topPadding: 10 Layout.preferredWidth: 60 Layout.alignment: Qt.AlignLeft horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter Layout.leftMargin: 5 font: DTK.fontManager.t6 text: qsTr("Repeat password:") } PasswordEdit { id: repeatPasswordEdit Layout.preferredWidth: parent.width placeholderText: qsTr("Required") height: 30 canCopy: false canCut: false Timer { id: repeatPasswordAlertTimer interval: 3000 repeat: false onTriggered: { repeatPasswordEdit.showAlert = false } } onTextChanged: { repeatPasswordAlertTimer.stop() console.log(" repeatPasswordEdit text changed ", repeatPasswordEdit.text) if (repeatPasswordEdit.text.length === 0) { submitbtn.enabled = false if (newPasswordEdit.text.length !== 0) { repeatPasswordEdit.alertText = qsTr("Password cannot be empty") repeatPasswordEdit.showAlert = true repeatPasswordAlertTimer.start() } else { repeatPasswordEdit.showAlert = false } return } var errorText = dccData.work().verifyPassword(repeatPasswordEdit.text) console.log(" repeatPasswordEdit text changed ", errorText) if (errorText.length !== 0) { repeatPasswordEdit.alertText = errorText repeatPasswordEdit.showAlert = true repeatPasswordAlertTimer.start() submitbtn.enabled = false } else { if (repeatPasswordEdit.text !== newPasswordEdit.text) { repeatPasswordEdit.alertText = qsTr("Passwords do not match") repeatPasswordEdit.showAlert = true repeatPasswordAlertTimer.start() submitbtn.enabled = false } else { repeatPasswordEdit.showAlert = false if (newPasswordEdit.text.length > 0 && !newPasswordEdit.showAlert) { submitbtn.enabled = true } else { submitbtn.enabled = false } if (newPasswordEdit.alertText === qsTr("Passwords do not match")) { newPasswordEdit.showAlert = false } } } } } RowLayout { Layout.topMargin: 15 Layout.bottomMargin: 6 Layout.preferredWidth: parent.width Layout.fillWidth: true Button { Layout.alignment: Qt.AlignLeft text: qsTr("Cancel") Layout.preferredWidth: 170 onClicked: { dlgStatus = passwordDlgStatus.Cancel passwordDlg.close() } } RecommandButton { id: submitbtn text: qsTr("Sure") enabled: false Layout.preferredWidth: 170 Layout.alignment: Qt.AlignRight onClicked: { dlgStatus = passwordDlgStatus.Sure dccData.work().onSetGrubEditPasswd(newPasswordEdit.text, true) passwordDlg.close() } } } } } } } onParentItemChanged: item => { if (item) item.bottomPadding = 0 } } DccObject { name: "startAnimation" parentName: "bootMenu" displayName: qsTr("Start animation") description: qsTr("Adjust the size of the logo animation on the system startup interface") weight: 60 pageType: DccObject.Item page: ColumnLayout { Layout.topMargin: 0 Layout.bottomMargin: 0 width: parent.width - 28 spacing: 0 Label { leftPadding: 14 topPadding: 10 font.pixelSize: DTK.fontManager.t5.pixelSize font.weight: 500 color: DTK.themeType === ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1) text: dccObj.displayName } Label { id: startAnimationDescriptionLabel leftPadding: 14 bottomPadding: 5 font: DTK.fontManager.t8 text: dccObj.description opacity: 0.7 elide: Text.ElideRight Layout.fillWidth: true property bool showToolTip: false TextMetrics { id: startAnimationDescriptionTextMetrics font: DTK.fontManager.t8 text: dccObj.description } ToolTip { text: dccObj.description visible: startAnimationDescriptionLabel.showToolTip && startAnimationDescriptionTextMetrics.width > parent.width } MouseArea { id: startAnimationDescriptionMouseArea anchors.fill: parent hoverEnabled: true onEntered: { if (startAnimationDescriptionTextMetrics.width > parent.width) { startAnimationDescriptionLabel.showToolTip = true } } onExited: { startAnimationDescriptionLabel.showToolTip = false } } } } onParentItemChanged: item => { if (item) { item.topPadding = 0 item.bottomPadding = 0 } } } DccObject { name: "checkAnimation" parentName: "bootMenu" weight: 70 backgroundType: DccObject.Normal pageType: DccObject.Item page: Rectangle { implicitHeight: aniRoot.height Layout.fillWidth: true width: parent.width radius: 8 color: "transparent" property color baseColor: "#0065FF" RowLayout { id: aniRoot spacing: 0 Repeater { id: repeater model: dccData.mode().grubAnimationModel() delegate: ItemDelegate { Layout.fillWidth: true Layout.fillHeight: true leftPadding: 10 rightPadding: 0 topPadding: 20 bottomPadding: 0 spacing: 0 contentFlow: true hoverEnabled: true cascadeSelected: true background: DccItemBackground { backgroundType: DccObject.AutoBg // separatorVisible: true } content: ColumnLayout { spacing: 0 Rectangle { id: externalRect width: 228 height: 148 border.width: model.checkStatus ? 2 : 0 border.color: parent.palette.highlight radius: 10 color: "transparent" Rectangle { id: imgRect anchors.centerIn: parent width: 220 height: 140 border.width: 0 color: DTK.themeType === ApplicationHelper.LightType ? Qt.rgba(baseColor.r, baseColor.g, baseColor.a, 0.10) : Qt.rgba(baseColor.r, baseColor.g, baseColor.a, 0.15) radius: 6 Rectangle { anchors.fill: parent color: "transparent" border.color: DTK.themeType === ApplicationHelper.LightType ? "#0D000000" : "#1AFFFFFF" radius: 6 border.width: 1 Image { id: backgroundImage anchors.centerIn: parent source: model.imagePath width: 130 * model.scale height: 130 * model.scale visible: !(model.startAnimation && model.checkStatus) || blurContainer.grabbing fillMode: Image.PreserveAspectCrop opacity: model.startAnimation ? 0.4 : 1 } } // 使用 MouseArea 来捕捉点击事件 MouseArea { anchors.fill: parent onClicked: { dccData.work().setPlymouthFactor( model.plymouthScale) } } } //模糊效果容器 Rectangle { id: blurContainer anchors.centerIn: parent width: 220 height: 140 radius: 6 visible: model.startAnimation && model.checkStatus color: "transparent" property alias grabbedImage: grabbedImageItem property bool grabbing: false Image { id: grabbedImageItem anchors.fill: parent fillMode: Image.PreserveAspectCrop visible: false } GaussianBlur { anchors.fill: parent source: grabbedImageItem radius: 25 // 模糊半径,值越大,模糊越强 samples: 16 } BusyIndicator { anchors.centerIn: parent running: model.startAnimation && model.checkStatus visible: model.startAnimation && model.checkStatus implicitWidth: 32 implicitHeight: 32 } onVisibleChanged: { if (visible && model.startAnimation && model.checkStatus) { grabbing = true imgRect.grabToImage(function(result) { grabbedImageItem.source = result.url grabbing = false }) } } } } RadioButton { autoExclusive: false text: model.text checked: model.checkStatus enabled: !model.startAnimation padding: 0 icon.width: 0 icon.height: 0 onClicked: { dccData.work().setPlymouthFactor( model.plymouthScale) } } } } } } } } } ================================================ FILE: src/plugin-commoninfo/qml/CommonInfoMain.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import org.deepin.dtk 1.0 as D import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dcc 1.0 import QtQuick.Layouts 1.15 DccObject { DccObject { name: "bootMenu" parentName: "system" displayName: qsTr("Boot Menu") description: qsTr("Manage your boot menu") icon: "meau" weight: 80 BootPage {} } DccObject { name: "developerMode" parentName: "system" displayName: qsTr("Developer Options") description: !dccData.mode().isCommunitySystem() ? qsTr("Developer root permission management") : qsTr("Developer debugging options") icon: "developer" weight: 90 DevelopModePage {} } } ================================================ FILE: src/plugin-commoninfo/qml/DevelopModePage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import org.deepin.dtk 1.0 as D import QtQuick 2.15 import QtQuick.Controls 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import Qt.labs.platform 1.1 import org.deepin.dtk.style 1.0 as DS DccObject { DccObject { name: "developTitle" parentName: "developerMode" displayName: qsTr("Root Access") weight: 10 visible: !dccData.mode().isCommunitySystem() pageType: DccObject.Item page: Label { leftPadding: 15 bottomPadding: -2 text: dccObj.displayName font.pixelSize: D.DTK.fontManager.t5.pixelSize font.weight: 500 color: D.DTK.themeType === D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1) } } DccObject { name: "developerModeSetting" parentName: "developerMode" weight: 20 visible: !dccData.mode().isCommunitySystem() pageType: DccObject.Item page: DccGroupView { Layout.topMargin: 0 } DccObject { name: "developerModeStatus" parentName: "developerModeSetting" displayName: qsTr("Request Root Access") pageType: DccObject.Item backgroundType: DccObject.Normal weight: 20 enabled: dccData.work().isACLController() ? dccData.mode().isActivate : true page: RowLayout { id: root Layout.topMargin: 5 ColumnLayout { spacing: 2 Layout.leftMargin: 15 Layout.topMargin: 5 Layout.bottomMargin: 5 Label { text: dccObj.displayName font: D.DTK.fontManager.t6 } Label { horizontalAlignment: Text.AlignLeft wrapMode: Text.WordWrap text: (dccData.work().isACLController() ? dccData.mode().isActivate : true) ? qsTr("After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution.") : qsTr("The feature is not available at present, please activate your system first.") font: D.DTK.fontManager.t10 opacity: 0.5 Layout.fillWidth: true } } Label { Layout.alignment: Qt.AlignRight Layout.rightMargin: 10 visible: dccData.mode().developerModeState || dccData.mode().isDeveloperMode text: qsTr("Allowed") font: D.DTK.fontManager.t8 } Button { id: enterBtn Layout.alignment: Qt.AlignRight Layout.rightMargin: 10 implicitHeight: 30 implicitWidth: enterBtnMetrics.width + 2 * (DS.Style.button.hPadding + DS.Style.control.borderWidth) visible: !(dccData.mode().developerModeState || dccData.mode().isDeveloperMode) text: qsTr("Enter") onClicked: { if (dccData.work().isACLController()) { dccData.work().setEnableDeveloperMode(true) } else { developDlg.show() } } TextMetrics { id: enterBtnMetrics font: enterBtn.font text: enterBtn.text } } Loader { id: loader active: dccData.mode().needShowModalDialog sourceComponent: Window { id: modalDialog flags: Qt.Window modality: Qt.ApplicationModal color: "transparent" opacity: 0.0 } onLoaded: { item.show() } } D.DialogWindow { id: developDlg width: 360 height: 360 minimumWidth: 360 minimumHeight: 360 maximumWidth: 360 maximumHeight: 360 icon: "preferences-system" flags: Qt.Dialog | Qt.WindowCloseButtonHint modality: Qt.ApplicationModal property real currentStackIndex: 0 property bool showSuccess: false onClosing: function(close) { close.accepted = true } ColumnLayout { visible: !developDlg.showSuccess Label { visible: !developDlg.showSuccess font: D.DTK.fontManager.t5 Layout.alignment: Qt.AlignHCenter text: qsTr("Root Access") } // 单选按钮用于切换页面 RowLayout { visible: !developDlg.showSuccess spacing: 20 Layout.alignment: Qt.AlignHCenter RadioButton { id: radio1 text: qsTr("Online") font: D.DTK.fontManager.t6 checked: true onClicked: { if (developDlg.currentStackIndex === 0) { return } developDlg.currentStackIndex = 0; stackView.replace(page1Component); } } RadioButton { id: radio2 text: qsTr("Offline") font: D.DTK.fontManager.t6 onClicked: { if (developDlg.currentStackIndex === 1) { return } developDlg.currentStackIndex = 1; stackView.replace(page2Component); } } } // StackView 用于显示不同页面 StackView { visible: !developDlg.showSuccess id: stackView width: 340 height: 180 initialItem: page1Component } D.RecommandButton { visible: !developDlg.showSuccess id: confirmBtn text: developDlg.currentStackIndex === 1 ? qsTr("Import Certificate") : (dccData.mode().isLogin ? qsTr("Request Root Access") : qsTr("Login UOS ID")) font: D.DTK.fontManager.t7 Layout.fillWidth: true Layout.bottomMargin: 10 onClicked: { if (developDlg.currentStackIndex === 1) { fileDlg.open() return } if (dccData.mode().isLogin) { dccData.work().setEnableDeveloperMode(true) developDlg.close() } else { dccData.work().login() } } } FileDialog { id: exportFileDlg title: qsTr("Select file") nameFilters: "Text files (*.json)" fileMode: FileDialog.SaveFile folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation) onAccepted: { dccData.work().exportMessage(exportFileDlg.file) developDlg.close() } } FileDialog { id: fileDlg title: qsTr("Select file") folder: StandardPaths.writableLocation(StandardPaths.DocumentsLocation) onAccepted: { dccData.work().importCertificate(fileDlg.file) } } // 页面1 Component { id: page1Component ColumnLayout { Rectangle { color: "transparent" width: parent.width height: 128 Image { id: tikc source: dccData.mode().isLogin ? "common_tick" : "develop_bind" width: 128 height: 128 z: 2 anchors.centerIn: parent } Image { id: ok visible: dccData.mode().isLogin source: "common_ok" z: 1 anchors.centerIn: parent width: 128 height: 128 } Image { id: shadow visible: dccData.mode().isLogin source: "common_inner_shadow" z: 0 anchors.centerIn: parent width: 128 height: 128 } } Item { Layout.fillHeight: true } Label { wrapMode: Text.WordWrap horizontalAlignment: Qt.AlignHCenter Layout.fillWidth: true font.pixelSize: 12 Layout.bottomMargin: 10 text: dccData.mode().isLogin ? qsTr("Your UOS ID has been logged in, click to enter developer mode") : qsTr("Please sign in to your UOS ID first and continue") } } } // 页面2 Component { id: page2Component ColumnLayout { id: offlinePanel spacing: 1 property int radius: 6 Control { Layout.fillWidth: true height: 42 padding: 0 property bool checked: false property bool cascadeSelected: false property int corners: D.RoundRectangle.TopCorner background: DccItemBackground { backgroundType: DccObject.Normal radius: offlinePanel.radius shadowVisible: false backgroundColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.05) normalDark: Qt.rgba(247, 247, 247, 0.05) } } contentItem: RowLayout { Layout.leftMargin: 10 Layout.rightMargin: 10 Label { Layout.fillWidth: true Layout.leftMargin: 6 text: qsTr("1.Export PC Info") font: D.DTK.fontManager.t6 elide: Text.ElideMiddle verticalAlignment: Text.AlignVCenter } Button { id: exportBtn Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.rightMargin: 6 implicitWidth: 60 implicitHeight: 30 text: qsTr("Export") onClicked: exportFileDlg.open() } } } Control { Layout.fillWidth: true padding: 0 implicitHeight: 55 property bool checked: false property bool cascadeSelected: false property int corners: 0 background: DccItemBackground { backgroundType: DccObject.Normal radius: offlinePanel.radius shadowVisible: false backgroundColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.05) normalDark: Qt.rgba(247, 247, 247, 0.05) } } contentItem: ColumnLayout { Label { id: offlineLinkLabel Layout.fillWidth: true Layout.leftMargin: 6 Layout.rightMargin: 10 text: qsTr("2.please go to %1 to Download offline certificate.") .arg("http://www.chinauos.com/developMode") textFormat: Text.RichText wrapMode: Text.WordWrap font: D.DTK.fontManager.t6 onLinkActivated: function(link) { Qt.openUrlExternally(link) } MouseArea { anchors.fill: parent acceptedButtons: Qt.LeftButton hoverEnabled: true cursorShape: offlineLinkLabel.linkAt(mouseX, mouseY) ? Qt.PointingHandCursor : Qt.ArrowCursor onClicked: function(mouse) { var link = offlineLinkLabel.linkAt(mouse.x, mouse.y) if (link) { Qt.openUrlExternally(link) } } } } } } Control { Layout.fillWidth: true height: 40 padding: 0 property bool checked: false property bool cascadeSelected: false property int corners: D.RoundRectangle.BottomCorner background: DccItemBackground { backgroundType: DccObject.Normal radius: offlinePanel.radius shadowVisible: false backgroundColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.05) normalDark: Qt.rgba(247, 247, 247, 0.05) } } contentItem: RowLayout { Layout.leftMargin: 10 Layout.rightMargin: 10 Label { Layout.fillWidth: true Layout.leftMargin: 6 text: qsTr("3.Import Certificate") font: D.DTK.fontManager.t6 verticalAlignment: Text.AlignVCenter } } } Item { Layout.fillHeight: true } } } } ColumnLayout { id: successView visible: developDlg.showSuccess anchors.fill: parent spacing: 10 Label { font: D.DTK.fontManager.t5 Layout.alignment: Qt.AlignHCenter Layout.bottomMargin: 24 text: qsTr("Root Access") } Rectangle { color: "transparent" width: 128 height: 128 Layout.alignment: Qt.AlignHCenter Image { source: "common_tick"; width: 128; height: 128; z: 2; anchors.centerIn: parent } Image { source: "common_ok"; z: 1; anchors.centerIn: parent; width: 128; height: 128 } Image { source: "common_inner_shadow"; z: 0; anchors.centerIn: parent; width: 128; height: 128 } } Label { Layout.alignment: Qt.AlignHCenter horizontalAlignment: Qt.AlignHCenter text: qsTr("You have entered developer mode") font: D.DTK.fontManager.t8 } D.RecommandButton { Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter Layout.bottomMargin: 6 text: qsTr("OK") font: D.DTK.fontManager.t7 onClicked: developDlg.close() } } } Connections { target: dccData.mode() onDeveloperModeStateChanged: function(enable) { if (enable && developDlg.currentStackIndex === 1) { developDlg.showSuccess = true } } onIsDeveloperModeChanged: { if (dccData.mode().isDeveloperMode && developDlg.currentStackIndex === 1) { developDlg.showSuccess = true } } } } } DccObject { name: "developTips" parentName: "developerModeSetting" weight: 40 pageType: DccObject.Item visible: dccData.work().isACLController() ? dccData.mode().isActivate : true page: Label { id: securityCenterLinkLabel leftPadding: 15 topPadding: 5 bottomPadding: 5 color: D.DTK.themeType === D.ApplicationHelper.LightType ? "#64000000" : "#64FFFFFF" textFormat: Text.RichText text: dccData.work().isSecurityCenterInstalled() ? qsTr("To install and run unsigned apps, please go to Security Center to change the settings.") : qsTr("To install and run unsigned apps, please go to Security Center to change the settings.") font: D.DTK.fontManager.t10 wrapMode: Text.WordWrap Layout.fillWidth: true // 超链接点击事件 onLinkActivated: function(url) { if (dccData.work().isSecurityCenterInstalled()) { console.log("点击的链接是: " + url) dccData.work().jumpToSecurityCenter(); } } MouseArea { anchors.fill: parent acceptedButtons: Qt.LeftButton hoverEnabled: true cursorShape: securityCenterLinkLabel.linkAt(mouseX, mouseY) ? Qt.PointingHandCursor : Qt.ArrowCursor onClicked: function(mouse) { var link = securityCenterLinkLabel.linkAt(mouse.x, mouse.y) if (link && dccData.work().isSecurityCenterInstalled()) { dccData.work().jumpToSecurityCenter(); } } } } } } DccObject { name: "developDebugTitle" parentName: "developerMode" displayName: qsTr("Development and debugging options") weight: 50 pageType: DccObject.Item page: Label { topPadding: 5 leftPadding: 15 bottomPadding: -2 text: dccObj.displayName font.pixelSize: D.DTK.fontManager.t5.pixelSize font.weight: 500 color: D.DTK.themeType === D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1) } } DccObject { name: "developDebugGrp" parentName: "developerMode" weight: 60 pageType: DccObject.Item page: DccGroupView { Layout.topMargin: 0 } DccObject { name: "developDebug" parentName: "developDebugGrp" displayName: qsTr("System logging level") description: qsTr("Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space.") weight: 10 backgroundType: DccObject.Normal pageType: DccObject.Editor page: Row{ ComboBox { id: debugLogCombo model: [ qsTr("Off"), qsTr("Debug") ] flat: true font: D.DTK.fontManager.t8 currentIndex: dccData.mode().debugLogCurrentIndex onCurrentIndexChanged: { console.log("Selected index:", currentIndex) if (currentIndex !== dccData.mode().debugLogCurrentIndex) { dccData.work().setLogDebug(currentIndex) } } } } } DccObject { name: "developDebugTips" parentName: "developDebugGrp" weight: 20 pageType: DccObject.Item page: Label { leftPadding: 15 bottomPadding: 5 topPadding: 5 rightPadding: 10 text: qsTr("Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect.") font: D.DTK.fontManager.t10 opacity: 0.5 wrapMode: Text.WordWrap } } } DccObject { name: "developReadOnlyProtection" parentName: "developerMode" displayName: qsTr("Solid System Read-Only Protection") weight: 70 visible: dccData.work().showReadOnlyProtection() canSearch: visible backgroundType: DccObject.Normal pageType: DccObject.Item page: RowLayout { Layout.topMargin: 5 ColumnLayout { spacing: 2 Layout.leftMargin: 15 Layout.topMargin: 5 Layout.bottomMargin: 5 Label { text: dccObj.displayName font: D.DTK.fontManager.t6 } Label { horizontalAlignment: Text.AlignLeft wrapMode: Text.WordWrap text: dccData.mode().readOnlyProtectionEnabled ? qsTr("Disabling protection unlocks system directories,This action carries a high risk of system damage.") : qsTr("Enable protection to lock system directories and ensure optimal stability.") font: D.DTK.fontManager.t10 opacity: 0.5 Layout.fillWidth: true } } Switch { Layout.alignment: Qt.AlignRight Layout.rightMargin: 10 implicitWidth: 50 checked: dccData.mode().readOnlyProtectionEnabled onClicked: { console.log("Read-Only Protection switched to:", checked, "current state:", dccData.mode().readOnlyProtectionEnabled) dccData.work().setReadOnlyProtectionEnabled(checked) } } } } } ================================================ FILE: src/plugin-commoninfo/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-datetime/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(pluginName datetime) file(GLOB_RECURSE datetime_SRCS "operation/*.cpp" "operation/*.h" "operation/timezoneMap/*.h" "operation/timezoneMap/*.cpp" "operation/qrc/datetime.qrc" ) add_library(${pluginName} MODULE ${datetime_SRCS} ) find_package(ICU COMPONENTS i18n uc) set(dateTime_Libraries ${DCC_FRAME_Library} ${QT_NS}::DBus ${QT_NS}::Concurrent ${DTK_NS}::Gui ICU::i18n ICU::uc ) target_link_libraries(${pluginName} PRIVATE ${dateTime_Libraries} dcc-shared-utils ) dcc_install_plugin(NAME ${pluginName} TARGET ${pluginName}) # keyboard_language_*.ts生成使用脚本misc/translate_language2ts.sh手动执行 ================================================ FILE: src/plugin-datetime/operation/datetimedbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "datetimedbusproxy.h" #include #include #include #include #include #include Q_LOGGING_CATEGORY(DdcDateTimeDbusProxy, "dcc-datetime-dbusproxy") const QString TimedateService = QStringLiteral("org.deepin.dde.Timedate1"); const QString TimedatePath = QStringLiteral("/org/deepin/dde/Timedate1"); const QString TimedateInterface = QStringLiteral("org.deepin.dde.Timedate1"); const QString SystemTimedatedService = QStringLiteral("org.deepin.dde.Timedate1"); const QString SystemTimedatedPath = QStringLiteral("/org/deepin/dde/Timedate1"); const QString SystemTimedatedInterface = QStringLiteral("org.deepin.dde.Timedate1"); const QString PropertiesInterface = QStringLiteral("org.freedesktop.DBus.Properties"); const QString PropertiesChanged = QStringLiteral("PropertiesChanged"); const QString LangSelectorService = QStringLiteral("org.deepin.dde.LangSelector1"); const QString LangSelectorPath = QStringLiteral("/org/deepin/dde/LangSelector1"); const QString LangSelectorInterface = QStringLiteral("org.deepin.dde.LangSelector1"); const QString FormatService = QStringLiteral("org.deepin.dde.Format1"); const QString FormatPath = QStringLiteral("/org/deepin/dde/Format1"); const QString FormatInterface = QStringLiteral("org.deepin.dde.Format1"); DatetimeDBusProxy::DatetimeDBusProxy(QObject *parent) : QObject(parent) , m_localeInter(new QDBusInterface(LangSelectorService, LangSelectorPath, LangSelectorInterface, QDBusConnection::sessionBus(), this)) , m_timedateInter(new QDBusInterface(TimedateService, TimedatePath, TimedateInterface, QDBusConnection::sessionBus(), this)) , m_systemtimedatedInter(new QDBusInterface(SystemTimedatedService, SystemTimedatedPath, SystemTimedatedInterface, QDBusConnection::systemBus(), this)) , m_formatInter(new QDBusInterface(FormatService, FormatPath, FormatInterface, QDBusConnection::sessionBus(), this)) { registerZoneInfoMetaType(); qRegisterMetaType("LocaleInfo"); qDBusRegisterMetaType(); qRegisterMetaType("LocaleList"); qDBusRegisterMetaType(); QDBusConnection::sessionBus().connect(TimedateService, TimedatePath, PropertiesInterface, PropertiesChanged, this, SLOT(onPropertiesChanged(QDBusMessage))); QDBusConnection::sessionBus().connect(FormatService, FormatPath, PropertiesInterface, PropertiesChanged, this, SLOT(onPropertiesChanged(QDBusMessage))); } bool DatetimeDBusProxy::use24HourFormat() { return qvariant_cast(m_timedateInter->property("Use24HourFormat")); } void DatetimeDBusProxy::setUse24HourFormat(bool value) { m_timedateInter->setProperty("Use24HourFormat", QVariant::fromValue(value)); } int DatetimeDBusProxy::weekdayFormat() { return qvariant_cast(m_timedateInter->property("WeekdayFormat")); } void DatetimeDBusProxy::setWeekdayFormat(int value) { m_timedateInter->setProperty("WeekdayFormat", QVariant::fromValue(value)); } int DatetimeDBusProxy::longDateFormat() { return qvariant_cast(m_timedateInter->property("LongDateFormat")); } void DatetimeDBusProxy::setLongDateFormat(int value) { m_timedateInter->setProperty("LongDateFormat", QVariant::fromValue(value)); } int DatetimeDBusProxy::shortDateFormat() { return qvariant_cast(m_timedateInter->property("ShortDateFormat")); } void DatetimeDBusProxy::setShortDateFormat(int value) { m_timedateInter->setProperty("ShortDateFormat", QVariant::fromValue(value)); } int DatetimeDBusProxy::longTimeFormat() { return qvariant_cast(m_timedateInter->property("LongTimeFormat")); } void DatetimeDBusProxy::setLongTimeFormat(int value) { m_timedateInter->setProperty("LongTimeFormat", QVariant::fromValue(value)); } int DatetimeDBusProxy::shortTimeFormat() { return qvariant_cast(m_timedateInter->property("ShortTimeFormat")); } void DatetimeDBusProxy::setShortTimeFormat(int value) { m_timedateInter->setProperty("ShortTimeFormat", QVariant::fromValue(value)); } int DatetimeDBusProxy::weekBegins() { return qvariant_cast(m_timedateInter->property("WeekBegins")); } void DatetimeDBusProxy::setWeekBegins(int value) { m_timedateInter->setProperty("WeekBegins", QVariant::fromValue(value)); } QString DatetimeDBusProxy::nTPServer() { return qvariant_cast(m_timedateInter->property("NTPServer")); } QString DatetimeDBusProxy::timezone() { return qvariant_cast(m_timedateInter->property("Timezone")); } bool DatetimeDBusProxy::nTP() { return qvariant_cast(m_timedateInter->property("NTP")); } QStringList DatetimeDBusProxy::userTimezones() { return qvariant_cast(m_timedateInter->property("UserTimezones")); } void DatetimeDBusProxy::onPropertiesChanged(const QDBusMessage &message) { QVariantMap changedProps = qdbus_cast(message.arguments().at(1).value()); for (QVariantMap::const_iterator it = changedProps.cbegin(); it != changedProps.cend(); ++it) { QMetaObject::invokeMethod(this, it.key().toLatin1() + "Changed", Qt::DirectConnection, QGenericArgument(it.value().typeName(), it.value().data())); } } // Timedate void DatetimeDBusProxy::SetNTP(bool useNTP) { m_timedateInter->asyncCall(QStringLiteral("SetNTP"), useNTP); } void DatetimeDBusProxy::SetNTP(bool useNTP, QObject *receiver, const char *member, const char *errorSlot) { QList argumentList; argumentList << QVariant::fromValue(useNTP); m_timedateInter->callWithCallback(QStringLiteral("SetNTP"), argumentList, receiver, member, errorSlot); } void DatetimeDBusProxy::SetDate(int year, int month, int day, int hour, int min, int sec, int nsec) { m_timedateInter->asyncCall(QStringLiteral("SetDate"), year, month, day, hour, min, sec, nsec); } void DatetimeDBusProxy::SetDate(const QDateTime &datetime, QObject *receiver, const char *member) { const QDate date = datetime.date(); const QTime time = datetime.time(); QList argumentList; argumentList << QVariant::fromValue(date.year()) << QVariant::fromValue(date.month()) << QVariant::fromValue(date.day()); argumentList << QVariant::fromValue(time.hour()) << QVariant::fromValue(time.minute()) << QVariant::fromValue(time.second()) << 0; m_timedateInter->callWithCallback(QStringLiteral("SetDate"), argumentList, receiver, member); } void DatetimeDBusProxy::DeleteUserTimezone(const QString &zone) { m_timedateInter->asyncCall(QStringLiteral("DeleteUserTimezone"), zone); } void DatetimeDBusProxy::AddUserTimezone(const QString &zone) { m_timedateInter->asyncCall(QStringLiteral("AddUserTimezone"), zone); } QStringList DatetimeDBusProxy::GetSampleNTPServers() { return QDBusPendingReply(m_timedateInter->asyncCall(QStringLiteral("GetSampleNTPServers"))); } bool DatetimeDBusProxy::GetSampleNTPServers(QObject *receiver, const char *member) { QList argumentList; return m_timedateInter->callWithCallback(QStringLiteral("GetSampleNTPServers"), argumentList, receiver, member); } ZoneInfo DatetimeDBusProxy::GetZoneInfo(const QString &zone) { return QDBusPendingReply(m_timedateInter->asyncCall(QStringLiteral("GetZoneInfo"), zone)); } bool DatetimeDBusProxy::GetZoneInfo(const QString &zone, QObject *receiver, const char *member) { QList argumentList; argumentList << QVariant::fromValue(zone); return m_timedateInter->callWithCallback(QStringLiteral("GetZoneInfo"), argumentList, receiver, member); } // System Timedate QDBusPendingCall DatetimeDBusProxy::SetTimezone(const QString &timezone, const QString &message) { return m_systemtimedatedInter->asyncCall(QStringLiteral("SetTimezone"), timezone, message); } void DatetimeDBusProxy::SetNTPServer(const QString &server, const QString &message) { m_systemtimedatedInter->asyncCall(QStringLiteral("SetNTPServer"), server, message); } void DatetimeDBusProxy::SetNTPServer(const QString &server, const QString &message, QObject *receiver, const char *member, const char *errorSlot) { QList argumentList; argumentList << QVariant::fromValue(server) << QVariant::fromValue(message); m_systemtimedatedInter->callWithCallback(QStringLiteral("SetNTPServer"), argumentList, receiver, member, errorSlot); } QString DatetimeDBusProxy::currentLocale() { QDBusInterface dbus(LangSelectorService, LangSelectorPath, LangSelectorInterface, QDBusConnection::sessionBus()); return qvariant_cast(dbus.property("CurrentLocale")); } std::optional DatetimeDBusProxy::getLocaleListMap() { QDBusPendingReply reply = m_localeInter->asyncCall(QStringLiteral("GetLocaleList")); reply.waitForFinished(); if (reply.isError()) { qCDebug(DdcDateTimeDbusProxy) << "Can not get localeRegion: "<< reply.error(); return std::nullopt; } return reply.value(); } std::optional DatetimeDBusProxy::getLocaleRegion() { QDBusPendingReply reply = m_localeInter->asyncCall(QStringLiteral("GetLocaleRegion")); reply.waitForFinished(); if (reply.isError()) { qCDebug(DdcDateTimeDbusProxy) << "Can not get localeRegion: "<< reply.error(); return std::nullopt; } if (reply.value().isEmpty()) { return std::nullopt; } else { return reply.value(); } } void DatetimeDBusProxy::setLocaleRegion(const QString &locale) { m_localeInter->asyncCall(QStringLiteral("SetLocaleRegion"), locale); } QString DatetimeDBusProxy::decimalSymbol() const { return qvariant_cast(m_formatInter->property("DecimalSymbol")); } void DatetimeDBusProxy::setDecimalSymbol(const QString &newDecimalSymbol) { m_formatInter->setProperty("DecimalSymbol", QVariant::fromValue(newDecimalSymbol)); } QString DatetimeDBusProxy::digitGrouping() const { return qvariant_cast(m_formatInter->property("DigitGrouping")); } void DatetimeDBusProxy::setDigitGrouping(const QString &newDigitGrouping) { m_formatInter->setProperty("DigitGrouping", QVariant::fromValue(newDigitGrouping)); } QString DatetimeDBusProxy::digitGroupingSymbol() const { return qvariant_cast(m_formatInter->property("DigitGroupingSymbol")); } void DatetimeDBusProxy::setDigitGroupingSymbol(const QString &newDigitGroupingSymbol) { m_formatInter->setProperty("DigitGroupingSymbol", QVariant::fromValue(newDigitGroupingSymbol)); } QString DatetimeDBusProxy::currencySymbol() const { return qvariant_cast(m_formatInter->property("CurrencySymbol")); } void DatetimeDBusProxy::setCurrencySymbol(const QString &newCurrencySymbol) { m_formatInter->setProperty("CurrencySymbol", QVariant::fromValue(newCurrencySymbol)); } QString DatetimeDBusProxy::negativeCurrencyFormat() const { return qvariant_cast(m_formatInter->property("NegativeCurrencyFormat")); } void DatetimeDBusProxy::setNegativeCurrencyFormat(const QString &newNegativeCurrencyFormat) { m_formatInter->setProperty("NegativeCurrencyFormat", QVariant::fromValue(newNegativeCurrencyFormat)); } QString DatetimeDBusProxy::positiveCurrencyFormat() const { return qvariant_cast(m_formatInter->property("PositiveCurrencyFormat")); } void DatetimeDBusProxy::setPositiveCurrencyFormat(const QString &newPositiveCurrencyFormat) { m_formatInter->setProperty("PositiveCurrencyFormat", QVariant::fromValue(newPositiveCurrencyFormat)); } void DatetimeDBusProxy::GenLocale(const QString &locale) { m_localeInter->asyncCall(QStringLiteral("GenLocale"), locale); } ================================================ FILE: src/plugin-datetime/operation/datetimedbusproxy.h ================================================ // SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DATETIMEDBUSPROXY_H #define DATETIMEDBUSPROXY_H #include "zoneinfo.h" #include #include #include #include class QDBusInterface; class QDBusMessage; class QDateTime; class LocaleInfo { public: LocaleInfo() { } friend QDBusArgument &operator<<(QDBusArgument &arg, const LocaleInfo &info) { arg.beginStructure(); arg << info.id << info.name; arg.endStructure(); return arg; } friend const QDBusArgument &operator>>(const QDBusArgument &arg, LocaleInfo &info) { arg.beginStructure(); arg >> info.id >> info.name; arg.endStructure(); return arg; } friend QDataStream &operator<<(QDataStream &ds, const LocaleInfo &info) { return ds << info.id << info.name; } friend const QDataStream &operator>>(QDataStream &ds, LocaleInfo &info) { return ds >> info.id >> info.name; } bool operator==(const LocaleInfo &info) { return id == info.id && name == info.name; } public: QString id{ "" }; QString name{ "" }; }; typedef QList LocaleList; Q_DECLARE_METATYPE(LocaleInfo) Q_DECLARE_METATYPE(LocaleList) class DatetimeDBusProxy : public QObject { Q_OBJECT public: explicit DatetimeDBusProxy(QObject *parent = nullptr); static QString currentLocale(); // Timedate Q_PROPERTY(bool Use24HourFormat READ use24HourFormat WRITE setUse24HourFormat NOTIFY Use24HourFormatChanged) bool use24HourFormat(); void setUse24HourFormat(bool value); Q_PROPERTY(int WeekdayFormat READ weekdayFormat WRITE setWeekdayFormat NOTIFY WeekdayFormatChanged) int weekdayFormat(); void setWeekdayFormat(int value); Q_PROPERTY(int LongDateFormat READ longDateFormat WRITE setLongDateFormat NOTIFY LongDateFormatChanged) int longDateFormat(); void setLongDateFormat(int value); Q_PROPERTY(int ShortDateFormat READ shortDateFormat WRITE setShortDateFormat NOTIFY ShortDateFormatChanged) int shortDateFormat(); void setShortDateFormat(int value); Q_PROPERTY(int LongTimeFormat READ longTimeFormat WRITE setLongTimeFormat NOTIFY LongTimeFormatChanged) int longTimeFormat(); void setLongTimeFormat(int value); Q_PROPERTY(int ShortTimeFormat READ shortTimeFormat WRITE setShortTimeFormat NOTIFY ShortTimeFormatChanged) int shortTimeFormat(); void setShortTimeFormat(int value); Q_PROPERTY(int WeekBegins READ weekBegins WRITE setWeekBegins NOTIFY WeekBeginsChanged) int weekBegins(); void setWeekBegins(int value); Q_PROPERTY(QString NTPServer READ nTPServer NOTIFY NTPServerChanged) QString nTPServer(); Q_PROPERTY(QString Timezone READ timezone NOTIFY TimezoneChanged) QString timezone(); Q_PROPERTY(bool NTP READ nTP NOTIFY NTPChanged) bool nTP(); Q_PROPERTY(QStringList UserTimezones READ userTimezones NOTIFY UserTimezonesChanged) QStringList userTimezones(); Q_PROPERTY(QString decimalSymbol READ decimalSymbol WRITE setDecimalSymbol NOTIFY DecimalSymbolChanged) Q_PROPERTY(QString digitGrouping READ digitGrouping WRITE setDigitGrouping NOTIFY DigitGroupingChanged) Q_PROPERTY(QString digitGroupingSymbol READ digitGroupingSymbol WRITE setDigitGroupingSymbol NOTIFY DigitGroupingSymbolChanged) Q_PROPERTY(QString currencySymbol READ currencySymbol WRITE setCurrencySymbol NOTIFY CurrencySymbolChanged) Q_PROPERTY(QString negativeCurrencyFormat READ negativeCurrencyFormat WRITE setNegativeCurrencyFormat NOTIFY NegativeCurrencyFormatChanged) Q_PROPERTY(QString positiveCurrencyFormat READ positiveCurrencyFormat WRITE setPositiveCurrencyFormat NOTIFY PositiveCurrencyFormatChanged) // Locale std::optional getLocaleListMap(); std::optional getLocaleRegion(); void setLocaleRegion(const QString &locale); QString decimalSymbol() const; void setDecimalSymbol(const QString &newDecimalSymbol); QString digitGrouping() const; void setDigitGrouping(const QString &newDigitGrouping); QString digitGroupingSymbol() const; void setDigitGroupingSymbol(const QString &newDigitGroupingSymbol); QString currencySymbol() const; void setCurrencySymbol(const QString &newCurrencySymbol); QString negativeCurrencyFormat() const; void setNegativeCurrencyFormat(const QString &newNegativeCurrencyFormat); QString positiveCurrencyFormat() const; void setPositiveCurrencyFormat(const QString &newPositiveCurrencyFormat); void GenLocale(const QString &locale); Q_SIGNALS: // SIGNALS // Timedate // begin property changed signals void CanNTPChanged(bool value) const; void DSTOffsetChanged(int value) const; void LocalRTCChanged(bool value) const; void LongDateFormatChanged(int value) const; void LongTimeFormatChanged(int value) const; void NTPChanged(bool value) const; void NTPServerChanged(const QString &value) const; void ShortDateFormatChanged(int value) const; void ShortTimeFormatChanged(int value) const; void TimezoneChanged(const QString &value) const; void Use24HourFormatChanged(bool value) const; void UserTimezonesChanged(const QStringList &value) const; void WeekBeginsChanged(int value) const; void WeekdayFormatChanged(int value) const; void DecimalSymbolChanged(const QString &value) const; void DigitGroupingChanged(const QString &value) const; void DigitGroupingSymbolChanged(const QString &value) const; void CurrencySymbolChanged(const QString &value) const; void NegativeCurrencyFormatChanged(const QString &value) const; void PositiveCurrencyFormatChanged(const QString &value) const; public Q_SLOTS: // Timedate void SetNTP(bool useNTP); void SetNTP(bool useNTP, QObject *receiver, const char *member, const char *errorSlot); void SetDate(int year, int month, int day, int hour, int min, int sec, int nsec); void SetDate(const QDateTime &datetime, QObject *receiver, const char *member); void DeleteUserTimezone(const QString &zone); void AddUserTimezone(const QString &zone); QStringList GetSampleNTPServers(); bool GetSampleNTPServers(QObject *receiver, const char *member); ZoneInfo GetZoneInfo(const QString &zone); bool GetZoneInfo(const QString &zone, QObject *receiver, const char *member); // System Timedate QDBusPendingCall SetTimezone(const QString &timezone, const QString &message); void SetNTPServer(const QString &server, const QString &message); void SetNTPServer(const QString &server, const QString &message, QObject *receiver, const char *member, const char *errorSlot); private Q_SLOTS: void onPropertiesChanged(const QDBusMessage &message); private: QDBusInterface *m_localeInter; QDBusInterface *m_timedateInter; QDBusInterface *m_systemtimedatedInter; QDBusInterface *m_formatInter; }; #endif // DATETIMEDBUSPROXY_H ================================================ FILE: src/plugin-datetime/operation/datetimemodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "datetimemodel.h" #include "dccfactory.h" #include "timezoneMap/timezone_map_util.h" #include "datetimeworker.h" #include "zoneinfomodel.h" #include "keyboard/keyboardmodel.h" #include "languagelistmodel.h" #include "langregionmodel.h" #include "dcclocale.h" #include #include #include #include #include #include #include #include #include static installer::ZoneInfoList g_totalZones; static QString getDescription(const ZoneInfo &zoneInfo) { const QDateTime localTime(QDateTime::currentDateTime()); const double timeDelta = (zoneInfo.getUTCOffset() - localTime.offsetFromUtc()) / 3600.0; QString dateLiteral; if (localTime.time().hour() + timeDelta >= 24) { dateLiteral = DatetimeModel::tr("Tomorrow"); } else if (localTime.time().hour() + timeDelta <= 0) { dateLiteral = DatetimeModel::tr("Yesterday"); } else { dateLiteral = DatetimeModel::tr("Today"); } int decimalNumber = 1; //小时取余,再取分钟,将15分钟的双倍只显示一位小数,其他的都显示两位小数 switch ((zoneInfo.getUTCOffset() - localTime.offsetFromUtc()) % 3600 / 60 / 15) { case -1: case -3: case 1: case 3: decimalNumber = 2; break; default: decimalNumber = 1; break; } QString description; if (timeDelta > 0) { description = DatetimeModel::tr("%1 hours earlier than local").arg(QString::number(timeDelta, 'f', decimalNumber)); } else { description = DatetimeModel::tr("%1 hours later than local").arg(QString::number(-timeDelta, 'f', decimalNumber)); } QDateTime targetTime = localTime.addSecs(static_cast(timeDelta * 3600)); QString timeText = targetTime.toString("HH:mm"); return QString("%1, %2, %3").arg(dateLiteral).arg(description).arg(timeText); } static QString getDisplayText(const ZoneInfo &zoneInfo) { QString gmData = zoneInfo.getUtcOffsetText(); QString cityName = zoneInfo.getZoneCity().isEmpty() ? zoneInfo.getZoneName() : zoneInfo.getZoneCity(); return QString("%1 %2").arg(cityName).arg(gmData); } static QStringList timeZoneList(const installer::ZoneInfoList &zoneInfoList, QMap &cache) { using namespace installer; if (g_totalZones.empty()) g_totalZones = GetZoneInfoList(); const QString locale = QLocale::system().name(); QStringList timezoneList; for (const auto& info : zoneInfoList) { auto localzone = GetLocalTimezoneName(info.timezone, locale); if (!cache.contains(localzone)) { // "上海": "Asia/Shanghai" cache[localzone] = info.timezone; } timezoneList << localzone; } return timezoneList; } static inline QStringList getCurrencySymbol(bool positive, const QString &symbol) { const QString money("1.1"); if (positive) return { QString("%1%2").arg(symbol).arg(money), // ¥1.1 QString("%1%2").arg(money).arg(symbol), // ¥1.1 QString("%1 %2").arg(symbol).arg(money), // ¥ 1.1 QString("%1 %2").arg(money).arg(symbol) // 1.1 ¥ }; return { QString("-%1%2").arg(symbol).arg(money), // -¥1.1 QString("%1-%2").arg(symbol).arg(money), // ¥-1.1 QString("%1%2-").arg(symbol).arg(money), // ¥1.1- QString("-%1%2").arg(money).arg(symbol), // 1.1-¥ QString("%1-%2").arg(money).arg(symbol), // 1.1-¥ QString("%1%2-").arg(money).arg(symbol) // 1.1¥- }; } static inline QString escapSpace(const QString &space) { if (space.isEmpty()) return QLatin1String(" "); // 不同语言下空格可能不同。。详情看 QChar::isSpace 实现 bool isSpace = space.at(0).isSpace() || space == DatetimeModel::tr("Space"); return isSpace ? QLatin1String(" ") : space; } static inline QString normalizeSpace(const QString &value) { // 如果是 "Space" 字符串,转换为普通空格 if (value == "Space" || value == DatetimeModel::tr("Space")) { return QString(" "); } // 其他所有字符(包括特殊分隔符)都保持原样 return value; } static inline QString unEscapSpace(const QString &space) { if (space.isEmpty()) return QLatin1String(" "); // 将所有空格类字符(包括普通空格和特殊空格)都转换为 "Space" 显示 // 这样用户在UI中看到的都是 "Space",但实际使用的是区域对应的空格字符 return space.at(0).isSpace() ? DatetimeModel::tr("Space") : space; } // 将显示用的符号转换回实际的字符 // 如果用户选择了 "Space",返回区域对应的实际空格字符 static inline QString escapSpace(const QString &displaySymbol, const QLocale &locale, bool grouping) { if (displaySymbol == DatetimeModel::tr("Space")) { // 用户选择了 "Space",返回区域对应的实际空格字符 return grouping ? locale.groupSeparator() : QStringLiteral(" "); } return displaySymbol; } static inline QStringList separatorSymbol(const QLocale &locale, bool grouping) { QStringList symbols{ QString("."), QString(","), QString("'"), DatetimeModel::tr("Space") }; // 只有千位分隔符需要添加区域特殊字符,小数点只使用默认的四个选项 if (grouping) { QString separator = locale.groupSeparator(); separator = unEscapSpace(separator); if (!symbols.contains(separator)) { symbols.prepend(separator); } } return symbols; } static QString translate(const QString &localeName, const QString &langRegion) { QStringList langRegions = langRegion.split(":"); if (langRegions.size() < 2) { return langRegion; } auto res = DCCLocale::languageAndRegionName(localeName); QString langCountry = QObject::tr("%1 (%2)", "Language and region name, e.g. Chinese (China)").arg(res.first).arg(res.second); return langCountry; } DatetimeModel::DatetimeModel(QObject *parent) : QObject(parent) , m_ntp(true) , m_bUse24HourType(true) , m_previousServerAddress("") , m_work(new DatetimeWorker(this, this)) { connect(this, &DatetimeModel::ntpChanged, m_work, &DatetimeWorker::setNTP); connect(this, &DatetimeModel::hourTypeChanged, m_work, &DatetimeWorker::set24HourType); connect(this, &DatetimeModel::NTPServerChanged, m_work, &DatetimeWorker::setNtpServer); // 设置ntp地址失败回退到之前的地址 connect(this, &DatetimeModel::NTPServerNotChanged, this, &DatetimeModel::setNtpServerAddress); // set timezone // connect(this, &DatetimeModel::timeZoneChanged, m_work, &DatetimeWorker::setTimezone); connect(this, &DatetimeModel::currencyFormatChanged, this, [this](const QString &oldFormat, const QString &newFormat){ // get PositiveCurrency/NegativeCurrency auto posFmt = m_work->positiveCurrencyFormat(); auto negFmt = m_work->negativeCurrencyFormat(); m_work->setPositiveCurrencyFormat(posFmt.replace(oldFormat, newFormat)); m_work->setNegativeCurrencyFormat(negFmt.replace(oldFormat, newFormat)); }); connect(this, &DatetimeModel::digitGroupingSymbolChanged, this, [this](const QString &oldFormat, const QString &newFormat){ QString fmt1 = escapSpace(oldFormat); QString fmt2 = escapSpace(newFormat); auto digitGrouping = m_work->digitGrouping(); m_work->setDigitGrouping(digitGrouping.replace(fmt1, fmt2)); }); connect(this, &DatetimeModel::symbolChanged, this, [this](int format) { Q_EMIT numberExampleFormatChanged(numberExampleParts()); if (format != CurrencySymbol && format != DigitGroupingSymbol && format != DecimalSymbol) return; Q_EMIT currentFormatChanged(format); }); connect(this, &DatetimeModel::currentLanguageAndRegionChanged, this, [this]() { Q_EMIT currentFormatChanged(-1); }); connect(this, &DatetimeModel::shortDateFormatChanged, this, [this]() { Q_EMIT currentFormatChanged(ShortDate); }); connect(this, &DatetimeModel::longDateFormatChanged, this, [this]() { Q_EMIT currentFormatChanged(LongDate); }); connect(this, &DatetimeModel::shortTimeFormatChanged, this, [this]() { Q_EMIT currentFormatChanged(ShortTime); }); connect(this, &DatetimeModel::longTimeFormatChanged, this, [this]() { Q_EMIT currentFormatChanged(LongTime); }); qmlRegisterType("ZoneInfoModel", 1, 0, "ZoneInfoModel"); } DatetimeModel::~DatetimeModel() { bool isCustomizeMode = !m_NtpServerList.contains(m_strNtpServerAddress); if (isCustomizeMode && m_strNtpServerAddress.isEmpty() && !m_previousServerAddress.isEmpty()) { if (m_work) { m_work->setNtpServer(m_previousServerAddress); } } } void DatetimeModel::setNTP(bool ntp) { if (m_ntp != ntp) { m_ntp = ntp; Q_EMIT ntpChanged(ntp); } } void DatetimeModel::set24HourFormat(bool state) { if (m_bUse24HourType != state) { m_bUse24HourType = state; Q_EMIT hourTypeChanged(state); } } void DatetimeModel::setDateTime(const QDateTime &dateTime) { if (m_work) m_work->setDatetime(dateTime); } QStringList DatetimeModel::zones(int x, int y, int map_width, int map_height) { using namespace installer; if (g_totalZones.empty()) g_totalZones = GetZoneInfoList(); const double kDistanceThreshold = 64.0; auto zonelist = GetNearestZones(g_totalZones, kDistanceThreshold, x, y, map_width, map_height); return timeZoneList(zonelist, m_timezoneCache); } QPoint DatetimeModel::zonePosition(const QString &timezone, int map_width, int map_height) { using namespace installer; if (g_totalZones.empty()) g_totalZones = GetZoneInfoList(); auto enZone = m_timezoneCache.value(timezone, timezone); int index = GetZoneInfoByZone(g_totalZones, enZone); if (index < 0) return QPoint(); auto currentZone = g_totalZones.at(index); const int x = int(ConvertLongitudeToX(currentZone.longitude) * map_width); const int y = int(ConvertLatitudeToY(currentZone.latitude) * map_height); return QPoint(x, y); } QStringList DatetimeModel::zoneIdList() { using namespace installer; if (g_totalZones.empty()) g_totalZones = GetZoneInfoList(); QStringList list; for (const auto& info : g_totalZones) { list << info.timezone; } return list; } QString DatetimeModel::zoneDisplayName(const QString &zoneName) { if (m_work) { auto zoneInfo = m_work->GetZoneInfo(zoneName); QString utcOffsetText = zoneInfo.getUtcOffsetText(); QString cityName = zoneInfo.getZoneCity().isEmpty() ? zoneInfo.getZoneName() : zoneInfo.getZoneCity(); return QString("%1 %2").arg(cityName).arg(utcOffsetText); } return QString(); } QAbstractListModel *DatetimeModel::userTimezoneModel() { if (m_userTimezoneModel) return m_userTimezoneModel; m_userTimezoneModel = new dccV25::UserTimezoneModel(this); connect(this, &DatetimeModel::userTimeZoneAdded, m_userTimezoneModel, &dccV25::UserTimezoneModel::reset); connect(this, &DatetimeModel::userTimeZoneRemoved, m_userTimezoneModel, &dccV25::UserTimezoneModel::reset); connect(this, &DatetimeModel::timeZoneChanged, m_userTimezoneModel, [this]() { auto indexBegin = m_userTimezoneModel->index(0); auto indexEnd = m_userTimezoneModel->index(m_userTimeZones.count() - 1); Q_EMIT m_userTimezoneModel->dataChanged(indexBegin, indexEnd); }); connect(this, &DatetimeModel::currentTimeChanged, m_userTimezoneModel, [this]() { static int lastMinute = -1; int curMinute = QTime::currentTime().minute(); if (curMinute == lastMinute) return; lastMinute = curMinute; if (!m_userTimeZones.isEmpty()) { auto indexBegin = m_userTimezoneModel->index(0); auto indexEnd = m_userTimezoneModel->index(m_userTimeZones.count() - 1); Q_EMIT m_userTimezoneModel->dataChanged(indexBegin, indexEnd); } }); return m_userTimezoneModel; } QSortFilterProxyModel *DatetimeModel::zoneSearchModel() { if (m_zoneSearchModel) return m_zoneSearchModel; m_zoneSearchModel = new QSortFilterProxyModel(this); auto sourceModel = new dccV25::ZoneInfoModel(this); m_zoneSearchModel->setSourceModel(sourceModel); m_zoneSearchModel->setFilterRole(dccV25::ZoneInfoModel::SearchTextRole); m_zoneSearchModel->setFilterCaseSensitivity(Qt::CaseInsensitive); return m_zoneSearchModel; } QSortFilterProxyModel *DatetimeModel::langSearchModel() { if (m_langSearchModel) return m_langSearchModel; m_langSearchModel = new QSortFilterProxyModel(this); ensureLangModel(); auto sourceModel = new dccV25::LanguageListModel(this); sourceModel->setMetaData(m_langModel->langLists()); sourceModel->setLocalLang(m_langModel->localLang()); connect(m_langModel, &dccV25::KeyboardModel::langChanged, sourceModel, &dccV25::LanguageListModel::setMetaData); connect(m_langModel, &dccV25::KeyboardModel::curLocalLangChanged, sourceModel, &dccV25::LanguageListModel::setLocalLang); m_langSearchModel->setSourceModel(sourceModel); m_langSearchModel->setFilterRole(dccV25::LanguageListModel::SearchTextRole); m_langSearchModel->setFilterCaseSensitivity(Qt::CaseInsensitive); return m_langSearchModel; } QSortFilterProxyModel *DatetimeModel::langRegionSearchModel() { if (m_regionSearchModel) return m_regionSearchModel; m_regionSearchModel = new QSortFilterProxyModel(this); auto sourceModel = new dccV25::LangRegionModel(this); m_regionSearchModel->setSourceModel(sourceModel); m_regionSearchModel->setFilterRole(dccV25::ZoneInfoModel::SearchTextRole); m_regionSearchModel->setFilterCaseSensitivity(Qt::CaseInsensitive); return m_regionSearchModel; } QSortFilterProxyModel *DatetimeModel::regionSearchModel() { if (m_countrySearchModel) return m_countrySearchModel; for (const auto &locale : m_regions) { auto langCountry = DCCLocale::languageAndRegionName(locale.name()); // { 中国: CN } m_langRegionsCache[langCountry.second] = locale.territoryToCode(locale.territory()); } m_countrySearchModel = new QSortFilterProxyModel(this); QStringListModel *sourceModel = new QStringListModel(m_langRegionsCache.keys(), m_countrySearchModel); m_countrySearchModel->setSourceModel(sourceModel); m_countrySearchModel->setFilterCaseSensitivity(Qt::CaseInsensitive); return m_countrySearchModel; } void DatetimeModel::initModes(const QStringList &names, int indexBegin, int indexEnd, QAbstractListModel *model) { auto m = dynamic_cast(model); if (!m) return; QList datas; for (int i = indexBegin; i <= indexEnd && (i - indexBegin) < names.count(); ++i) { dccV25::FormatsInfo info; info.name = names[i - indexBegin]; info.values = availableFormats(i); info.index = currentFormatIndex(i); info.indexBegin = indexBegin; datas << info; } m->setDatas(datas); } QAbstractListModel *DatetimeModel::timeDateModel() { if (m_timeDateModel) return m_timeDateModel; auto model = new dccV25::FormatsModel(this); QStringList names = { tr("Week"), tr("First day of week"), tr("Short date"), tr("Long date"), tr("Short time"), tr("Long time") }; auto initFormattedModes = [this, model](const QStringList &names) { QStringList nameList = names; int indexBegin = DayAbbreviations; QStringList langRegions = langRegion().split(":"); if (langRegions.size() >= 2 && !langRegions.first().contains("Chinese", Qt::CaseInsensitive)) { indexBegin += 1; nameList.removeFirst(); } initModes(nameList, indexBegin, LongTime, model); }; initFormattedModes(names); connect(this, &DatetimeModel::currentFormatChanged, model, [model, names, this, initFormattedModes](int format){ if ((format >= DayAbbreviations && format <= LongTime) || format < 0) { initFormattedModes(names); } }); m_timeDateModel = model; return m_timeDateModel; } QAbstractListModel *DatetimeModel::currencyModel() { if (m_currencyModel) return m_currencyModel; auto model = new dccV25::FormatsModel(this); QStringList names = { tr("Currency symbol"), tr("Positive currency"), tr("Negative currency") }; initModes(names, CurrencySymbol, NegativeCurrency, model); connect(this, &DatetimeModel::currentFormatChanged, model, [model, names, this](int format){ if ((format >= CurrencySymbol && format <= NegativeCurrency) || format < 0) initModes(names, CurrencySymbol, NegativeCurrency, model); }); m_currencyModel = model; return m_currencyModel; } QAbstractListModel *DatetimeModel::decimalModel() { if (m_decimalModel) return m_decimalModel; auto model = new dccV25::FormatsModel(this); QStringList names = { tr("Decimal symbol"), tr("Digit grouping symbol"), tr("Digit grouping"), tr("Page size") }; initModes(names, DecimalSymbol, PageSize, model); connect(this, &DatetimeModel::currentFormatChanged, model, [model, names, this](int format){ if ((format >= DecimalSymbol && format <= PageSize) || format < 0) initModes(names, DecimalSymbol, PageSize, model); }); m_decimalModel = model; return m_decimalModel; } QString DatetimeModel::region() { if (m_regionName.isEmpty()) { QString localeName; for (const auto &locale : m_regions) { if (locale.territoryToString(locale.territory()) == m_country) { localeName = locale.name(); break; } if (locale.territoryToCode(locale.territory()) == m_country) { localeName = locale.name(); break; } } auto langCountry = DCCLocale::languageAndRegionName(localeName); m_regionName = langCountry.second; } return m_regionName; } int DatetimeModel::currentRegionIndex() { return m_langRegionsCache.keys().indexOf(region()); } void DatetimeModel::setRegion(const QString ®ion) { if (m_regionName == region) return; m_regionName = region; auto reg = m_langRegionsCache.value(region, region); for (const auto &tmplocale : m_regions) { if (tmplocale.territoryToCode(tmplocale.territory()) == reg) { qDebug() << "set locale:" << tmplocale.name(); QString country = tmplocale.territoryToString(tmplocale.territory()); QString language = QLocale::languageToString(tmplocale.language()); QString langCountry = QString("%1:%2").arg(language).arg(country); m_work->setConfigValue(country_key, country); Q_EMIT regionChanged(region); Q_EMIT currentRegionIndexChanged(currentRegionIndex()); break; } } } QStringList DatetimeModel::languagesAndRegions() { QStringList langAndRegions; for (auto locale : m_regions) { const QString &langCountry = translate(locale.name(), m_regions.key(locale)); langAndRegions << langCountry; } return langAndRegions; } QString DatetimeModel::currentLanguageAndRegion() { return translate(localeName(), langRegion()); } void DatetimeModel::setCurrentLocaleAndLangRegion(const QString &localeName, const QString& langAndRegion) { QStringList langRegions = langAndRegion.split(":"); if (langRegions.size() < 2) { qWarning() << "invalid langAndRegion" << langAndRegion; return; } if (!m_work) return; // 立即更新 m_localeName,确保后续的 availableFormats 使用正确的 locale setLocaleName(localeName); setLangRegion(langAndRegion); // 从 m_regions 中获取 locale,而不是重新创建 // 这样可以保留完整的 locale 信息(包括数字系统等) QLocale locale; if (m_regions.contains(langAndRegion)) { locale = m_regions.value(langAndRegion); } else { locale = QLocale(localeName); } m_work->setConfigValue(languageRegion_key, langAndRegion); m_work->setConfigValue(localeName_key, localeName); RegionFormat regionFormat = RegionProxy::regionFormat(locale); // case FirstDayOfWeek: m_work->setConfigValue(firstDayOfWeek_key, regionFormat.firstDayOfWeekFormat); m_work->setWeekStartDayFormat(regionFormat.firstDayOfWeekFormat < 1 ? 0 : regionFormat.firstDayOfWeekFormat - 1); setFirstDayOfWeek(regionFormat.firstDayOfWeekFormat); // case ShortDate: m_work->setConfigValue(shortDateFormat_key, regionFormat.shortDateFormat); // case LongDate: m_work->setConfigValue(longDateFormat_key, regionFormat.longDateFormat); // case ShortTime: m_work->setConfigValue(shortTimeFormat_key, regionFormat.shortTimeFormat); // case LongTime: m_work->setConfigValue(longTimeFormat_key, regionFormat.longTimeFormat); // case Currency: m_work->setConfigValue(currencyFormat_key, regionFormat.currencyFormat.toUtf8()); m_work->setCurrencySymbol(locale.currencySymbol()); // case Digit: m_work->setConfigValue(numberFormat_key, regionFormat.numberFormat.toUtf8()); m_work->setDigitGrouping(regionFormat.numberFormat.toUtf8()); // 获取当前小数点符号(在设置之前) QString currentDecimal = m_work->decimalSymbol(); // 保留原始的分隔符字符(包括特殊空格字符) QString newSeparator = regionFormat.digitgroupFormat; // 检查新传入的区域格式是否为中文区域 bool isNewLocaleChinese = locale.language() == QLocale::Chinese; // 检查新传入的区域格式是否为中文区域,如果是则直接应用中文默认设置 if (isNewLocaleChinese) { // 中文区域直接应用默认设置:小数点".",分隔符"," m_work->setDecimalSymbol("."); m_work->setDigitGroupingSymbol(","); } else { // 非中文区域:先设置新区域的千位分隔符(遵循区域格式) m_work->setDigitGroupingSymbol(newSeparator); // 检查当前小数点是否与新分隔符冲突,如果冲突则自动调整小数点 // 小数点保持当前设置不变,只有在冲突时才调整 if (symbolsConflict(currentDecimal, newSeparator)) { // 如果当前小数点与新分隔符冲突,使用冲突解决逻辑调整小数点 QString resolvedDecimal = resolveDecimalSymbol(currentDecimal, newSeparator); m_work->setDecimalSymbol(resolvedDecimal); } } // case PaperSize: m_work->setConfigValue(paperFormat_key, regionFormat.paperFormat.toUtf8()); m_work->genLocale(locale.name()); } QStringList DatetimeModel::availableFormats(int format) const { // 从 m_regions 中获取 locale,保留完整的 locale 信息(包括数字系统) QLocale locale; if (m_regions.contains(m_langCountry)) { locale = m_regions.value(m_langCountry); } else { locale = QLocale(m_localeName); } RegionAvailableData regionFormatsAvailable = RegionProxy::allTextData(locale); switch (format) { // date time formats case DayAbbreviations: return QStringList{ locale.standaloneDayName(1, QLocale::LongFormat), locale.standaloneDayName(1, QLocale::ShortFormat) }; case DayOfWeek: { QStringList days; for (int i = 1; i < 8; ++i) days << locale.standaloneDayName(i, QLocale::LongFormat); return days; } case LongDate: return regionFormatsAvailable.longDatesAvailable; case ShortDate: return regionFormatsAvailable.shortDatesAvailable; case LongTime: return regionFormatsAvailable.longTimesAvailable; case ShortTime: return regionFormatsAvailable.shortTimesAvailable; // currency formats case CurrencySymbol: { QStringList defaultSymbols { QString::fromLocal8Bit("¥"), QString::fromLocal8Bit("$"), QString::fromLocal8Bit("€") }; const QString ¤t = RegionProxy::regionFormat(locale).currencyFormat; if (!defaultSymbols.contains(current)) defaultSymbols.prepend(current); return defaultSymbols; } case PositiveCurrency: { return getCurrencySymbol(true, currencyFormat()); } case NegativeCurrency: { return getCurrencySymbol(false, currencyFormat()); } // number formats case DecimalSymbol:{ return separatorSymbol(locale, false); } case DigitGroupingSymbol: { return separatorSymbol(locale, true); } case DigitGrouping: { QString dgSymbol = escapSpace(m_work->digitGroupingSymbol()); // 不带数字分隔符,方便自定义追加 locale.setNumberOptions(QLocale::OmitGroupSeparator); // 有的国家使用的是阿拉伯*文*数字(东阿拉伯数字) // 如伊朗、阿富汗、巴基斯坦及印度部分地区 ١٢٣٤٥٦٧٨٩ // https://zh.wikipedia.org/wiki/%E9%98%BF%E6%8B%89%E4%BC%AF%E6%96%87%E6%95%B0%E5%AD%97 // 始终使用阿拉伯数字(0-9)显示,避免字体渲染问题 const QString numString = "123456789"; return { numString, // 123456789 QString(numString).insert(3, dgSymbol).insert(7, dgSymbol), // 123,456,789 QString(numString).insert(6, dgSymbol), // 123456,789 QString(numString).insert(2, dgSymbol).insert(5, dgSymbol).insert(8, dgSymbol), // 12,34,56,789 }; } case PageSize: return {"A4"}; default: break; } return QStringList(); } int DatetimeModel::currentFormatIndex(int format) const { #define INDEX_OF(format, MEMBER, isDate) { \ const QDate CurrentDate(2024, 1, 1); \ const QTime CurrentTime(1, 1, 1); \ QLocale locale(m_localeName); \ RegionAvailableData regionFormatsAvailable = RegionProxy::allTextData(locale); \ const auto &fmt = isDate ? locale.toString(CurrentDate, format) : locale.toString(CurrentTime, format); \ return regionFormatsAvailable.MEMBER.indexOf(fmt); \ } switch (format) { // date time formats case DayAbbreviations: return weekdayFormat(); case DayOfWeek: { return firstDayOfWeekFormat() - 1; // combo index start from 0 } case LongDate: { INDEX_OF(longDateFormat(), longDatesAvailable, true); } case ShortDate: { INDEX_OF(shortDateFormat(), shortDatesAvailable, true); } case LongTime:{ INDEX_OF(longTimeFormat(), longTimesAvailable, false); } case ShortTime: { INDEX_OF(shortTimeFormat(), shortTimesAvailable, false); } // currency formats case CurrencySymbol: { const QString ¤cySymbol = currencyFormat(); QStringList defaultSymbols = availableFormats(format); return defaultSymbols.indexOf(currencySymbol); } case PositiveCurrency: { auto fmt = m_work->positiveCurrencyFormat(); auto fmts = getCurrencySymbol(true, currencyFormat()); return fmts.indexOf(fmt); } case NegativeCurrency: { auto fmt = m_work->negativeCurrencyFormat(); auto fmts = getCurrencySymbol(false, currencyFormat()); return fmts.indexOf(fmt); } // number formats case DecimalSymbol: { const QString ¤t = m_work->decimalSymbol(); QStringList defaultSymbols = separatorSymbol(QLocale(m_localeName), false); int index = defaultSymbols.indexOf(current); return (index != -1) ? index : defaultSymbols.indexOf(DatetimeModel::tr("Space")); } case DigitGroupingSymbol: { const QString ¤t = m_work->digitGroupingSymbol(); QStringList defaultSymbols = separatorSymbol(m_regions.contains(m_langCountry)?m_regions.value(m_langCountry):QLocale(m_localeName), true); int index = defaultSymbols.indexOf(unEscapSpace(current)); return (index != -1) ? index : defaultSymbols.indexOf(DatetimeModel::tr("Space")); } case DigitGrouping: { const QString ¤t = normalizeSpace(m_work->digitGrouping()); QStringList defaultSymbols = availableFormats(format); auto index = defaultSymbols.indexOf(current); return index; } default: break; } return 0; } void DatetimeModel::setCurrentFormat(int format, int index) { if (index < 0) { qWarning() << "Invalide index!"; return; } RegionAvailableData regionFormat = RegionProxy::allFormat(); QLocale locale(m_localeName); // const QString &symbol = RegionProxy::regionFormat(locale).currencyFormat; auto setConfig = [this](int index, const QString &key, const QStringList &availableList) { if (index < availableList.count()) { m_work->setConfigValue(key, availableList.at(index)); } else { qWarning() << "Set [" << key << "] faild, invalid index" << index << availableList.count(); } }; switch (format) { // date time formats case DayAbbreviations: { setWeekdayFormat(index); break; } case DayOfWeek: { // dconfig m_work->setConfigValue(firstDayOfWeek_key, index + 1); // dbus (from 0 to 6) m_work->setWeekStartDayFormat(index); setFirstDayOfWeek(index + 1); break; } case LongDate: { setConfig(index, longDateFormat_key, regionFormat.longDatesAvailable); break; } case ShortDate: { setConfig(index, shortDateFormat_key, regionFormat.shortDatesAvailable); break; } case LongTime:{ setConfig(index, longTimeFormat_key, regionFormat.longTimesAvailable); break; } case ShortTime: { setConfig(index, shortTimeFormat_key, regionFormat.shortTimesAvailable); break; } // currency formats case CurrencySymbol: { QStringList defaultSymbols = availableFormats(format); if (index >= defaultSymbols.count()) return; // dconfig setConfig(index, currencyFormat_key, defaultSymbols); // dbus m_work->setCurrencySymbol(defaultSymbols.value(index)); } break; case PositiveCurrency: { auto fmts = getCurrencySymbol(true, currencyFormat()); if (index < fmts.count()) m_work->setPositiveCurrencyFormat(fmts.value(index)); } break; case NegativeCurrency: { auto fmts = getCurrencySymbol(false, currencyFormat()); if (index < fmts.count()) m_work->setNegativeCurrencyFormat(fmts.value(index)); } break; // number formats case DecimalSymbol: { auto fmts = separatorSymbol(locale, false); if (index < fmts.count()) { QString displaySymbol = fmts.value(index); // 将显示用的符号转换回实际的字符(如果是 "Space",使用区域对应的空格字符) QString newDecimal = escapSpace(displaySymbol, locale, false); QString currentSeparator = m_work->digitGroupingSymbol(); // 验证符号变更是否会导致冲突 if (m_work->validateSymbolChange(newDecimal, currentSeparator)) { m_work->setDecimalSymbol(newDecimal); } else { qWarning() << "Decimal symbol change rejected due to conflict:" << newDecimal << "conflicts with separator:" << currentSeparator; // 不设置会导致冲突的符号组合,保持当前设置 return; } } } break; case DigitGroupingSymbol: { auto fmts = separatorSymbol(m_regions.contains(m_langCountry)?m_regions.value(m_langCountry):locale, true); if (index < fmts.count()) { // 将显示用的符号转换回实际的字符(如果是 "Space",使用区域对应的空格字符) QString newSeparator = fmts.value(index); QString currentDecimal = m_work->decimalSymbol(); // 验证符号变更是否会导致冲突 if (m_work->validateSymbolChange(currentDecimal, newSeparator)) { m_work->setDigitGroupingSymbol(newSeparator); } else { qWarning() << "Digit grouping symbol change rejected due to conflict:" << newSeparator << "conflicts with decimal:" << currentDecimal; // 不设置会导致冲突的符号组合,保持当前设置 return; } } } break; case DigitGrouping: { QStringList fmts = availableFormats(format); if (index >= fmts.count()) return; // dconfig setConfig(index, numberFormat_key, fmts); // dbus m_work->setDigitGrouping(fmts.value(index)); } break; default: break; } Q_EMIT currentFormatChanged(format); } QString DatetimeModel::currentDate() const { return m_currentDate; } QString DatetimeModel::getCurrentDate() const { QLocale locale; if (m_regions.contains(m_langCountry)) { locale = m_regions.value(m_langCountry); } else { locale = QLocale(m_localeName); } QString week = weekdayFormat() == 1 ? "ddd" : "dddd"; QString dateFormat = shortDateFormat() + " " + week; return locale.toString(QDate::currentDate(), dateFormat); } QString DatetimeModel::currentTime() const { return m_currentTime; } QString DatetimeModel::getCurrentTime() const { QLocale locale; if (m_regions.contains(m_langCountry)) { locale = m_regions.value(m_langCountry); } else { locale = QLocale(m_localeName); } QString timeFormat = longTimeFormat(); // remove all occurrences of 't' and '[tttt]' or similar patterns timeFormat.remove(QRegularExpression("(\\[t+?\\]|t+)")); return locale.toString(QTime::currentTime(), timeFormat).trimmed(); } QString DatetimeModel::getCustomNtpServer() const { if (m_work) { return m_work->getCustomNtpServer(); } return QString(); } int DatetimeModel::currentLanguageAndRegionIndex() { return m_regions.keys().indexOf(m_langCountry); } void DatetimeModel::addUserTimeZoneById(const QString &zoneId) { if (zoneId.isEmpty() || !m_work) return; m_work->addUserTimeZone(zoneId); } void DatetimeModel::removeUserTimeZoneById(const QString &zoneId) { if (zoneId.isEmpty() || !m_work) return; m_work->removeUserTimeZone(zoneId); } void DatetimeModel::setSystemTimeZone(const QString &zoneId) { if (zoneId.isEmpty() || !m_work) return; m_work->setTimezone(zoneId); } #ifndef DCC_DISABLE_TIMEZONE QString DatetimeModel::systemTimeZoneId() const { return m_systemTimeZoneId; } void DatetimeModel::setSystemTimeZoneId(const QString &systemTimeZoneId) { if (m_systemTimeZoneId != systemTimeZoneId) { m_systemTimeZoneId = systemTimeZoneId; Q_EMIT systemTimeZoneIdChanged(systemTimeZoneId); } } #endif QList DatetimeModel::userTimeZones() const { return m_userTimeZones; } void DatetimeModel::addUserTimeZone(const ZoneInfo &zone) { const QString zoneName = zone.getZoneName(); if (!m_userZoneIds.contains(zoneName) && zoneName != m_currentSystemTimeZone.getZoneName()) { m_userZoneIds.append(zoneName); m_userTimeZones.append(zone); Q_EMIT userTimeZoneAdded(zone); } } void DatetimeModel::removeUserTimeZone(const ZoneInfo &zone) { const QString zoneName = zone.getZoneName(); if (m_userZoneIds.contains(zoneName)) { m_userZoneIds.removeAll(zoneName); m_userTimeZones.removeAll(zone); Q_EMIT userTimeZoneRemoved(zone); } } void DatetimeModel::setCurrentTimeZone(const ZoneInfo ¤tTimeZone) { if (m_currentTimeZone == currentTimeZone) return; m_currentTimeZone = currentTimeZone; Q_EMIT currentTimeZoneChanged(currentTimeZone); } void DatetimeModel::setCurrentUseTimeZone(const ZoneInfo ¤tSysTimeZone) { if (m_currentSystemTimeZone == currentSysTimeZone) return; m_currentSystemTimeZone = currentSysTimeZone; Q_EMIT currentSystemTimeZoneChanged(currentSysTimeZone); } void DatetimeModel::setNtpServerAddress(const QString &ntpServer) { if (m_strNtpServerAddress != ntpServer) { m_strNtpServerAddress = ntpServer; Q_EMIT NTPServerChanged(ntpServer); } } void DatetimeModel::setPreviousServerAddress(const QString &address) { if (m_previousServerAddress != address) { m_previousServerAddress = address; Q_EMIT previousServerAddressChanged(address); } } void DatetimeModel::setNTPServerList(const QStringList &list) { if (m_NtpServerList != list) { m_NtpServerList = list; Q_EMIT NTPServerListChanged(list); } } void DatetimeModel::setTimeZoneInfo(const QString &timeZone) { if (m_timeZones != timeZone) { m_timeZones = timeZone; Q_EMIT timeZoneChanged(timeZone); } } void DatetimeModel::setCountry(const QString &country) { if (m_country != country) { m_country = country; Q_EMIT countryChanged(country); } } void DatetimeModel::setLocaleName(const QString &localeName) { if (m_localeName != localeName) { m_localeName = localeName; Q_EMIT localeNameChanged(localeName); Q_EMIT currentLanguageAndRegionChanged(currentLanguageAndRegion()); } } void DatetimeModel::setLangRegion(const QString &langCountry) { if (m_langCountry != langCountry) { m_langCountry = langCountry; Q_EMIT langCountryChanged(langCountry); Q_EMIT currentLanguageAndRegionChanged(currentLanguageAndRegion()); } } void DatetimeModel::setFirstDayOfWeek(const int &firstDayOfWeekFormat) { if (m_firstDayOfWeekFormat != firstDayOfWeekFormat) { m_firstDayOfWeekFormat = firstDayOfWeekFormat; Q_EMIT firstDayOfWeekFormatChanged(firstDayOfWeekFormat); } } void DatetimeModel::setShortDateFormat(const QString &shortDateFormat) { if (m_shortDateFormat != shortDateFormat) { m_shortDateFormat = shortDateFormat; Q_EMIT shortDateFormatChanged(shortDateFormat); } } void DatetimeModel::setLongDateFormat(const QString &longDateFormat) { if (m_longDateFormat != longDateFormat) { m_longDateFormat = longDateFormat; Q_EMIT longDateFormatChanged(longDateFormat); } } void DatetimeModel::setShortTimeFormat(const QString &shortTimeFormat) { if (m_shortTimeFormat != shortTimeFormat) { m_shortTimeFormat = shortTimeFormat; Q_EMIT shortTimeFormatChanged(shortTimeFormat); } } void DatetimeModel::setLongTimeFormat(const QString &longTimeFormat) { if (m_longTimeFormat != longTimeFormat) { m_longTimeFormat = longTimeFormat; Q_EMIT longTimeFormatChanged(longTimeFormat); } } void DatetimeModel::setCurrencyFormat(const QString ¤cyFormat) { if (m_currencyFormat != currencyFormat) { QString oldFormat = m_currencyFormat; m_currencyFormat = currencyFormat; Q_EMIT currencyFormatChanged(oldFormat, currencyFormat); } } void DatetimeModel::setDigitGroupingSymbol(const QString &digitGroupingSymbol) { if (m_digitGroupingSymbol == digitGroupingSymbol) return; QString oldFormat = m_digitGroupingSymbol; m_digitGroupingSymbol = digitGroupingSymbol; Q_EMIT digitGroupingSymbolChanged(oldFormat, digitGroupingSymbol); } void DatetimeModel::setNumberFormat(const QString &numberFormat) { if (m_numberFormat != numberFormat) { m_numberFormat = numberFormat; Q_EMIT numberFormatChanged(numberFormat); } } void DatetimeModel::setPaperFormat(const QString &paperFormat) { if (m_paperFormat != paperFormat) { m_paperFormat = paperFormat; Q_EMIT paperFormatChanged(paperFormat); } } void DatetimeModel::setRegionFormat(const RegionFormat ®ionFormat) { if (m_regionFormat != regionFormat) { m_regionFormat = regionFormat; } } void DatetimeModel::setCountries(const QStringList &countries) { if (m_countries != countries) { m_countries = countries; Q_EMIT countriesChanged(countries); } } void DatetimeModel::setRegions(const Regions ®ions) { if (m_regions != regions) { m_regions = regions; } } QString DatetimeModel::timeZoneDescription(const ZoneInfo &zone) const { return getDescription(zone); } QString DatetimeModel::timeZoneDispalyName() const { return getDisplayText(m_currentSystemTimeZone); } int DatetimeModel::currentTimeZoneIndex() const { using namespace installer; if (g_totalZones.empty()) g_totalZones = GetZoneInfoList(); int index = -1; const QString &zoneName = m_currentSystemTimeZone.getZoneName(); for (int i = 0; i < g_totalZones.size(); ++i) { const auto &zoneInfo = g_totalZones.value(i); if (zoneName == zoneInfo.timezone) { index = i; break; } } return index; } void DatetimeModel::ensureLangModel() { if (m_langModel) return; m_langModel = new dccV25::KeyboardModel(this); connect(m_langModel, &dccV25::KeyboardModel::curLocalLangChanged, this, &DatetimeModel::langListChanged); connect(m_langModel, &dccV25::KeyboardModel::curLangChanged, this, &DatetimeModel::currentLangChanged); connect(m_langModel, &dccV25::KeyboardModel::onSetCurLangFinish, this, &DatetimeModel::langStateChanged); } void DatetimeModel::addLang(const QString &lang) { ensureLangModel(); m_langModel->addLang(lang); } void DatetimeModel::deleteLang(const QString &lang) { ensureLangModel(); m_langModel->deleteLang(lang); } void DatetimeModel::setCurrentLang(const QString &lang) { ensureLangModel(); m_langModel->doSetLang(lang); } QStringList DatetimeModel::langList() { ensureLangModel(); if (m_langModel) return m_langModel->localLang(); return {}; } QString DatetimeModel::currentLang() { ensureLangModel(); if (m_langModel) return m_langModel->curLang(); return {}; } int DatetimeModel::weekdayFormat() const { return m_work ? m_work->weekdayFormat() : 0; } void DatetimeModel::setWeekdayFormat(int newWeekdayFormat) { if (!m_work) return; m_work->setWeekdayFormat(newWeekdayFormat); } int DatetimeModel::langState() const { if (!m_langModel) return 0; return m_langModel->getLangChangedState(); } QStringList DatetimeModel::numberExampleParts() const { QString numberExampleFormat = tr("Example") + ":"; QStringList parts; QStringList digitGroupingValues = availableFormats(DigitGrouping); int digitGroupingIndex = currentFormatIndex(DigitGrouping); if (!digitGroupingValues.isEmpty() && (digitGroupingIndex < 0 || digitGroupingIndex >= digitGroupingValues.size())) { digitGroupingIndex = 0; } QStringList decimalValues = availableFormats(DecimalSymbol); int decimalIndex = currentFormatIndex(DecimalSymbol); if (!decimalValues.isEmpty() && (decimalIndex < 0 || decimalIndex >= decimalValues.size())) { decimalIndex = 0; } QStringList currencyValues = availableFormats(CurrencySymbol); int currencyIndex = currentFormatIndex(CurrencySymbol); if (!currencyValues.isEmpty() && (currencyIndex < 0 || currencyIndex >= currencyValues.size())) { currencyIndex = 0; } QString numberData; if (digitGroupingIndex >= 0 && digitGroupingIndex < digitGroupingValues.size() && decimalIndex >= 0 && decimalIndex < decimalValues.size() && currencyIndex >= 0 && currencyIndex < currencyValues.size()) { numberData += digitGroupingValues.at(digitGroupingIndex); numberData += normalizeSpace(decimalValues.at(decimalIndex)); numberData += "00"; QString currencySymbol = currencyValues.at(currencyIndex); // Wrap numbers with LTR isolate marks to prevent reversal while maintaining RTL layout QString protectedNumber = QString::fromUtf8("\u2066") + numberData + QString::fromUtf8("\u2069"); // Add title parts << numberExampleFormat; // Construct complete positive currency format string QString positiveCurrencyFormat; int positiveCurrencyIndex = currentFormatIndex(PositiveCurrency); switch (positiveCurrencyIndex) { case 0://¥1.1 positiveCurrencyFormat = currencySymbol + protectedNumber; break; case 1://1.1¥ positiveCurrencyFormat = protectedNumber + currencySymbol; break; case 2://¥ 1.1 positiveCurrencyFormat = currencySymbol + " " + protectedNumber; break; case 3://1.1 ¥ positiveCurrencyFormat = protectedNumber + " " + currencySymbol; break; default: positiveCurrencyFormat = protectedNumber + " " + currencySymbol; break; } parts << positiveCurrencyFormat; // Construct complete negative currency format string QString negativeCurrencyFormat; int negativeCurrencyIndex = currentFormatIndex(NegativeCurrency); switch (negativeCurrencyIndex) { case 0://-¥1.1 negativeCurrencyFormat = "-" + currencySymbol + protectedNumber; break; case 1://¥-1.1 negativeCurrencyFormat = currencySymbol + "-" + protectedNumber; break; case 2://¥1.1- negativeCurrencyFormat = currencySymbol + protectedNumber + "-"; break; case 3://-1.1¥ negativeCurrencyFormat = "-" + protectedNumber + currencySymbol; break; case 4://1.1-¥ negativeCurrencyFormat = protectedNumber + "-" + currencySymbol; break; case 5://1.1¥- negativeCurrencyFormat = protectedNumber + currencySymbol + "-"; break; default: negativeCurrencyFormat = protectedNumber + " " + currencySymbol + "-"; break; } parts << negativeCurrencyFormat; } return parts; } // 符号冲突检测功能实现 bool DatetimeModel::hasSymbolConflict() const { if (!m_work) { return false; } QString decimal = m_work->decimalSymbol(); QString separator = m_work->digitGroupingSymbol(); return symbolsConflict(decimal, separator); } bool DatetimeModel::symbolsConflict(const QString &decimal, const QString &separator) const { // 检查两个符号是否非空且相同 return !decimal.isEmpty() && !separator.isEmpty() && decimal == separator; } QStringList DatetimeModel::getAllSupportedSymbols() const { // 返回所有支持的符号列表,与separatorSymbol函数中的符号保持一致 // 小数点只使用默认的四个选项,千位分隔符可以包含区域特殊字符 QStringList symbols; symbols << QString(".") << QString(",") << QString("'") << tr("Space"); // 只添加千位分隔符的特殊字符(如果不在列表中) QLocale locale(m_localeName); QString groupSep = unEscapSpace(locale.groupSeparator()); if (!symbols.contains(groupSep) && !groupSep.isEmpty()) symbols.append(groupSep); return symbols; } // 自动冲突解决功能实现 void DatetimeModel::resolveSymbolConflict() { if (!m_work) { return; } QString decimal = m_work->decimalSymbol(); QString separator = m_work->digitGroupingSymbol(); // 如果没有冲突,直接返回 if (!symbolsConflict(decimal, separator)) { return; } // 使用解决规则获取新的小数点符号 QString newDecimal = resolveDecimalSymbol(decimal, separator); // 设置新的小数点符号 if (newDecimal != decimal) { m_work->setDecimalSymbol(newDecimal); } } QString DatetimeModel::resolveDecimalSymbol(const QString &decimal, const QString &separator) const { // 如果没有冲突,返回原始小数点符号 if (!symbolsConflict(decimal, separator)) { return decimal; } // 实现四种冲突情况的自动调整逻辑 if (separator == ",") { // 逗号→点:当分隔符是逗号时,小数点改为点 return "."; } else if (separator == ".") { // 点→逗号:当分隔符是点时,小数点改为逗号 return ","; } else if (separator == " " || separator == tr("Space")) { // 空格→点:当分隔符是空格时,小数点改为点 return "."; } else if (separator == "'") { // 引号→点:当分隔符是引号时,小数点改为点 return "."; } // 默认情况:返回点作为小数点符号 return "."; } // UI符号列表过滤功能实现 QStringList DatetimeModel::getFilteredDecimalSymbols() const { if (!m_work) { return QStringList(); } // 使用与原始模型相同的符号列表生成方式 QLocale locale(m_localeName); QStringList symbols = separatorSymbol(locale, false); // false表示小数点符号 // 获取当前的千位分隔符符号 QString currentSeparator = m_work->digitGroupingSymbol(); // 处理空格符号的特殊情况 - unEscapSpace将空格字符转换为"Space"字符串 QString displaySeparator = unEscapSpace(currentSeparator); // 检查当前分隔符是否在符号列表中 bool isSeparatorInList = symbols.contains(displaySeparator) || symbols.contains(currentSeparator); if (isSeparatorInList) { // 从小数点符号列表中排除当前选择的千位分隔符符号 symbols.removeAll(displaySeparator); symbols.removeAll(currentSeparator); // 如果当前分隔符是空格字符,也要排除实际的空格字符 if (currentSeparator.contains(' ')) { symbols.removeAll(" "); } } return symbols; } QStringList DatetimeModel::getFilteredSeparatorSymbols() const { if (!m_work) { return QStringList(); } // 使用与原始模型相同的符号列表生成方式 QLocale locale(m_localeName); QStringList symbols = separatorSymbol(m_regions.contains(m_langCountry)?m_regions.value(m_langCountry):locale, true); // true表示千位分隔符符号 // 获取当前的小数点和分隔符符号 QString currentDecimal = m_work->decimalSymbol(); QString currentSeparator = m_work->digitGroupingSymbol(); // 检查小数点是否为空格(空字符串或空格字符) bool isDecimalSpace = currentDecimal.isEmpty() || currentDecimal.contains(' '); // 检查分隔符是否为空格 bool isSeparatorSpace = currentSeparator.isEmpty() || currentSeparator.contains(' '); // 场景1:小数点为空格,分隔符也为空格 → 冲突!需要自动调整小数点 if (isDecimalSpace && isSeparatorSpace) { // 获取第一个可用的小数点符号(通常是".") QString firstDecimal = symbols.isEmpty() ? "." : symbols.first(); // 如果第一个符号是"Space",则使用"." if (firstDecimal == tr("Space") || firstDecimal == " ") { firstDecimal = "."; } // 立即设置新的小数点,避免冲突 m_work->setDecimalSymbol(firstDecimal); // 从分隔符列表中排除这个新的小数点符号 symbols.removeAll(firstDecimal); } // 场景2:小数点为空格,分隔符不为空格 → 排除空格选项 else if (isDecimalSpace) { symbols.removeAll(tr("Space")); symbols.removeAll(" "); } // 场景3:小数点不为空格 → 正常排除小数点符号 else { // 处理空格符号的特殊情况 - unEscapSpace将空格字符转换为"Space"字符串 QString displayDecimal = unEscapSpace(currentDecimal); // 检查当前小数点是否在符号列表中 bool isDecimalInList = symbols.contains(displayDecimal) || symbols.contains(currentDecimal); if (isDecimalInList) { // 从千位分隔符符号列表中排除当前选择的小数点符号 symbols.removeAll(displayDecimal); symbols.removeAll(currentDecimal); // 如果当前小数点是空格字符,也要排除实际的空格字符 if (currentDecimal.contains(' ')) { symbols.removeAll(" "); } } else { // 当前小数点不在列表中(可能是其他区域的符号) // UI会显示为"Space",所以需要从分隔符列表中排除"Space" symbols.removeAll(tr("Space")); symbols.removeAll(" "); } } return symbols; } // 中文区域默认设置功能实现 bool DatetimeModel::isChineseLocale() const { return QLocale::Chinese == QLocale(m_localeName).language(); } void DatetimeModel::applyChineseDefaults() { if (!m_work) { return; } // 只有在当前是中文区域时才应用默认设置 if (!isChineseLocale()) { return; } // 中文区域默认设置:小数点为点,千位分隔符为逗号 const QString chineseDecimal = "."; const QString chineseSeparator = ","; // 强制应用中文区域默认设置(按照需求3.2的要求) // 当切换到中文区域时,必须重置为中文默认设置 m_work->setDecimalSymbol(chineseDecimal); m_work->setDigitGroupingSymbol(chineseSeparator); } void DatetimeModel::updateCurrentTime() { auto currentTime = getCurrentTime(); if (m_currentTime != currentTime) { m_currentTime = currentTime; Q_EMIT currentTimeChanged(); } auto currentDate = getCurrentDate(); if (m_currentDate != currentDate) { m_currentDate = currentDate; Q_EMIT currentDateChanged(); } } DCC_FACTORY_CLASS(DatetimeModel) #include "datetimemodel.moc" ================================================ FILE: src/plugin-datetime/operation/datetimemodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef DATETIMEMODEL_H #define DATETIMEMODEL_H #include #include #include #include "zoneinfo.h" #include "regionproxy.h" #include "zoneinfomodel.h" class DatetimeWorker; namespace dccV25 { class KeyboardModel; } class DatetimeModel : public QObject { Q_OBJECT friend class DatetimeWorker; Q_PROPERTY(bool ntpEnabled READ nTP WRITE setNTP NOTIFY ntpChanged FINAL) Q_PROPERTY(bool use24HourFormat READ use24HourFormat WRITE set24HourFormat NOTIFY hourTypeChanged FINAL) Q_PROPERTY(QString ntpServerAddress READ ntpServerAddress WRITE setNtpServerAddress NOTIFY NTPServerChanged FINAL) Q_PROPERTY(QString previousServerAddress READ previousServerAddress WRITE setPreviousServerAddress NOTIFY previousServerAddressChanged FINAL) Q_PROPERTY(QStringList ntpServerList READ ntpServerList WRITE setNTPServerList NOTIFY NTPServerListChanged FINAL) Q_PROPERTY(QString timeZoneDispalyName READ timeZoneDispalyName NOTIFY currentSystemTimeZoneChanged) Q_PROPERTY(int currentTimeZoneIndex READ currentTimeZoneIndex NOTIFY currentSystemTimeZoneChanged) Q_PROPERTY(QString systemTimeZone READ getTimeZone WRITE setTimeZoneInfo NOTIFY timeZoneChanged FINAL) Q_PROPERTY(QString country READ country WRITE setCountry NOTIFY countryChanged FINAL) Q_PROPERTY(QStringList countries READ countries WRITE setCountries NOTIFY countriesChanged FINAL) Q_PROPERTY(QString region READ region WRITE setRegion NOTIFY regionChanged FINAL) Q_PROPERTY(int currentRegionIndex READ currentRegionIndex NOTIFY currentRegionIndexChanged FINAL) Q_PROPERTY(QStringList langList READ langList NOTIFY langListChanged FINAL) Q_PROPERTY(QString currentLang READ currentLang NOTIFY currentLangChanged FINAL) Q_PROPERTY(QString langRegion READ langRegion WRITE setLangRegion NOTIFY langCountryChanged FINAL) Q_PROPERTY(int weekdayFormat READ weekdayFormat WRITE setWeekdayFormat NOTIFY weekdayFormatChanged FINAL) Q_PROPERTY(int firstDayOfWeek READ firstDayOfWeekFormat WRITE setFirstDayOfWeek NOTIFY firstDayOfWeekFormatChanged FINAL) Q_PROPERTY(QString shortDateFormat READ shortDateFormat WRITE setShortDateFormat NOTIFY shortDateFormatChanged FINAL) Q_PROPERTY(QString longDateFormat READ longDateFormat WRITE setLongDateFormat NOTIFY longDateFormatChanged FINAL) Q_PROPERTY(QString shortTimeFormat READ shortTimeFormat WRITE setShortTimeFormat NOTIFY shortTimeFormatChanged FINAL) Q_PROPERTY(QString longTimeFormat READ longTimeFormat WRITE setLongTimeFormat NOTIFY longTimeFormatChanged FINAL) Q_PROPERTY(QString currentLanguageAndRegion READ currentLanguageAndRegion NOTIFY currentLanguageAndRegionChanged FINAL) Q_PROPERTY(QString currentDate READ currentDate NOTIFY currentDateChanged FINAL) Q_PROPERTY(QString currentTime READ currentTime NOTIFY currentTimeChanged FINAL) Q_PROPERTY(QString digitGroupingSymbol READ digitGroupingSymbol WRITE setDigitGroupingSymbol NOTIFY digitGroupingSymbolChanged FINAL) Q_PROPERTY(int langState READ langState NOTIFY langStateChanged FINAL) Q_PROPERTY(QStringList numberExampleParts READ numberExampleParts NOTIFY numberExampleFormatChanged FINAL) public: using Regions = QMap; enum Format { // date time formats DayAbbreviations, // Monday/Mon ; 星期一 / 周一 DayOfWeek, // 一周首日 ShortDate, // 短日期 LongDate, // 长日期 ShortTime, // 短时间 LongTime, // 长时间 // currency formats CurrencySymbol, // 货币符号 ¥ PositiveCurrency, // 货币正数 ¥1.0 NegativeCurrency, // 货币负数 ¥-1.0 // number formats DecimalSymbol, // 小数点 DigitGroupingSymbol, // 分隔符(数字分组) DigitGrouping, // 数字分组 PageSize // 纸张大小 A4 }; explicit DatetimeModel(QObject *parent = nullptr); ~DatetimeModel(); inline bool nTP() const { return m_ntp; } void setNTP(bool ntp); inline bool use24HourFormat() const { return m_bUse24HourType; } QList userTimeZones() const; void addUserTimeZone(const ZoneInfo &zone); void removeUserTimeZone(const ZoneInfo &zone); #ifndef DCC_DISABLE_TIMEZONE QString systemTimeZoneId() const; void setSystemTimeZoneId(const QString &systemTimeZoneId); #endif inline ZoneInfo currentTimeZone() const { return m_currentTimeZone; } void setCurrentTimeZone(const ZoneInfo ¤tTimeZone); inline ZoneInfo currentSystemTimeZone() const { return m_currentSystemTimeZone; } void setCurrentUseTimeZone(const ZoneInfo ¤tTimeZone); inline QString ntpServerAddress() const { return m_strNtpServerAddress; } void setNtpServerAddress(const QString &ntpServer); inline QString previousServerAddress() const { return m_previousServerAddress; } void setPreviousServerAddress(const QString &address); inline QStringList ntpServerList() const { return m_NtpServerList; } void setNTPServerList(const QStringList &list); inline QString getTimeZone() const { return m_timeZones; } void setTimeZoneInfo(const QString &timeZone); inline QString country() const { return m_country; } void setCountry(const QString &country); inline QString localeName() const { return m_localeName; } void setLocaleName(const QString &localeName); inline QString langRegion() const { return m_langCountry; } void setLangRegion(const QString &langCountry); inline int firstDayOfWeekFormat() const { return m_firstDayOfWeekFormat; } void setFirstDayOfWeek(const int &firstDayOfWeekFormat); inline QString shortDateFormat() const { return m_shortDateFormat; } void setShortDateFormat(const QString &shortDateFormat); inline QString longDateFormat() const { return m_longDateFormat; } void setLongDateFormat(const QString &longDateFormat); inline QString shortTimeFormat() const { return m_shortTimeFormat; } void setShortTimeFormat(const QString &shortTimeFormat); inline QString longTimeFormat() const { return m_longTimeFormat; } void setLongTimeFormat(const QString &longTimeFormat); inline QString currencyFormat() const { return m_currencyFormat; } void setCurrencyFormat(const QString ¤cyFormat); QString digitGroupingSymbol() const { return m_digitGroupingSymbol; } void setDigitGroupingSymbol(const QString &digitGroupingSymbol); inline QString numberFormat() const { return m_numberFormat; } void setNumberFormat(const QString &numberFormat); inline QString paperFormat() const { return m_paperFormat; } void setPaperFormat(const QString &paperFormat); inline RegionFormat regionFormat() const { return m_regionFormat; } void setRegionFormat(const RegionFormat ®ionFormat); inline QStringList countries() const { return m_countries; } void setCountries(const QStringList &countries); inline Regions regions() const { return m_regions; } void setRegions(const Regions ®ions); QString timeZoneDispalyName() const; int currentTimeZoneIndex() const; QStringList langList(); QString currentLang(); int weekdayFormat() const; void setWeekdayFormat(int newWeekdayFormat); int langState() const; QStringList numberExampleParts() const; Q_SIGNALS: void ntpChanged(bool value); void hourTypeChanged(bool value); void userTimeZoneAdded(const ZoneInfo &zone); void userTimeZoneRemoved(const ZoneInfo &zone); void systemTimeZoneIdChanged(const QString &zone); void systemTimeChanged(); void currentTimeZoneChanged(const ZoneInfo &zone) const; void currentSystemTimeZoneChanged(const ZoneInfo &zone) const; void NTPServerChanged(QString server); void NTPServerListChanged(QStringList list); void NTPServerNotChanged(QString server); void previousServerAddressChanged(const QString &address); void timeZoneChanged(QString value); void localeNameChanged(const QString &localeName); void countryChanged(const QString &country); void langCountryChanged(const QString &langCountry); void firstDayOfWeekFormatChanged(const int firstDayOfWeekFormat); void shortDateFormatChanged(const QString &shortDateFormat); void longDateFormatChanged(const QString &longDate); void shortTimeFormatChanged(const QString &shortTimeFormat); void longTimeFormatChanged(const QString &longTimeFormat); void currencyFormatChanged(const QString &oldFormat, const QString &newFormat); void digitGroupingSymbolChanged(const QString &oldFormat, const QString &newFormat); void numberFormatChanged(const QString &numberFormat); void paperFormatChanged(const QString &numberFormat); // Language List changed void langListChanged(const QStringList &langList); void currentLangChanged(const QString &lang); void currentLanguageAndRegionChanged(const QString &lang); void weekdayFormatChanged(int format); void symbolChanged(int format, const QString &symbol); void countriesChanged(const QStringList &countries); void regionChanged(const QString ®ion); void currentRegionIndexChanged(int index); void currentDateChanged(); void currentTimeChanged(); void currentFormatChanged(int format); void langStateChanged(int state); void numberExampleFormatChanged(const QStringList &numberExampleParts); public Q_SLOTS: void set24HourFormat(bool state); void setDateTime(const QDateTime &dateTime); QStringList zones(int x, int y, int map_width, int map_height); QPoint zonePosition(const QString &timezone, int map_width, int map_height); QStringList zoneIdList(); QString zoneDisplayName(const QString &zoneName); QAbstractListModel *userTimezoneModel(); QSortFilterProxyModel *zoneSearchModel(); QSortFilterProxyModel *langSearchModel(); QSortFilterProxyModel *langRegionSearchModel(); QSortFilterProxyModel *regionSearchModel(); QAbstractListModel *timeDateModel(); QAbstractListModel *currencyModel(); QAbstractListModel *decimalModel(); QString region(); // country int currentRegionIndex(); void setRegion(const QString ®ion); // setCountry void addUserTimeZoneById(const QString &zoneId); void removeUserTimeZoneById(const QString &name); void setSystemTimeZone(const QString &zoneId); QString timeZoneDescription(const ZoneInfo &zone) const; void ensureLangModel(); void addLang(const QString &lang); void deleteLang(const QString &lang); void setCurrentLang(const QString &lang); QStringList languagesAndRegions(); QString currentLanguageAndRegion(); int currentLanguageAndRegionIndex(); void setCurrentLocaleAndLangRegion(const QString &localeName, const QString& langAndRegion); // format ==> DatetimeModel::Format QStringList availableFormats(int format) const; int currentFormatIndex(int format) const; void setCurrentFormat(int format, int index); QString currentDate() const; QString currentTime() const; QString getCustomNtpServer() const; // 符号冲突检测功能 bool hasSymbolConflict() const; QStringList getAllSupportedSymbols() const; // 自动冲突解决功能 void resolveSymbolConflict(); // UI符号列表过滤功能 QStringList getFilteredDecimalSymbols() const; QStringList getFilteredSeparatorSymbols() const; // 中文区域默认设置功能 bool isChineseLocale() const; void applyChineseDefaults(); void updateCurrentTime(); protected: void initModes(const QStringList &names, int indexBegin, int indexEnd, QAbstractListModel *model); // 符号冲突检测方法(供DatetimeWorker使用) bool symbolsConflict(const QString &decimal, const QString &separator) const; private: // 自动冲突解决私有方法 QString resolveDecimalSymbol(const QString &decimal, const QString &separator) const; QString getCurrentTime() const; QString getCurrentDate() const; bool m_ntp; bool m_bUse24HourType; QStringList m_userZoneIds; #ifndef DCC_DISABLE_TIMEZONE QString m_systemTimeZoneId; #endif QList m_userTimeZones; ZoneInfo m_currentTimeZone; ZoneInfo m_currentSystemTimeZone; QString m_strNtpServerAddress; QString m_previousServerAddress; QStringList m_NtpServerList; QString m_timeZones; QString m_country; QString m_langCountry; QStringList m_countries; Regions m_regions; QString m_localeName; int m_firstDayOfWeekFormat; QString m_shortDateFormat; QString m_longDateFormat; QString m_shortTimeFormat; QString m_longTimeFormat; QString m_currencyFormat; QString m_digitGroupingSymbol; QString m_numberFormat; QString m_paperFormat; RegionFormat m_regionFormat; QMap m_timezoneCache; DatetimeWorker *m_work = nullptr; dccV25::UserTimezoneModel *m_userTimezoneModel = nullptr; QSortFilterProxyModel *m_zoneSearchModel = nullptr; QSortFilterProxyModel *m_langSearchModel = nullptr; QSortFilterProxyModel *m_regionSearchModel = nullptr; QSortFilterProxyModel *m_countrySearchModel = nullptr; QAbstractListModel *m_timeDateModel = nullptr; QAbstractListModel *m_currencyModel = nullptr; QAbstractListModel *m_decimalModel = nullptr; dccV25::KeyboardModel *m_langModel = nullptr; QMap m_langRegionsCache; QString m_regionName; QString m_currentTime; QString m_currentDate; }; #endif // DATETIMEMODEL_H ================================================ FILE: src/plugin-datetime/operation/datetimeworker.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "datetimeworker.h" #include "datetimedbusproxy.h" #include "regionproxy.h" #include #include #include #include #include #include #include #include Q_LOGGING_CATEGORY(DdcDateTimeWorkder, "dcc-datetime-worker") static const QStringList customTimeZoneList = { "Asia/Chengdu", "Asia/Beijing", "Asia/Nanjing", "Asia/Wuhan", "Asia/Xian", "Asia/Urumqi" }; DatetimeWorker::DatetimeWorker(DatetimeModel *model, QObject *parent) : QObject(parent) , m_model(model) , m_timedateInter(new DatetimeDBusProxy(this)) , m_regionInter(new RegionProxy(this)) , m_config(DTK_CORE_NAMESPACE::DConfig::createGeneric("org.deepin.region-format", QString(), this)) , m_datetimeConfig(DTK_CORE_NAMESPACE::DConfig::create("org.deepin.dde.control-center", "org.deepin.dde.control-center.datetime", QString(), this)) , m_daemonTimedateConfig(DTK_CORE_NAMESPACE::DConfig::create("org.deepin.dde.daemon", "org.deepin.dde.daemon.timedate", QString(), this)) { QMetaObject::invokeMethod(this, "activate", Qt::QueuedConnection); #ifndef DCC_DISABLE_TIMEZONE connect(m_timedateInter, &DatetimeDBusProxy::UserTimezonesChanged, this, &DatetimeWorker::onTimezoneListChanged); connect(m_timedateInter, &DatetimeDBusProxy::TimezoneChanged, m_model, &DatetimeModel::setSystemTimeZoneId); #endif connect(m_timedateInter, &DatetimeDBusProxy::NTPChanged, m_model, &DatetimeModel::setNTP); connect(m_timedateInter, &DatetimeDBusProxy::Use24HourFormatChanged, m_model, &DatetimeModel::set24HourFormat); connect(m_timedateInter, &DatetimeDBusProxy::TimezoneChanged, this, [=](const QString &value) { auto tzinfo = GetZoneInfo(value); if (tzinfo.getZoneName().length() == 0) { tzinfo = GetZoneInfo(QTimeZone::systemTimeZoneId()); } m_model->setCurrentUseTimeZone(tzinfo); QList zones = m_model->userTimeZones(); // Remove the timezone from user list if it becomes the system timezone for (const ZoneInfo &zone : zones) { if (zone.getZoneName() == value) { m_model->removeUserTimeZone(zone); onTimezoneListChanged(m_timedateInter->userTimezones()); break; } } Q_EMIT m_model->currentFormatChanged(DatetimeModel::LongTime); }); connect(m_timedateInter, &DatetimeDBusProxy::NTPServerChanged, m_model, &DatetimeModel::setNtpServerAddress); connect(m_timedateInter, &DatetimeDBusProxy::TimezoneChanged, m_model, &DatetimeModel::setTimeZoneInfo); connect(m_timedateInter, &DatetimeDBusProxy::WeekdayFormatChanged, m_model, &DatetimeModel::weekdayFormatChanged); connect(m_timedateInter, &DatetimeDBusProxy::CurrencySymbolChanged, m_model, [this](const QString &symbol) { Q_EMIT m_model->symbolChanged(DatetimeModel::CurrencySymbol, symbol); }); connect(m_timedateInter, &DatetimeDBusProxy::NegativeCurrencyFormatChanged, m_model, [this](const QString &symbol) { Q_EMIT m_model->symbolChanged(DatetimeModel::CurrencySymbol, symbol); }); connect(m_timedateInter, &DatetimeDBusProxy::PositiveCurrencyFormatChanged, m_model, [this](const QString &symbol) { Q_EMIT m_model->symbolChanged(DatetimeModel::CurrencySymbol, symbol); }); connect(m_timedateInter, &DatetimeDBusProxy::DecimalSymbolChanged, m_model, [this](const QString &symbol){ Q_EMIT m_model->symbolChanged(DatetimeModel::DecimalSymbol, symbol); }); connect(m_timedateInter, &DatetimeDBusProxy::DigitGroupingChanged, m_model, [this](const QString &symbol){ Q_EMIT m_model->symbolChanged(DatetimeModel::DigitGrouping, symbol); }); connect(m_timedateInter, &DatetimeDBusProxy::DigitGroupingSymbolChanged, m_model, [this](const QString &symbol){ m_model->setDigitGroupingSymbol(symbol); Q_EMIT m_model->symbolChanged(DatetimeModel::DigitGroupingSymbol, symbol); }); m_model->setCurrentTimeZone(GetZoneInfo(QTimeZone::systemTimeZoneId())); m_model->setCurrentUseTimeZone(GetZoneInfo(m_timedateInter->timezone())); m_model->set24HourFormat(m_timedateInter->use24HourFormat()); refreshNtpServerList(); m_model->setNtpServerAddress(m_timedateInter->nTPServer()); m_model->setTimeZoneInfo(m_timedateInter->timezone()); m_model->setNTP(m_timedateInter->nTP()); m_model->setDigitGroupingSymbol(m_timedateInter->digitGroupingSymbol()); initRegionFormatData(); } DatetimeWorker::~DatetimeWorker() { } void DatetimeWorker::activate() { if (!m_regionInter->isActive()) { m_regionInter->active(); m_model->setCountries(m_regionInter->countries()); m_model->setRegions(m_regionInter->regions()); } m_model->setNTP(m_timedateInter->nTP()); #ifndef DCC_DISABLE_TIMEZONE m_model->setSystemTimeZoneId(m_timedateInter->timezone()); onTimezoneListChanged(m_timedateInter->userTimezones()); #endif // 启动时检测并解决符号冲突 checkAndResolveConflicts(); } void DatetimeWorker::deactivate() { } DatetimeModel *DatetimeWorker::model() { return m_model; } void DatetimeWorker::setNTP(bool ntp) { Q_EMIT requestSetAutoHide(false); m_timedateInter->SetNTP(ntp, this, SLOT(setAutoHide()), SLOT(setNTPError())); } void DatetimeWorker::setAutoHide() { Q_EMIT requestSetAutoHide(true); } void DatetimeWorker::setNTPError() { Q_EMIT m_model->ntpChanged(m_model->nTP()); setAutoHide(); } void DatetimeWorker::setDatetime(const QDateTime &datetime) { Q_EMIT requestSetAutoHide(false); qCDebug(DdcDateTimeWorkder) << "start setDatetime"; m_setDatetime = new QDateTime(datetime); m_timedateInter->SetNTP(false, this, SLOT(setDatetimeStart()), SLOT(setAutoHide())); } void DatetimeWorker::setDatetimeStart() { if (m_setDatetime) { qCDebug(DdcDateTimeWorkder) << "set ntp success, m_timedateInter->SetDate"; m_timedateInter->SetDate(*m_setDatetime, this, SLOT(setDateFinished())); delete m_setDatetime; m_setDatetime = nullptr; } setAutoHide(); } void DatetimeWorker::setDateFinished() { Q_EMIT m_model->systemTimeChanged(); } void DatetimeWorker::set24HourType(bool state) { m_timedateInter->setUse24HourFormat(state); } #ifndef DCC_DISABLE_TIMEZONE void DatetimeWorker::setTimezone(const QString &timezone) { QString currentTimezone = m_timedateInter->timezone(); bool isNeedUpdateProp = (timezone == "Asia/Shanghai" && customTimeZoneList.contains(currentTimezone)) || customTimeZoneList.contains(timezone); QDBusPendingCall call = m_timedateInter->SetTimezone(timezone, tr("Authentication is required to set the system timezone")); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, timezone, isNeedUpdateProp](QDBusPendingCallWatcher *w) { QDBusPendingReply<> reply = *w; if (reply.isError()) { qCWarning(DdcDateTimeWorkder) << "SetTimezone failed:" << reply.error().message(); return; } if (isNeedUpdateProp && m_daemonTimedateConfig && m_daemonTimedateConfig->isValid()) { m_daemonTimedateConfig->setValue("timeZone", timezone); } m_timedateInter->AddUserTimezone(timezone); Q_EMIT m_timedateInter->TimezoneChanged(timezone); w->deleteLater(); }); } void DatetimeWorker::removeUserTimeZone(const QString &zone) { m_timedateInter->DeleteUserTimezone(zone); } void DatetimeWorker::addUserTimeZone(const QString &zone) { m_timedateInter->AddUserTimezone(zone); } void DatetimeWorker::setNtpServer(QString server) { qInfo() << "Try set server : " << server; if (server == m_timedateInter->nTPServer()) return; bool isCustomServer = !m_model->ntpServerList().contains(server); if (isCustomServer) { if (m_datetimeConfig) { if (m_datetimeConfig->isValid()) { QString previousCustom = m_datetimeConfig->value("customNtpServer").toString(); m_datetimeConfig->setValue("customNtpServer", server); } else { qWarning() << "Cannot save custom NTP server: dconfig is not valid!"; } } else { qWarning() << "Cannot save custom NTP server: dconfig is null!"; } } m_timedateInter->SetNTPServer(server, tr("Authentication is required to change NTP server"), this, SLOT(SetNTPServerFinished()), SLOT(SetNTPServerError())); } QString DatetimeWorker::getCustomNtpServer() { if (m_datetimeConfig && m_datetimeConfig->isValid()) { return m_datetimeConfig->value("customNtpServer").toString(); } return QString(); } int DatetimeWorker::weekdayFormat() { return m_timedateInter->weekdayFormat(); } void DatetimeWorker::SetNTPServerFinished() { qInfo() << "set server success."; Q_EMIT m_model->NTPServerChanged(m_timedateInter->nTPServer()); } void DatetimeWorker::SetNTPServerError() { qInfo() << "Not set server success."; Q_EMIT m_model->NTPServerNotChanged(m_timedateInter->nTPServer()); } void DatetimeWorker::setWeekdayFormat(int type) { m_timedateInter->setWeekdayFormat(type); } void DatetimeWorker::setShortDateFormat(int type) { m_timedateInter->setShortDateFormat(type); } void DatetimeWorker::setLongDateFormat(int type) { m_timedateInter->setLongDateFormat(type); } void DatetimeWorker::setLongTimeFormat(int type) { m_timedateInter->setLongTimeFormat(type); } void DatetimeWorker::setShortTimeFormat(int type) { m_timedateInter->setShortTimeFormat(type); } void DatetimeWorker::setWeekStartDayFormat(int type) { m_timedateInter->setWeekBegins(type); } void DatetimeWorker::onTimezoneListChanged(const QStringList &timezones) { QList zones = m_model->userTimeZones(); QStringList zonesName; for (const ZoneInfo &zone : zones) { zonesName.append(zone.getZoneName()); } for (const QString &zone : timezones) { zonesName.removeOne(zone); m_timedateInter->GetZoneInfo(zone, this, SLOT(getZoneInfoFinished(ZoneInfo))); } for (const ZoneInfo &zone : zones) { if (zonesName.contains(zone.getZoneName())) { m_model->removeUserTimeZone(zone); } } } void DatetimeWorker::getZoneInfoFinished(ZoneInfo zoneInfo) { m_model->addUserTimeZone(zoneInfo); } QString DatetimeWorker::decimalSymbol() { return m_timedateInter->decimalSymbol(); } void DatetimeWorker::setDecimalSymbol(const QString &value) { return m_timedateInter->setDecimalSymbol(value); } QString DatetimeWorker::digitGrouping() { return m_timedateInter->digitGrouping(); } void DatetimeWorker::setDigitGrouping(const QString &value) { return m_timedateInter->setDigitGrouping(value); } QString DatetimeWorker::digitGroupingSymbol() { return m_timedateInter->digitGroupingSymbol(); } void DatetimeWorker::setDigitGroupingSymbol(const QString &value) { return m_timedateInter->setDigitGroupingSymbol(value); } QString DatetimeWorker::currencySymbol() { return m_timedateInter->currencySymbol(); } void DatetimeWorker::setCurrencySymbol(const QString &value) { return m_timedateInter->setCurrencySymbol(value); } QString DatetimeWorker::negativeCurrencyFormat() { return m_timedateInter->negativeCurrencyFormat(); } void DatetimeWorker::setNegativeCurrencyFormat(const QString &value) { return m_timedateInter->setNegativeCurrencyFormat(value); } QString DatetimeWorker::positiveCurrencyFormat() { return m_timedateInter->positiveCurrencyFormat(); } void DatetimeWorker::setPositiveCurrencyFormat(const QString &value) { return m_timedateInter->setPositiveCurrencyFormat(value); } #endif void DatetimeWorker::refreshNtpServerList() { m_timedateInter->GetSampleNTPServers(this, SLOT(getSampleNTPServersFinished(const QStringList &))); } void DatetimeWorker::getSampleNTPServersFinished(const QStringList &serverList) { m_model->setNTPServerList(serverList); } ZoneInfo DatetimeWorker::GetZoneInfo(const QString &zoneId) { return m_timedateInter->GetZoneInfo(zoneId); } void DatetimeWorker::initRegionFormatData() { if (!m_config->isValid()) return; if (m_config->isDefaultValue(country_key)) { setConfigValue(country_key, m_regionInter->systemCountry()); m_model->setCountry(m_regionInter->systemCountry()); } else { m_model->setCountry(m_config->value(country_key).toString()); } if (m_config->isDefaultValue(languageRegion_key) || m_config->value(languageRegion_key).toString().isEmpty()) { setConfigValue(languageRegion_key, m_regionInter->langCountry()); m_model->setLangRegion(m_regionInter->langCountry()); } else { m_model->setLangRegion(m_config->value(languageRegion_key).toString()); } if (m_config->isDefaultValue(localeName_key)) { setConfigValue(localeName_key, QLocale::system().name()); m_model->setLocaleName(QLocale::system().name()); } else { m_model->setLocaleName(m_config->value(localeName_key).toString()); } if (m_config->isDefaultValue(firstDayOfWeek_key)) { QLocale locale(QLocale::system().name()); setConfigValue(firstDayOfWeek_key, m_regionInter->regionFormat(locale).firstDayOfWeekFormat); m_model->setFirstDayOfWeek(m_regionInter->regionFormat(locale).firstDayOfWeekFormat); } else { m_model->setFirstDayOfWeek(m_config->value(firstDayOfWeek_key).toInt()); } if (m_config->isDefaultValue(shortDateFormat_key)) { QLocale locale(QLocale::system().name()); setConfigValue(shortDateFormat_key, m_regionInter->regionFormat(locale).shortDateFormat); m_model->setShortDateFormat(m_regionInter->regionFormat(locale).shortDateFormat); } else { m_model->setShortDateFormat(m_config->value(shortDateFormat_key).toString()); } if (m_config->isDefaultValue(longDateFormat_key)) { QLocale locale(QLocale::system().name()); setConfigValue(longDateFormat_key, m_regionInter->regionFormat(locale).longDateFormat); m_model->setLongDateFormat(m_regionInter->regionFormat(locale).longDateFormat); } else { m_model->setLongDateFormat(m_config->value(longDateFormat_key).toString()); } if (m_config->isDefaultValue(shortTimeFormat_key)) { QLocale locale(QLocale::system().name()); setConfigValue(shortTimeFormat_key, m_regionInter->regionFormat(locale).shortTimeFormat); m_model->setShortTimeFormat(m_regionInter->regionFormat(locale).shortTimeFormat); } else { m_model->setShortTimeFormat(m_config->value(shortTimeFormat_key).toString()); } if (m_config->isDefaultValue(longTimeFormat_key)) { QLocale locale(QLocale::system().name()); setConfigValue(longTimeFormat_key, m_regionInter->regionFormat(locale).longTimeFormat); m_model->setLongTimeFormat(m_regionInter->regionFormat(locale).longTimeFormat); } else { m_model->setLongTimeFormat(m_config->value(longTimeFormat_key).toString()); } if (m_config->isDefaultValue(currencyFormat_key)) { QLocale locale(QLocale::system().name()); const auto newFormat = m_regionInter->regionFormat(locale).currencyFormat; setConfigValue(currencyFormat_key, newFormat); m_model->setCurrencyFormat(newFormat); const auto oldFormat = currencySymbol(); auto posFmt = positiveCurrencyFormat(); posFmt.replace(oldFormat, newFormat); auto negFmt = negativeCurrencyFormat(); negFmt.replace(oldFormat, newFormat); QMetaObject::invokeMethod(this, "setCurrencySymbol", Qt::QueuedConnection, newFormat); QMetaObject::invokeMethod(this, "setPositiveCurrencyFormat", Qt::QueuedConnection, posFmt); QMetaObject::invokeMethod(this, "setNegativeCurrencyFormat", Qt::QueuedConnection, negFmt); } else { m_model->setCurrencyFormat(m_config->value(currencyFormat_key).toString()); } if (m_config->isDefaultValue(numberFormat_key)) { QLocale locale(QLocale::system().name()); setConfigValue(numberFormat_key, m_regionInter->regionFormat(locale).numberFormat); m_model->setNumberFormat(m_regionInter->regionFormat(locale).numberFormat); } else { m_model->setNumberFormat(m_config->value(numberFormat_key).toString()); } if (m_config->isDefaultValue(paperFormat_key)) { QLocale locale(QLocale::system().name()); m_model->setPaperFormat(m_regionInter->regionFormat(locale).paperFormat); setConfigValue(paperFormat_key, m_regionInter->regionFormat(locale).paperFormat); } else { m_model->setPaperFormat(m_config->value(paperFormat_key).toString()); } RegionFormat regionFormat; regionFormat.firstDayOfWeekFormat = m_model->firstDayOfWeekFormat(); regionFormat.shortDateFormat = m_model->shortDateFormat(); regionFormat.longDateFormat = m_model->longDateFormat(); regionFormat.shortTimeFormat = m_model->shortTimeFormat(); regionFormat.longTimeFormat = m_model->longTimeFormat(); regionFormat.paperFormat = m_model->paperFormat(); regionFormat.currencyFormat = m_model->currencyFormat(); regionFormat.numberFormat = m_model->numberFormat(); m_model->setRegionFormat(regionFormat); connect(m_config, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, [this] (const QString &key) { if (key == country_key) { m_model->setCountry(m_config->value(key).toString()); } else if (key == languageRegion_key) { m_model->setLangRegion(m_config->value(key).toString()); } else if (key == localeName_key) { m_model->setLocaleName(m_config->value(key).toString()); } else if (key == firstDayOfWeek_key) { m_model->setFirstDayOfWeek(m_config->value(key).toInt()); } else if (key == shortDateFormat_key) { m_model->setShortDateFormat(m_config->value(key).toString()); } else if (key == longDateFormat_key) { m_model->setLongDateFormat(m_config->value(key).toString()); } else if (key == shortTimeFormat_key) { m_model->setShortTimeFormat(m_config->value(key).toString()); } else if (key == longTimeFormat_key) { m_model->setLongTimeFormat(m_config->value(key).toString()); } else if (key == currencyFormat_key) { m_model->setCurrencyFormat(m_config->value(key).toString()); } else if (key == numberFormat_key) { m_model->setNumberFormat(m_config->value(key).toString()); } else if (key == paperFormat_key) { m_model->setPaperFormat(m_config->value(key).toString()); } }); } std::optional DatetimeWorker::getSupportedLocale() { if (m_supportedLocaleList.has_value()) { return m_supportedLocaleList; } static QString LOCALE_LIST_FILE = QStringLiteral(LOCALE_I18N_PATH); QFile file(LOCALE_LIST_FILE); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return std::nullopt; QStringList localelist; QTextStream in(&file); while (!in.atEnd()) { QString line = in.readLine(); QStringList out = line.split(" "); localelist.push_back(out[0]); } m_supportedLocaleList = localelist; return m_supportedLocaleList; } std::optional DatetimeWorker::getAllLocale() { return m_timedateInter->getLocaleListMap(); } std::optional DatetimeWorker::getLocaleRegion() { return m_timedateInter->getLocaleRegion(); } void DatetimeWorker::setLocaleRegion(const QString &locale) { m_timedateInter->setLocaleRegion(locale); } void DatetimeWorker::setConfigValue(const QString &key, const QVariant &value) { m_config->setValue(key, value); } bool DatetimeWorker::genLocale(const QString &localeName) { static QString localeConfPath = QStandardPaths::writableLocation(QStandardPaths::ConfigLocation) + QDir::separator() + "locale.conf"; QSettings settings(localeConfPath, QSettings::IniFormat); auto supportedLocaleListRes = getSupportedLocale(); if (!supportedLocaleListRes.has_value()) { return false; } QStringList supportedLocaleList = supportedLocaleListRes.value(); QString localeSet; if (QString otherLocaleName = localeName + ".UTF-8"; supportedLocaleList.contains(otherLocaleName)) { localeSet = otherLocaleName; } else if (supportedLocaleList.contains(localeName)) { localeSet = localeName; } else { return false; } settings.setValue("LC_NUMERIC", localeSet); settings.setValue("LC_MONETARY", localeSet); settings.setValue("LC_TIME", localeSet); settings.setValue("LC_PAPER", localeSet); settings.setValue("LC_NAME", localeSet); settings.setValue("LC_ADDRESS", localeSet); settings.setValue("LC_TELEPHONE", localeSet); settings.setValue("LC_MEASUREMENT", localeSet); m_timedateInter->GenLocale(localeSet); return true; } void DatetimeWorker::checkAndResolveConflicts() { if (!m_model) { return; } // 首先检查是否为中文区域,如果是则应用中文默认设置 if (m_model->isChineseLocale()) { // 应用中文区域默认设置(小数点为点,分隔符为逗号) m_model->applyChineseDefaults(); } // 检测是否存在符号冲突 if (m_model->hasSymbolConflict()) { // 自动解决冲突 m_model->resolveSymbolConflict(); } } bool DatetimeWorker::validateSymbolChange(const QString &decimal, const QString &separator) { if (!m_model) { return false; } // 使用DatetimeModel中的符号冲突检测逻辑 return !m_model->symbolsConflict(decimal, separator); } ================================================ FILE: src/plugin-datetime/operation/datetimeworker.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef DATETIMEWORKER_H #define DATETIMEWORKER_H #include "datetimemodel.h" #include "datetimedbusproxy.h" #include #include #include #include class DatetimeDBusProxy; class RegionProxy; DCORE_BEGIN_NAMESPACE class DConfig; DCORE_END_NAMESPACE class DatetimeWorker : public QObject { Q_OBJECT public: explicit DatetimeWorker(DatetimeModel *model, QObject *parent = nullptr); ~DatetimeWorker(); Q_INVOKABLE void activate(); void deactivate(); DatetimeModel *model(); std::optional getAllLocale(); std::optional getLocaleRegion(); void setLocaleRegion(const QString &locale); void setConfigValue(const QString &key, const QVariant &value); Q_SIGNALS: void requestSetAutoHide(const bool visible) const; public Q_SLOTS: void setNTP(bool ntp); void setDatetime(const QDateTime &time); void set24HourType(bool state); #ifndef DCC_DISABLE_TIMEZONE void setTimezone(const QString &timezone); void removeUserTimeZone(const QString &zone); void addUserTimeZone(const QString &zone); #endif void setNtpServer(QString server); QString getCustomNtpServer(); int weekdayFormat(); void setWeekdayFormat(int type); void setShortDateFormat(int type); void setLongDateFormat(int type); void setLongTimeFormat(int type); void setShortTimeFormat(int type); void setWeekStartDayFormat(int type); bool genLocale(const QString &localeName); ZoneInfo GetZoneInfo(const QString &zoneId); QString decimalSymbol(); void setDecimalSymbol(const QString &value); QString digitGrouping(); void setDigitGrouping(const QString &value); QString digitGroupingSymbol(); void setDigitGroupingSymbol(const QString &value); QString currencySymbol(); void setCurrencySymbol(const QString &value); QString negativeCurrencyFormat(); void setNegativeCurrencyFormat(const QString &value); QString positiveCurrencyFormat(); void setPositiveCurrencyFormat(const QString &value); bool validateSymbolChange(const QString &decimal, const QString &separator); private Q_SLOTS: #ifndef DCC_DISABLE_TIMEZONE void onTimezoneListChanged(const QStringList &timezones); #endif void setAutoHide(); void setNTPError(); void setDatetimeStart(); void setDateFinished(); void getSampleNTPServersFinished(const QStringList &serverList); void SetNTPServerFinished(); void SetNTPServerError(); void getZoneInfoFinished(ZoneInfo zoneInfo); private: void refreshNtpServerList(); void initRegionFormatData(); std::optional getSupportedLocale(); void checkAndResolveConflicts(); private: DatetimeModel *m_model; DatetimeDBusProxy *m_timedateInter; QDateTime *m_setDatetime; RegionProxy *m_regionInter; DTK_CORE_NAMESPACE::DConfig *m_config; DTK_CORE_NAMESPACE::DConfig *m_datetimeConfig; DTK_CORE_NAMESPACE::DConfig *m_daemonTimedateConfig; std::optional m_supportedLocaleList; }; #endif // DATETIMEWORKER_H ================================================ FILE: src/plugin-datetime/operation/keyboard/keyboarddbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "keyboarddbusproxy.h" #include #include #include #include #include #include const static QString LangSelectorService = "org.deepin.dde.LangSelector1"; const static QString LangSelectorPath = "/org/deepin/dde/LangSelector1"; const static QString LangSelectorInterface = "org.deepin.dde.LangSelector1"; KeyboardDBusProxy::KeyboardDBusProxy(QObject *parent) : QObject(parent) { qRegisterMetaType("KeyboardLayoutList"); qDBusRegisterMetaType(); qRegisterMetaType("LocaleInfo"); qDBusRegisterMetaType(); qRegisterMetaType("LocaleList"); qDBusRegisterMetaType(); init(); } void KeyboardDBusProxy::init() { m_dBusLangSelectorInter = new DDBusInterface(LangSelectorService, LangSelectorPath, LangSelectorInterface, QDBusConnection::sessionBus(), this); } void KeyboardDBusProxy::langSelectorStartServiceProcess() { if (m_dBusLangSelectorInter->isValid()) { qWarning() << "Service" << LangSelectorService << "is already started."; return; } QDBusInterface freedesktopInter = QDBusInterface("org.freedesktop.DBus", "/", "org.freedesktop.DBus", QDBusConnection::systemBus(), this); QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DBus", "/", "org.freedesktop.DBus", QStringLiteral("StartServiceByName")); msg << LangSelectorService << quint32(0); QDBusPendingReply async = freedesktopInter.connection().asyncCall(msg); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(async, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, &KeyboardDBusProxy::onLangSelectorStartServiceProcessFinished); } void KeyboardDBusProxy::onLangSelectorStartServiceProcessFinished(QDBusPendingCallWatcher *w) { QDBusPendingReply reply = *w; Q_EMIT langSelectorServiceStartFinished(reply.value()); w->deleteLater(); } //LangSelector QString KeyboardDBusProxy::currentLocale() { return qvariant_cast(m_dBusLangSelectorInter->property("CurrentLocale")); } int KeyboardDBusProxy::localeState() { return qvariant_cast(m_dBusLangSelectorInter->property("LocaleState")); } QStringList KeyboardDBusProxy::locales() { return qvariant_cast(m_dBusLangSelectorInter->property("Locales")); } bool KeyboardDBusProxy::langSelectorIsValid() { return m_dBusLangSelectorInter->isValid(); } QDBusPendingReply<> KeyboardDBusProxy::AddLocale(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusLangSelectorInter->asyncCallWithArgumentList(QStringLiteral("AddLocale"), argumentList); } QDBusPendingReply<> KeyboardDBusProxy::DeleteLocale(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusLangSelectorInter->asyncCallWithArgumentList(QStringLiteral("DeleteLocale"), argumentList); } QDBusPendingReply<> KeyboardDBusProxy::SetLocale(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusLangSelectorInter->asyncCallWithArgumentList(QStringLiteral("SetLocale"), argumentList); } QDBusPendingReply KeyboardDBusProxy::GetLocaleList() { QList argumentList; return m_dBusLangSelectorInter->asyncCallWithArgumentList(QStringLiteral("GetLocaleList"), argumentList); } ================================================ FILE: src/plugin-datetime/operation/keyboard/keyboarddbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef KEYBOARDDBUSPROXY_H #define KEYBOARDDBUSPROXY_H #include "../datetimedbusproxy.h" // class LocaleInfo; // typedef QList LocaleList; #include #include #include class QDBusInterface; class QDBusMessage; using Dtk::Core::DDBusInterface; typedef QMap KeyboardLayoutList; namespace dccV25 { class DCCDBusInterface; } class KeyboardDBusProxy : public QObject { Q_OBJECT public: explicit KeyboardDBusProxy(QObject *parent = nullptr); //LangSelector Q_PROPERTY(QString CurrentLocale READ currentLocale NOTIFY CurrentLocaleChanged) QString currentLocale(); Q_PROPERTY(int LocaleState READ localeState NOTIFY LocaleStateChanged) int localeState(); Q_PROPERTY(QStringList Locales READ locales NOTIFY LocalesChanged) QStringList locales(); bool langSelectorIsValid(); void langSelectorStartServiceProcess(); signals: // LangSelector property void CurrentLocaleChanged(const QString & value) const; void LocaleStateChanged(int value) const; void LocalesChanged(const QStringList & value) const; void langSelectorServiceStartFinished(const quint32 ret) const; public slots: QDBusPendingReply<> AddLocale(const QString &in0); QDBusPendingReply<> DeleteLocale(const QString &in0); QDBusPendingReply<> SetLocale(const QString &in0); QDBusPendingReply GetLocaleList(); private slots: void onLangSelectorStartServiceProcessFinished(QDBusPendingCallWatcher *w); private: void init(); private: DDBusInterface *m_dBusLangSelectorInter; }; Q_DECLARE_METATYPE(KeyboardLayoutList) #endif // KeyboardDBusProxy_H ================================================ FILE: src/plugin-datetime/operation/keyboard/keyboardmodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "keyboardmodel.h" #include "keyboardwork.h" #include using namespace dccV25; KeyboardModel::KeyboardModel(QObject *parent) : QObject(parent) , m_capsLock(true) , m_numLock(true) , m_repeatInterval(1) , m_repeatDelay(1) , m_work(new KeyboardWorker(this, this)) { } void KeyboardModel::setLangChangedState(const int state) { if (m_status != state) { m_status = state; Q_EMIT onSetCurLangFinish(state); } } void KeyboardModel::setLayoutLists(QMap lists) { m_layouts = lists; } QString KeyboardModel::langByKey(const QString &key) const { auto res = std::find_if(m_langList.cbegin(), m_langList.end(), [key] (const MetaData &data)->bool{ return data.key() == key; }); if (res != m_langList.cend()) { return res->text(); } return QString(); } QString KeyboardModel::langFromText(const QString &text) const { auto res = std::find_if(m_langList.cbegin(), m_langList.end(), [text] (const MetaData &data)->bool{ return data.text() == text; }); if (res != m_langList.cend()) { return res->key(); } return QString(); } void KeyboardModel::setLayout(const QString &key) { if (key.isEmpty()) return; if (m_layout == key) return ; m_layout = key; Q_EMIT curLayoutChanged(m_layout); } QString KeyboardModel::curLayout() const { return m_layout; } void KeyboardModel::setLang(const QString &value) { qDebug() << "old key is " << m_currentLangKey << " new is " << value; if (m_currentLangKey != value && !value.isEmpty()) { m_currentLangKey = value; const QString &langName = langByKey(value); qDebug() << "value is " << value << " langName is " << langName; if (!langName.isEmpty()) Q_EMIT curLangChanged(langName); } } void KeyboardModel::doSetLang(const QString &value) { QString key = langFromText(value); if (m_currentLangKey != key && !key.isEmpty()) { m_currentLangKey = key; qDebug() << "key is " << key << " langName is " << value; if (!value.isEmpty()) { m_work->setLang(key); Q_EMIT curLangChanged(value); } } } void KeyboardModel::addLang(const QString &value) { qDebug() << "addLang" << value; m_work->addLang(value); } void KeyboardModel::deleteLang(const QString &value) { qDebug() << "deleteLang" << value ; m_work->deleteLang(value); } QStringList KeyboardModel::convertLang(const QStringList &langList) { QStringList realLangList; for (int i = 0; i < langList.size(); ++i) { QString lang = langByKey(langList[i]); if (!lang.isEmpty()) { realLangList << lang; } } return realLangList; } void KeyboardModel::setLocaleLang(const QStringList &localLangList) { QStringList langList = convertLang(localLangList); if (m_localLangList != langList && !langList.isEmpty()) { m_localLangList = langList; Q_EMIT curLocalLangChanged(m_localLangList); } } void KeyboardModel::setLocaleList(const QList &langList) { if (langList.isEmpty()) return; m_langList = langList; Q_EMIT langChanged(langList); const QString ¤tLang = langByKey(m_currentLangKey); if (!currentLang.isEmpty()) Q_EMIT curLangChanged(currentLang); } void KeyboardModel::setCapsLock(bool value) { if (m_capsLock != value) { m_capsLock = value; Q_EMIT capsLockChanged(value); } } uint KeyboardModel::repeatDelay() const { return m_repeatDelay; } void KeyboardModel::setRepeatDelay(const uint &repeatDelay) { if (m_repeatDelay != repeatDelay) { m_repeatDelay = repeatDelay; Q_EMIT repeatDelayChanged(repeatDelay); } } uint KeyboardModel::repeatInterval() const { return m_repeatInterval; } void KeyboardModel::setRepeatInterval(const uint &repeatInterval) { if (m_repeatInterval != repeatInterval) { m_repeatInterval = repeatInterval; Q_EMIT repeatIntervalChanged(repeatInterval); } } void KeyboardModel::setAllShortcut(const QMap &map) { m_shortcutMap = map; } bool KeyboardModel::numLock() const { return m_numLock; } void KeyboardModel::setNumLock(bool numLock) { if (m_numLock != numLock) { m_numLock = numLock; Q_EMIT numLockChanged(m_numLock); } } void KeyboardModel::cleanUserLayout() { m_userLayout.clear(); } QString KeyboardModel::curLang() const { qDebug() << "curLang key is " << m_currentLangKey; return langByKey(m_currentLangKey); } QMap KeyboardModel::userLayout() const { return m_userLayout; } QMap KeyboardModel::kbLayout() const { return m_layouts; } QStringList KeyboardModel::localLang() const { return m_localLangList; } void KeyboardModel::addUserLayout(const QString &id, const QString &value) { if (!m_userLayout.contains(id)) { m_userLayout.insert(id, value); Q_EMIT userLayoutChanged(id, value); } } QList KeyboardModel::langLists() const { return m_langList; } bool KeyboardModel::capsLock() const { return m_capsLock; } QMap KeyboardModel::allShortcut() const { return m_shortcutMap; } #include "keyboardmodel.moc" ================================================ FILE: src/plugin-datetime/operation/keyboard/keyboardmodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef KEYBOARDMODEL_H #define KEYBOARDMODEL_H #include "metadata.h" #include #include #include namespace dccV25 { class KeyboardWorker; class KeyboardModel : public QObject { Q_OBJECT public: explicit KeyboardModel(QObject *parent = nullptr); enum KBLayoutScope { system = 0, application = 1 }; #ifndef DCC_DISABLE_KBLAYOUT void setLayoutLists(QMap lists); #endif QString langByKey(const QString &key) const; QString langFromText(const QString &text) const; QString curLayout() const; QString curLang() const; QMap userLayout() const; QMap kbLayout() const; QStringList localLang() const; QList langLists() const; bool capsLock() const; QMap allShortcut() const; uint repeatInterval() const; void setRepeatInterval(const uint &repeatInterval); uint repeatDelay() const; void setRepeatDelay(const uint &repeatDelay); bool numLock() const; void setNumLock(bool numLock); void cleanUserLayout(); inline int getLangChangedState() const { return m_status; } void setLangChangedState(const int state); inline QStringList &getUserLayoutList() { return m_userLaylist; } Q_SIGNALS: #ifndef DCC_DISABLE_KBLAYOUT void curLayoutChanged(const QString &layout); #endif void curLangChanged(const QString &lang); void capsLockChanged(bool value); void numLockChanged(bool value); void repeatDelayChanged(const uint value); void repeatIntervalChanged(const uint value); void userLayoutChanged(const QString &id, const QString &value); void langChanged(const QList &data); void curLocalLangChanged(const QStringList &localLangList); void onSetCurLangFinish(const int value); public Q_SLOTS: #ifndef DCC_DISABLE_KBLAYOUT void setLayout(const QString &key); #endif void setLang(const QString &value); // doSetLang ==> m_worker->setLang ==> setLang void doSetLang(const QString &langName); void addLang(const QString &value); void deleteLang(const QString& value); void setLocaleLang(const QStringList &localLangList); void addUserLayout(const QString &id, const QString &value); void setLocaleList(const QList &langList); void setCapsLock(bool value); void setAllShortcut(const QMap &map); private: QStringList convertLang(const QStringList &langList); private: bool m_capsLock; bool m_numLock; uint m_repeatInterval; uint m_repeatDelay; QString m_layout; QString m_currentLangKey; QStringList m_localLangList; QStringList m_userLaylist; QMap m_userLayout; QMap m_layouts; QList m_langList; QMap m_shortcutMap; int m_status{0}; KeyboardWorker *m_work = nullptr; }; } #endif // KEYBOARDMODEL_H ================================================ FILE: src/plugin-datetime/operation/keyboard/keyboardwork.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "keyboardwork.h" #include "dcclocale.h" #include #include #include #include #include #include #include #include #include #include #include #include using namespace dccV25; bool caseInsensitiveLessThan(const MetaData &s1, const MetaData &s2); const QMap &ModelKeycode = {{"minus", "-"}, {"equal", "="}, {"backslash", "\\"}, {"question", "?/"}, {"exclam", "1"}, {"numbersign", "3"}, {"semicolon", ";"}, {"apostrophe", "'"}, {"less", ",<"}, {"period", ">."}, {"slash", "?/"}, {"parenleft", "9"}, {"bracketleft", "["}, {"parenright", "0"}, {"bracketright", "]"}, {"quotedbl", "'"}, {"space", " "}, {"dollar", "$"}, {"plus", "+"}, {"asterisk", "*"}, {"underscore", "_"}, {"bar", "|"}, {"grave", "`"}, {"at", "2"}, {"percent", "5"}, {"greater", ">."}, {"asciicircum", "6"}, {"braceleft", "["}, {"colon", ":"}, {"comma", ",<"}, {"asciitilde", "~"}, {"ampersand", "7"}, {"braceright", "]"}, {"Escape", "Esc"} }; KeyboardWorker::KeyboardWorker(KeyboardModel *model, QObject *parent) : QObject(parent) , m_model(model) , m_keyboardDBusProxy(new KeyboardDBusProxy(this)) , m_translatorLanguage(nullptr) { connect(m_keyboardDBusProxy, &KeyboardDBusProxy::langSelectorServiceStartFinished, this, [=] { QTimer::singleShot(100, this, &KeyboardWorker::onLangSelectorServiceFinished); }); m_model->setLangChangedState(m_keyboardDBusProxy->localeState()); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::LocaleStateChanged, m_model, &KeyboardModel::setLangChangedState); QMetaObject::invokeMethod(this, "active", Qt::QueuedConnection); } void KeyboardWorker::resetAll() { } void KeyboardWorker::onGetWindowWM(bool value) { if (m_shortcutModel) m_shortcutModel->onWindowSwitchChanged(value); } void KeyboardWorker::setShortcutModel(ShortcutModel *model) { m_shortcutModel = model; } void KeyboardWorker::refreshShortcut() { } void KeyboardWorker::refreshLang() { m_keyboardDBusProxy->blockSignals(false); if (!m_keyboardDBusProxy->langSelectorIsValid()) m_keyboardDBusProxy->langSelectorStartServiceProcess(); else onLangSelectorServiceFinished(); } void KeyboardWorker::windowSwitch() { } void KeyboardWorker::active() { m_keyboardDBusProxy->blockSignals(false); m_metaDatas.clear(); m_letters.clear(); Q_EMIT onDatasChanged(m_metaDatas); Q_EMIT onLettersChanged(m_letters); onRefreshKBLayout(); refreshLang(); windowSwitch(); } void KeyboardWorker::deactive() { m_keyboardDBusProxy->blockSignals(true); } bool KeyboardWorker::keyOccupy(const QStringList &list) { int bit = 0; for (QString t : list) { if (t == "Control") bit += Modifier::control; else if (t == "Alt") bit += Modifier::alt; else if (t == "Super") bit += Modifier::super; else if (t == "Shift") bit += Modifier::shift; else continue; } QMap keylist = m_model->allShortcut(); QMap::iterator i; for (i = keylist.begin(); i != keylist.end(); ++i) { if (bit == i.value() && i.key().last() == list.last()) { return false; } } return true; } #ifndef DCC_DISABLE_KBLAYOUT void KeyboardWorker::onRefreshKBLayout() { } #endif void KeyboardWorker::modifyShortcutEditAux(ShortcutInfo *info, bool isKPDelete) { if (!info) return; if (info->replace) { onDisableShortcut(info->replace); } QString shortcut = info->accels; if (!isKPDelete) { shortcut = shortcut.replace("KP_Delete", "Delete"); } } void KeyboardWorker::modifyShortcutEdit(ShortcutInfo *info) { modifyShortcutEditAux(info); } void KeyboardWorker::addCustomShortcut(const QString &name, const QString &command, const QString &accels) { Q_UNUSED(name) Q_UNUSED(command) Q_UNUSED(accels) } void KeyboardWorker::modifyCustomShortcut(ShortcutInfo *info) { if (info->replace) { onDisableShortcut(info->replace); } } void KeyboardWorker::grabScreen() { } bool KeyboardWorker::checkAvaliable(const QString &key) { Q_UNUSED(key) return false; } void KeyboardWorker::delShortcut(ShortcutInfo* info) { Q_UNUSED(info) } void KeyboardWorker::setRepeatDelay(uint value) { Q_UNUSED(value) } void KeyboardWorker::setRepeatInterval(uint value) { Q_UNUSED(value) } void KeyboardWorker::setModelRepeatDelay(uint value) { m_model->setRepeatDelay(converToModelDelay(value)); } void KeyboardWorker::setModelRepeatInterval(uint value) { m_model->setRepeatInterval(converToModelInterval(value)); } void KeyboardWorker::setNumLock(bool value) { Q_UNUSED(value) } void KeyboardWorker::setCapsLock(bool value) { Q_UNUSED(value) } void KeyboardWorker::addUserLayout(const QString &value) { Q_UNUSED(value) } void KeyboardWorker::delUserLayout(const QString &value) { Q_UNUSED(value) } bool caseInsensitiveLessThan(const MetaData &s1, const MetaData &s2) { QCollator qc; int i = qc.compare(s1.text(), s2.text()); if (i < 0) return true; else return false; } void KeyboardWorker::onRequestShortcut(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; if(reply.isError()) { watch->deleteLater(); return; } QString info = reply.value(); QMap map; QJsonArray array = QJsonDocument::fromJson(info.toStdString().c_str()).array(); Q_FOREACH(QJsonValue value, array) { QJsonObject obj = value.toObject(); if (obj.isEmpty()) continue; if (obj["Accels"].toArray().isEmpty()) continue; QString accels = obj["Accels"].toArray().at(0).toString(); accels.replace("<", ""); accels.replace(">", "-"); //转换为list QStringList key; key = accels.split("-"); int bit = 0; for (QString &t : key) { if (t == "Control") bit += Modifier::control; else if (t == "Alt") bit += Modifier::alt; else if (t == "Super") bit += Modifier::super; else if (t == "Shift") bit += Modifier::shift; else { QString s = t; s = ModelKeycode.value(s); if (!s.isEmpty()) t = s; } } if (bit == 0) continue; map.insert(key, bit); } m_model->setAllShortcut(map); if (m_shortcutModel) m_shortcutModel->onParseInfo(info); watch->deleteLater(); } void KeyboardWorker::onAdded(const QString &in0, int in1) { Q_UNUSED(in0) Q_UNUSED(in1) } void KeyboardWorker::onDisableShortcut(ShortcutInfo *info) { Q_UNUSED(info) } void KeyboardWorker::onAddedFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; if (m_shortcutModel && !watch->isError()) m_shortcutModel->onCustomInfo(reply.value()); watch->deleteLater(); } void KeyboardWorker::onLayoutListsFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; KeyboardLayoutList tmp_map = reply.value(); m_model->setLayoutLists(tmp_map); watch->deleteLater(); } void KeyboardWorker::onLocalListsFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; m_datas.clear(); LocaleList list = reply.value(); QStringList languageCodes; QList metaDatas; for (int i = 0; i != list.size(); ++i) { MetaData md; md.setKey(list.at(i).id); languageCodes << list.at(i).id; metaDatas << md; } QStringList dialectNames = DCCLocale::dialectNames(languageCodes); for (int i = 0; i != metaDatas.size(); ++i) { metaDatas[i].setText(QString("%1 - %2").arg(list.at(i).name).arg(dialectNames.at(i))); } m_datas.append(metaDatas); std::sort(m_datas.begin(), m_datas.end(), caseInsensitiveLessThan); m_model->setLocaleList(m_datas); watch->deleteLater(); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::CurrentLocaleChanged, m_model, &KeyboardModel::setLang); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::LocalesChanged, m_model, &KeyboardModel::setLocaleLang); m_model->setLocaleLang(m_keyboardDBusProxy->locales()); m_model->setLang(m_keyboardDBusProxy->currentLocale()); } void KeyboardWorker::onUserLayout(const QStringList &list) { m_model->cleanUserLayout(); m_model->getUserLayoutList() = list; } void KeyboardWorker::onUserLayoutFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; m_model->addUserLayout(watch->property("id").toString(), reply.value()); watch->deleteLater(); } void KeyboardWorker::onCurrentLayout(const QString &value) { Q_UNUSED(value) } void KeyboardWorker::onSearchShortcuts(const QString &searchKey) { Q_UNUSED(searchKey) } void KeyboardWorker::onCurrentLayoutFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; m_model->setLayout(reply.value()); watch->deleteLater(); } void KeyboardWorker::onSearchFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; if (m_shortcutModel && !watch->isError()) { m_shortcutModel->setSearchResult(reply.value()); } else { qDebug() << "search finished error." << watch->error(); } watch->deleteLater(); } void KeyboardWorker::onPinyin() { m_letters.clear(); m_metaDatas.clear(); QDBusInterface dbus_pinyin("org.deepin.dde.Pinyin1", "/org/deepin/dde/Pinyin1", "org.deepin.dde.Pinyin1"); Q_FOREACH(const QString &str, m_model->kbLayout().keys()) { MetaData md; QString title = m_model->kbLayout()[str]; md.setText(title); md.setKey(str); QChar letterFirst = title[0]; QStringList letterFirstList; if (letterFirst.isLower() || letterFirst.isUpper()) { letterFirstList << QString(letterFirst); md.setPinyin(title); } else { QDBusMessage message = dbus_pinyin.call("Query", title); letterFirstList = message.arguments()[0].toStringList(); md.setPinyin(letterFirstList.at(0)); } append(md); } QLocale locale; if (locale.language() == QLocale::Chinese) { QChar ch = '\0'; for (int i(0); i != m_metaDatas.size(); ++i) { const QChar flag = m_metaDatas[i].pinyin().at(0).toUpper(); if (flag == ch) continue; ch = flag; m_letters.append(ch); m_metaDatas.insert(i, MetaData(ch, true)); } } else { std::sort(m_metaDatas.begin(), m_metaDatas.end(), caseInsensitiveLessThan); } Q_EMIT onDatasChanged(m_metaDatas); Q_EMIT onLettersChanged(m_letters); } void KeyboardWorker::append(const MetaData &md) { if(m_metaDatas.count() == 0) { m_metaDatas.append(md); return; } int index = 0; for (int i = 0; i != m_metaDatas.size(); ++i) { if(m_metaDatas.at(i) > md) { m_metaDatas.insert(index,md); return; } index++; } m_metaDatas.append(md); } void KeyboardWorker::onLangSelectorServiceFinished() { QDBusPendingCallWatcher *localResult = new QDBusPendingCallWatcher(m_keyboardDBusProxy->GetLocaleList(), this); connect(localResult, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onLocalListsFinished); m_keyboardDBusProxy->currentLocale(); } void KeyboardWorker::onShortcutChanged(const QString &id, int type) { Q_UNUSED(id) Q_UNUSED(type) } void KeyboardWorker::onGetShortcutFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; if (m_shortcutModel && !watch->isError()) m_shortcutModel->onKeyBindingChanged(reply.value()); watch->deleteLater(); } void KeyboardWorker::updateKey(ShortcutInfo *info) { Q_UNUSED(info) } void KeyboardWorker::cleanShortcutSlef(const QString &id, const int type, const QString &shortcut) { Q_UNUSED(id) Q_UNUSED(type) Q_UNUSED(shortcut) } void KeyboardWorker::setNewCustomShortcut(const QString &id, const QString &name, const QString &command, const QString &accles) { Q_UNUSED(id) Q_UNUSED(name) Q_UNUSED(command) Q_UNUSED(accles) } void KeyboardWorker::onConflictShortcutCleanFinished(QDBusPendingCallWatcher *watch) { watch->deleteLater(); } void KeyboardWorker::onShortcutCleanFinished(QDBusPendingCallWatcher *watch) { Q_UNUSED(watch) } void KeyboardWorker::onCustomConflictCleanFinished(QDBusPendingCallWatcher *w) { if (!w->isError()) { const QString &id = w->property("id").toString(); const QString name = w->property("name").toString(); const QString &command = w->property("command").toString(); const QString &accles = w->property("shortcut").toString(); setNewCustomShortcut(id, name, command, accles); } w->deleteLater(); } uint KeyboardWorker::converToDBusDelay(uint value) { switch (value) { case 1: return 20; case 2: return 80; case 3: return 150; case 4: return 250; case 5: return 360; case 6: return 480; case 7: return 600; default: return 4; } } uint KeyboardWorker::converToModelDelay(uint value) { if (value <= 20) return 1; else if (value <= 80) return 2; else if (value <= 150) return 3; else if (value <= 250) return 4; else if (value <= 360) return 5; else if (value <= 480) return 6; else return 7; } int KeyboardWorker::converToDBusInterval(int value) { switch (value) { case 1: return 100; case 2: return 80; case 3: return 65; case 4: return 50; case 5: return 35; case 6: return 25; case 7: return 20; default: return 4; } } uint KeyboardWorker::converToModelInterval(uint value) { if (value <= 20) return 7; else if (value <= 25) return 6; else if (value <= 35) return 5; else if (value <= 50) return 4; else if (value <= 65) return 3; else if (value <= 80) return 2; else return 1; } void KeyboardWorker::setLayout(const QString &value) { Q_UNUSED(value) } void KeyboardWorker::setLang(const QString &value) { Q_EMIT requestSetAutoHide(false); QDBusPendingCall call = m_keyboardDBusProxy->SetLocale(value); qDebug() << "setLang is " << value; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { qDebug() << "setLang error: " << call.error().type(); m_model->setLang(m_keyboardDBusProxy->currentLocale()); } qDebug() << "setLang success"; Q_EMIT requestSetAutoHide(true); watcher->deleteLater(); }); } void KeyboardWorker::addLang(const QString &value) { Q_EMIT requestSetAutoHide(false); QDBusPendingCall call = m_keyboardDBusProxy->AddLocale(value); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { qDebug() << "add Locale language error: " << call.error().type(); } Q_EMIT requestSetAutoHide(true); watcher->deleteLater(); }); } void KeyboardWorker::deleteLang(const QString &value) { Q_EMIT requestSetAutoHide(false); QString lang = m_model->langFromText(value); QDBusPendingCall call = m_keyboardDBusProxy->DeleteLocale(lang); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { qDebug() << "delete Locale language error: " << call.error().type(); } Q_EMIT requestSetAutoHide(true); watcher->deleteLater(); }); } ================================================ FILE: src/plugin-datetime/operation/keyboard/keyboardwork.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef KEYBOARDWORK_H #define KEYBOARDWORK_H #include "metadata.h" #include "shortcutmodel.h" #include "keyboardmodel.h" #include "keyboarddbusproxy.h" #include class QDBusPendingCallWatcher; class QTranslator; namespace dccV25 { class KeyboardWorker : public QObject { Q_OBJECT public: explicit KeyboardWorker(KeyboardModel* model, QObject *parent = nullptr); enum Modifier { control = 1, super = 2, alt = 4, shift = 8 }; void resetAll(); void setShortcutModel(ShortcutModel * model); void refreshShortcut(); void refreshLang(); void windowSwitch(); inline QList getDatas() {return m_metaDatas;} inline QList getLetters() {return m_letters;} void modifyShortcutEditAux(ShortcutInfo* info, bool isKPDelete = false); void modifyShortcutEdit(ShortcutInfo* info); void addCustomShortcut(const QString& name, const QString& command, const QString& accels); void modifyCustomShortcut(ShortcutInfo *info); void grabScreen(); bool checkAvaliable(const QString& key); void delShortcut(ShortcutInfo *info); void setRepeatDelay(uint value); void setRepeatInterval(uint value); void setModelRepeatDelay(uint value); void setModelRepeatInterval(uint value); void setNumLock(bool value); void setCapsLock(bool value); void deactive(); bool keyOccupy(const QStringList &list); void onRefreshKBLayout(); Q_SIGNALS: void KeyEvent(bool in0, const QString &in1); void searchChangd(ShortcutInfo* info, const QString& key); void removed(const QString &id, int type); void requestSetAutoHide(const bool visible); void onDatasChanged(QList datas); void onLettersChanged(QList letters); // 快捷键恢复默认完成 void onResetFinished(); public Q_SLOTS: void active(); void setLang(const QString &value); void addLang(const QString &value); void deleteLang(const QString& value); void setLayout(const QString& value); void addUserLayout(const QString& value); void delUserLayout(const QString& value); void onRequestShortcut(QDBusPendingCallWatcher* watch); void onAdded(const QString&in0, int in1); void onDisableShortcut(ShortcutInfo* info); void onAddedFinished(QDBusPendingCallWatcher *watch); void onLocalListsFinished(QDBusPendingCallWatcher *watch); void onGetWindowWM(bool value); void onLayoutListsFinished(QDBusPendingCallWatcher *watch); void onUserLayout(const QStringList &list); void onUserLayoutFinished(QDBusPendingCallWatcher *watch); void onCurrentLayout(const QString &value); void onCurrentLayoutFinished(QDBusPendingCallWatcher *watch); void onPinyin(); void onSearchShortcuts(const QString &searchKey); void onSearchFinished(QDBusPendingCallWatcher *watch); void append(const MetaData& md); void onLangSelectorServiceFinished(); void onShortcutChanged(const QString &id, int type); void onGetShortcutFinished(QDBusPendingCallWatcher *watch); void updateKey(ShortcutInfo *info); void cleanShortcutSlef(const QString &id, const int type, const QString &shortcut); void setNewCustomShortcut(const QString &id, const QString &name, const QString &command, const QString &accles); void onConflictShortcutCleanFinished(QDBusPendingCallWatcher *watch); void onShortcutCleanFinished(QDBusPendingCallWatcher *watch); void onCustomConflictCleanFinished(QDBusPendingCallWatcher *w); private: uint converToDBusDelay(uint value); uint converToModelDelay(uint value); int converToDBusInterval(int value); uint converToModelInterval(uint value); private: QList m_datas; QList m_metaDatas; QList m_letters; int m_delayValue; int m_speedValue; KeyboardModel* m_model; KeyboardDBusProxy *m_keyboardDBusProxy; ShortcutModel *m_shortcutModel = nullptr; QTranslator *m_translatorLanguage; }; } #endif // KEYBOARDWORK_H ================================================ FILE: src/plugin-datetime/operation/keyboard/metadata.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "metadata.h" #include using namespace dccV25; MetaData::MetaData(const QString &text, bool section) : m_text(text) , m_pinyin(QString()) , m_section(section) , m_selected(false) { } void MetaData::setPinyin(const QString &py) { m_pinyin = py; } QString MetaData::pinyin() const { return m_pinyin == QString() ? m_text : m_pinyin; } void MetaData::setText(const QString &text) { m_text = text; } QString MetaData::text() const { return m_text; } void MetaData::setKey(const QString &key) { m_key = key; } QString MetaData::key() const { return m_key; } void MetaData::setSection(bool section) { m_section = section; } bool MetaData::section() const { return m_section; } void MetaData::setSelected(bool selected) { m_selected = selected; } bool MetaData::selected() const { return m_selected; } bool MetaData::operator ==(const MetaData &md) const { return m_text == md.m_text; } bool MetaData::operator >(const MetaData &md) const { int x = QString::compare(m_pinyin, md.m_pinyin, Qt::CaseInsensitive); return x > 0; } ================================================ FILE: src/plugin-datetime/operation/keyboard/metadata.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include namespace dccV25 { class MetaData { public: MetaData(const QString &text = QString(), bool section = false); void setPinyin(const QString &py); QString pinyin() const; void setText(const QString &text); QString text() const; void setKey(const QString &key); QString key() const; void setSection(bool section); bool section() const; void setSelected(bool selected); bool selected() const; bool operator ==(const MetaData &md) const; bool operator >(const MetaData &md) const; private: QString m_key; QString m_text; QString m_pinyin; bool m_section; bool m_selected; }; } Q_DECLARE_METATYPE(dccV25::MetaData) ================================================ FILE: src/plugin-datetime/operation/keyboard/qrc/keyboard.qrc ================================================ icons/dcc_nav_keyboard_42px.svg icons/dcc_nav_keyboard_84px.svg icons/list_select@2x.png icons/list_select.png ================================================ FILE: src/plugin-datetime/operation/keyboard/shortcutmodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "shortcutmodel.h" #include #include #include #include #include #include #include #include #include QStringList systemFilter = {"terminal", "terminalQuake", "globalSearch", "screenshot", "screenshotDelayed", "screenshotFullscreen", "screenshotWindow", "screenshotScroll", "screenshotOcr", "deepinScreenRecorder", "switchGroup", "switchGroupBackward", "previewWorkspace", "launcher", "switchApplications", "switchApplicationsBackward", "showDesktop", "fileManager", "lockScreen", "logout", "wmSwitcher", "systemMonitor", "colorPicker", "clipboard", "switchMonitors" }; const QStringList &windowFilter = {"maximize", "unmaximize", "minimize", "beginMove", "beginResize", "close", "toggleToLeft", "toggleToRight" }; const QStringList &workspaceFilter = {"switchToWorkspaceLeft", "switchToWorkspaceRight", "moveToWorkspaceLeft", "moveToWorkspaceRight"}; const QStringList &assistiveToolsFilter = {"textToSpeech", "speechToText", "translation", "viewZoomIn", "viewZoomOut", "viewActualSize"}; using namespace dccV25; DCORE_USE_NAMESPACE ShortcutModel::ShortcutModel(QObject *parent) : QObject(parent) , m_windowSwitchState(false) { if (qApp->screens().count() > 1) { systemFilter.append("switch-monitors"); } } ShortcutModel::~ShortcutModel() { qDeleteAll(m_infos); m_infos.clear(); m_systemInfos.clear(); m_windowInfos.clear(); m_workspaceInfos.clear(); m_customInfos.clear(); qDeleteAll(m_searchList); m_searchList.clear(); } QList ShortcutModel::systemInfo() const { return m_systemInfos; } QList ShortcutModel::windowInfo() const { return m_windowInfos; } QList ShortcutModel::workspaceInfo() const { return m_workspaceInfos; } QList ShortcutModel::assistiveToolsInfo() const { return m_assistiveToolsInfos; } QList ShortcutModel::customInfo() const { return m_customInfos; } QList ShortcutModel::infos() const { return m_infos; } void ShortcutModel::delInfo(ShortcutInfo *info) { if (m_infos.contains(info)) { m_infos.removeOne(info); } if (m_customInfos.contains(info)) { m_customInfos.removeOne(info); } delete info; info = nullptr; } void ShortcutModel::onParseInfo(const QString &info) { QStringList systemShortKeys; if (DSysInfo::UosServer == DSysInfo::uosType()) { QStringList systemFilterServer = systemFilter; systemFilterServer.removeOne("wm-switcher"); systemFilterServer.removeOne("preview-workspace"); systemShortKeys = systemFilterServer; } else if (false == m_windowSwitchState) { QStringList systemFilterServer = systemFilter; systemFilterServer.removeOne("preview-workspace"); systemShortKeys = systemFilterServer; } else { systemShortKeys = systemFilter; } #ifdef DISABLE_SCREEN_RECORDING QStringList systemFilterServer = systemShortKeys; systemFilterServer.removeOne("deepin-screen-recorder"); systemShortKeys = systemFilterServer; #endif qDeleteAll(m_infos); m_infos.clear(); m_systemInfos.clear(); m_windowInfos.clear(); m_workspaceInfos.clear(); m_assistiveToolsInfos.clear(); m_customInfos.clear(); QJsonArray array = QJsonDocument::fromJson(info.toStdString().c_str()).array(); Q_FOREACH (QJsonValue value, array) { QJsonObject obj = value.toObject(); int type = obj["Type"].toInt(); ShortcutInfo *info = new ShortcutInfo(); info->type = type; info->accels = obj["Accels"].toArray().first().toString(); info->name = obj["Name"].toString(); info->id = obj["Id"].toString(); info->command = obj["Exec"].toString(); m_infos << info; if (type != MEDIAKEY) { if (systemShortKeys.contains(info->id)) { m_systemInfos << info; continue; } if (windowFilter.contains(info->id)) { m_windowInfos << info; continue; } if (workspaceFilter.contains(info->id)) { m_workspaceInfos << info; continue; } if (assistiveToolsFilter.contains(info->id)) { m_assistiveToolsInfos << info; continue; } if (type == 1) { m_customInfos << info; } } } std::sort(m_systemInfos.begin(), m_systemInfos.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return systemShortKeys.indexOf(s1->id) < systemShortKeys.indexOf(s2->id); }); std::sort(m_windowInfos.begin(), m_windowInfos.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return windowFilter.indexOf(s1->id) < windowFilter.indexOf(s2->id); }); std::sort(m_workspaceInfos.begin(), m_workspaceInfos.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return workspaceFilter.indexOf(s1->id) < workspaceFilter.indexOf(s2->id); }); std::sort(m_assistiveToolsInfos.begin(), m_assistiveToolsInfos.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return assistiveToolsFilter.indexOf(s1->id) < assistiveToolsFilter.indexOf(s2->id); }); Q_EMIT listChanged(m_systemInfos, InfoType::System); Q_EMIT listChanged(m_windowInfos, InfoType::Window); Q_EMIT listChanged(m_workspaceInfos, InfoType::Workspace); Q_EMIT listChanged(m_assistiveToolsInfos, InfoType::AssistiveTools); Q_EMIT listChanged(m_customInfos, InfoType::Custom); } void ShortcutModel::onCustomInfo(const QString &json) { QJsonObject obj = QJsonDocument::fromJson(json.toStdString().c_str()).object(); ShortcutInfo *info = new ShortcutInfo(); info->type = obj["Type"].toInt(); QString accels = obj["Accels"].toArray().at(0).toString(); info->accels = accels; info->name = obj["Name"].toString(); info->id = obj["Id"].toString(); info->command = obj["Exec"].toString(); m_infos.append(info); m_customInfos.append(info); Q_EMIT addCustomInfo(info); } void ShortcutModel::onKeyBindingChanged(const QString &value) { const QJsonObject &obj = QJsonDocument::fromJson(value.toStdString().c_str()).object(); const QString &update_id = obj["Id"].toString(); auto res = std::find_if(m_infos.begin(), m_infos.end(), [ = ] (const ShortcutInfo *info)->bool{ return info->id == update_id; }); if (res != m_infos.end()) { (*res)->type = obj["Type"].toInt(); (*res)->accels = obj["Accels"].toArray().first().toString(); (*res)->name = obj["Name"].toString(); (*res)->command = obj["Exec"].toString(); Q_EMIT shortcutChanged((*res)); } } void ShortcutModel::onWindowSwitchChanged(bool value) { if (m_windowSwitchState != value) { m_windowSwitchState = value; } } bool ShortcutModel::getWindowSwitch() { return m_windowSwitchState; } ShortcutInfo *ShortcutModel::currentInfo() const { return m_currentInfo; } void ShortcutModel::setCurrentInfo(ShortcutInfo *currentInfo) { m_currentInfo = currentInfo; } ShortcutInfo *ShortcutModel::getInfo(const QString &shortcut) { auto res = std::find_if(m_infos.begin(), m_infos.end(), [ = ] (const ShortcutInfo *info)->bool{ return !QString::compare(info->accels, shortcut, Qt::CaseInsensitive); //判断是否相等,相等则返回0 }); if (res != m_infos.end()) { return *res; } return nullptr; } void ShortcutModel::setSearchResult(const QString &searchResult) { qDeleteAll(m_searchList); m_searchList.clear(); QList systemInfoList; QList windowInfoList; QList workspaceInfoList; QList customInfoList; QList speechInfoList; QJsonArray array = QJsonDocument::fromJson(searchResult.toStdString().c_str()).array(); for (auto value : array) { QJsonObject obj = value.toObject(); int type = obj["Type"].toInt(); ShortcutInfo *info = new ShortcutInfo(); info->type = type; info->accels = obj["Accels"].toArray().first().toString(); info->name = obj["Name"].toString(); info->id = obj["Id"].toString(); info->command = obj["Exec"].toString(); if (type != MEDIAKEY) { if (systemFilter.contains(info->id)) { systemInfoList << info; continue; } if (windowFilter.contains(info->id)) { windowInfoList << info; continue; } if (workspaceFilter.contains(info->id)) { workspaceInfoList << info; continue; } if (assistiveToolsFilter.contains(info->id)) { speechInfoList << info; continue; } if (type == 1) { customInfoList << info; }else{ delete info; info = nullptr; } } else { qDebug() << "not search is:" << info->name; delete info; info = nullptr; } } std::sort(systemInfoList.begin(), systemInfoList.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return systemFilter.indexOf(s1->id) < systemFilter.indexOf(s2->id); }); std::sort(windowInfoList.begin(), windowInfoList.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return windowFilter.indexOf(s1->id) < windowFilter.indexOf(s2->id); }); std::sort(workspaceInfoList.begin(), workspaceInfoList.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return workspaceFilter.indexOf(s1->id) < workspaceFilter.indexOf(s2->id); }); m_searchList.append(systemInfoList); m_searchList.append(windowInfoList); m_searchList.append(workspaceInfoList); m_searchList.append(speechInfoList); m_searchList.append(customInfoList); int i = 0; for (auto search : m_searchList) { qDebug() << "search" << ++i << " is: " << search->name; } Q_EMIT searchFinished(m_searchList); } ================================================ FILE: src/plugin-datetime/operation/keyboard/shortcutmodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef SHORTCUTMODEL_H #define SHORTCUTMODEL_H #define MEDIAKEY 2 #include namespace dccV25 { class ShortcutItem; struct ShortcutInfo { QString accels; QString id; QString name; QString command; int type; ShortcutInfo *replace = nullptr; ShortcutItem *item = nullptr; ShortcutInfo() : type(0) , replace(nullptr) , item(nullptr) { } bool operator==(const ShortcutInfo &info) const { return id == info.id && type == info.type; } QString toString() { return name + accels + command + id + QString::number(type); } }; typedef QList ShortcutInfoList; class ShortcutModel : public QObject { Q_OBJECT public: explicit ShortcutModel(QObject *parent = nullptr); ~ShortcutModel(); enum InfoType { System, Custom, Media, Window, Workspace, AssistiveTools, }; QList systemInfo() const; QList windowInfo() const; QList workspaceInfo() const; QList assistiveToolsInfo() const; QList customInfo() const; QList infos() const; void delInfo(ShortcutInfo *info); ShortcutInfo *currentInfo() const; void setCurrentInfo(ShortcutInfo *currentInfo); ShortcutInfo *getInfo(const QString &shortcut); void setSearchResult(const QString &searchResult); bool getWindowSwitch(); Q_SIGNALS: void listChanged(QList, InfoType); void addCustomInfo(ShortcutInfo *info); void shortcutChanged(ShortcutInfo *info); void keyEvent(bool press, const QString &shortcut); void searchFinished(const QList searchResult); void windowSwitchChanged(bool value); public Q_SLOTS: void onParseInfo(const QString &info); void onCustomInfo(const QString &json); void onKeyBindingChanged(const QString &value); void onWindowSwitchChanged(bool value); private: QString m_info; QList m_infos; QList m_systemInfos; QList m_windowInfos; QList m_workspaceInfos; QList m_assistiveToolsInfos; QList m_customInfos; QList m_searchList; ShortcutInfo *m_currentInfo = nullptr; bool m_windowSwitchState; //dcc::display::DisplayModel m_dis; }; } #endif // SHORTCUTMODEL_H ================================================ FILE: src/plugin-datetime/operation/langregionmodel.cpp ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "datetimemodel.h" #include "langregionmodel.h" namespace dccV25 { LangRegionModel::LangRegionModel(QObject *parent) : QAbstractListModel(parent) { } int LangRegionModel::rowCount(const QModelIndex &) const { DatetimeModel *sourceMode = dynamic_cast(parent()); if (!sourceMode) return 0; return sourceMode->regions().size(); } QVariant LangRegionModel::data(const QModelIndex &index, int role) const { DatetimeModel *sourceMode = dynamic_cast(parent()); if (!sourceMode) QVariant(); static QStringList datas; const auto& regions = sourceMode->regions(); if (datas.size() != regions.size()) { datas = sourceMode->languagesAndRegions(); } QString key = regions.keys().value(index.row()); QLocale locale = regions.value(key); RegionFormat regionFormat = RegionProxy::regionFormat(locale); const QDate CurrentDate(2024, 1, 1); const QTime CurrentTime(1, 1, 1); // maybe we should add to PinYinRole to sort Chinese words switch (role) { case Qt::DisplayRole: return datas.value(index.row()); case SearchTextRole: return datas.value(index.row()) + key; case RegionKeyIdRole: return key; case LocaleKeyIdRole: return locale.name(); case FirstDayOfWeek: return locale.standaloneDayName(regionFormat.firstDayOfWeekFormat); case ShortDate: return locale.toString(CurrentDate, regionFormat.shortDateFormat); case LongDate: return locale.toString(CurrentDate, regionFormat.longDateFormat); case ShortTime: return locale.toString(CurrentTime, regionFormat.shortTimeFormat); case LongTime: return locale.toString(CurrentTime, regionFormat.longTimeFormat); case Currency: return regionFormat.currencyFormat.toUtf8(); case Digit: return regionFormat.numberFormat.toUtf8(); case PaperSize: return regionFormat.paperFormat.toUtf8(); default: break; } return QVariant(); } QHash LangRegionModel::roleNames() const { QHash names = QAbstractListModel::roleNames(); names[SearchTextRole] = "searchText"; names[RegionKeyIdRole] = "langKey"; names[LocaleKeyIdRole] = "localeKey"; names[FirstDayOfWeek] = "firstDay"; names[ShortDate] = "shortDate"; names[LongDate] = "longDate"; names[ShortTime] = "shortTime"; names[LongTime] = "longTime"; names[Currency] = "currency"; names[Digit] = "digit"; names[PaperSize] = "paperSize"; return names; } FormatsModel::FormatsModel(QObject *parent) : QAbstractListModel(parent) { } void FormatsModel::setDatas(const QList &datas) { if (datas == m_datas) return; beginResetModel(); m_datas = datas; endResetModel(); } int FormatsModel::rowCount(const QModelIndex &) const { return m_datas.count(); } QVariant FormatsModel::data(const QModelIndex &index, int role) const { const auto &info = m_datas.value(index.row()); switch (role) { case NameRole: return info.name; case ValuesRole: return info.values; case CurrentRole: return info.index; case IndexBegin: return info.indexBegin; default: break; } return QVariant(); } QHash FormatsModel::roleNames() const { QHash names = QAbstractListModel::roleNames(); names[NameRole] = "name"; names[ValuesRole] = "values"; names[CurrentRole] = "current"; names[IndexBegin] = "indexBegin"; return names; } } ================================================ FILE: src/plugin-datetime/operation/langregionmodel.h ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef LANGREGIONMODEL_H #define LANGREGIONMODEL_H #include #include namespace dccV25 { class LangRegionModel : public QAbstractListModel { public: explicit LangRegionModel(QObject *parent = nullptr); enum LangItemRole { SearchTextRole = Qt::UserRole + 1, RegionKeyIdRole, LocaleKeyIdRole, FirstDayOfWeek, ShortDate, LongDate, ShortTime, LongTime, Currency, Digit, PaperSize }; // QAbstractItemModel interface public: int rowCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; QHash roleNames() const; }; struct FormatsInfo { QString name; QStringList values; int index = -1; int indexBegin = -1; bool operator ==(const FormatsInfo &info) const { return info.name == name && info.values == values && info.index == index && info.indexBegin == indexBegin; } }; class FormatsModel : public QAbstractListModel { public: enum FormatsRole { NameRole = Qt::UserRole + 1, ValuesRole, CurrentRole, IndexBegin, }; explicit FormatsModel(QObject *parent = nullptr); void setDatas(const QList &datas); public: int rowCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; QHash roleNames() const; private: QList m_datas; }; } #endif // LANGREGIONMODEL_H ================================================ FILE: src/plugin-datetime/operation/languagelistmodel.cpp ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "languagelistmodel.h" #include "keyboard/metadata.h" namespace dccV25 { LanguageListModel::LanguageListModel(QObject *parent) : QAbstractListModel(parent) { } LanguageListModel::~LanguageListModel() { } int LanguageListModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent) return m_datas.count(); } QVariant LanguageListModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.row() >= m_datas.size()) return QVariant(); const auto &data = m_datas.value(index.row()); switch (role) { case Qt::DisplayRole: return data.text(); case SearchTextRole: return data.text() + data.pinyin() + data.key(); case LangKeyIdRole: return data.key(); default: break; } return QVariant(); } QHash LanguageListModel::roleNames() const { QHash names = QAbstractListModel::roleNames(); names[SearchTextRole] = "searchText"; names[LangKeyIdRole] = "key"; return names; } void LanguageListModel::removeLocalLangs() { for (QList::iterator iter = m_datas.begin(); iter != m_datas.end();) { if (m_localLangs.contains(iter->text())) { iter = m_datas.erase(iter); continue; } ++iter; } } void LanguageListModel::setMetaData(const QList &data) { if (m_datas != data) { beginResetModel(); m_originalDatas = data; m_datas = data; removeLocalLangs(); endResetModel(); } } void LanguageListModel::setLocalLang(const QStringList &langs) { if (m_localLangs != langs) { beginResetModel(); m_localLangs = langs; m_datas = m_originalDatas; removeLocalLangs(); endResetModel(); } } } ================================================ FILE: src/plugin-datetime/operation/languagelistmodel.h ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef LANGUAGELISTMODEL_H #define LANGUAGELISTMODEL_H #include #include namespace dccV25 { class MetaData; class LanguageListModel : public QAbstractListModel { public: explicit LanguageListModel(QObject *parent = nullptr); virtual ~LanguageListModel(); enum LangItemRole { SearchTextRole = Qt::UserRole + 1, LangKeyIdRole }; public: int rowCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; QHash roleNames() const; void setMetaData(const QList &data); void setLocalLang(const QStringList &langs); protected: void removeLocalLangs(); private: QList m_datas; QList m_originalDatas; QStringList m_localLangs; }; } #endif // LANGUAGELISTMODEL_H ================================================ FILE: src/plugin-datetime/operation/qrc/datetime.qrc ================================================ icons/dcc_nav_datetime_42px.svg icons/dcc_nav_datetime_84px.svg texts/dcc_clock_white_16px.svg texts/dcc_noun_minute_16px.svg texts/dcc_noun_hour_16px.svg texts/dcc_clock_black_16px.svg texts/dcc_noun_second_16px.svg images/indicator_active.png images/timezone_map_big2.png images/timezone_map_big.png images/timezone_map_big@1x.svg images/timezone_map_big@2x.png images/popup_menu.css resource/Outfit-Light.ttf ================================================ FILE: src/plugin-datetime/operation/qrc/images/popup_menu.css ================================================ /** Used in class PopupMenu **/ QHeaderView, QHeaderView::section, QListCornerButton::section { background-color: transparent; } QListView { font-size: 12px; border: none; margin: 4px 0px; padding: 0px; background: transparent; /* make the selection span the entire width of the view */ show-decoration-selected: 0; } QListView::item { background: transparent; height: 24px; padding: 0px; margin: 0px; outline: none; border-bottom: 1px solid rgba(0, 0, 0, 0.05); } ================================================ FILE: src/plugin-datetime/operation/regionproxy.cpp ================================================ // SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "regionproxy.h" #include #include static const QDate CurrentDate(2024, 1, 1); static const QTime CurrentTime(1, 1, 1); class Format { enum Type { Date, Time }; public: virtual ~Format() = default; inline QStringList daysText() { return QStringList() << m_locale.dayName(Qt::Monday) << m_locale.dayName(Qt::Tuesday) << m_locale.dayName(Qt::Wednesday) << m_locale.dayName(Qt::Thursday) << m_locale.dayName(Qt::Friday) << m_locale.dayName(Qt::Saturday) << m_locale.dayName(Qt::Sunday); } inline QStringList shortDatesText() { return textFromFormat(Date, shortDateFormats()); } inline QStringList longDatesText() { return textFromFormat(Date, longDateFormats()); } inline QStringList shortTimesText() { return textFromFormat(Time, shortTimeFormats()); } inline QStringList longTimesText() { return textFromFormat(Time, longTimeFormats()); } virtual QStringList shortDateFormats() { return QStringList(); } virtual QStringList longDateFormats() { return QStringList(); } virtual QStringList shortTimeFormats() { return QStringList(); } virtual QStringList longTimeFormats() { return QStringList(); } void updateState(QDate date, QTime time, QLocale locale) { m_date = date; m_time = time; m_locale = locale; } private: QStringList textFromFormat(Type type, const QStringList &formats) { QStringList text; for (const QString &format : formats) type == Date ? text << m_locale.toString(m_date, format) : text << m_locale.toString(m_time, format); return text; } private: QDate m_date; QTime m_time; protected: QLocale m_locale; }; class DefaultFormat : public Format { public: virtual ~DefaultFormat() override { } virtual QStringList shortDateFormats() override { return { m_locale.dateFormat(QLocale::ShortFormat) }; } virtual QStringList longDateFormats() override { return { m_locale.dateFormat(QLocale::LongFormat) }; } virtual QStringList shortTimeFormats() override { return { m_locale.timeFormat(QLocale::ShortFormat) }; } virtual QStringList longTimeFormats() override { return { m_locale.timeFormat(QLocale::LongFormat) }; } }; class ChineseSimpliedFormat : public Format { public: virtual QStringList shortDateFormats() override { return { "yyyy/M/d", "yyyy-M-d", "yyyy.M.d", "yyyy/MM/dd", "yyyy-MM-dd", "yyyy.MM.dd", "yy/M/d", "yy-M-d", "yy.M.d" }; } virtual QStringList longDateFormats() override { return { "yyyy年M月d日", "yyyy年M月d日,dddd", "yyyy年M月d日 dddd", "dddd yyyy年M月d日" }; } virtual QStringList shortTimeFormats() override { return { "H:mm", "HH:mm", "AP h:mm", "AP hh:mm" }; } virtual QStringList longTimeFormats() override { return { "H:mm:ss", "HH:mm:ss", "AP h:mm:ss", "AP hh:mm:ss" }; } }; class UKFormat : public Format { public: virtual QStringList shortDateFormats() override { return { "dd/MM/yyyy", "dd/MM/yy", "d/M/yy", "d.M.yy", "yyyy-MM-dd" }; } virtual QStringList longDateFormats() override { return { "dd MMMM yyyy", "d MMMM yyyy", "dddd,d MMMM yyyy", "dddd, dd MMMM yyyy" }; } virtual QStringList shortTimeFormats() override { return { "HH:mm", "H:mm", "hh:mm AP", "h:mm AP" }; } virtual QStringList longTimeFormats() override { return { "HH:mm:ss", "H:mm:ss", "hh:mm:ss AP", "h:mm:ss AP" }; } }; class USAFormat : public Format { public: virtual QStringList shortDateFormats() override { return { "M/d/yyyy", "M/d/yy", "MM/dd/yy", "MM/dd/yyyy", "yy/MM/dd", "yyyy-MM-dd", "dd-MMM-yy" }; } virtual QStringList longDateFormats() override { return { "dddd, MMMM d, yyyy", "MMMM d, yyyy", "dddd, d MMMM, yyyy", "d MMMM, yyyy" }; } virtual QStringList shortTimeFormats() override { return { "h:mm Ap", "hh:mm Ap", "H:mm", "HH:mm" }; } virtual QStringList longTimeFormats() override { return { "h:mm:ss AP", "hh:mm:ss AP", "H:mm:ss", "HH:mm:ss" }; } }; class WorldFormat : public Format { public: virtual QStringList shortDateFormats() override { return { "dd/MM/yyyy", "d MMM yyyy" }; } virtual QStringList longDateFormats() override { return { "dddd, d MMMM yyyy", "d MMMM yyyy" }; } virtual QStringList shortTimeFormats() override { return { "H:mm AP", "HH:mm" }; } virtual QStringList longTimeFormats() override { return { "H:mm:ss AP", "HH:mm:ss" }; } }; RegionAvailableData RegionProxy::m_formatData = RegionAvailableData(); RegionAvailableData RegionProxy::m_allFormat = RegionAvailableData(); RegionAvailableData RegionProxy::m_defaultFormat = RegionAvailableData(); RegionAvailableData RegionProxy::m_customFormat = RegionAvailableData(); RegionProxy::RegionProxy(QObject *parent) : QObject(parent) , m_translatorLanguage(nullptr) , m_translatorCountry(nullptr) , m_isActive(false) { } // the locale even has sichuangYi. too many languages void RegionProxy::active() { if (m_isActive) { return; } m_isActive = true; m_translatorLanguage = new QTranslator(this); if (m_translatorLanguage->load(QLocale(), "datetime_language","_", TRANSLATE_READ_DIR)) { qApp->installTranslator(m_translatorLanguage); } m_translatorCountry = new QTranslator(this); if (m_translatorCountry->load(QLocale(), "datetime_country","_", TRANSLATE_READ_DIR)) { qApp->installTranslator(m_translatorCountry); } QList locales = QLocale::matchingLocales(QLocale::AnyLanguage, QLocale::AnyScript, QLocale::AnyCountry); locales.removeOne(QLocale::C); // NOTE: sorry for Sichuang friends locales.removeOne(QLocale::SichuanYi); QStringList countries; for (const auto &locale : locales) { QString script = locale.scriptToString(locale.script()); QString language = locale.languageToString(locale.language()); QString country = locale.territoryToString(locale.territory()); // NOTE: sorry for guangdong friends if (locale.language() == QLocale::Cantonese && locale.language() == QLocale::Chinese) { continue; } // NOTE: the region `World` is weird if (locale.territory() == QLocale::Territory::World) { continue; } if ((locale.territory() == QLocale::HongKong || locale.territory() == QLocale::Taiwan) && locale.language() == QLocale::Chinese) language = "Traditional Chinese"; if (locale.territory() == QLocale::China && locale.language() == QLocale::Chinese) language = "Simplified Chinese"; QString langCountry = QString("%1:%2").arg(language).arg(country); if (!countries.contains(country)) { countries << country; m_countries << country; } if (!m_regions.contains(langCountry)) m_regions.insert(langCountry, locale); } } RegionProxy::~RegionProxy() { } Regions RegionProxy::regions() const { return m_regions; } RegionFormat RegionProxy::systemRegionFormat() { return regionFormat(QLocale::system()); } QStringList RegionProxy::countries() const { return m_countries; } QString RegionProxy::systemCountry() const { QString country = QLocale::system().territoryToString(QLocale::system().territory()); return country; } QString RegionProxy::langCountry() const { QLocale locale = QLocale::system(); QString language = locale.languageToString(locale.language()); QString country = locale.territoryToString(locale.territory()); if ((locale.territory() == QLocale::HongKong || locale.territory() == QLocale::Taiwan) && locale.language() == QLocale::Chinese) language = "Traditional Chinese"; if (locale.territory() == QLocale::China && locale.language() == QLocale::Chinese) language = "Simplified Chinese"; QString langCountry = QString("%1:%2").arg(language).arg(country); return langCountry; } static inline QString replaceSpace(const QString &space) { QString sp; for (const QChar &c : space) { sp.append(c.isSpace() ? QChar(' ') : c); } return sp; } RegionFormat RegionProxy::regionFormat(const QLocale &locale) { RegionFormat regionFormat; regionFormat.firstDayOfWeekFormat = locale.firstDayOfWeek(); regionFormat.shortDateFormat = locale.dateFormat(QLocale::ShortFormat); regionFormat.longDateFormat = locale.dateFormat(QLocale::LongFormat); regionFormat.shortTimeFormat = locale.timeFormat(QLocale::ShortFormat); regionFormat.longTimeFormat = locale.timeFormat(QLocale::LongFormat); regionFormat.currencyFormat = locale.currencySymbol(QLocale::CurrencySymbol); // 如果是货币符号空就用 ¥ if (regionFormat.currencyFormat.isEmpty()) regionFormat.currencyFormat = QString::fromLocal8Bit("¥"); // 处理数字格式,确保数字使用拉丁数字显示 // 通过替换数字字符实现 // 同时保留原始的分隔符字符(包括特殊空格字符) QMap numberMap; for (int i = 1; i < 10; ++i) { QString number = locale.toString(i); numberMap.insert(QString::number(i), number); } QString regionNumberFormat = replaceSpace(locale.toString(123456789)); for (auto number : numberMap.keys()) { regionNumberFormat.replace(numberMap.value(number), number); } regionFormat.numberFormat = regionNumberFormat; regionFormat.digitgroupFormat = locale.groupSeparator(); regionFormat.paperFormat = "A4"; return regionFormat; } RegionAvailableData RegionProxy::allTextData(const QLocale &locale) { RegionAvailableData allTextData; allTextData += RegionProxy::defaultTextData(locale); allTextData += RegionProxy::customTextData(locale); m_allFormat.clear(); m_allFormat += m_defaultFormat; m_allFormat += m_customFormat; return allTextData; } RegionAvailableData RegionProxy::allFormat() { return m_allFormat; } RegionAvailableData RegionProxy::customTextData(const QLocale &locale) { Format *format = nullptr; if (locale.territory() == QLocale::China && locale.script() == QLocale::SimplifiedHanScript) { format = new ChineseSimpliedFormat(); } else if (locale.territory() == QLocale::UnitedKingdom && locale.language() == QLocale::English) { format = new UKFormat(); } else if (locale.territory() == QLocale::UnitedStates && locale.language() == QLocale::English) { format = new USAFormat(); } else if (locale.territory() == QLocale::World && locale.language() == QLocale::English) { format = new WorldFormat(); } else { return RegionAvailableData(); } QScopedPointer pFormat(format); pFormat->updateState(CurrentDate, CurrentTime, locale); RegionAvailableData textData; textData.daysAvailable = pFormat->daysText(); textData.shortDatesAvailable = pFormat->shortDatesText(); textData.longDatesAvailable = pFormat->longDatesText(); textData.shortTimesAvailable = pFormat->shortTimesText(); textData.longTimesAvailable = pFormat->longTimesText(); m_customFormat.daysAvailable = pFormat->daysText(); // TODO format m_customFormat.shortDatesAvailable = pFormat->shortDateFormats(); m_customFormat.longDatesAvailable = pFormat->longDateFormats(); m_customFormat.shortTimesAvailable = pFormat->shortTimeFormats(); m_customFormat.longTimesAvailable = pFormat->longTimeFormats(); return textData; } RegionAvailableData RegionProxy::defaultTextData(const QLocale &locale) { QScopedPointer defaultFormat(new DefaultFormat()); defaultFormat->updateState(CurrentDate, CurrentTime, locale); RegionAvailableData textData; textData.daysAvailable = defaultFormat->daysText(); textData.shortDatesAvailable = defaultFormat->shortDatesText(); textData.longDatesAvailable = defaultFormat->longDatesText(); textData.shortTimesAvailable = defaultFormat->shortTimesText(); textData.longTimesAvailable = defaultFormat->longTimesText(); m_defaultFormat.daysAvailable = defaultFormat->daysText(); // TODO format m_defaultFormat.shortDatesAvailable = defaultFormat->shortDateFormats(); m_defaultFormat.longDatesAvailable = defaultFormat->longDateFormats(); m_defaultFormat.shortTimesAvailable = defaultFormat->shortTimeFormats(); m_defaultFormat.longTimesAvailable = defaultFormat->longTimeFormats(); return textData; } QDebug operator<<(QDebug debug, const RegionFormat ®ionFormat) { debug << regionFormat.firstDayOfWeekFormat << regionFormat.shortDateFormat << regionFormat.longDateFormat << regionFormat.shortTimeFormat << regionFormat.longTimeFormat << regionFormat.currencyFormat << regionFormat.numberFormat << regionFormat.digitgroupFormat << regionFormat.paperFormat; return debug; } ================================================ FILE: src/plugin-datetime/operation/regionproxy.h ================================================ //SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef REGIONPROXY_H #define REGIONPROXY_H #include #include const QString localeName_key = "localeName"; const QString country_key = "country"; const QString languageRegion_key = "languageRegion"; const QString firstDayOfWeek_key = "firstDayOfWeek"; const QString shortDateFormat_key = "shortDateFormat"; const QString longDateFormat_key = "longDateFormat"; const QString shortTimeFormat_key = "shortTimeFormat"; const QString longTimeFormat_key = "longTimeFormat"; const QString currencyFormat_key = "currencyFormat"; const QString numberFormat_key = "numberFormat"; const QString digitgroupFormat_key = "digitgroupFormat"; const QString paperFormat_key = "paperFormat"; struct RegionFormat { int firstDayOfWeekFormat = 0; QString shortDateFormat; QString longDateFormat; QString shortTimeFormat; QString longTimeFormat; QString currencyFormat; QString numberFormat; QString digitgroupFormat; //groupSeparator; QString paperFormat; bool operator!=(const RegionFormat &other) { return !(*this == other); } bool operator==(const RegionFormat &other) { return (this->firstDayOfWeekFormat == other.firstDayOfWeekFormat) && (this->shortDateFormat == other.shortDateFormat) && (this->longDateFormat == other.longDateFormat) && (this->shortTimeFormat == other.shortTimeFormat) && (this->longTimeFormat == other.longTimeFormat) && (this->currencyFormat == other.currencyFormat) && (this->numberFormat == other.numberFormat) && (this->digitgroupFormat == other.digitgroupFormat) && (this->paperFormat == other.paperFormat); } }; QDebug operator<<(QDebug debug, const RegionFormat ®ionFormat); struct RegionAvailableData { QStringList daysAvailable; QStringList shortDatesAvailable; QStringList longDatesAvailable; QStringList shortTimesAvailable; QStringList longTimesAvailable; RegionAvailableData& operator+=(const RegionAvailableData &rhs) { for (QString element : rhs.daysAvailable) { if (daysAvailable.contains(element)) continue; daysAvailable << element; } for (QString element : rhs.shortDatesAvailable) { if (shortDatesAvailable.contains(element)) continue; shortDatesAvailable << element; } for (QString element : rhs.longDatesAvailable) { if (longDatesAvailable.contains(element)) continue; longDatesAvailable << element; } for (QString element : rhs.shortTimesAvailable) { if (shortTimesAvailable.contains(element)) continue; shortTimesAvailable << element; } for (QString element : rhs.longTimesAvailable) { if (longTimesAvailable.contains(element)) continue; longTimesAvailable << element; } return *this; } void clear() { daysAvailable.clear(); shortDatesAvailable.clear(); longDatesAvailable.clear(); shortTimesAvailable.clear(); longTimesAvailable.clear(); } }; using Regions = QMap; class QTranslator; class RegionProxy : public QObject { Q_OBJECT public: explicit RegionProxy(QObject *parent = nullptr); ~RegionProxy(); Regions regions() const; QStringList countries() const; QString systemCountry() const; QString langCountry() const; static RegionFormat regionFormat(const QLocale &locale); static RegionFormat systemRegionFormat(); static RegionAvailableData allTextData(const QLocale &locale); static RegionAvailableData allFormat(); void active(); bool isActive() { return m_isActive; } private: QStringList m_countries; Regions m_regions; QTranslator *m_translatorLanguage = nullptr; QTranslator *m_translatorCountry = nullptr; static RegionAvailableData m_formatData; static RegionAvailableData m_allFormat, m_defaultFormat, m_customFormat; static RegionAvailableData customTextData(const QLocale &locale); static RegionAvailableData defaultTextData(const QLocale &locale); bool m_isActive; }; #endif // REGIONPROXY_H ================================================ FILE: src/plugin-datetime/operation/timezoneMap/timezone.cpp ================================================ // SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "timezone.h" #ifndef _GNU_SOURCE # define _GNU_SOURCE /* For tm_gmtoff and tm_zone */ #endif #include #include #include #include #include #include #include namespace installer { namespace { const QString tzDirPath = std::visit([] { QString tzDirPath = "/usr/share/zoneinfo"; if (qEnvironmentVariableIsSet("TZDIR")) tzDirPath = qEnvironmentVariable("TZDIR"); return tzDirPath; }); #if USE_DEEPIN_ZONE const QString kZoneTabFileDeepin = QStringLiteral(DEEPIN_TIME_ZONE_PATH); const QString kZoneTabFile = std::visit([] { if (QFile(kZoneTabFileDeepin).exists()) { return kZoneTabFileDeepin; } return tzDirPath + "/zone1970.tab"; }); #else // Absolute path to zone.tab file. const QString kZoneTabFile = std::visit([] { return tzDirPath + "/zone1970.tab"; }); #endif // Absolute path to backward timezone file. const char kTimezoneAliasFile[] = "/timezone_alias"; // Domain name for timezones. const char kTimezoneDomain[] = "deepin-installer-timezones"; // Parse latitude and longitude of the zone's principal location. // See https://en.wikipedia.org/wiki/List_of_tz_database_time_zones. // |pos| is in ISO 6709 sign-degrees-minutes-seconds format, // either +-DDMM+-DDDMM or +-DDMMSS+-DDDMMSS. // |digits| 2 for latitude, 3 for longitude. double ConvertPos(const QString &pos, int digits) { if (pos.length() < 4 || digits > 9) { return 0.0; } const QString integer = pos.left(digits + 1); const QString fraction = pos.mid(digits + 1); const double t1 = integer.toDouble(); const double t2 = fraction.toDouble(); if (t1 > 0.0) { return t1 + t2 / pow(10.0, fraction.length()); } else { return t1 - t2 / pow(10.0, fraction.length()); } } } // namespace [[maybe_unused]] bool ZoneInfoDistanceComp(const ZoneInfo &a, const ZoneInfo &b) { return a.distance < b.distance; } QDebug &operator<<(QDebug &debug, const ZoneInfo &info) { debug << "ZoneInfo {" << "cc:" << info.country << "tz:" << info.timezone << "lat:" << info.latitude << "lng:" << info.longitude << "}"; return debug; } static QString ReadFile(const QString &path) { QFile file(path); if (file.exists()) { if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { qDebug() << "ReadFile() failed to open" << path; return ""; } QTextStream text_stream(&file); QString str = text_stream.readAll(); file.close(); return str; } else { qDebug() << "ReadFileContent() file not found: " << path; return ""; } } ZoneInfoList GetZoneInfoList() { ZoneInfoList list; const QString content(ReadFile(kZoneTabFile)); for (const QString &line : content.split('\n')) { if (!line.startsWith('#')) { const QStringList parts(line.split('\t')); // Parse latitude and longitude. if (parts.length() >= 3) { const QString coordinates = parts.at(1); int index = coordinates.indexOf('+', 3); if (index == -1) { index = coordinates.indexOf('-', 3); } Q_ASSERT(index > -1); const double latitude = ConvertPos(coordinates.left(index), 2); const double longitude = ConvertPos(coordinates.mid(index), 3); const ZoneInfo zone_info = { parts.at(0), parts.at(2), latitude, longitude, 0.0 }; list.append(zone_info); } } } return list; } [[maybe_unused]] int GetZoneInfoByCountry(const ZoneInfoList &list, const QString &country) { int index = -1; for (const ZoneInfo &info : list) { index++; if (info.country == country) { return index; } } return -1; } int GetZoneInfoByZone(const ZoneInfoList &list, const QString &timezone) { int index = -1; for (const ZoneInfo &info : list) { index++; if (info.timezone == timezone) { return index; } } return -1; } QString GetCurrentTimezone() { const QString content(ReadFile("/etc/timezone")); return content.trimmed(); } [[maybe_unused]] QString GetTimezoneName(const QString &timezone) { const int index = timezone.lastIndexOf('/'); return (index > -1) ? timezone.mid(index + 1) : timezone; } QString GetLocalTimezoneName(const QString &timezone, const QString &locale) { // Set locale first. (void)setlocale(LC_ALL, QString(locale + ".UTF-8").toStdString().c_str()); const QString local_name(dgettext(kTimezoneDomain, timezone.toStdString().c_str())); int index = local_name.lastIndexOf('/'); if (index == -1) { // Some translations of locale name contains non-standard char. index = local_name.lastIndexOf("∕"); } // Default locale used in program. const char kDefaultLocale[] = "en_US.UTF-8"; // Reset locale. (void)setlocale(LC_ALL, kDefaultLocale); return (index > -1) ? local_name.mid(index + 1) : local_name; } [[maybe_unused]] TimezoneAliasMap GetTimezoneAliasMap() { TimezoneAliasMap map; const QString content = ReadFile(kTimezoneAliasFile); for (const QString &line : content.split('\n')) { if (!line.isEmpty()) { const QStringList parts = line.split(':'); Q_ASSERT(parts.length() == 2); if (parts.length() == 2) { map.insert(parts.at(0), parts.at(1)); } } } return map; } [[maybe_unused]] bool IsValidTimezone(const QString &timezone) { // Ignores empty timezone. if (timezone.isEmpty()) { return false; } #if USE_DEEPIN_ZONE if (kZoneTabFile == kZoneTabFileDeepin && QFile(kZoneTabFile).exists()) { return true; } #endif // If |filepath| is a file or a symbolic link to file, it is a valid timezone. const QString filepath(tzDirPath + QDir::separator() + timezone); return QFile::exists(filepath); } [[maybe_unused]] TimezoneOffset GetTimezoneOffset(const QString &timezone) { const char *kTzEnv = "TZ"; const char *old_tz = getenv(kTzEnv); setenv(kTzEnv, timezone.toStdString().c_str(), 1); struct tm tm; const time_t curr_time = time(nullptr); // Call tzset() before localtime_r(). Set tzset(3). tzset(); (void)localtime_r(&curr_time, &tm); // Reset timezone. if (old_tz) { setenv(kTzEnv, old_tz, 1); } else { unsetenv(kTzEnv); } const TimezoneOffset offset = { tm.tm_zone, tm.tm_gmtoff }; return offset; } } // namespace installer ================================================ FILE: src/plugin-datetime/operation/timezoneMap/timezone.h ================================================ // SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef INSTALLER_SYSINFO_TIMEZONE_H #define INSTALLER_SYSINFO_TIMEZONE_H #include #include namespace installer { struct ZoneInfo { public: QString country; QString timezone; // Coordinates of zone. double latitude; double longitude; // Distance to clicked point for comparison. double distance; }; [[maybe_unused]] bool ZoneInfoDistanceComp(const ZoneInfo &a, const ZoneInfo &b); QDebug &operator<<(QDebug &debug, const ZoneInfo &info); typedef QList ZoneInfoList; // Read available timezone info in zone.tab file. ZoneInfoList GetZoneInfoList(); // Find ZoneInfo based on |country| or |timezone|. // Returns -1 if not found. [[maybe_unused]] int GetZoneInfoByCountry(const ZoneInfoList &list, const QString &country); int GetZoneInfoByZone(const ZoneInfoList &list, const QString &timezone); // Read current timezone in /etc/timezone file. QString GetCurrentTimezone(); // Returns name of timezone, excluding continent name. [[maybe_unused]] QString GetTimezoneName(const QString &timezone); // Returns local name of timezone, excluding continent name. // |locale| is desired locale name. QString GetLocalTimezoneName(const QString &timezone, const QString &locale); // A map between old name of timezone and current name. // e.g. Asia/Chongqing -> Asia/Shanghai typedef QHash TimezoneAliasMap; [[maybe_unused]] TimezoneAliasMap GetTimezoneAliasMap(); // Validate |timezone|. [[maybe_unused]] bool IsValidTimezone(const QString &timezone); struct TimezoneOffset { QString name; // Offset name, like CST. long seconds; // Offset seconds. }; // Get |timezone| offset. [[maybe_unused]] TimezoneOffset GetTimezoneOffset(const QString &timezone); } // namespace installer #endif // INSTALLER_SYSINFO_TIMEZONE_H ================================================ FILE: src/plugin-datetime/operation/timezoneMap/timezone_map_util.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "timezone_map_util.h" #include namespace installer { namespace { // From gnome-control-center. double radians(double degrees) { return (degrees / 360.0) * M_PI * 2; } } // namespace double ConvertLatitudeToY(double latitude) { const double bottom_lat = -59; const double top_lat = 81; const double full_range = 4.6068250867599998; double top_per, y, top_offset, map_range; top_per = top_lat / 180.0; y = 1.25 * log(tan(M_PI_4 + 0.4 * radians(latitude))); top_offset = full_range * top_per; map_range = fabs(1.25 * log(tan(M_PI_4 + 0.4 * radians(bottom_lat))) - top_offset); y = fabs(y - top_offset); y = y / map_range; return y; } double ConvertLongitudeToX(double longitude) { const double xdeg_offset = -6; return ((180.0 + longitude) / 360.0 + xdeg_offset / 180.0); } ZoneInfoList GetNearestZones(const ZoneInfoList& total_zones, double threshold, int x, int y, int map_width, int map_height) { ZoneInfoList zones; double minimum_distance = map_width * map_width + map_height * map_height; int nearest_zone_index = -1; for (int index = 0; index < total_zones.length(); index++) { const ZoneInfo& zone = total_zones.at(index); const double point_x = ConvertLongitudeToX(zone.longitude) * map_width; const double point_y = ConvertLatitudeToY(zone.latitude) * map_height; const double dx = point_x - x; const double dy = point_y - y; const double distance = dx * dx + dy * dy; if (distance < minimum_distance) { minimum_distance = distance; nearest_zone_index = index; } if (distance <= threshold) { zones.append(zone); } } // Get the nearest zone. if (zones.isEmpty()) { zones.append(total_zones.at(nearest_zone_index)); } return zones; } } // namespace installer ================================================ FILE: src/plugin-datetime/operation/timezoneMap/timezone_map_util.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef INSTALLER_DELEGATES_TIMEZONE_MAP_UTIL_H #define INSTALLER_DELEGATES_TIMEZONE_MAP_UTIL_H #include "timezone.h" namespace installer { // Convert position of zone from polar coordinates to rectangular coordinates. double ConvertLatitudeToY(double latitude); double ConvertLongitudeToX(double longitude); // Get a list of zone info whose distance to (x, y) is less than |threshold| // in a world map with size (map_width, map_height). ZoneInfoList GetNearestZones(const ZoneInfoList& total_zones, double threshold, int x, int y, int map_width, int map_height); } // namespace installer #endif // INSTALLER_DELEGATES_TIMEZONE_MAP_UTIL_H ================================================ FILE: src/plugin-datetime/operation/zoneinfo.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "zoneinfo.h" ZoneInfo::ZoneInfo() : m_utcOffset(0) , i2(0) , i3(0) , i4(0) { } QDebug operator<<(QDebug argument, const ZoneInfo &info) { argument << QString("ZoneInfo("); argument << info.m_zoneName << "," << info.m_zoneCity << "," << info.m_utcOffset; argument << ",("; argument << info.i2 << "," << info.i3 << "," << info.i4; argument << "))"; return argument; } QDBusArgument &operator<<(QDBusArgument &argument, const ZoneInfo &info) { argument.beginStructure(); argument << info.m_zoneName << info.m_zoneCity << info.m_utcOffset; argument.beginStructure(); argument << info.i2 << info.i3 << info.i4; argument.endStructure(); argument.endStructure(); return argument; } QDataStream &operator<<(QDataStream &argument, const ZoneInfo &info) { argument << info.m_zoneName << info.m_zoneCity << info.m_utcOffset; argument << info.i2 << info.i3 << info.i4; return argument; } const QDBusArgument &operator>>(const QDBusArgument &argument, ZoneInfo &info) { argument.beginStructure(); argument >> info.m_zoneName >> info.m_zoneCity >> info.m_utcOffset; argument.beginStructure(); argument >> info.i2 >> info.i3 >> info.i4; argument.endStructure(); argument.endStructure(); return argument; } const QDataStream &operator>>(QDataStream &argument, ZoneInfo &info) { argument >> info.m_zoneName >> info.m_zoneCity >> info.m_utcOffset; argument >> info.i2 >> info.i3 >> info.i4; return argument; } bool ZoneInfo::operator==(const ZoneInfo &what) const { return m_zoneName == what.m_zoneName && m_zoneCity == what.m_zoneCity && m_utcOffset == what.m_utcOffset && i2 == what.i2 && i3 == what.i3 && i4 == what.i4; } void registerZoneInfoMetaType() { qRegisterMetaType("ZoneInfo"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-datetime/operation/zoneinfo.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef ZONEINFO_H #define ZONEINFO_H #include #include #include #include #include class ZoneInfo { Q_GADGET Q_PROPERTY(QString zoneName READ getZoneName) Q_PROPERTY(QString city READ getZoneCity) Q_PROPERTY(int utcOffset READ getUTCOffset) public: ZoneInfo(); friend QDebug operator<<(QDebug argument, const ZoneInfo &info); friend QDBusArgument &operator<<(QDBusArgument &argument, const ZoneInfo &info); friend QDataStream &operator<<(QDataStream &argument, const ZoneInfo &info); friend const QDBusArgument &operator>>(const QDBusArgument &argument, ZoneInfo &info); friend const QDataStream &operator>>(QDataStream &argument, ZoneInfo &info); bool operator==(const ZoneInfo &what) const; public: inline QString getZoneName() const { return m_zoneName; } inline QString getZoneCity() const { return m_zoneCity; } inline int getUTCOffset() const { return m_utcOffset; } QString getUtcOffsetText() const { QString gmData; int utcOff = m_utcOffset / 3600; if (utcOff >= 0) { gmData = QString("(UTC+%1:%2)").arg(utcOff, 2, 10, QLatin1Char('0')).arg(m_utcOffset % 3600 / 60, 2, 10, QLatin1Char('0')); } else { gmData = QString("(UTC%1:%2)").arg(utcOff, 3, 10, QLatin1Char('0')).arg(m_utcOffset % 3600 / 60, 2, 10, QLatin1Char('0')); } return gmData; } private: QString m_zoneName; QString m_zoneCity; int m_utcOffset; qint64 i2; qint64 i3; int i4; }; Q_DECLARE_METATYPE(ZoneInfo) void registerZoneInfoMetaType(); #endif // ZONEINFO_H ================================================ FILE: src/plugin-datetime/operation/zoneinfomodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "zoneinfomodel.h" #include "datetimemodel.h" namespace dccV25 { UserTimezoneModel::UserTimezoneModel(QObject *parent) : QAbstractListModel(parent) { } UserTimezoneModel::~UserTimezoneModel() { } int UserTimezoneModel::rowCount(const QModelIndex &) const { DatetimeModel *sourceMode = dynamic_cast(parent()); if (!sourceMode) return 0; auto zones = sourceMode->userTimeZones(); return zones.count(); } QVariant UserTimezoneModel::data(const QModelIndex &index, int role) const { DatetimeModel *sourceMode = dynamic_cast(parent()); if (!sourceMode) return QVariant(); auto zones = sourceMode->userTimeZones(); if (!index.isValid() || index.row() >= zones.size()) return QVariant(); const auto &zoneInfo = zones.value(index.row()); const QString &zoneId = zoneInfo.getZoneName(); const QString &zoneDisplay = sourceMode->zoneDisplayName(zoneId); const QString &description = sourceMode->timeZoneDescription(zoneInfo); switch (role) { case Qt::DisplayRole: return zoneDisplay; // (UTC+08:00)上海 case DescriptionRole: return description; // xxx hours earlier/later than local case ZoneIdRole: return zoneId; // Asia/Shanghai case ShiftRole: return zoneInfo.getUTCOffset() / 3600; default: break; } return QVariant(); } QHash UserTimezoneModel::roleNames() const { QHash names = QAbstractListModel::roleNames(); names[DescriptionRole] = "description"; names[ShiftRole] = "shift"; names[ZoneIdRole] = "zoneId"; return names; } void UserTimezoneModel::reset() { beginResetModel(); endResetModel(); } /////////////////////////////////////////////// ZoneInfoModel::ZoneInfoModel(QObject *parent) :QAbstractListModel(parent) { } ZoneInfoModel::~ZoneInfoModel() { } int ZoneInfoModel::rowCount(const QModelIndex &) const { DatetimeModel *sourceMode = dynamic_cast(parent()); if (!sourceMode) return 0; auto list = sourceMode->zoneIdList(); return list.size(); } QVariant ZoneInfoModel::data(const QModelIndex &index, int role) const { DatetimeModel *sourceMode = dynamic_cast(parent()); if (!sourceMode) return QVariant(); auto list = sourceMode->zoneIdList(); if (!index.isValid() || index.row() >= list.size()) return QVariant(); const QString &zoneId = list.value(index.row()); // "Asia/Shanghai" const QString &zoneDisplay = sourceMode->zoneDisplayName(zoneId); // (UTC+08:00)上海 switch (role) { case Qt::DisplayRole: return zoneDisplay; // (UTC+08:00)上海 case SearchTextRole: return zoneDisplay + zoneId; // + (UTC+08:00)上海 Asia/Shanghai case ZoneIdRole: return zoneId; // Asia/Shanghai case CityNameRole: return zoneDisplay.mid(zoneDisplay.indexOf(" ") + 1); // 上海 default: break; } return QVariant(); } QHash ZoneInfoModel::roleNames() const { QHash names = QAbstractListModel::roleNames(); names[SearchTextRole] = "searchText"; names[ZoneIdRole] = "zoneId"; names[CityNameRole] = "cityName"; return names; } } // namespace dccV25 ================================================ FILE: src/plugin-datetime/operation/zoneinfomodel.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef ZONEINFOMODEL_H #define ZONEINFOMODEL_H #include #include namespace dccV25 { class UserTimezoneModel : public QAbstractListModel { public: explicit UserTimezoneModel(QObject *parent = nullptr); virtual ~UserTimezoneModel(); enum UserTimezoneRole { DescriptionRole = Qt::UserRole + 1, ShiftRole, ZoneIdRole }; // QAbstractItemModel interface int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override; void reset(); }; class ZoneInfoModel : public QAbstractListModel { Q_OBJECT public: explicit ZoneInfoModel(QObject *parent = nullptr); virtual ~ZoneInfoModel(); enum ZoneInfoRole { SearchTextRole = Qt::UserRole + 1, ZoneIdRole, CityNameRole }; Q_ENUM(ZoneInfoRole) // QAbstractItemModel interface int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override; }; } // namespace dccV25 #endif // ZONEINFOMODEL_H ================================================ FILE: src/plugin-datetime/qml/ComboLabel.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 Item { id: item property var comboModel: [""] property int comboCurrentIndex: -1 property bool isDecimalSymbol: false property bool isDigitGroupingSymbol: false // property string textRole implicitHeight: 30 implicitWidth: 280 signal comboBoxActivated(int index) // 获取过滤后的模型数据 function getFilteredModel() { if (!dccData) { return item.comboModel } if (item.isDecimalSymbol) { return dccData.getFilteredDecimalSymbols() } else if (item.isDigitGroupingSymbol) { return dccData.getFilteredSeparatorSymbols() } return item.comboModel } // 将过滤后模型的索引转换为原始模型的索引 function getOriginalIndex(filteredIndex) { if (!dccData || (!item.isDecimalSymbol && !item.isDigitGroupingSymbol)) { return filteredIndex } var filteredModel = getFilteredModel() var originalModel = item.comboModel if (filteredIndex < 0 || filteredIndex >= filteredModel.length) { return -1 } var selectedValue = filteredModel[filteredIndex] return originalModel.indexOf(selectedValue) } RowLayout { anchors.fill: parent ComboBox { id: comboBox visible: item.comboModel.length > 1 flat: true Layout.fillWidth: true Layout.rightMargin: 10 model: getFilteredModel() currentIndex: { if (!dccData || (!item.isDecimalSymbol && !item.isDigitGroupingSymbol)) { return comboCurrentIndex } // 对于过滤模型,需要将原始索引转换为过滤后的索引 if (comboCurrentIndex >= 0 && comboCurrentIndex < item.comboModel.length) { var currentValue = item.comboModel[comboCurrentIndex] var filteredModel = getFilteredModel() return filteredModel.indexOf(currentValue) } return -1 } hoverEnabled: true Layout.alignment: Qt.AlignRight | Qt.AlignVCenter onActivated: function (index) { // 如果使用了过滤模型,需要转换索引 var originalIndex = getOriginalIndex(index) item.comboBoxActivated(originalIndex) } // 监听符号变化,实时更新模型 Connections { target: dccData function onSymbolChanged(format, symbol) { // 当小数点或分隔符符号变化时,更新下拉列表 if ((format === 9 && item.isDigitGroupingSymbol) || // DecimalSymbol changed, update separator list (format === 10 && item.isDecimalSymbol)) { // DigitGroupingSymbol changed, update decimal list var newModel = getFilteredModel() comboBox.model = newModel } } } } Label { id: label visible: item.comboModel.length === 1 text: item.comboModel[0] Layout.fillWidth: true Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.rightMargin: 10 horizontalAlignment: Text.AlignRight } } } ================================================ FILE: src/plugin-datetime/qml/DateTimeSettingDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Window import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS D.DialogWindow { id: ddialog width: Math.max(360, gridLayout.implicitWidth) height: 252 minimumWidth: width minimumHeight: height maximumWidth: minimumWidth maximumHeight: minimumHeight icon: "preferences-system" modality: Qt.WindowModal property date currentDate: new Date() component SpinboxTextInput: TextInput { property var spinbox: parent text: spinbox.displayText font: D.DTK.fontManager.t6 color: spinbox.palette.text selectionColor: spinbox.palette.highlight selectedTextColor: spinbox.palette.highlightedText horizontalAlignment: Qt.AlignLeft verticalAlignment: Qt.AlignVCenter leftPadding: DS.Style.spinBox.spacing readOnly: !spinbox.editable validator: spinbox.validator inputMethodHints: spinbox.inputMethodHints selectByMouse: spinbox.editable onActiveFocusChanged: { if (!activeFocus) { if (text === "") { text = spinbox.value } else if (parseInt(text) < spinbox.from) { text = spinbox.from } else if (parseInt(text) > spinbox.to) { text = spinbox.to } else { spinbox.value = parseInt(text) } } } onTextEdited: { if (text === "") return; let value = parseInt(text); if (spinbox.from > 0 && text.length === 1 && text === "0") { text = ""; return; } if (value > spinbox.to) { text = text.substring(0, text.length - 1); return; } let minDigits = Math.floor(Math.log10(spinbox.from)) + 1; let maxDigits = Math.floor(Math.log10(spinbox.to)) + 1; let currentLength = text.length; let minPossible; if (currentLength >= minDigits) { minPossible = value; } else { minPossible = parseInt(text + "0".repeat(minDigits - currentLength)); } let maxPossible; if (currentLength >= maxDigits) { maxPossible = value; } else { maxPossible = parseInt(text + "9".repeat(maxDigits - currentLength)); } let isValid = (minPossible <= spinbox.to && maxPossible >= spinbox.from); if (!isValid) { text = text.substring(0, text.length - 1); } else if (value >= spinbox.from && value <= spinbox.to) { spinbox.value = value; } } } function getDaysInMonth(year, month) { return new Date(year, month, 0).getDate() } function updateDateMax() { spDay.to = getDaysInMonth(spYear.value, spMonth.value) } ColumnLayout { spacing: 0 anchors.fill: parent Label { Layout.alignment: Qt.AlignHCenter Layout.bottomMargin: 20 padding: 0 font.family: D.DTK.fontManager.t5.family font.pixelSize: D.DTK.fontManager.t5.pixelSize text: qsTr("Date and time setting") } GridLayout { id: gridLayout Layout.fillWidth: true Layout.leftMargin: 6 Layout.rightMargin: 10 columns: 4 rowSpacing: 20 columnSpacing: 10 Label { font: D.DTK.fontManager.t6 text: qsTr("Date") Layout.alignment: Qt.AlignLeft Layout.rightMargin: 6 horizontalAlignment: Text.AlignLeft } SpinboxEx { id: spYear unitText: qsTr("Year") locale: Qt.locale("C") from: 1990 to: 2090 wrap: true Layout.fillWidth: true value: currentDate.getFullYear() onValueChanged: { ddialog.updateDateMax() yearTextInput.text = value } Component.onCompleted: { let year = currentDate.getFullYear() spYear.from = year - 30 spYear.to = year + 30 } contentItem: SpinboxTextInput { id: yearTextInput spinbox: spYear } } SpinboxEx { id: spMonth unitText: qsTr("Month") from: 1 to: 12 wrap: true Layout.fillWidth: true value: currentDate.getMonth() + 1 // // January gives 0 onValueChanged: { ddialog.updateDateMax() monthTextInput.text = value } contentItem: SpinboxTextInput { id: monthTextInput spinbox: spMonth } } SpinboxEx { id: spDay unitText: qsTr("Day") from: 1 to: 31 wrap: true Layout.fillWidth: true value: currentDate.getDate() onValueChanged: { dayTextInput.text = value } contentItem: SpinboxTextInput { id: dayTextInput spinbox: spDay } } Label { font: D.DTK.fontManager.t6 text: qsTr("Time") Layout.alignment: Qt.AlignLeft Layout.rightMargin: 6 horizontalAlignment: Text.AlignLeft } SpinboxEx { id: spHour from: 0 to: 23 wrap: true Layout.fillWidth: true value: currentDate.getHours() onValueChanged: { hourTextInput.text = value } contentItem: SpinboxTextInput { id: hourTextInput spinbox: spHour } } SpinboxEx { id: spMin from: 0 to: 59 wrap: true Layout.fillWidth: true value: currentDate.getMinutes() onValueChanged: { minTextInput.text = value } contentItem: SpinboxTextInput { id: minTextInput spinbox: spMin } } } RowLayout { Layout.alignment: Qt.AlignHCenter Layout.bottomMargin: 6 Layout.topMargin: 20 spacing: 10 Button { Layout.fillWidth: true text: qsTr("Cancel") font: D.DTK.fontManager.t6 onClicked: { ddialog.close() } } Button { Layout.fillWidth: true text: qsTr("Confirm") font: D.DTK.fontManager.t6 highlighted: true onClicked: { let dateTime = currentDate dateTime.setFullYear(spYear.value) dateTime.setMonth(spMonth.value - 1) dateTime.setDate(spDay.value) dateTime.setHours(spHour.value) dateTime.setMinutes(spMin.value) dateTime.setSeconds(0) dccData.setDateTime(dateTime) ddialog.close() } } } } } ================================================ FILE: src/plugin-datetime/qml/Datetime.qml ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { name: "datetime" parentName: "system" displayName: qsTr("Time and date") description: qsTr("Time and date, time zone settings") icon: "dcc_time_date" weight: 40 } ================================================ FILE: src/plugin-datetime/qml/DatetimeMain.qml ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import QtQuick 2.15 import org.deepin.dcc 1.0 TimeAndDate { DccObject { id: langAndFormat name: "langAndFormat" parentName: "system" displayName: qsTr("Language and region") description: qsTr("System language, regional formats") icon: "dcc_lang_format" weight: 45 visible: false DccDBusInterface { property var locales service: "org.deepin.dde.LangSelector1" path: "/org/deepin/dde/LangSelector1" inter: "org.deepin.dde.LangSelector1" connection: DccDBusInterface.SessionBus onLocalesChanged: langAndFormat.visible = true } LangAndFormat {} } } ================================================ FILE: src/plugin-datetime/qml/LangAndFormat.qml ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 import QtQml.Models // 语言和区域 DccObject { id: langAndFormat property int localeStateChanged: 0 property int localeStateChanging: 1 // 正在设置语言 property int localeStateSetLang: 1 << 1 // 正在locale-gen property int localeStateGenLocale: 1 << 2 property color textColor: DTK.themeType === ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.9) : Qt.rgba(1, 1, 1, 0.9) FontMetrics { id: fm } // 语言列表抬头 DccObject { id: languageListTiltle property bool isEditing: false name: "languageListTiltle" parentName: "langAndFormat" displayName: qsTr("Language") weight: 10 pageType: DccObject.Item page: RowLayout { Label { Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter Layout.leftMargin: 12 text: dccObj.displayName font.pixelSize: DTK.fontManager.t5.pixelSize font.weight: 500 color: langAndFormat.textColor } Button { id: button checkable: true visible: langRepeater.count > 1 font.pixelSize: DTK.fontManager.t8.pixelSize checked: languageListTiltle.isEditing Layout.alignment: Qt.AlignRight | Qt.AlignVCenter text: languageListTiltle.isEditing ? qsTr("done") : qsTr("edit") background: null enabled: dccData.langState === 0 textColor: Palette { normal { common: DTK.makeColor(Color.Highlight) crystal: DTK.makeColor(Color.Highlight) } } onCheckedChanged: { languageListTiltle.isEditing = button.checked } } } onParentItemChanged: item => { if (item) { item.bottomPadding = 5 item.rightPadding = 2 } } // 语言列表项 DccObject { id: languageList name: "languageList" parentName: "langAndFormat" weight: 20 pageType: DccObject.Item page: DccGroupView { Component.onCompleted: { dccData.ensureLangModel() } } onParentItemChanged: item => { if (item) { item.topPadding = 5 item.bottomPadding = 3 item.rightPadding = 0 } } DccRepeater { id: langRepeater model: dccData.langList delegate: DccObject { name: "languageItem" + index parentName: "languageList" displayName: modelData weight: 20 + 10 * (index + 1) backgroundType: DccObject.Normal pageType: DccObject.Item enabled: dccData.langState === 0 // language set finished page: ItemDelegate { id: itemDelegate property bool isCurrentLang: dccData.currentLang === dccObj.displayName property bool isLoading: itemDelegate.isCurrentLang && !dccObj.enabled && (dccData.langState & langAndFormat.localeStateSetLang) visible: dccObj hoverEnabled: true implicitHeight: 40 icon.name: dccObj.icon checkable: false activeFocusOnTab: true Loader { id: langNameLoader property string text: dccObj.displayName property bool shouldSplit: text.split("-").length === 2 anchors { left: itemDelegate.left leftMargin: 12 top: itemDelegate.top topMargin: (itemDelegate.height - height) / 2 right: removeButton.left rightMargin: 6 } clip: true sourceComponent: shouldSplit ? splitComponent : singleComponent Component { id: singleComponent Label { text: langNameLoader.text elide: Text.ElideRight font: DTK.fontManager.t6 width: parent.width HoverHandler { id: hhSingle } ToolTip.visible: hhSingle.hovered && fm.advanceWidth(langNameLoader.text) > width ToolTip.text: langNameLoader.text ToolTip.delay: 500 ToolTip.timeout: 4000 } } Component { id: splitComponent RowLayout { spacing: 0 Layout.fillWidth: true width: parent.width HoverHandler { id: hhSplit } ToolTip.visible: hhSplit.hovered && fm.advanceWidth(langNameLoader.text) > width ToolTip.text: langNameLoader.text ToolTip.delay: 500 ToolTip.timeout: 4000 Label { text: langNameLoader.text.split("-")[0] || "" font: DTK.fontManager.t6 } Label { text: "-" font: DTK.fontManager.t6 } Label { text: langNameLoader.text.split("-")[1] || "" font: DTK.fontManager.t6 Layout.fillWidth: true horizontalAlignment: Text.AlignLeft elide: Text.ElideRight } } } } IconButton { id: removeButton visible: !itemDelegate.isLoading && ( (itemDelegate.isCurrentLang && dccObj.enabled) || languageListTiltle.isEditing || (itemDelegate.isCurrentLang && regionAndFormat.localeGenRunning)) icon.name: itemDelegate.isCurrentLang ? "item_checked" : "list_delete" icon.width: 16 icon.height: 16 implicitWidth: 36 implicitHeight: 36 hoverEnabled: false anchors { right: itemDelegate.right top: itemDelegate.top topMargin: (itemDelegate.height - removeButton.height) / 2 } background: null onClicked: { if (!languageListTiltle.isEditing || itemDelegate.isCurrentLang) return dccData.deleteLang(dccObj.displayName) } } Loader { active: itemDelegate.isLoading anchors { right: itemDelegate.right rightMargin: 10 verticalCenter: itemDelegate.verticalCenter } sourceComponent: BusyIndicator { running: visible implicitWidth: 20 implicitHeight: 20 } } background: DccItemBackground { separatorVisible: true } onClicked: { if (languageListTiltle.isEditing) return dccData.setCurrentLang(dccObj.displayName) } } } } } } // 其他语言列表 + DccObject { name: "otherLanguagesTitle" parentName: "langAndFormat" weight: 30 pageType: DccObject.Item page: DccGroupView {} onParentItemChanged: item => { if (item) item.topPadding = 3 } DccObject { name: "langItem0" parentName: "otherLanguagesTitle" displayName: qsTr("Other languages") weight: 10 backgroundType: DccObject.Normal pageType: DccObject.Editor page: Button { implicitWidth: fm.advanceWidth(text) + fm.averageCharacterWidth * 2 implicitHeight: 30 text: qsTr("add") LangsChooserDialog { id: dialogLoader viewModel: dccData.langSearchModel() onSelectedLang: function (lang) { dccData.addLang(lang) } } onClicked: { dialogLoader.active = true languageListTiltle.isEditing = false } } onParentItemChanged: item => { if (item) { item.implicitHeight = 40 item.leftPadding = 7 item.rightPadding = 11 } } } } // 区域格式抬头 DccObject { name: "regionlistTitle" parentName: "langAndFormat" displayName: qsTr("Region") weight: 40 pageType: DccObject.Item page: RowLayout { Label { Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter Layout.leftMargin: 12 text: dccObj.displayName font.pixelSize: DTK.fontManager.t5.pixelSize font.weight: 500 color: langAndFormat.textColor } } onParentItemChanged: item => { if (item) item.topPadding = 10 } } // 地区 DccObject { name: "regions" parentName: "langAndFormat" weight: 45 displayName: qsTr("Area") description: qsTr("Operating system and applications may provide you with local content based on your country and region") backgroundType: DccObject.Normal pageType: DccObject.Editor page: Item { implicitWidth: rowlayout.implicitWidth implicitHeight: rowlayout.implicitHeight RowLayout { id: rowlayout Label { id: regionLabel text: dccData.region } IconLabel { id: regionIcon Layout.alignment: Qt.AlignRight | Qt.AlignHCenter icon.name: "arrow_ordinary_down" icon.palette: DTK.makeIconPalette(regionLabel.palette) } } MouseArea { id: mouseArea anchors.fill: parent focus: true RegionsChooserWindow { id: regionWndow viewModel: dccData.regionSearchModel() currentIndex: dccData.currentRegionIndex currentText: dccData.region onSelectedRegion: function (region) { regionLabel.text = region dccData.setRegion(region) } } onClicked: function (mouse) { if (!regionWndow.isVisible()) { regionWndow.mousePosition = mouseArea.mapToGlobal(mouse.x, mouse.y + rowlayout.implicitHeight) regionWndow.show() } languageListTiltle.isEditing = false } } } onParentItemChanged: item => { if (item) { item.bottomInset = 3 item.leftPadding = 7 item.activeFocusOnTab = true } } } // 区域格式 DccObject { id: regionAndFormat name: "regionAndFormat" parentName: "langAndFormat" weight: 50 displayName: qsTr("Regional format") description: qsTr("Operating system and applications may set date and time formats based on regional formats") backgroundType: DccObject.Normal pageType: DccObject.Editor property bool localeRunning: false property bool localeGenRunning: false enabled: !localeRunning || localeGenRunning Component.onCompleted: { localeRunning = Qt.binding(function() { var result = (dccData.langState & langAndFormat.localeStateChanging) !== 0 return result }) localeGenRunning = Qt.binding(function() { var result = (dccData.langState & langAndFormat.localeStateGenLocale) !== 0 return result }) } page: Item { id: regionAndFormatItem implicitWidth: regionAndFormat.localeGenRunning ? 36 : layout.implicitWidth implicitHeight: regionAndFormat.localeGenRunning ? 36 : layout.implicitHeight RowLayout { id: layout visible: !regionAndFormat.localeGenRunning Label { id: currentLabel text: dccData.currentLanguageAndRegion } IconLabel { Layout.alignment: Qt.AlignRight | Qt.AlignHCenter icon.name: "arrow_ordinary_right" icon.palette: DTK.makeIconPalette(currentLabel.palette) } } RowLayout { anchors.fill: parent visible: regionAndFormat.localeGenRunning Layout.rightMargin: 10 BusyIndicator { Layout.alignment: Qt.AlignRight | Qt.AlignVCenter running: visible implicitWidth: 20 implicitHeight: 20 } } MouseArea { anchors.fill: parent enabled: !regionAndFormat.localeGenRunning RegionFormatDialog { id: regionDialog currentIndex: dccData.currentLanguageAndRegionIndex() viewModel: dccData.langRegionSearchModel() onSelectedRegion: function (locale, lang) { dccData.setCurrentLocaleAndLangRegion(locale, lang) } Connections { target: dccData function onCurrentLanguageAndRegionChanged(currentLanguageAndRegion) { regionDialog.currentIndex = dccData.currentLanguageAndRegionIndex() } } } onClicked: { regionDialog.show() languageListTiltle.isEditing = false } } } onParentItemChanged: item => { if (item) { item.topInset = 3 item.leftPadding = 7 item.activeFocusOnTab = true } } } // 时间日期格式 DccObject { id: timeFormats name: "timeFormats" parentName: "langAndFormat" weight: 60 pageType: DccObject.Item page: DccGroupView {} onParentItemChanged: item => { if (item) { item.topPadding = 5 item.bottomPadding = 3 } } DccRepeater { id: timeFormatsRepeater model: dccData.timeDateModel() delegate: DccObject { name: model.name parentName: "timeFormats" displayName: model.name weight: 10 * (index + 1) backgroundType: DccObject.Normal pageType: DccObject.Editor page: ComboLabel { comboModel: model.values comboCurrentIndex: model.current onComboBoxActivated: function (idx) { dccData.setCurrentFormat(model.indexBegin + index, idx) } } onParentItemChanged: item => { if (item) { item.implicitHeight = 40 item.leftPadding = 7 item.rightPadding = 0 } } } } } // 货币符号格式 DccObject { id: currencyFormats name: "currencyFormats" parentName: "langAndFormat" weight: 70 pageType: DccObject.Item page: DccGroupView {} onParentItemChanged: item => { if (item) { item.topPadding = 3 item.bottomPadding = 3 } } DccRepeater { id: currencyRepeater model: dccData.currencyModel() delegate: DccObject { name: model.name parentName: "currencyFormats" displayName: model.name weight: 10 * (index + 1) backgroundType: DccObject.Normal pageType: DccObject.Editor page: ComboLabel { comboModel: model.values comboCurrentIndex: model.current onComboBoxActivated: function (idx) { dccData.setCurrentFormat(model.indexBegin + index, idx) } } onParentItemChanged: item => { if (item) { item.implicitHeight = 40 item.leftPadding = 7 item.rightPadding = 0 } } } } } // 数字格式符号 DccObject { id: numberFormats name: "numberFormats" parentName: "langAndFormat" weight: 80 pageType: DccObject.Item page: DccGroupView {} onParentItemChanged: item => { if (item) item.topPadding = 3 } DccRepeater { id: numRepeater model: dccData.decimalModel() delegate: DccObject { name: model.name parentName: "numberFormats" displayName: model.name weight: 10 * (index + 1) backgroundType: DccObject.Normal pageType: DccObject.Editor page: ComboLabel { comboModel: model.values comboCurrentIndex: model.current // 设置符号类型标识,用于过滤功能 isDecimalSymbol: index === 0 // 第一个是小数点符号 isDigitGroupingSymbol: index === 1 // 第二个是千位分隔符符号 onComboBoxActivated: function (idx) { dccData.setCurrentFormat(model.indexBegin + index, idx) } } onParentItemChanged: item => { if (item) { item.implicitHeight = 40 item.leftPadding = 7 item.rightPadding = 0 } } } } } // Number example DccObject { name: "numberExample" parentName: "langAndFormat" weight: 90 pageType: DccObject.Item visible: dccData.numberExampleParts.length > 0 page: Row { spacing: 4 leftPadding: 12 Repeater { model: dccData.numberExampleParts delegate: Label { text: modelData font.pixelSize: DTK.fontManager.t10.pixelSize color: DTK.themeType === ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.5) : Qt.rgba(1, 1, 1, 0.5) } } } onParentItemChanged: item => { if (item) item.topPadding = 0 } } } ================================================ FILE: src/plugin-datetime/qml/LangsChooserDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Window import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 import org.deepin.dtk.style 1.0 as DS Loader { id: langDialogLoader active: false required property var viewModel signal selectedLang(string lang) sourceComponent: DialogWindow { id: ddialog width: 420 minimumWidth: width minimumHeight: height maximumWidth: minimumWidth maximumHeight: minimumHeight icon: "preferences-system" modality: Qt.WindowModal ColumnLayout { spacing: 10 width: parent.width Label { Layout.alignment: Qt.AlignHCenter font.family: DTK.fontManager.t5.family font.bold: true font.pixelSize: DTK.fontManager.t5.pixelSize text: qsTr("Add language") } SearchEdit { id: searchEdit implicitHeight: Math.max(30, searchEditFontMetrics.height + (DS.Style.control.padding - DS.Style.control.borderWidth) * 2) // Minimum 30px, adaptive based on font Layout.fillWidth: true Layout.leftMargin: 6 - DS.Style.dialogWindow.contentHMargin Layout.rightMargin: 6 - DS.Style.dialogWindow.contentHMargin placeholder: qsTr("Search") font: DTK.fontManager.t6 onVisibleChanged: { clear() } onTextChanged: { viewModel.setFilterWildcard(text); } onEditingFinished: { viewModel.setFilterWildcard(text); } FontMetrics { id: searchEditFontMetrics font: searchEdit.font } } Item { Layout.fillWidth: true height: 360 Layout.leftMargin: 6 - DS.Style.dialogWindow.contentHMargin Layout.rightMargin: 6 - DS.Style.dialogWindow.contentHMargin // Match searchEdit margin ListView { id: itemsView property string checkedLang anchors.fill: parent clip: true model: langDialogLoader.viewModel boundsBehavior: Flickable.StopAtBounds ScrollBar.vertical: scrollBar ButtonGroup { id: langGroup } delegate: CheckDelegate { id: checkDelegate implicitWidth: itemsView.width implicitHeight: Math.max(30, checkDelegateFontMetrics.height + (DS.Style.control.padding - DS.Style.control.borderWidth) * 2) // Minimum 30px, adaptive based on font text: model.display hoverEnabled: true ButtonGroup.group: langGroup topPadding: 0 bottomPadding: 0 font: DTK.fontManager.t6 FontMetrics { id: checkDelegateFontMetrics font: checkDelegate.font } indicator: Loader { x: checkDelegate.mirrored ? checkDelegate.leftPadding : checkDelegate.width - width - checkDelegate.rightPadding y: checkDelegate.topPadding + (checkDelegate.availableHeight - height) / 2 active: indicatorVisible sourceComponent: DciIcon { palette: checkDelegate.DTK.makeIconPalette(checkDelegate.palette) mode: checkDelegate.ColorSelector.controlState theme: checkDelegate.ColorSelector.controlTheme name: indicatorIcon sourceSize: Qt.size(16, 16) fallbackToQIcon: false onNameChanged: { play(DTK.NormalState); } Component.onCompleted: { if (indicatorVisible) play(DTK.NormalState); } } } contentItem: RowLayout { Loader { id: labelLoader property string text: checkDelegate.text property bool shouldSplit: text.split("-").length === 2 Layout.fillWidth: !checkDelegate.content Layout.leftMargin: 6 sourceComponent: shouldSplit ? splitComponent : singleComponent Component { id: singleComponent IconLabel { spacing: checkDelegate.spacing mirrored: checkDelegate.mirrored display: checkDelegate.display alignment: Qt.AlignLeft | Qt.AlignVCenter text: labelLoader.text font: checkDelegate.font color: checkDelegate.palette.windowText icon: DTK.makeIcon(checkDelegate.icon, checkDelegate.DciIcon) Layout.fillWidth: !checkDelegate.content Layout.alignment: Qt.AlignVCenter } } Component { id: splitComponent RowLayout { spacing: 0 Layout.alignment: Qt.AlignVCenter IconLabel { mirrored: checkDelegate.mirrored display: checkDelegate.display alignment: Qt.AlignLeft | Qt.AlignVCenter text: labelLoader.text.split("-")[0] || "" font: checkDelegate.font color: checkDelegate.palette.windowText Layout.alignment: Qt.AlignVCenter } IconLabel { mirrored: checkDelegate.mirrored display: checkDelegate.display alignment: Qt.AlignLeft | Qt.AlignVCenter text: "-" font: checkDelegate.font color: checkDelegate.palette.windowText Layout.alignment: Qt.AlignVCenter } IconLabel { mirrored: checkDelegate.mirrored display: checkDelegate.display alignment: Qt.AlignLeft | Qt.AlignVCenter text: labelLoader.text.split("-")[1] || "" font: checkDelegate.font color: checkDelegate.palette.windowText icon: DTK.makeIcon(checkDelegate.icon, checkDelegate.DciIcon) Layout.fillWidth: !checkDelegate.content Layout.alignment: Qt.AlignVCenter } } } } Loader { active: checkDelegate.content sourceComponent: checkDelegate.content Layout.fillWidth: true } } onCheckedChanged: { if (checked) itemsView.checkedLang = model.key } } } ScrollBar { id: scrollBar anchors.top: parent.top anchors.bottom: parent.bottom anchors.right: parent.right anchors.rightMargin: -6 // Position outside the ListView area width: 10 orientation: Qt.Vertical position: itemsView.visibleArea.yPosition size: itemsView.visibleArea.heightRatio active: hovered || pressed || itemsView.moving || itemsView.flicking } } RowLayout { Layout.fillWidth: true Layout.leftMargin: 6 - DS.Style.dialogWindow.contentHMargin Layout.rightMargin: 6 - DS.Style.dialogWindow.contentHMargin spacing: 6 Button { id: cancelButton Layout.fillWidth: true Layout.bottomMargin: 6 font: DTK.fontManager.t6 implicitHeight: Math.max(30, cancelButtonFontMetrics.height + (DS.Style.control.padding - DS.Style.control.borderWidth) * 2) // Minimum 30px, adaptive based on font text: qsTr("Cancel") onClicked: { ddialog.close() } FontMetrics { id: cancelButtonFontMetrics font: cancelButton.font } } Button { id: addButton Layout.fillWidth: true Layout.bottomMargin: 6 font: DTK.fontManager.t6 implicitHeight: Math.max(30, addButtonFontMetrics.height + (DS.Style.control.padding - DS.Style.control.borderWidth) * 2) // Minimum 30px, adaptive based on font text: qsTr("Add") enabled: itemsView.checkedLang.length > 0 onClicked: { selectedLang(itemsView.checkedLang) ddialog.close() } FontMetrics { id: addButtonFontMetrics font: addButton.font } } } } onClosing: { langDialogLoader.active = false } } onLoaded: { item.show() } onActiveChanged: { if (!active) { viewModel.setFilterWildcard(""); } } } ================================================ FILE: src/plugin-datetime/qml/RegionFormatDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls 2.0 import QtQuick.Window import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 import QtQml.Models import QtQuick.Effects Loader { id: regionFormatLoader active: false required property var viewModel property int currentIndex: -1 signal selectedRegion(string locale, string lang) function show() { viewModel.setFilterWildcard(""); active = true } sourceComponent: D.DialogWindow { id: ddialog width: 738 minimumWidth: width minimumHeight: 636 maximumWidth: minimumWidth icon: "preferences-system" modality: Qt.WindowModal ColumnLayout { spacing: 10 width: parent.width Label { Layout.alignment: Qt.AlignHCenter font.family: D.DTK.fontManager.t5.family font.bold: true font.pixelSize: D.DTK.fontManager.t5.pixelSize text: qsTr("Regional format") } RowLayout { spacing: 10 ColumnLayout { Layout.preferredWidth: 348 Layout.maximumWidth: 348 spacing: 10 D.SearchEdit { id: searchEdit Layout.fillWidth: true Layout.leftMargin: 0 Layout.rightMargin: 0 placeholder: qsTr("Search") font: D.DTK.fontManager.t6 onTextChanged: { viewModel.setFilterWildcard(text); itemsView.positionViewAtBeginning(); } onEditingFinished: { viewModel.setFilterWildcard(text); itemsView.positionViewAtBeginning(); } } Item { Layout.fillWidth: true Layout.fillHeight: true Rectangle { id: backgroundRect anchors.fill: parent color: palette.base radius: 8 border.width: 0 } Item { id: listMask anchors.fill: parent layer.enabled: true visible: false Rectangle { anchors.fill: parent anchors.margins: 0.5 radius: 8 } } D.ListView { id: itemsView property string checkedLang property string checkedLocale property string selectedLangKey: "" property string selectedLocaleKey: "" anchors.fill: parent model: regionFormatLoader.viewModel currentIndex: regionFormatLoader.currentIndex clip: true ScrollBar.vertical: scrollBar layer.enabled: true layer.effect: MultiEffect { maskEnabled: true maskSource: listMask antialiasing: true maskThresholdMin: 0.5 maskSpreadAtMin: 1.0 } Component.onCompleted: { if (currentIndex >= 0 && currentIndex < count) { positionViewAtIndex(currentIndex, ListView.Contain); Qt.callLater(function() { if (currentItem && currentItem.model) { selectedLangKey = currentItem.model.langKey; selectedLocaleKey = currentItem.model.localeKey; } }); } } ButtonGroup { id: langGroup } delegate: D.CheckDelegate { id: checkDelegate implicitWidth: itemsView.width text: model.display font: D.DTK.fontManager.t6 checked: (itemsView.selectedLangKey === model.langKey && itemsView.selectedLocaleKey === model.localeKey) || (itemsView.selectedLangKey === "" && index === itemsView.currentIndex) hoverEnabled: true ButtonGroup.group: langGroup background: Control { implicitWidth: DS.Style.itemDelegate.width implicitHeight: DS.Style.itemDelegate.height // Hover background Rectangle { anchors.fill: parent visible: !checkDelegate.checked && !D.DTK.hasAnimation && checkDelegate.hovered color: checkDelegate.D.ColorSelector.backgroundColor } // Selected background Rectangle { anchors.fill: parent visible: checkDelegate.checked color: DS.Style.itemDelegate.checkedColor } } onCheckedChanged: { if (checked) { itemsView.selectedLangKey = model.langKey; itemsView.selectedLocaleKey = model.localeKey; itemsView.checkedLang = model.langKey itemsView.checkedLocale = model.localeKey let idx = 0 let values = repeater.values values[idx++].value = model.firstDay values[idx++].value = model.shortDate values[idx++].value = model.longDate values[idx++].value = model.shortTime values[idx++].value = model.longTime values[idx++].value = model.currency values[idx++].value = model.digit values[idx++].value = model.paperSize repeater.values = values } } } } ScrollBar { id: scrollBar anchors.top: parent.top anchors.bottom: parent.bottom anchors.right: parent.right anchors.rightMargin: -width width: 10 orientation: Qt.Vertical position: itemsView.visibleArea.yPosition size: itemsView.visibleArea.heightRatio active: hovered || pressed || itemsView.moving || itemsView.flicking } } } Rectangle { implicitWidth: 1 implicitHeight: 500 color: palette.mid } ColumnLayout { Layout.fillHeight: true Layout.preferredWidth: 348 Layout.maximumWidth: 348 spacing: 0 Label { Layout.alignment: Qt.AlignLeft | Qt.AlignBottom Layout.preferredHeight: searchEdit.height Layout.bottomMargin: 10 text: qsTr("Default formats") font: D.DTK.fontManager.t6 verticalAlignment: Text.AlignBottom } Repeater { id: repeater property var values:[ { name: qsTr("First day of week"), value: "" }, { name: qsTr("Short date"), value: "" }, { name: qsTr("Long date"), value: "" }, { name: qsTr("Short time"), value: "" }, { name: qsTr("Long time"), value: "" }, { name: qsTr("Currency symbol"), value: "" }, { name: qsTr("Digit"), value: "" }, { name: qsTr("Paper size"), value: "" }, ] model: values function getName(index) { return values.length > index ? values[index].name : "" } function getValue(index) { return values.length > index ? values[index].value : "" } ItemDelegate { id: root Layout.fillWidth: true backgroundVisible: true checkable: false topPadding: topInset bottomPadding: bottomInset contentFlow: true font: D.DTK.fontManager.t6 corners: getCornersForBackground(index, repeater.count) content: RowLayout { ColumnLayout { Layout.leftMargin: 8 Layout.fillWidth: true Layout.minimumWidth: implicitWidth Layout.alignment: Qt.AlignVCenter spacing: 0 DccLabel { Layout.fillWidth: true Layout.minimumWidth: implicitWidth text: repeater.getName(index) } } Control { Layout.fillWidth: true Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.rightMargin: 10 contentItem: DccLabel { width: parent.width horizontalAlignment: Text.AlignRight text: repeater.getValue(index) } } } background: DccItemBackground { id: background backgroundType: DccObject.Normal separatorVisible: true radius: 8 + bgMargins } } } Item { Layout.fillHeight: true } } } RowLayout { Layout.alignment: Qt.AlignHCenter Layout.bottomMargin: 6 spacing: 10 D.Button { font: D.DTK.fontManager.t6 text: qsTr("Cancel") onClicked: { ddialog.close() } } D.Button { text: qsTr("Save") font: D.DTK.fontManager.t6 enabled: itemsView.checkedLang.length > 0 onClicked: { regionFormatLoader.selectedRegion(itemsView.checkedLocale, itemsView.checkedLang) ddialog.close() } } } } onClosing: { regionFormatLoader.active = false } } onLoaded: { item.show() } } ================================================ FILE: src/plugin-datetime/qml/RegionsChooserWindow.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls 2.0 import QtQuick.Window import org.deepin.dtk 1.0 import QtQuick.Layouts 1.0 import org.deepin.dtk.style 1.0 as DS Loader { id: loader active: false required property var viewModel property int currentIndex: -1 property string currentText property point mousePosition: Qt.point(0, 0) signal selectedRegion(string region) function show() { active = true } function isVisible() { return active } sourceComponent: Window { id: searchWindow property int calculatedWidth: 200 width: calculatedWidth height: 500 minimumWidth: width minimumHeight: height maximumWidth: minimumWidth maximumHeight: minimumHeight DWindow.enabled: true DWindow.enableSystemResize: false DWindow.enableBlurWindow: true // ensure show in center of mainwindow // _NET_WM_WINDOW_TYPE will add Dialog when added Qt.WindowCloseButtonHint. flags: Qt.Dialog | Qt.WindowCloseButtonHint // default color is white color: active ? DTK.palette.window : DTK.inactivePalette.window palette: DTK.palette TextMetrics { id: textMetrics font: DTK.fontManager.t6 text: "" // Dynamically set text to measure actual width } function calculateOptimalWidth() { if (!viewModel || viewModel.rowCount() === 0) { calculatedWidth = 200 return } var maxWidth = 0 // Iterate through all items to find the longest text for (var i = 0; i < viewModel.rowCount(); i++) { var itemText = viewModel.data(viewModel.index(i, 0), Qt.DisplayRole) || "" if (itemText.length > 0) { // Directly measure the actual width of the complete text textMetrics.text = itemText maxWidth = Math.max(maxWidth, textMetrics.advanceWidth) } } // Calculate final width: text width + margins + scrollbar + indicators etc. // Window margins 12px + MenuItem padding 20px + scrollbar 4px + buffer 4px = 40px var finalWidth = Math.max(200, maxWidth + 40) calculatedWidth = Math.min(finalWidth, 400) // Limit maximum width to 400px } Component.onCompleted: { calculateOptimalWidth() } Connections { target: viewModel function onModelReset() { calculateOptimalWidth() } function onRowsInserted() { calculateOptimalWidth() } function onRowsRemoved() { calculateOptimalWidth() } } ColumnLayout { id: contentLayout anchors.fill: parent anchors.margins: 6 SearchEdit { id: searchEdit implicitHeight: Math.max(30, searchEditFontMetrics.height + (DS.Style.control.padding - DS.Style.control.borderWidth) * 2) Layout.fillWidth: true Layout.alignment: Qt.AlignTop placeholder: qsTr("Search") palette: DTK.palette font: DTK.fontManager.t6 onTextChanged: { viewModel.setFilterWildcard(text); } onEditingFinished: { viewModel.setFilterWildcard(text); } FontMetrics { id: searchEditFontMetrics font: searchEdit.font } } Item { Layout.fillWidth: true Layout.fillHeight: true ArrowListView { anchors.fill: parent id: itemsView property string checkedRegion clip: true maxVisibleItems: 12 view.model: viewModel view.currentIndex: loader.currentIndex view.ScrollBar.vertical: verticalScrollBar ButtonGroup { id: regionGroup } view.delegate: MenuItem { id: menuItem implicitWidth: itemsView.width implicitHeight: 30 text: model.display checkable: true checked: text === loader.currentText hoverEnabled: true highlighted: hovered autoExclusive: true ButtonGroup.group: regionGroup useIndicatorPadding: true font: DTK.fontManager.t6 onCheckedChanged: { if (checked && loader.currentText !== model.display) { selectedRegion(model.display) closeWindow() } } } Component.onCompleted: { // Set initial scroll position if (currentIndex >= 0) { let delegateHeight = 30 view.contentY = currentIndex * delegateHeight; } } } ScrollBar { id: verticalScrollBar anchors.top: parent.top anchors.bottom: parent.bottom anchors.right: parent.right anchors.rightMargin: -6 width: 10 orientation: Qt.Vertical position: itemsView.view.visibleArea.yPosition size: itemsView.view.visibleArea.heightRatio active: hovered || pressed || itemsView.view.moving || itemsView.view.flicking } } } function closeWindow() { loader.viewModel.setFilterWildcard(""); searchWindow.close() loader.active = false } onActiveFocusItemChanged: { if (!activeFocusItem) { searchWindow.closeWindow() } } onActiveChanged: { if (!active) { searchWindow.closeWindow() } } } onLoaded: { item.show() if (loader.mousePosition.x !== 0 || loader.mousePosition.y !== 0) { item.x = loader.mousePosition.x item.y = loader.mousePosition.y } Qt.callLater(item.requestActivate); } } ================================================ FILE: src/plugin-datetime/qml/SearchableListViewPopup.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import QtQuick.Window import org.deepin.dtk 1.0 import org.deepin.dtk.style 1.0 as DS import org.deepin.dtk.private 1.0 as P Loader { id: loader active: false property int maxVisibleItems: 10 property int highlightedIndex: 0 property string searchText: "" property var view: null property var viewWidth: 300 property var anchorItem: null property int windowWidth: 300 property int windowHeight: 500 property bool contentScrolling: false required property DelegateModel delegateModel TextMetrics { id: textMetrics font.family: DTK.fontManager.baseFont.family font.pixelSize: DTK.fontManager.baseFont.pixelSize } signal opened() signal closed() // 设置视图索引的函数(无循环版本) function setViewIndex(viewIndex) { if (!view) return // 限制在有效范围内,不循环 if (viewIndex < 0) { viewIndex = 0 } else if (viewIndex >= view.count) { viewIndex = view.count - 1 } view.currentIndex = viewIndex highlightedIndex = viewIndex } function show() { active = true } function isVisible() { return active } function close() { if (item) { item.closeWindow() } } function setPositionByItem(item) { anchorItem = item if (active && this.item) { this.item.positionWindow() } } sourceComponent: Window { id: searchWindow width: windowWidth height: loader.windowHeight minimumWidth: 300 minimumHeight: loader.windowHeight maximumWidth: 500 maximumHeight: loader.windowHeight DWindow.enabled: true DWindow.enableSystemResize: false DWindow.enableBlurWindow: true // ensure show in center of mainwindow // _NET_WM_WINDOW_TYPE will add Dialog when added Qt.WindowCloseButtonHint. flags: Qt.Dialog | Qt.WindowCloseButtonHint // default color is white color: DTK.palette.window palette: DTK.palette Component.onCompleted: { positionWindow() loader.opened() } function positionWindow() { if (!loader.anchorItem) return var globalPos = loader.anchorItem.mapToGlobal(0, 0) searchWindow.x = globalPos.x searchWindow.y = globalPos.y + loader.anchorItem.height } ColumnLayout { id: contentLayout anchors.fill: parent anchors.margins: 6 spacing: loader.delegateModel.count > 0 ? 14 : 0 SearchEdit { id: searchEdit implicitHeight: Math.max(30, searchEditFontMetrics.height + (DS.Style.control.padding - DS.Style.control.borderWidth) * 2) Layout.fillWidth: true font: DTK.fontManager.t6 Layout.alignment: Qt.AlignTop placeholder: qsTr("Search") onTextChanged: { loader.searchText = text } onVisibleChanged: { clear() // clear search text } FontMetrics { id: searchEditFontMetrics font: searchEdit.font } // 键盘事件处理 - 回车直接选择 Keys.onReturnPressed: { if (listView.visible && listView.count > 0) { // 如果没有选中项,默认选中第一项 if (listView.currentIndex < 0) { loader.setViewIndex(0) } // 直接设置checked状态触发选择 if (listView.currentIndex >= 0 && listView.currentItem) { listView.currentItem.checked = true } } } Keys.onUpPressed: { if (listView.visible && listView.count > 0) { listView.forceActiveFocus() // 如果没有选中项,选择最后一项,否则向上移动 if (listView.currentIndex < 0) { loader.setViewIndex(listView.count - 1) } else { loader.setViewIndex(listView.currentIndex - 1) } } } Keys.onDownPressed: { if (listView.visible && listView.count > 0) { listView.forceActiveFocus() // 如果没有选中项,选择第一项,否则向下移动 if (listView.currentIndex < 0) { loader.setViewIndex(0) } else { loader.setViewIndex(listView.currentIndex + 1) } } } } // ArrowListView 样式的容器 ColumnLayout { Layout.fillWidth: true Layout.preferredHeight: Math.min(listView.contentHeight + (listView.interactive ? upButton.height + downButton.height : 0), loader.maxVisibleItems * 36 + (listView.interactive ? upButton.height + downButton.height : 0)) visible: loader.delegateModel.count > 0 spacing: 0 // 上箭头按钮 P.ArrowListViewButton { id: upButton visible: listView.interactive Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: width Layout.preferredHeight: height view: listView direction: P.ArrowListViewButton.UpButton focusPolicy: Qt.NoFocus activeFocusOnTab: false } ListView { id: listView clip: true Layout.fillWidth: true Layout.fillHeight: true model: loader.delegateModel currentIndex: loader.highlightedIndex highlightMoveDuration: -1 highlightMoveVelocity: -1 highlightFollowsCurrentItem: true focus: true activeFocusOnTab: true ScrollBar.vertical: verticalScrollBar // 根据内容确定是否需要交互(模仿ArrowListView逻辑) interactive: loader.delegateModel.count > loader.maxVisibleItems // 传递给delegate使用 property bool keyboardScrolling: loader.contentScrolling // 键盘滚动保护计时器 Timer { id: keyboardScrollTimer interval: 50 onTriggered: { loader.contentScrolling = false } } // 键盘事件处理(参考SearchBar模式) Keys.onUpPressed: { // 键盘导航时启用滚动保护 loader.contentScrolling = true keyboardScrollTimer.restart() loader.setViewIndex(currentIndex - 1) } Keys.onDownPressed: { // 键盘导航时启用滚动保护 loader.contentScrolling = true keyboardScrollTimer.restart() loader.setViewIndex(currentIndex + 1) } Keys.onEscapePressed: { // Escape键返回到搜索框 searchEdit.forceActiveFocus() } Component.onCompleted: { loader.view = listView loader.viewWidth = listView.width // 查找checked为true的项目并设置为当前高亮 var foundChecked = false for (var i = 0; i < count; i++) { var item = itemAtIndex(i) if (item && item.checked === true) { loader.setViewIndex(i) positionViewAtIndex(i, ListView.Center) foundChecked = true break } } // 如果没找到checked项,使用highlightedIndex作为备选 if (!foundChecked && loader.highlightedIndex >= 0) { loader.setViewIndex(loader.highlightedIndex) positionViewAtIndex(loader.highlightedIndex, ListView.Center) } // 确保获得焦点 forceActiveFocus() } onWidthChanged: { loader.viewWidth = listView.width } } // 下箭头按钮 P.ArrowListViewButton { id: downButton visible: listView.interactive Layout.alignment: Qt.AlignHCenter Layout.preferredWidth: width Layout.preferredHeight: height view: listView direction: P.ArrowListViewButton.DownButton enabled: !listView.atYEnd focusPolicy: Qt.NoFocus activeFocusOnTab: false } ScrollBar { id: verticalScrollBar anchors.top: parent.top anchors.bottom: parent.bottom anchors.right: parent.right anchors.rightMargin: -6 implicitWidth: 10 orientation: Qt.Vertical position: listView.visibleArea.yPosition size: listView.visibleArea.heightRatio active: hovered || pressed || listView.moving || listView.flicking } } Item { Layout.fillHeight: true visible: loader.delegateModel.count > 0 } Text { id: noResultsText text: qsTr("No search results") horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter Layout.fillWidth: true Layout.fillHeight: true visible: loader.delegateModel.count === 0 color: this.palette.windowText opacity: 0.4 font: DTK.fontManager.t6 } } function closeWindow() { searchEdit.clear() searchWindow.close() loader.active = false loader.closed() } onActiveFocusItemChanged: { if (!activeFocusItem) { searchWindow.closeWindow() } } onActiveChanged: { if (!active) { searchWindow.closeWindow() } } } onLoaded: { item.show() Qt.callLater(function() { item.requestActivate(); }); } } ================================================ FILE: src/plugin-datetime/qml/SpinboxEx.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dtk 1.0 as D SpinBox { id: sp editable: true property string unitText implicitWidth: valueMetrics.width + unitMetrics.width + 60 TextMetrics { id: valueMetrics text: Math.max(sp.from, sp.to).toString() } TextMetrics { id: unitMetrics text: unitText } Label { id: unit text: unitText font: D.DTK.fontManager.t6 anchors.right: parent.right anchors.rightMargin: 30 height: parent.height verticalAlignment: Qt.AlignVCenter } } ================================================ FILE: src/plugin-datetime/qml/TimeAndDate.qml ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQml.Models 2.11 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dtk.private 1.0 as P import org.deepin.dtk.style 1.0 as DS import ZoneInfoModel 1.0 // 时间和日期 DccObject { DccObject { id: dateTimeContent name: "dateTimeContent" parentName: "datetime" weight: 10 pageType: DccObject.Item page: ColumnLayout { FontLoader { id: webFont source: "qrc:/builtin-font/resource/Outfit-Light.ttf" } Label { id: timeLabel height: contentHeight Layout.leftMargin: 14 Layout.topMargin: 10 leftPadding: 0 rightPadding: 0 horizontalAlignment: Text.AlignLeft font { pointSize: 32 family: webFont.font.family } text: dccData.currentTime } Label { id: dateLabel height: contentHeight Layout.leftMargin: 18 leftPadding: 0 rightPadding: 0 horizontalAlignment: Text.AlignLeft font { pointSize: 16 family: webFont.font.family } text: dccData.currentDate } Timer { interval: 500 running: dateTimeContent.visible repeat: true onTriggered: { dccData.updateCurrentTime() } onRunningChanged: { if (running) { dccData.updateCurrentTime() } } } } } // 时间同步 DccObject { name: "dateTimeGroup" parentName: "datetime" weight: 12 pageType: DccObject.Item page: DccGroupView {} onParentItemChanged: item => { if (item) { item.topPadding = 10 item.bottomPadding = 5 } } DccObject { id: ntpSettings property bool ntpOn: dccData.ntpEnabled name: "ntpSettings" parentName: "dateTimeGroup" displayName: qsTr("Auto sync time") weight: 10 backgroundType: DccObject.Normal pageType: DccObject.Editor page: Switch { checked: ntpSettings.ntpOn onCheckedChanged: { dccData.ntpEnabled = checked } } } DccObject { id: dateAndTimeSettings name: "dateAndTimeSettings" parentName: "dateTimeGroup" displayName: dccData.ntpEnabled ? qsTr("Ntp server") : qsTr("System date and time") weight: 12 backgroundType: DccObject.Normal pageType: DccObject.Editor property bool showCustom: false property string customAddr onParentItemChanged: item => { if (item) { item.rightPadding = DS.Style.comboBox.spacing } } page: Item { implicitHeight: 36 implicitWidth: dccData.ntpEnabled ? 280 : 80 ComboBox { id: comboBox property var serverList: dccData.ntpServerList flat: true padding: 0 visible: dccData.ntpEnabled anchors.fill: parent hoverEnabled: true model: serverList // 不设置默认的话可能无法滚动(不显示上下箭头按钮)。。。 maxVisibleItems: serverList.length - 1 currentIndex: { let index = serverList.indexOf(dccData.ntpServerAddress) dateAndTimeSettings.showCustom = (index < 0) if (index < 0) dateAndTimeSettings.customAddr = dccData.ntpServerAddress if (dccData.ntpServerAddress.length > 0) dccData.previousServerAddress = dccData.ntpServerAddress return index < 0 ? serverList.length - 1 : index } onActivated: function (index) { if (dccData.ntpServerAddress.length > 0) dccData.previousServerAddress = dccData.ntpServerAddress dateAndTimeSettings.showCustom = (serverList[index] === qsTr("Customize")) if (dateAndTimeSettings.showCustom) { let savedCustomServer = dccData.getCustomNtpServer() if (savedCustomServer.length > 0) { dateAndTimeSettings.customAddr = savedCustomServer dccData.ntpServerAddress = savedCustomServer } else if (dateAndTimeSettings.customAddr.length > 0) { dccData.ntpServerAddress = dateAndTimeSettings.customAddr } else { dccData.ntpServerAddress = "" } return } dccData.ntpServerAddress = serverList[index] } Component.onCompleted: { let text = qsTr("Customize") if (!comboBox.serverList.includes(text)) comboBox.serverList.push(text) if (dccData.ntpServerAddress.length === 0 && dccData.previousServerAddress.length > 0) { dccData.ntpServerAddress = dccData.previousServerAddress } let currentServer = dccData.ntpServerAddress let index = comboBox.serverList.indexOf(currentServer) if (index < 0) { comboBox.currentIndex = comboBox.serverList.length - 1 dateAndTimeSettings.showCustom = true dateAndTimeSettings.customAddr = currentServer } else { dateAndTimeSettings.showCustom = false let savedCustomServer = dccData.getCustomNtpServer() if (savedCustomServer.length > 0) { dateAndTimeSettings.customAddr = savedCustomServer } } } } Button { id: settingsButton visible: !dccData.ntpEnabled anchors.fill: parent property bool needShowDialog: false text: qsTr("Settings") implicitWidth: fm.advanceWidth(text) + 12 implicitHeight: 30 FontMetrics { id: fm } Loader { id: loader active: settingsButton.needShowDialog sourceComponent: DateTimeSettingDialog { onClosing: { settingsButton.needShowDialog = false } } onLoaded: { item.show() } } onClicked: { settingsButton.needShowDialog = true } } } onDeactive: { if (dateAndTimeSettings.showCustom && dateAndTimeSettings.customAddr.length === 0) { dateAndTimeSettings.showCustom = false if (dccData.previousServerAddress.length > 0) { dccData.ntpServerAddress = dccData.previousServerAddress } } } } DccObject { id: customNTPServer name: "customNTPServer" parentName: "dateTimeGroup" displayName: qsTr("Server address") visible: dccData.ntpEnabled && dateAndTimeSettings.showCustom weight: 13 backgroundType: DccObject.Normal pageType: DccObject.Editor page: Item { id: item implicitHeight: 40 implicitWidth: 300 D.LineEdit { id: addr implicitWidth: 200 text: dateAndTimeSettings.customAddr placeholderText: qsTr("Required") alertText: qsTr("The ntp server address cannot be empty") alertDuration: 3000 horizontalAlignment: background.visible ? TextInput.AlignLeft : TextInput.AlignRight anchors{ rightMargin: 5 right: editBtn.left verticalCenter: parent.verticalCenter } rightPadding: (!addr.readOnly && addr.text.length > 0 ? addr.clearButton.width : 5) onReadOnlyChanged: { addr.background.visible = !addr.readOnly addr.clearButton.visible = !addr.readOnly && text.length > 0 addr.focus = !addr.readOnly } onTextChanged: { if (addr.showAlert && addr.text.length > 0) { addr.showAlert = false } } Component.onCompleted: { Qt.callLater( function(){ addr.forceActiveFocus() } ) addr.readOnly = text.length > 0 } } D.IconButton { id: editBtn anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter hoverEnabled: true background: Rectangle { anchors.fill: parent property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } icon { name: addr.readOnly ? "dcc-edit" : "inactive" width: 16 height: 16 } onClicked: { if (addr.text.length === 0) { addr.showAlert = true return } addr.showAlert = false if (!addr.readOnly) { dccData.ntpServerAddress = addr.text } addr.readOnly = !addr.readOnly } } } } DccObject { visible: false // 暂时隐藏,会导致逻辑很复杂 name: "12/24h" parentName: "dateTimeGroup" displayName: qsTr("Use 24-hour format") weight: 14 backgroundType: DccObject.Normal pageType: DccObject.Editor page: Switch { checked: dccData.use24HourFormat onCheckedChanged: { dccData.use24HourFormat = checked } } } } // 系统时区 DccObject { id: timezoneGroup name: "timezoneGroup" parentName: "datetime" weight: 20 pageType: DccObject.Item page: DccGroupView { id: view } DccRepeater { id: userTimezoneRepeater model: dccData.userTimezoneModel() delegate: ItemZoneComp { name: "userTimezoneItem" + index parentName: "timezoneGroup" displayName: model.display description: model.description weight: 20 + 10 * (index + 1) shift: model.shift zoneId: model.zoneId } } onParentItemChanged: item => { if (item) item.topPadding = 5 } DccObject { id: systemTimezone name: "systemTimezone" parentName: "timezoneGroup" displayName: qsTr("system time zone") weight: 12 backgroundType: DccObject.Normal pageType: DccObject.Editor onParentItemChanged: item => { if (item) { item.rightPadding = DS.Style.comboBox.spacing } } page: Item { id: systemTimezoneItem implicitWidth: rowlayout.implicitWidth implicitHeight: rowlayout.implicitHeight property var model: dccData.zoneSearchModel() property var currentIndex: dccData.currentTimeZoneIndex property string saveZoneId: "" RowLayout { id: rowlayout Label { id: timezoneLabel text: dccData.timeZoneDispalyName } D.IconLabel { Layout.alignment: Qt.AlignRight | Qt.AlignHCenter icon.name: "arrow_ordinary_down" icon.palette: D.DTK.makeIconPalette(timezoneLabel.palette) } } MouseArea { id: mouseArea anchors.fill: parent Component.onCompleted: { if (dccData.currentTimeZoneIndex >= 0) { let model = dccData.zoneSearchModel() systemTimezoneItem.saveZoneId = model.data(model.index(systemTimezoneItem.currentIndex, 0), ZoneInfoModel.ZoneIdRole) } } Connections { target: dccData function onCurrentTimeZoneIndexChanged() { if (dccData.currentTimeZoneIndex >= 0) { let model = dccData.zoneSearchModel() systemTimezoneItem.saveZoneId = model.data(model.index(systemTimezoneItem.currentIndex, 0), ZoneInfoModel.ZoneIdRole) } } } SearchableListViewPopup { id: timezoneWindow highlightedIndex: systemTimezoneItem.currentIndex maxVisibleItems: 13 delegateModel: DelegateModel { model: systemTimezoneItem.model delegate: D.MenuItem { useIndicatorPadding: true width: timezoneWindow.viewWidth text: model.display font: D.DTK.fontManager.t6 highlighted: ListView.isCurrentItem hoverEnabled: true checkable: true autoExclusive: true checked: model.zoneId === systemTimezoneItem.saveZoneId contentItem: RowLayout { spacing: 8 Item { Layout.preferredWidth: parent.parent.useIndicatorPadding ? 20 : 0 Layout.preferredHeight: parent.height visible: parent.parent.useIndicatorPadding } Text { Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter text: parent.parent.text font: D.DTK.fontManager.t6 color: parent.parent.palette.windowText elide: Text.ElideRight horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter } } onHoveredChanged: { if (hovered && !ListView.view.keyboardScrolling) { timezoneWindow.setViewIndex(index) } } onCheckedChanged: { if (checked && model.zoneId != systemTimezoneItem.saveZoneId) { let zoneId = model.zoneId dccData.setSystemTimeZone(zoneId) timezoneWindow.close() } } } } onSearchTextChanged: { let delegateModel = dccData.zoneSearchModel() delegateModel.setFilterWildcard(timezoneWindow.searchText) } } onClicked: function (mouse) { if (!timezoneWindow.isVisible()) { // 保持当前选中项可见,但居中显示 timezoneWindow.highlightedIndex = systemTimezoneItem.currentIndex timezoneWindow.show() timezoneWindow.setPositionByItem(parent) } } } } } DccObject { name: "timezoneList" parentName: "timezoneGroup" displayName: qsTr("Timezone list") weight: 12 backgroundType: DccObject.Normal pageType: DccObject.Editor page: RowLayout { spacing: 10 Button { id: addButton text: qsTr("Add") implicitHeight: 30 implicitWidth: 60 SearchableListViewPopup { id: timezoneListWindow delegateModel: DelegateModel { model: dccData.zoneSearchModel() delegate: D.MenuItem { useIndicatorPadding: true width: timezoneListWindow.viewWidth text: model.display font: D.DTK.fontManager.t6 highlighted: ListView.isCurrentItem hoverEnabled: true checkable: true autoExclusive: true contentItem: RowLayout { spacing: 8 Item { Layout.preferredWidth: parent.parent.useIndicatorPadding ? 20 : 0 Layout.preferredHeight: parent.height visible: parent.parent.useIndicatorPadding } Text { Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter text: parent.parent.text font: D.DTK.fontManager.t6 color: parent.parent.palette.windowText elide: Text.ElideRight horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter } } onHoveredChanged: { if (hovered && !ListView.view.keyboardScrolling) { timezoneListWindow.setViewIndex(index) } } onCheckedChanged: { if (checked) { let zoneId = model.zoneId dccData.addUserTimeZoneById(zoneId) timezoneListWindow.close() } } } } maxVisibleItems: 13 onSearchTextChanged: { let delegateModel = dccData.zoneSearchModel() delegateModel.setFilterWildcard(searchText); } } onClicked: { if (!timezoneListWindow.isVisible()) { timezoneListWindow.setPositionByItem(parent) timezoneListWindow.highlightedIndex = 0 timezoneListWindow.show() } } } } } } component ItemZoneComp: DccObject { property int shift: 8 property string zoneId backgroundType: DccObject.Normal pageType: DccObject.Item page: ItemDelegate { id: itemZoneCompItemDelegate visible: dccObj hoverEnabled: true implicitHeight: Math.max(50, textColumn.implicitHeight + 2) icon.name: dccObj.icon checkable: false contentItem: Item { id: contentLayout Column { id: textColumn anchors { left: parent.left leftMargin: 50 verticalCenter: parent.verticalCenter } spacing: 2 Label { id: display text: dccObj.displayName font: D.DTK.fontManager.t6 elide: Text.ElideRight } Label { id: description visible: text !== "" font: D.DTK.fontManager.t10 text: dccObj.description opacity: 0.6 elide: Text.ElideRight } } } TimezoneClock { id: clock width: 24 height: 24 shift: dccObj.shift anchors { left: itemZoneCompItemDelegate.left leftMargin: 20 top: itemZoneCompItemDelegate.top topMargin: (itemZoneCompItemDelegate.height - clock.height) / 2 } } D.IconButton { id: removeButton visible: itemZoneCompItemDelegate.hovered icon.name: "dcc-delete" icon.width: 16 icon.height: 16 implicitWidth: 32 implicitHeight: 32 anchors { right: itemZoneCompItemDelegate.right rightMargin: 10 verticalCenter: itemZoneCompItemDelegate.verticalCenter } background: Rectangle { property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } onClicked: { console.log("need remove timezone", dccObj.displayName) dccData.removeUserTimeZoneById(dccObj.zoneId) } } background: DccItemBackground { separatorVisible: true } } } } ================================================ FILE: src/plugin-datetime/qml/TimezoneClock.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls Item { id: clock property int hours property int minutes property real shift: 8 // (UTC+08) property bool internationalTime: true property bool animationEnabled: false width: 24 height: 24 Component.onCompleted: { tick() } function tick() { const date = new Date clock.hours = internationalTime ? date.getUTCHours() + Math.floor(clock.shift) : date.getHours() clock.minutes = internationalTime ? date.getUTCMinutes() + ((clock.shift % 1) * 60) : date.getMinutes() if (clock.hours < 0) clock.hours += 12 } Timer { id: timer interval: 800 running: clock.visible repeat: true onTriggered: clock.tick() } Item { id: clockPanel anchors.fill: parent Rectangle { id: background anchors.centerIn: parent radius: width / 2 height: clockPanel.height width: clockPanel.width color: (hours >= 6 && hours < 18) ? "#E1E1E1" : "#575757" } Rectangle { id: hourHandle width: background.width / 3 height: 2 radius: height / 2 x: background.x + (background.width) / 2 - 1 y: background.y + background.height / 2 - 1 color: "#07c5fb" antialiasing: true transform: Rotation { id: hourRotation origin.x: 1 origin.y: 1 angle: (clock.hours * 30) + (clock.minutes * 0.5) - 90 Behavior on angle { enabled: clock.animationEnabled SpringAnimation { spring: 2 damping: 0.2 modulus: 360 } } } } Rectangle { id: minuteHandle color: "#f97676" height: 2 radius: height / 2 width: background.width * 0.4 x: background.x + background.width / 2 - 1 y: background.y + background.height / 2 - 1 antialiasing: true transform: Rotation { id: minuteRotation origin.x: 1 origin.y: 1 angle: clock.minutes * 6 - 90 Behavior on angle { enabled: clock.animationEnabled SpringAnimation { spring: 2 damping: 0.2 modulus: 360 } } } } } } ================================================ FILE: src/plugin-datetime/qml/TimezoneDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import org.deepin.dtk 1.0 as D import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Window import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 as Dcc D.DialogWindow { id: timezoneDialog property string currentTimeZone: "武汉 (UTC+08:00)" property string currentLocation: "武汉-中国大陆" property string selectedTimeZone property bool saved: false visible: true width: 1080 height: 730 minimumWidth: width minimumHeight: height maximumWidth: minimumWidth maximumHeight: minimumHeight color: "#66000000" modality: Qt.WindowModal // remove titlebar background header: D.DialogTitleBar { enableInWindowBlendBlur: false } ColumnLayout { id: layout y: -20 spacing: 10 height: parent.height width: parent.width function showIndicator(zoneId, zoneDiplayName) { let size = zoneMap.sourceSize let zonePos = dccData.zonePosition(zoneId, size.width, size.height) let displaytexts = zoneDiplayName.split(' '); // [上海, (UTC+08:00)] indicator.x = zonePos.x - 6 indicator.y = zonePos.y - 6 zoneMap.timZonePos = Qt.point(indicator.x, indicator.y) timezoneDialog.selectedTimeZone = displaytexts[0] indicator.visible = true } Label { text: qsTr("Add time zone") font: D.DTK.fontManager.t2 Layout.alignment: Qt.AlignCenter } Dcc.SearchBar { id: searchBar Layout.preferredWidth: 300 Layout.alignment: Qt.AlignCenter model: dccData.zoneSearchModel() onClicked: function(model) { layout.showIndicator(model.zoneId, model.cityName) } } CheckBox { text: qsTr("Determine the time zone based on the current location") Layout.alignment: Qt.AlignCenter visible: false } D.DciIcon { id: zoneMap property point timZonePos name: "dcc_timezone_map" sourceSize: Qt.size(978, 500) Layout.alignment: Qt.AlignCenter ToolTip { id: toolTip property alias model: arrowListView.model contentItem: ColumnLayout { Repeater { id: arrowListView D.ItemDelegate { id: item implicitWidth: 120 implicitHeight: 30 text: modelData background: Item { implicitWidth: item.width implicitHeight: item.height Loader { anchors.fill: parent active: item.hovered sourceComponent: D.HighlightPanel {} } } onClicked: { timezoneDialog.selectedTimeZone = modelData //toolTip.x = pos.x - 50 toolTip.y = pos.y - 10 zoneMap.timZonePos = Qt.point(toolTip.x + 50 - 6, toolTip.y + 10 - 6) toolTip.hide() } } } } onVisibleChanged: { indicator.x = zoneMap.timZonePos.x indicator.y = zoneMap.timZonePos.y indicator.visible = !toolTip.visible && timezoneDialog.selectedTimeZone.length > 0 } } D.DciIcon { id: indicator visible: !toolTip.visible && timezoneDialog.selectedTimeZone.length > 0 name: "indicator_active" sourceSize: Qt.size(12, 12) } ToolTip { id: holdToolTip x: indicator.x - holdToolTip.width / 2 + 6 y: indicator.y - holdToolTip.height - 6 closePolicy: Popup.NoAutoClose text: timezoneDialog.selectedTimeZone visible: indicator.visible && text.length > 0 } function showTips(pos, model) { toolTip.visible = true toolTip.delay = 200 toolTip.model = model toolTip.x = pos.x - 50 toolTip.y = pos.y - 10 } MouseArea { anchors.fill: parent onPressed: function(mouse) { let zones = dccData.zones(mouse.x, mouse.y, zoneMap.width, zoneMap.height) if (zones.length < 1) { console.log("mouse pos:", mouse.x, mouse.y, "no zone found...."); return } indicator.visible = false let zonePos = Qt.point(mouse.x, mouse.y) zonePos = dccData.zonePosition(zones[0], zoneMap.width, zoneMap.height) Qt.callLater(zoneMap.showTips, zonePos, zones); } } Component.onCompleted: { // show with indicator layout.showIndicator(dccData.systemTimeZone, dccData.timeZoneDispalyName) } } RowLayout { visible: false spacing: 10 Layout.alignment: Qt.AlignCenter Layout.bottomMargin: 10 Label { text: qsTr("Time zone:") } Label { text: timezoneDialog.currentTimeZone } } RowLayout { visible: false spacing: 10 Layout.alignment: Qt.AlignCenter Layout.bottomMargin: 30 Label { text: qsTr("Nearest City:") } Label { text: timezoneDialog.currentLocation } } RowLayout { Layout.alignment: Qt.AlignCenter | Qt.AlignBottom spacing: 10 Button { Layout.bottomMargin: 10 text: qsTr("Cancel") onClicked: { timezoneDialog.saved = false close() } } D.RecommandButton { enabled: timezoneDialog.selectedTimeZone.length > 0 Layout.bottomMargin: 10 text: qsTr("Save") onClicked: { timezoneDialog.saved = true close() } } } } } ================================================ FILE: src/plugin-datetime/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-deepinid/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(pluginName deepinid) file(GLOB_RECURSE deepinid_SRCS "operation/*.cpp" "operation/*.h" "operation/qrc/deepinid.qrc" ) find_package(OpenSSL REQUIRED) add_library(${pluginName} MODULE ${deepinid_SRCS} ) set(deepinid_Libraries ${DCC_FRAME_Library} ${QT_NS}::DBus ${QT_NS}::Concurrent ${DTK_NS}::Gui ) target_link_libraries(${pluginName} PRIVATE ${deepinid_Libraries} libcrypto.so ) dcc_install_plugin(NAME ${pluginName} TARGET ${pluginName}) ================================================ FILE: src/plugin-deepinid/operation/appinfolistmodel.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "appinfolistmodel.h" #include AppInfoListModel::AppInfoListModel(QObject *parent) : QAbstractListModel(parent) { } AppInfoListModel::~AppInfoListModel() { clearItem(); } void AppInfoListModel::addAppItem(AppItemData *item) { beginInsertRows(QModelIndex(), m_appItemList.count(), m_appItemList.count()); m_appItemList.append(item); endInsertRows(); } void AppInfoListModel::removeAppItem(AppItemData* item) { beginResetModel(); m_appItemList.removeAll(item); delete item; item = nullptr; endResetModel(); } void AppInfoListModel::clearItem() { beginResetModel(); for (AppItemData* item : m_appItemList) { delete item; item = nullptr; } m_appItemList.clear(); endResetModel(); } void AppInfoListModel::updateAppItem(const QString &key, bool enable) { for (AppItemData* item : m_appItemList) { if (item->key == key) { item->enable = enable; QModelIndex modelIndex = createIndex(m_appItemList.indexOf(item), 0); emit dataChanged(modelIndex, modelIndex, { EnableRole }); return; } } } int AppInfoListModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); return m_appItemList.count(); } QVariant AppInfoListModel::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() >= m_appItemList.count()) return QVariant(); auto appItem = m_appItemList[index.row()]; switch (role) { case NameRole: return appItem->name; case IconRole: return appItem->icon.startsWith("/") ? QUrl::fromLocalFile(appItem->icon).toString() : appItem->icon; case KeyRole: return appItem->key; case EnableRole: return appItem->enable; default: break; } return QVariant(); } ================================================ FILE: src/plugin-deepinid/operation/appinfolistmodel.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef APPINFOLISTMODEL_H #define APPINFOLISTMODEL_H #include struct AppItemData { QString name; QString icon; QString key; bool enable; bool state; }; class AppInfoListModel : public QAbstractListModel { Q_OBJECT public: enum AppItemRoles { NameRole = Qt::UserRole + 1, IconRole, KeyRole, EnableRole, }; Q_ENUM(AppItemRoles) explicit AppInfoListModel(QObject *parent = nullptr); ~AppInfoListModel() override; void addAppItem(AppItemData *item); void removeAppItem(AppItemData* item); void clearItem(); void updateAppItem(const QString &key, bool enable); protected: int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override { QHash roles; roles[NameRole] = "name"; roles[IconRole] = "icon"; roles[KeyRole] = "key"; roles[EnableRole] = "enable"; return roles; } private: QList m_appItemList; }; #endif // APPINFOLISTMODEL_H ================================================ FILE: src/plugin-deepinid/operation/cryptor.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "cryptor.h" #include #include #include Cryptor::Cryptor() { } bool Cryptor::RSAPublicEncryptData(const std::string &rsakey, const QString &strin, QByteArray &strout) { BIO *bio = BIO_new_mem_buf(rsakey.c_str(), rsakey.length()); EVP_PKEY *pkey = PEM_read_bio_PUBKEY(bio, nullptr, nullptr, nullptr); if(pkey == nullptr) { QString strerror = QString::fromLocal8Bit(ERR_error_string(ERR_get_error(), nullptr)); qWarning() << "read rsa public key failed, error:" << strerror; qWarning() << "RSA pubkey:" << QString::fromStdString(rsakey); qWarning() << "length:" << rsakey.length(); if(bio) BIO_free(bio); return false; } EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(pkey, nullptr); if (!ctx || EVP_PKEY_encrypt_init(ctx) <= 0) { qWarning() << "Failed to initialize encryption context"; if(ctx) EVP_PKEY_CTX_free(ctx); EVP_PKEY_free(pkey); if(bio) BIO_free(bio); return false; } if (EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_PADDING) <= 0) { qWarning() << "Failed to set RSA padding"; EVP_PKEY_CTX_free(ctx); EVP_PKEY_free(pkey); if(bio) BIO_free(bio); return false; } QByteArray inputData = strin.toLocal8Bit(); const unsigned char *input = (const unsigned char*)inputData.constData(); size_t inlen = inputData.length(); size_t outlen; if (EVP_PKEY_encrypt(ctx, nullptr, &outlen, input, inlen) <= 0) { qWarning() << "Failed to determine output length"; EVP_PKEY_CTX_free(ctx); EVP_PKEY_free(pkey); if(bio) BIO_free(bio); return false; } unsigned char *outbuff = new unsigned char[outlen]; if (EVP_PKEY_encrypt(ctx, outbuff, &outlen, input, inlen) <= 0) { qWarning() << "Encryption failed"; delete[] outbuff; EVP_PKEY_CTX_free(ctx); EVP_PKEY_free(pkey); if(bio) BIO_free(bio); return false; } strout.append((char*)outbuff, outlen); delete[] outbuff; EVP_PKEY_CTX_free(ctx); EVP_PKEY_free(pkey); if(bio) BIO_free(bio); return true; } ================================================ FILE: src/plugin-deepinid/operation/cryptor.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef CRYPTOR_H #define CRYPTOR_H #include #include #include #include class Cryptor { public: Cryptor(); static bool RSAPublicEncryptData(const std::string &rsakey, const QString &strin, QByteArray &strout); }; #endif // CRYPTOR_H ================================================ FILE: src/plugin-deepinid/operation/deepiniddbusproxy.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "deepiniddbusproxy.h" #include "utils.h" DeepinidDBusProxy::DeepinidDBusProxy(QObject *parent) : QObject(parent) , m_deepinId(new DDBusInterface(DEEPINID_SERVICE, DEEPINID_PATH, DEEPINID_INTERFACE, QDBusConnection::sessionBus(), this)) { } void DeepinidDBusProxy::login() const { m_deepinId->asyncCall("Login"); } void DeepinidDBusProxy::logout() const { m_deepinId->asyncCall("Logout"); } QDBusReply DeepinidDBusProxy::localBindCheck(const QString &uuid) { return m_deepinId->call(QDBus::BlockWithGui, "LocalBindCheck", uuid); } QDBusReply DeepinidDBusProxy::meteInfo() { return m_deepinId->call("MeteInfo"); } QVariantMap DeepinidDBusProxy::userInfo() { return m_deepinId->property("UserInfo").toMap(); } ================================================ FILE: src/plugin-deepinid/operation/deepiniddbusproxy.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DEEPINIDDBUSPROXY_H #define DEEPINIDDBUSPROXY_H #include #include #include using Dtk::Core::DDBusInterface; class DeepinidDBusProxy: public QObject { Q_OBJECT Q_PROPERTY(QVariantMap UserInfo READ userInfo NOTIFY UserInfoChanged) public: explicit DeepinidDBusProxy(QObject *parent = nullptr); void login() const; void logout() const; QDBusReply localBindCheck(const QString &uuid); QDBusReply meteInfo(); QVariantMap userInfo(); signals: void UserInfoChanged(const QVariantMap& value) const; private: DDBusInterface *m_deepinId; }; #endif // DEEPINIDDBUSPROXY_H ================================================ FILE: src/plugin-deepinid/operation/deepinidinterface.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dccfactory.h" #include "deepinidinterface.h" #include "utils.h" DeepinIDInterface::DeepinIDInterface(QObject *parent) : QObject(parent) , m_model(new DeepinidModel(this)) , m_worker(new DeepinWorker(m_model, this)) { m_worker->initData(); } QString DeepinIDInterface::editionName() const { if (IsCommunitySystem) { return tr("deepin"); } else { return tr("UOS"); } } DCC_FACTORY_CLASS(DeepinIDInterface) #include "deepinidinterface.moc" ================================================ FILE: src/plugin-deepinid/operation/deepinidinterface.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DEEPINIDINTERFACE_H #define DEEPINIDINTERFACE_H #include "deepinidmodel.h" #include "deepinidworker.h" class DeepinIDInterface : public QObject { Q_OBJECT Q_PROPERTY(DeepinidModel *model READ getModel NOTIFY deepinidModelChanged) Q_PROPERTY(DeepinWorker *worker READ getWorker NOTIFY deepinidWorkerChanged) public: explicit DeepinIDInterface(QObject *parent = nullptr); DeepinidModel *getModel() const { return m_model; }; DeepinWorker *getWorker() const { return m_worker; }; Q_INVOKABLE QString editionName() const; signals: void deepinidModelChanged(DeepinidModel *model); void deepinidWorkerChanged(DeepinWorker *worker); private: DeepinidModel *m_model; DeepinWorker *m_worker; }; #endif // DEEPINIDINTERFACE_H ================================================ FILE: src/plugin-deepinid/operation/deepinidmodel.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "deepinidmodel.h" #include #include #include Q_LOGGING_CATEGORY(DeepinIDModel, "dcc-deepinid-model"); DeepinidModel::DeepinidModel(QObject *parent) : QObject{ parent } , m_loginState(false) , m_activation(false) , m_syncEnabled(true) , m_syncSwitch(false) , m_syncItemShow(false) , m_syncInfoListModel(new SyncInfoListModel(this)) , m_appInfoListModel(new AppInfoListModel(this)) , m_downloader(nullptr) { } void DeepinidModel::setUserinfo(const QVariantMap &userinfo) { if (m_userinfo == userinfo) return; m_userinfo = userinfo; m_loginState = !m_userinfo["Username"].toString().isEmpty(); m_region = (m_userinfo["Region"].toString() == "CN") ? tr("Mainland China") : tr("Other regions"); m_userName = m_userinfo["Nickname"].toString(); if (m_userName.isEmpty()) { m_userName = m_userinfo["Username"].toString(); } m_wechatName = m_userinfo["WechatNickname"].toString().trimmed(); updateAvatarPath(); Q_EMIT loginStateChanged(m_loginState); Q_EMIT avatarChanged(m_avatar); Q_EMIT regionChanged(m_region); Q_EMIT userNameChanged(m_userName); Q_EMIT wechatNameChanged(m_wechatName); Q_EMIT syncEnabledChanged(syncEnabled()); } void DeepinidModel::setActivation(bool activation) { if (m_activation == activation) return; m_activation = activation; Q_EMIT syncEnabledChanged(syncEnabled()); } bool DeepinidModel::syncEnabled() const { return m_activation && (m_userinfo["Region"].toString() == "CN"); } void DeepinidModel::setSyncSwitch(bool enable) { if (m_syncSwitch == enable) return; m_syncSwitch = enable; Q_EMIT syncSwitchChanged(m_syncSwitch); } void DeepinidModel::setSyncItemShow(bool show) { if (m_syncItemShow == show) return; m_syncItemShow = show; Q_EMIT syncItemShowChanged(m_syncItemShow); } void DeepinidModel::setLastSyncTime(const qlonglong &lastSyncTime) { if (m_syncTimestamp == lastSyncTime) return; m_lastSyncTime = QDateTime::fromMSecsSinceEpoch(lastSyncTime * 1000).toString("yyyy/MM/dd hh:mm"); Q_EMIT lastSyncTimeChanged(m_lastSyncTime); } void DeepinidModel::updateSyncItem(const QString &key, bool enable) { m_syncInfoListModel->updateSyncItem(key, enable); } void DeepinidModel::initAppItemList(QList appItemList) { m_appInfoListModel->clearItem(); for (auto item : appItemList) { m_appInfoListModel->addAppItem(item); } } void DeepinidModel::updateAppItem(const QString &key, bool enable) { m_appInfoListModel->updateAppItem(key, enable); } QString DeepinidModel::warnTipsMessage() { if (!m_activation) { return tr("The feature is not available at present, please activate your system first"); }; if (m_userinfo["Region"].toString() != "CN") { return tr("Subject to your local laws and regulations, it is currently unavailable in your region."); } return QString(); } void DeepinidModel::updateAvatarPath() { QString profile_image = m_userinfo["ProfileImage"].toString(); if (profile_image.isEmpty()) { return; } QString avatarPath(QString("%1/.cache/deepin/dde-control-center/sync%2").arg(getenv("HOME")).arg(getUserName())); QDir dir; dir.mkpath(avatarPath); qCDebug(DeepinIDModel) << "profile image:" << profile_image << ", avatar path:" << avatarPath; QString localAvatar = avatarPath + profile_image.right(profile_image.size() - profile_image.lastIndexOf("/")); QString localDefault = avatarPath + "/default.svg"; if (QFile::exists(localAvatar)) { qCDebug(DeepinIDModel) << "local Avatar:" << localAvatar; m_avatar = localAvatar; return; } else if (QFile::exists(localDefault)) { qCDebug(DeepinIDModel) << "local default:" << localDefault; m_avatar = localDefault; return; } if (m_downloader == nullptr) { m_downloader = new DownloadUrl(this); connect(m_downloader, &DownloadUrl::fileDownloaded, this, &DeepinidModel::updateAvatarPath, Qt::UniqueConnection); } m_downloader->downloadFileFromURL(profile_image, avatarPath); } ================================================ FILE: src/plugin-deepinid/operation/deepinidmodel.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DEEPINIDMODEL_H #define DEEPINIDMODEL_H #include "syncinfolistmodel.h" #include "appinfolistmodel.h" #include "downloadurl.h" #include #include class DeepinidModel : public QObject { Q_OBJECT // deepinid Q_PROPERTY(bool loginState READ getLoginState NOTIFY loginStateChanged) Q_PROPERTY(QString avatar READ getAvatar NOTIFY avatarChanged) Q_PROPERTY(QString region READ getRegion NOTIFY regionChanged) Q_PROPERTY(QString userName READ getUserName NOTIFY userNameChanged) Q_PROPERTY(QString wechatName READ getWechatName NOTIFY wechatNameChanged) // 同步服务 Q_PROPERTY(bool syncEnabled READ syncEnabled NOTIFY syncEnabledChanged) Q_PROPERTY(bool syncSwitch READ syncSwitch WRITE setSyncSwitch NOTIFY syncSwitchChanged) Q_PROPERTY(bool syncItemShow READ syncItemShow WRITE setSyncItemShow NOTIFY syncItemShowChanged) Q_PROPERTY(QString lastSyncTime READ lastSyncTime NOTIFY lastSyncTimeChanged) public: explicit DeepinidModel(QObject *parent = nullptr); // deepinid账户 inline const QVariantMap userinfo() const { return m_userinfo; } void setUserinfo(const QVariantMap &userinfo); inline bool getLoginState() const { return m_loginState; } inline const QString getAvatar() const { return m_avatar; } inline const QString getRegion() const { return m_region; } inline const QString getUserName() const { return m_userName; } inline const QString getWechatName() const { return m_wechatName; } // 同步服务 inline bool activation() const { return m_activation; } void setActivation(bool activation); bool syncEnabled() const; inline bool syncSwitch() const { return m_syncSwitch; } void setSyncSwitch(bool enable); inline bool syncItemShow() const { return m_syncItemShow; } void setSyncItemShow(bool show); inline QString lastSyncTime() const { return m_lastSyncTime; } void setLastSyncTime(const qlonglong &lastSyncTime); void updateSyncItem(const QString &key, bool enable); void initAppItemList(QList appItemList); void updateAppItem(const QString &key, bool enable); Q_INVOKABLE SyncInfoListModel* syncInfoListModel() const { return m_syncInfoListModel; } Q_INVOKABLE AppInfoListModel* appInfoListModel() const { return m_appInfoListModel; } Q_INVOKABLE QString warnTipsMessage(); // 获取警告提示信息 protected Q_SLOTS: void updateAvatarPath(); signals: void loginStateChanged(bool loginState); void avatarChanged(const QString &avatar); void regionChanged(const QString ®ion); void userNameChanged(const QString &userName); void wechatNameChanged(const QString &wechatName); void syncEnabledChanged(bool enable); void syncSwitchChanged(bool enable); void syncItemShowChanged(bool show); void syncStateChanged(const std::pair& syncState); void lastSyncTimeChanged(const QString &lastSyncTime); private: // deepinid账户 QVariantMap m_userinfo; bool m_loginState; QString m_avatar; QString m_region; QString m_userName; QString m_wechatName; // 同步服务 bool m_activation; // 激活状态 bool m_syncEnabled; // 同步是否可用:受激活状态、地区限制(未激活不可用,非中国地区不可用) bool m_syncSwitch; // 同步开关是否已开启 bool m_syncItemShow; // 是否显示系统设置中的同步项 qlonglong m_syncTimestamp; // 上次同步时间戳 QString m_lastSyncTime; // 上次同步时间 SyncInfoListModel *m_syncInfoListModel; AppInfoListModel *m_appInfoListModel; DownloadUrl *m_downloader; }; #endif // DEEPINIDMODEL_H ================================================ FILE: src/plugin-deepinid/operation/deepinidworker.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "deepinidworker.h" #include "cryptor.h" #include "utils.h" #include #include #include #include #include #include #include #include #include Q_LOGGING_CATEGORY(DeepinIDWorker, "dcc-deepinid-worker"); DCORE_USE_NAMESPACE static const QString SurPlusError = QStringLiteral("7520"); static const QString NicknameOnce = QStringLiteral("7518"); static void notifyInfo(const QString &reason) { QDBusPendingReply reply = DUtil::DNotifySender(utils::getEditionName() + " ID") .appName("org.deepin.dde.control-center") .appIcon(utils::getIconName()) .appBody(reason) .replaceId(0) .timeOut(3000) .actions(QStringList() << "default") .call(); reply.waitForFinished(); } DeepinWorker::DeepinWorker(DeepinidModel *model, QObject *parent) : QObject(parent) , m_model(model) , m_deepinIDProxy(new DeepinidDBusProxy(this)) , m_syncProxy(new SyncDBusProxy(this)) , m_utcloudProxy(new UtcloudDBusProxy(this)) , m_clientService(nullptr) { QDBusConnection::systemBus().connect(LICENSE_SERVICE, LICENSE_PATH, LICENSE_INTERFACE, "LicenseStateChange", this, SLOT(licenseStateChangeSlot())); connect(m_deepinIDProxy, &DeepinidDBusProxy::UserInfoChanged, [this](const QVariantMap &userinfo) { m_model->setUserinfo(userinfo); if (m_model->syncEnabled()) { activate(); } }); connect(m_syncProxy, &SyncDBusProxy::SwitcherChange, this, &DeepinWorker::onSyncSwitcherChange, Qt::QueuedConnection); connect(m_syncProxy, &SyncDBusProxy::LastSyncTimeChanged, this, &DeepinWorker::onLastSyncTimeChanged, Qt::QueuedConnection); connect(m_utcloudProxy, &UtcloudDBusProxy::SwitcherChange, this, &DeepinWorker::onUtcloudSwitcherChange, Qt::QueuedConnection); connect(m_utcloudProxy, &UtcloudDBusProxy::LoginStatus, this, &DeepinWorker::onUtcloudLoginStatusChange, Qt::QueuedConnection); m_forgetUrl = utils::forgetPwdURL(); m_wechatUrl = utils::wechatURL(); } void DeepinWorker::initData() { // 初始化用户登陆数据 m_model->setUserinfo(m_deepinIDProxy->userInfo()); // 获取认证状态 licenseStateChangeSlot(); } void DeepinWorker::loginUser() { m_deepinIDProxy->login(); } void DeepinWorker::logoutUser() { m_deepinIDProxy->logout(); } void DeepinWorker::openWeb() { QString url = loadCodeURL(); QUrl::toPercentEncoding(url); QDesktopServices::openUrl(QUrl(url)); } void DeepinWorker::setFullName(const QString &name) { QString error; bool ret = m_utcloudProxy->SetNickname(name.trimmed(), error); if (!ret) { QString errorMsg; if (error.contains(NicknameOnce)) { errorMsg = tr("The nickname can be modified only once a day"); notifyInfo(errorMsg); } } } void DeepinWorker::setAutoSync(bool autoSync) { m_syncProxy->SwitcherSet("enabled", autoSync); } void DeepinWorker::setSyncSwitcher(const QStringList &keyList, bool enable) { foreach(auto key, keyList) { m_syncProxy->SwitcherSet(key, enable); } } void DeepinWorker::setUtcloudSwitcher(const QString &key, bool enable) { m_utcloudProxy->SwitcherSet(key, enable); } bool DeepinWorker::checkPasswdEmpty() { QDBusReply reply = m_deepinIDProxy->meteInfo(); if (!reply.isValid()) { qCWarning(DeepinIDWorker) << "get mete info error:" << reply.error(); return false; } QString data = reply.value(); QJsonDocument jsonDoc = QJsonDocument::fromJson(data.toUtf8()); QJsonObject jsonObj = jsonDoc.object(); return jsonObj["passwordEmpty"].toBool(); } QVariantMap DeepinWorker::checkPassword(const QString &passwd) { QVariantMap result; result["isOk"] = false; result["errMsg"] = ""; QByteArray encryptData; if (!Cryptor::RSAPublicEncryptData(m_RSApubkey, passwd, encryptData)) { result["errMsg"] = tr("encrypt password failed"); return result; } QDBusInterface deepinIf(SYNC_SERVICE, DEEPINID_PATH, DEEPINID_INTERFACE, QDBusConnection::sessionBus()); QDBusReply reply = deepinIf.call("Checkpwd", QString::fromLocal8Bit(encryptData.toBase64())); if (reply.isValid()) { m_pwdToken = reply.value(); result["isOk"] = true; } else { QString errmsg = reply.error().message(); qCDebug(DeepinIDWorker) << "check password error:" << errmsg; if(errmsg.contains(SurPlusError)) { QJsonDocument jsonDoc = QJsonDocument::fromJson(errmsg.toUtf8()); QJsonObject jsonObj = jsonDoc.object(); QJsonObject dataObj = jsonObj["data"].toObject(); int count = dataObj["surplus_count"].toInt(); if (count > 0) { result["errMsg"] = tr("Wrong password, %1 chances left").arg(count); } else { result["errMsg"] = tr("The login error has reached the limit today. You can reset the password and try again."); } } } return result; } void DeepinWorker::registerPasswd(const QString &passwd) { QByteArray encryptPwd; if (Cryptor::RSAPublicEncryptData(m_RSApubkey, passwd, encryptPwd)) { QDBusInterface deepinIf(SYNC_SERVICE, DEEPINID_PATH, DEEPINID_INTERFACE, QDBusConnection::sessionBus()); QDBusReply reply = deepinIf.call("SetPassword", QString::fromLocal8Bit(encryptPwd.toBase64())); if (!reply.isValid()) { qCWarning(DeepinIDWorker) << "set password error:" << QDBusError::errorString(reply.error().type()) << reply.error(); } } else { qCWarning(DeepinIDWorker) << "encrypt password failed"; } } void DeepinWorker::clearData() { QDBusInterface deepinIf(SYNC_SERVICE, UTCLOUD_PATH, UTCLOUD_INTERFACE, QDBusConnection::sessionBus()); QDBusReply reply = deepinIf.asyncCall("Empty"); if (!reply.isValid()) { qCWarning(DeepinIDWorker) << "clear cloud data error:" << reply.error(); } else { qCDebug(DeepinIDWorker) << "clear cloud data success"; } notifyInfo(tr("Operation Successful")); } void DeepinWorker::openForgetPasswd() { QString url = QString("%1&time=%2").arg(m_forgetUrl).arg(QDateTime::currentMSecsSinceEpoch()); qCDebug(DeepinIDWorker) << "forget passwd url:" << url; QDBusInterface clientIf(DEEPINCLIENT_SERVICE, DEEPINCLIENT_PATH, DEEPINCLIENT_INTERFACE, QDBusConnection::sessionBus()); QDBusReply reply = clientIf.asyncCall("LoadPage", url); if (!reply.isValid()) { qCWarning(DeepinIDWorker) << "load page error:" << reply.error(); } } void DeepinWorker::unBindPlatform() { QDBusInterface deepinIf(SYNC_SERVICE, DEEPINID_PATH, DEEPINID_INTERFACE, QDBusConnection::sessionBus()); QDBusReply reply = deepinIf.asyncCall("UnBindPlatform", "wechat"); if (!reply.isValid()) { qCWarning(DeepinIDWorker) << "Unbind platform failed, error: " << reply.error(); } else { qCDebug(DeepinIDWorker) << "Unbind wechat success"; } notifyInfo(tr("Operation Successful")); } void DeepinWorker::bindAccount() { QString bindurl; QString strsession = getSessionID(); if (strsession.isEmpty()) { bindurl = ""; } else { bindurl = m_wechatUrl; bindurl += "&sessionid="; bindurl += strsession; bindurl += QString("&time=%1").arg(QDateTime::currentMSecsSinceEpoch()); } qCDebug(DeepinIDWorker) << "Init wechat dialog, set bind url: " << bindurl; if (m_clientService == nullptr) { m_clientService = new QDBusInterface(DEEPINCLIENT_SERVICE, DEEPINCLIENT_PATH, DEEPINCLIENT_INTERFACE, QDBusConnection::sessionBus()); } else if (!m_clientService->isValid()) { delete m_clientService; m_clientService = new QDBusInterface(DEEPINCLIENT_SERVICE, DEEPINCLIENT_PATH, DEEPINCLIENT_INTERFACE, QDBusConnection::sessionBus()); } connect(m_clientService, SIGNAL(bindSuccess()), this, SLOT(onBindSuccess()), Qt::UniqueConnection); m_clientService->asyncCall("BindAccount", bindurl); } void DeepinWorker::onSyncSwitcherChange(const QString &key, bool enable) { if (key == "enabled") { m_model->setSyncSwitch(enable); return; } m_model->updateSyncItem(key, enable); } void DeepinWorker::onLastSyncTimeChanged(qlonglong lastSyncTime) { m_model->setLastSyncTime(lastSyncTime); } void DeepinWorker::licenseStateChangeSlot() { QFutureWatcher *watcher = new QFutureWatcher(this); connect(watcher, &QFutureWatcher::finished, this, [this, watcher] { // 如果系统为激活状态,并且是中国大陆地区用户,则请求同步状态 if (m_model->syncEnabled()) { activate(); } else { // 否则,关闭自动同步 setAutoSync(false); } watcher->deleteLater(); }); QFuture future = QtConcurrent::run(&DeepinWorker::getLicenseState, this); watcher->setFuture(future); } void DeepinWorker::onUtcloudSwitcherChange(const QVariantList &args) { if (args.size() >= 2) { m_model->updateAppItem(args.at(0).toString(), args.at(1).toBool()); } else { qCWarning(DeepinIDWorker) << "onUtcloudSwitcherChange: args size is wrong"; } } void DeepinWorker::onUtcloudLoginStatusChange(const QVariantList &args) { if (args.size() >= 1) { if (args.at(0).toInt() == 4) { requestUtCloudDump(); } } else { qCWarning(DeepinIDWorker) << "onUtcloudLoginStatusChange: args size is wrong"; } } void DeepinWorker::onBindSuccess() { qCDebug(DeepinIDWorker) << "on bind success"; notifyInfo(tr("Operation Successful")); QDBusInterface deepinIf(SYNC_SERVICE, DEEPINID_PATH, DEEPINID_INTERFACE, QDBusConnection::sessionBus()); QDBusReply reply = deepinIf.asyncCall("FlushUseInfo"); if (!reply.isValid()) { qCWarning(DeepinIDWorker) << "Refresh user info failed, error: " << reply.error(); } } void DeepinWorker::activate() { requestSyncDump(); requestUtCloudDump(); onLastSyncTimeChanged(m_syncProxy->lastSyncTime()); getRSAPubKey(); } void DeepinWorker::requestSyncDump() { QFutureWatcher *watcher = new QFutureWatcher(this); connect(watcher, &QFutureWatcher::finished, this, [=] { QJsonObject obj = watcher->result(); if (obj.isEmpty()) { qCWarning(DeepinIDWorker) << "Sync Info is Wrong"; return; } qCDebug(DeepinIDWorker) << "Sync dump:" << obj; for (auto key : obj.keys()) { if (key == "enabled") { m_model->setSyncSwitch(obj[key].toBool()); } else { m_model->updateSyncItem(key, obj[key].toBool()); } } watcher->deleteLater(); }); QFuture future = QtConcurrent::run([=]() -> QJsonObject { QDBusPendingReply reply = m_syncProxy->SwitcherDump(); reply.waitForFinished(); return QJsonDocument::fromJson(reply.value().toUtf8()).object(); }); watcher->setFuture(future); } void DeepinWorker::requestUtCloudDump() { QFutureWatcher *watcher = new QFutureWatcher(this); connect(watcher, &QFutureWatcher::finished, this, [=] { QJsonObject obj = watcher->result(); if (obj.isEmpty()) { qCWarning(DeepinIDWorker) << "Sync Info is Wrong"; return; } qCDebug(DeepinIDWorker) << "utcloud dump:" << obj; m_model->setSyncSwitch(obj["enabled"].toBool()); QJsonObject apps = obj["apps"].toObject(); QList appItemList; for (auto key : apps.keys()) { QJsonObject appData = apps[key].toObject(); QString name = appData["name"].toString(); QString displayName = appData["display_name"].toString(); QString icon = appData["icon"].toString(); bool enable = appData["enable"].toBool(); AppItemData *item = new AppItemData; item->key = key; item->name = displayName.isEmpty() ? name : displayName; item->icon = icon; item->enable = enable; appItemList.append(item); } m_model->initAppItemList(appItemList); watcher->deleteLater(); }); QFuture future = QtConcurrent::run([=]() -> QJsonObject { QDBusPendingReply reply = m_utcloudProxy->SwitcherDump(); reply.waitForFinished(); return QJsonDocument::fromJson(reply.value().toUtf8()).object(); }); watcher->setFuture(future); } QString DeepinWorker::loadCodeURL() { auto func_getToken = [] { QDBusPendingReply retToken = DDBusSender() .service(SYNC_SERVICE) .interface(UTCLOUD_INTERFACE) .path(UTCLOUD_PATH) .method("UnionLoginToken") .call(); retToken.waitForFinished(); QString token = retToken.value(); if (token.isEmpty()) qCWarning(DeepinIDWorker) << retToken.error().message(); return token; }; QString oauthURI = "https://login.uniontech.com"; if (IsCommunitySystem) { oauthURI = "https://login.deepin.org"; } if (!qEnvironmentVariableIsEmpty("DEEPINID_OAUTH_URI")) { oauthURI = qgetenv("DEEPINID_OAUTH_URI"); } QString url = oauthURI + QString("/oauth2/authorize/registerlogin?autoLoginKey=%1").arg(func_getToken()); qCDebug(DeepinIDWorker) << "open url:" << url; return url; } void DeepinWorker::getLicenseState() { if (IsCommunitySystem) { m_model->setActivation(true); return; } QDBusInterface licenseInfo(LICENSE_SERVICE, LICENSE_PATH, LICENSE_INTERFACE, QDBusConnection::systemBus()); if (!licenseInfo.isValid()) { qCWarning(DeepinIDWorker) << "com.deepin.license error ,"<< licenseInfo.lastError().name(); } else { quint32 reply = licenseInfo.property("AuthorizationState").toUInt(); m_model->setActivation(reply == 1 || reply == 3); } } void DeepinWorker::getRSAPubKey() { QDBusInterface deepinIf(SYNC_SERVICE, DEEPINID_PATH, DEEPINID_INTERFACE, QDBusConnection::sessionBus()); QDBusPendingCall call = deepinIf.asyncCall("GetRSAKey"); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, [=](QDBusPendingCallWatcher *self){ QDBusPendingReply reply = *self; if(reply.isError()) { qCDebug(DeepinIDWorker) << "get rsa key error:" << reply.error(); } else { m_RSApubkey = reply.value().toStdString(); } self->deleteLater(); }); } QString DeepinWorker::getSessionID() { QString strsession; QDBusInterface deepinIdIf(DEEPINID_SERVICE, DEEPINID_PATH, DEEPINID_INTERFACE, QDBusConnection::sessionBus()); QDBusReply reply = deepinIdIf.call("Get"); if (reply.isValid()) { auto sessionJson = reply.value(); auto doc = QJsonDocument::fromJson(sessionJson); auto session = doc.object(); strsession = session.value("SessionID").toString(); } else { qCWarning(DeepinIDWorker) << "get session id error:" << reply.error(); } return strsession; } ================================================ FILE: src/plugin-deepinid/operation/deepinidworker.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DEEPINIDWORKER_H #define DEEPINIDWORKER_H #include "deepinidmodel.h" #include "deepiniddbusproxy.h" #include "syncdbusproxy.h" #include "utclouddbusproxy.h" class DeepinWorker : public QObject { Q_OBJECT public: explicit DeepinWorker(DeepinidModel *model, QObject *parent = nullptr); void initData(); Q_INVOKABLE void loginUser(); Q_INVOKABLE void logoutUser(); Q_INVOKABLE void openWeb(); Q_INVOKABLE void setFullName(const QString &name); Q_INVOKABLE void setAutoSync(bool autoSync); Q_INVOKABLE void setSyncSwitcher(const QStringList &keyList, bool enable); Q_INVOKABLE void setUtcloudSwitcher(const QString &key, bool enable); Q_INVOKABLE bool checkPasswdEmpty(); Q_INVOKABLE QVariantMap checkPassword(const QString &passwd); Q_INVOKABLE void registerPasswd(const QString &passwd); Q_INVOKABLE void clearData(); Q_INVOKABLE void openForgetPasswd(); Q_INVOKABLE void unBindPlatform(); Q_INVOKABLE void bindAccount(); public Q_SLOTS: void onSyncSwitcherChange(const QString &key, bool enable); void onLastSyncTimeChanged(qlonglong lastSyncTime); void licenseStateChangeSlot(); void onUtcloudSwitcherChange(const QVariantList &args); void onUtcloudLoginStatusChange(const QVariantList &args); void onBindSuccess(); private: void activate(); void requestSyncDump(); void requestUtCloudDump(); QString loadCodeURL(); void getLicenseState(); void getRSAPubKey(); QString getSessionID(); private: DeepinidModel *m_model; DeepinidDBusProxy *m_deepinIDProxy; SyncDBusProxy *m_syncProxy; UtcloudDBusProxy *m_utcloudProxy; std::string m_RSApubkey; QDBusInterface *m_clientService; QString m_pwdToken; QString m_forgetUrl; QString m_wechatUrl; }; #endif // DEEPINIDWORKER_H ================================================ FILE: src/plugin-deepinid/operation/downloadurl.cpp ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "downloadurl.h" #include #include #include #include #include #include #include #include DownloadUrl::DownloadUrl(QObject *parent) : QObject(parent) , m_isReady(true) { } DownloadUrl::~DownloadUrl() { } void DownloadUrl::downloadFileFromURL(const QString &url, const QString &filePath, bool fullname) { if (url.isEmpty()) return; QString fileName; fileName = fullname ? filePath : filePath + url.right(url.size() - url.lastIndexOf("/")); if (fileName.contains("default.png", Qt::CaseInsensitive)) { fileName = fileName.remove("png").append("svg"); } qDebug() << "Download file from URL, URL: " << url << ", fileName: " << fileName << ", ready: " << m_isReady; if (!m_isReady) return; m_isReady = false; fileName = fileName + ".tmp"; m_retryMap.insert(fileName, url); QNetworkAccessManager manager; QNetworkRequest request; QEventLoop loop; QTimer timer; request.setUrl(QUrl(url)); request.setAttribute(QNetworkRequest::RedirectPolicyAttribute, QNetworkRequest::NoLessSafeRedirectPolicy); QNetworkReply *pReply = manager.get(request); connect(pReply, &QNetworkReply::finished, &loop, &QEventLoop::quit); connect(&timer, &QTimer::timeout, &loop, &QEventLoop::quit); if (pReply) { timer.setSingleShot(true); timer.start(10 * 1000); loop.exec(); if (QNetworkReply::NoError == pReply->error()) { QByteArray replyData = pReply->readAll(); QFile file(fileName); file.open(QIODevice::WriteOnly); if (!file.isOpen()) { m_isReady = true; delete pReply; return; } if (file.write(replyData) <= 0) { qWarning() << "On download file failed, reply data is empty: " << url; file.remove(); } else { file.close(); if (m_retryMap.contains(file.fileName())) m_retryMap.remove(file.fileName()); const QString fileName = file.fileName().left(file.fileName().length() - 4); QFile::rename(file.fileName(), fileName); qInfo() << "On download file, file name: " << fileName; Q_EMIT fileDownloaded(fileName); } } else { qWarning() << "Download failed:" << url << pReply->errorString(); QString url = pReply->url().toString(); if (m_retryMap.value(fileName) != url) qWarning() << "Download file error, url: " << m_retryMap.value(fileName) << " is different from " << url; } pReply->close(); pReply->deleteLater(); pReply = nullptr; m_isReady = true; if (!m_retryMap.isEmpty()) onDownloadFileError(m_retryMap.begin().key(), m_retryMap.begin().value()); } } void DownloadUrl::onDownloadFileError(const QString &url, const QString &fileName) { qDebug() << "Download file error, will try again after 20 seconds if url is valid"; if (url.isEmpty()) return; QTimer::singleShot(20000, this, [=] { qInfo() << "Retry to download file " << url << " to " << fileName; downloadFileFromURL(url, fileName, true); }); } ================================================ FILE: src/plugin-deepinid/operation/downloadurl.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include class DownloadUrl : public QObject { Q_OBJECT public: explicit DownloadUrl(QObject *parent = nullptr); virtual ~DownloadUrl(); void downloadFileFromURL(const QString &url, const QString &filePath, bool fullname = false); Q_SIGNALS: void fileDownloaded(const QString &fileName); public Q_SLOTS: void onDownloadFileError(const QString &url, const QString &fileName); private: bool m_isReady; QMap m_retryMap; }; ================================================ FILE: src/plugin-deepinid/operation/hardwareinfo.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "hardwareinfo.h" DMIInfo::DMIInfo() { } void registerDMIInfoMetaType() { qRegisterMetaType("DMIInfo"); qDBusRegisterMetaType(); } QDebug operator<<(QDebug debug, const DMIInfo &info) { debug << QString("DMIInfo(") << info.biosVendor << ", " << info.biosVersion << ", " << info.biosDate << ", " << info.boardName << ", " << info.boardSerial << ", " << info.boardVendor << ", " << info.boardVersion << ", " << info.productName << ", " << info.productFamily << ", " << info.producctSerial << ", " << info.productUUID << ", " << info.productVersion << ")"; return debug; } const QDBusArgument &operator>>(const QDBusArgument &arg, DMIInfo &info) { arg.beginStructure(); arg >> info.biosVendor >> info.biosVersion >> info.biosDate >> info.boardName >> info.boardSerial >> info.boardVendor >> info.boardVersion >> info.productName >> info.productFamily >> info.producctSerial >> info.productUUID >> info.productVersion; arg.endStructure(); return arg; } QDBusArgument &operator<<(QDBusArgument &arg, const DMIInfo &info) { arg.beginStructure(); arg << info.biosVendor << info.biosVersion << info.biosDate << info.boardName << info.boardSerial << info.boardVendor << info.boardVersion << info.productName << info.productFamily << info.producctSerial << info.productUUID << info.productVersion; arg.endStructure(); return arg; } HardwareInfo::HardwareInfo() { } QDebug operator<<(QDebug debug, const HardwareInfo &info) { debug << "HardwareInfo(" <>(const QDBusArgument &arg, HardwareInfo &info) { arg.beginStructure(); arg >> info.id >> info.hostName >> info.username >> info.os >> info.cpu >> info.laptop >> info.memory >> info.diskTotal >> info.networkCards >> info.diskList >> info.dmi; arg.endStructure(); return arg; } void registerHardwareInfoMetaType() { qRegisterMetaType("HardwareInfo"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-deepinid/operation/hardwareinfo.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef HARDWAREINFO_H #define HARDWAREINFO_H #include #include class DMIInfo { public: DMIInfo(); friend QDebug operator<<(QDebug debug, const DMIInfo &info); friend const QDBusArgument &operator>>(const QDBusArgument &arg, DMIInfo &info); friend QDBusArgument &operator<<(QDBusArgument &arg, const DMIInfo &info); public: QString biosVendor{""}; QString biosVersion{""}; QString biosDate{""}; QString boardName{""}; QString boardSerial{""}; QString boardVendor{""}; QString boardVersion{""}; QString productName{""}; QString productFamily{""}; QString producctSerial{""}; QString productUUID{""}; QString productVersion{""}; }; Q_DECLARE_METATYPE(DMIInfo) void registerDMIInfoMetaType(); class HardwareInfo { public: HardwareInfo(); friend QDebug operator<<(QDebug debug, const HardwareInfo &info); friend const QDBusArgument &operator>>(const QDBusArgument &arg, HardwareInfo &info); friend QDBusArgument &operator<<(QDBusArgument &arg, const HardwareInfo &info); public: QString id{""}; QString hostName{""}; QString username{""}; QString os{""}; QString cpu{""}; bool laptop{false}; qint64 memory{0}; qint64 diskTotal{0}; QString networkCards{""}; QString diskList{""}; DMIInfo dmi; }; Q_DECLARE_METATYPE(HardwareInfo) void registerHardwareInfoMetaType(); #endif // HARDWAREINFO_H ================================================ FILE: src/plugin-deepinid/operation/qrc/deepinid.qrc ================================================ icons/dcc_cloud_logo.dci icons/dcc_login_bg.svg icons/dcc_cfg_set_24px.svg icons/dcc_union_id_32px.svg icons/dcc_not_use_28px.svg icons/dcc_secwechat_26px.svg icons/dcc_wechattip_24px.svg icons/dcc_uosidtip_24px.svg light/actions/dcc_cloud_net_12px.svg light/actions/dcc_cloud_luncher_12px.svg light/actions/dcc_cloud_mouse_12px.svg light/actions/dcc_cloud_power_12px.svg light/actions/dcc_cloud_taskbar_12px.svg light/actions/dcc_cloud_them_12px.svg light/actions/dcc_cloud_update_12px.svg light/actions/dcc_cloud_voice_12px.svg light/actions/dcc_cloud_wallpaper_12px.svg dark/actions/dcc_cloud_net_12px.svg dark/actions/dcc_cloud_luncher_12px.svg dark/actions/dcc_cloud_mouse_12px.svg dark/actions/dcc_cloud_power_12px.svg dark/actions/dcc_cloud_taskbar_12px.svg dark/actions/dcc_cloud_them_12px.svg dark/actions/dcc_cloud_update_12px.svg dark/actions/dcc_cloud_voice_12px.svg dark/actions/dcc_cloud_wallpaper_12px.svg ================================================ FILE: src/plugin-deepinid/operation/syncdbusproxy.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "syncdbusproxy.h" #include "utils.h" SyncDBusProxy::SyncDBusProxy(QObject *parent) : QObject(parent) , m_syncInter(new DDBusInterface(SYNC_SERVICE, SYNC_PATH, SYNC_INTERFACE, QDBusConnection::sessionBus(), this)) { } void SyncDBusProxy::SwitcherSet(const QString &arg_0, bool state) { m_syncInter->asyncCallWithArgumentList("SwitcherSet", { arg_0, state }); } bool SyncDBusProxy::SwitcherGet(const QString &arg_0) { QDBusPendingReply reply = m_syncInter->asyncCallWithArgumentList("SwitcherGet", { arg_0 }); reply.waitForFinished(); if (!reply.isValid()) { return false; } return reply.value(); } QDBusPendingCall SyncDBusProxy::SwitcherDump() { return m_syncInter->asyncCall("SwitcherDump"); } qlonglong SyncDBusProxy::lastSyncTime() { return m_syncInter->property("LastSyncTime").toLongLong(); } ================================================ FILE: src/plugin-deepinid/operation/syncdbusproxy.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef SYNCDBUSPROXY_H #define SYNCDBUSPROXY_H #include #include #include #include #include using Dtk::Core::DDBusInterface; class SyncDBusProxy : public QObject { Q_OBJECT Q_PROPERTY(qlonglong LastSyncTime READ lastSyncTime NOTIFY LastSyncTimeChanged) public: explicit SyncDBusProxy(QObject *parent = nullptr); void SwitcherSet(const QString &arg_0, bool state); bool SwitcherGet(const QString &arg_0); QDBusPendingCall SwitcherDump(); qlonglong lastSyncTime(); signals: void SwitcherChange(QString, bool); void LastSyncTimeChanged(qlonglong); private: DDBusInterface *m_syncInter; }; #endif // SYNCDBUSPROXY_H ================================================ FILE: src/plugin-deepinid/operation/syncinfolistmodel.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "syncinfolistmodel.h" #include SyncInfoListModel::SyncInfoListModel(QObject *parent) : QAbstractListModel(parent) { m_syncItemList = { { Sound, "dcc_cloud_voice", tr("Sound"), QStringList() << "audio", false }, { Power, "dcc_cloud_power", tr("Power"), QStringList() << "power", false }, { Mouse, "dcc_cloud_mouse", tr("Mouse"), QStringList() << "peripherals", false }, { Update, "dcc_cloud_update", tr("Update"), QStringList() << "updater", false }, { Screensaver, "dcc_cloud_wallpaper", tr("Screensaver"), QStringList() << "screensaver", false }, }; } void SyncInfoListModel::updateSyncItem(const QString &key, bool enable) { for (int i = 0; i < m_syncItemList.count(); i++) { auto &syncItem = m_syncItemList[i]; if (syncItem.keyList.contains(key)) { syncItem.isChecked = enable; QModelIndex modelIndex = createIndex(i, 0); emit dataChanged(modelIndex, modelIndex, { IsCheckedRole }); break; } } } int SyncInfoListModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); return m_syncItemList.count(); } QVariant SyncInfoListModel::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() >= m_syncItemList.count()) return QVariant(); auto syncItem = m_syncItemList[index.row()]; switch (role) { case TypeRole: return syncItem.type; case DisplayIconRole: return syncItem.displayIcon.startsWith("/") ? QUrl::fromLocalFile(syncItem.displayIcon).toString() : syncItem.displayIcon; case DisplayNameRole: return syncItem.displayName; case KeyListRole: return syncItem.keyList; case IsCheckedRole: return syncItem.isChecked; default: break; } return QVariant(); } ================================================ FILE: src/plugin-deepinid/operation/syncinfolistmodel.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef SYNCINFOLISTMODEL_H #define SYNCINFOLISTMODEL_H #include "utils.h" #include struct SyncItemData { SyncType type; QString displayIcon; QString displayName; QStringList keyList; bool isChecked; }; class SyncInfoListModel : public QAbstractListModel { Q_OBJECT public: enum SyncItemRoles { TypeRole = Qt::UserRole + 1, DisplayIconRole, DisplayNameRole, KeyListRole, IsCheckedRole, }; Q_ENUM(SyncItemRoles) explicit SyncInfoListModel(QObject *parent = nullptr); void updateSyncItem(const QString &key, bool enable); protected: int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override { QHash roles; roles[TypeRole] = "type"; roles[DisplayIconRole] = "displayIcon"; roles[DisplayNameRole] = "displayName"; roles[KeyListRole] = "keyList"; roles[IsCheckedRole] = "isChecked"; return roles; } private: QList m_syncItemList; }; #endif // SYNCINFOLISTMODEL_H ================================================ FILE: src/plugin-deepinid/operation/utclouddbusproxy.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "utclouddbusproxy.h" #include "utils.h" #include #include UtcloudDBusProxy::UtcloudDBusProxy(QObject *parent) : QObject(parent) { m_utcloudInter = new QDBusInterface(SYNC_SERVICE, UTCLOUD_PATH, UTCLOUD_INTERFACE, QDBusConnection::sessionBus(), this); QDBusConnection dbusConnection = m_utcloudInter->connection(); dbusConnection.connect(SYNC_SERVICE, UTCLOUD_PATH, UTCLOUD_INTERFACE, "SwitcherChange", "av", this, SIGNAL(SwitcherChange(QVariantList))); dbusConnection.connect(SYNC_SERVICE, UTCLOUD_PATH, UTCLOUD_INTERFACE, "LoginStatus", "av", this, SIGNAL(LoginStatus(QVariantList))); } void UtcloudDBusProxy::SwitcherSet(const QString &arg_0, bool state) { m_utcloudInter->asyncCallWithArgumentList("SwitcherSet", { arg_0, state }); } bool UtcloudDBusProxy::SwitcherGet(const QString &arg_0) { QDBusPendingReply reply = m_utcloudInter->asyncCallWithArgumentList("SwitcherGet", { arg_0 }); reply.waitForFinished(); if (!reply.isValid()) { return false; } return reply.value(); } QDBusPendingCall UtcloudDBusProxy::SwitcherDump() { return m_utcloudInter->asyncCall("SwitcherDump"); } bool UtcloudDBusProxy::SetNickname(const QString &name, QString &errorMsg) { QDBusPendingReply reply = m_utcloudInter->asyncCallWithArgumentList("SetNickname", { name }); reply.waitForFinished(); if (!reply.isValid()) { qWarning() << "set nickname failed, error: " << reply.error().message(); errorMsg = reply.error().message(); return false; } return reply.value(); } ================================================ FILE: src/plugin-deepinid/operation/utclouddbusproxy.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef UTCLOUDDBUSPROXY_H #define UTCLOUDDBUSPROXY_H #include #include class QDBusInterface; class UtcloudDBusProxy : public QObject { Q_OBJECT public: explicit UtcloudDBusProxy(QObject *parent = nullptr); void SwitcherSet(const QString &arg_0, bool state); bool SwitcherGet(const QString &arg_0); QDBusPendingCall SwitcherDump(); bool SetNickname(const QString &name, QString &errorMsg); signals: void SwitcherChange(const QVariantList &); void LoginStatus(const QVariantList &); private: QDBusInterface *m_utcloudInter; }; #endif // UTCLOUDDBUSPROXY_H ================================================ FILE: src/plugin-deepinid/operation/utils.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "utils.h" #include "hardwareinfo.h" #include #include #include #include #include #include #include #include #include #include #include #include DCORE_USE_NAMESPACE namespace utils { QString getUrlTitle() { QString url; if (qEnvironmentVariableIsEmpty("DEEPIN_PRE")) { url = IsCommunitySystem ? QStringLiteral("https://login.deepin.org") : QStringLiteral("https://login.uniontech.com"); } else { url = IsCommunitySystem ? QStringLiteral("https://login-pre.deepin.org") : QStringLiteral("https://login-pre.uniontech.com"); } return url; } QString forgetPwdURL() { static QString forgetUrl; if (forgetUrl.isEmpty()) { forgetUrl = getUrlTitle() + QStringLiteral("/view/client/forgot-password"); } QString templateURL = "%1"; templateURL += "?lang=%2"; templateURL += "&theme=%3"; templateURL += "&color=%4"; templateURL += "&font_family=%5"; templateURL += "&client_version=%6"; templateURL += "&device_kernel=%7"; templateURL += "&device_processor=%8"; templateURL += "&os_version=%9"; templateURL += "&device_code=%10"; templateURL += "&user_name=%11"; templateURL += "&device_name=%12"; QStringList deviceInfo = getDeviceInfo(); auto url = QString(templateURL) .arg(forgetUrl) .arg(QLocale().name()) .arg(getThemeName()) .arg(getActiveColor()) .arg(getStandardFont()) .arg(qApp->applicationVersion()) .arg(getDeviceKernel()) .arg(deviceInfo.at(2)) .arg(getOsVersion()) .arg(getDeviceCode()) .arg(deviceInfo.at(0)) .arg(deviceInfo.at(1)); return url.remove(QRegularExpression("#")); } QString wechatURL() { static QString wechatUrl; if (wechatUrl.isEmpty()) { wechatUrl = getUrlTitle() + QStringLiteral("/view/client/bind-third/wechat"); } QString templateURL = "%1"; templateURL += "?lang=%2"; templateURL += "&theme=%3"; templateURL += "&color=%4"; templateURL += "&font_family=%5"; templateURL += "&client_version=%6"; templateURL += "&device_kernel=%7"; templateURL += "&device_processor=%8"; templateURL += "&os_version=%9"; templateURL += "&device_code=%10"; templateURL += "&user_name=%11"; templateURL += "&device_name=%12"; QStringList deviceInfo = getDeviceInfo(); auto url = QString(templateURL) .arg(wechatUrl) .arg(QLocale().name()) .arg(getThemeName()) .arg(getActiveColor()) .arg(getStandardFont()) .arg(qApp->applicationVersion()) .arg(getDeviceKernel()) .arg(deviceInfo.at(2)) .arg(getOsVersion()) .arg(getDeviceCode()) .arg(deviceInfo.at(0)) .arg(deviceInfo.at(1)); return url.remove(QRegularExpression("#")); } QString getThemeName() { auto themeType = Dtk::Gui::DGuiApplicationHelper::instance()->themeType(); return themeType == Dtk::Gui::DGuiApplicationHelper::DarkType ? "dark" : "light"; } QString getActiveColor() { QDBusInterface appearance_ifc_("org.deepin.dde.Appearance1", "/org/deepin/dde/Appearance1", "org.deepin.dde.Appearance1", QDBusConnection::sessionBus()); return appearance_ifc_.property("QtActiveColor").toString(); } QString getStandardFont() { QDBusInterface appearance_ifc_("org.deepin.dde.Appearance1", "/org/deepin/dde/Appearance1", "org.deepin.dde.Appearance1", QDBusConnection::sessionBus()); return appearance_ifc_.property("StandardFont").toString(); } QString getDeviceKernel() { QProcess process; process.start("uname", { "-r" }); process.waitForFinished(); QByteArray output = process.readAllStandardOutput(); int idx = output.indexOf('\n'); if (-1 != idx) { output.remove(idx, 1); } return output.data(); } QString getOsVersion() { QString version = QString("%1 (%2)").arg(DSysInfo::uosEditionName()).arg(DSysInfo::minorVersion()); return version; } QString getDeviceCode() { QDBusInterface Interface("com.deepin.deepinid", "/com/deepin/deepinid", "org.freedesktop.DBus.Properties", QDBusConnection::sessionBus()); QDBusMessage reply = Interface.call("Get", "com.deepin.deepinid", "HardwareID"); QList outArgs = reply.arguments(); QString deviceCode = outArgs.at(0).value().variant().toString(); return deviceCode; } QStringList getDeviceInfo() { qDBusRegisterMetaType(); QDBusInterface licenseInfo("com.deepin.sync.Helper", "/com/deepin/sync/Helper", "com.deepin.sync.Helper", QDBusConnection::systemBus()); QDBusReply hardwareInfo = licenseInfo.call(QDBus::AutoDetect, "GetHardware"); QJsonObject jsonObject; auto hardwareInfoValue = hardwareInfo.value(); auto hardwareDMIValue = hardwareInfo.value().dmi; qDebug() << hardwareInfo.error(); // -pc QString userName = hardwareInfoValue.hostName; QString Vendor = hardwareDMIValue.boardVendor; QString cpu = hardwareInfoValue.cpu; QStringList deviceInfo; deviceInfo.append(userName); deviceInfo.append(Vendor); deviceInfo.append(cpu); return deviceInfo; } QString getEditionName() { return IsCommunitySystem ? "deepin" : "UOS"; } QString getIconName() { return IsCommunitySystem ? "deepin-id" : "uos-id"; } }; // namespace utils ================================================ FILE: src/plugin-deepinid/operation/utils.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef UTILS_H #define UTILS_H #include DCORE_USE_NAMESPACE // com.deepin.deepinid 主要是用于登陆登出,和账户信息相关 #define DEEPINID_SERVICE QStringLiteral("com.deepin.deepinid") #define DEEPINID_PATH QStringLiteral("/com/deepin/deepinid") #define DEEPINID_INTERFACE QStringLiteral("com.deepin.deepinid") // com.deepin.sync.Daemon 主要是用于dde系统设置同步 #define SYNC_SERVICE QStringLiteral("com.deepin.sync.Daemon") #define SYNC_INTERFACE QStringLiteral("com.deepin.sync.Daemon") #define SYNC_PATH QStringLiteral("/com/deepin/sync/Daemon") // com.deepin.sync.Daemon 主要是用于应用数据同步(例如:日历、浏览器...) #define UTCLOUD_PATH QStringLiteral("/com/deepin/utcloud/Daemon") #define UTCLOUD_INTERFACE QStringLiteral("com.deepin.utcloud.Daemon") #define LICENSE_SERVICE QStringLiteral("com.deepin.license") #define LICENSE_PATH QStringLiteral("/com/deepin/license/Info") #define LICENSE_INTERFACE QStringLiteral("com.deepin.license.Info") #define DEEPINCLIENT_SERVICE QStringLiteral("com.deepin.deepinid.Client") #define DEEPINCLIENT_PATH QStringLiteral("/com/deepin/deepinid/Client") #define DEEPINCLIENT_INTERFACE QStringLiteral("com.deepin.deepinid.Client") const DSysInfo::UosType UosType = DSysInfo::uosType(); const DSysInfo::UosEdition UosEdition = DSysInfo::uosEditionType(); const bool IsServerSystem = (DSysInfo::UosServer == UosType); // 是否是服务器版 const bool IsCommunitySystem = (DSysInfo::UosCommunity == UosEdition); // 是否是社区版 const bool IsProfessionalSystem = (DSysInfo::UosProfessional == UosEdition); // 是否是专业版 const bool IsHomeSystem = (DSysInfo::UosHome == UosEdition); // 是否是个人版 const bool IsDeepinDesktop = (DSysInfo::DeepinDesktop == DSysInfo::deepinType()); // 是否是Deepin桌面 enum SyncType { Sound, Theme, Power, Network, Mouse, Update, Dock, Launcher, Wallpaper, Screensaver }; namespace utils { QString getUrlTitle(); QString forgetPwdURL(); QString wechatURL(); QString getThemeName(); QString getActiveColor(); QString getStandardFont(); QString getDeviceKernel(); QString getOsVersion(); QString getDeviceCode(); QStringList getDeviceInfo(); QString getEditionName(); QString getIconName(); } // namespace utils #endif // UTILS_H ================================================ FILE: src/plugin-deepinid/qml/ConFirmDialog.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D D.DialogWindow { id: dialog icon: "dcc_union_id" width: 420 modality: Qt.WindowModal property string title property string message property string leftBtnText property string rightBtnText signal accepted() // FIXME: Label文本如果设置wrapMode换行,那么这里如果不指定dialog窗口的高,显示就有问题;并且这里要考虑中文不换行和英文会换行的情况,所以通过advance属性动态调整高度 Component.onCompleted: { dialog.height = 175 + titleLable.advance.height + messageLable.advance.height } ColumnLayout { width: parent.width Label { id: titleLable Layout.fillWidth: true font: D.DTK.fontManager.t5 text: dialog.title horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter wrapMode: Text.WordWrap } Label { id: messageLable Layout.fillWidth: true font: D.DTK.fontManager.t7 text: dialog.message horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter wrapMode: Text.WordWrap } Item { Layout.fillWidth: true height: 20 } RowLayout { Layout.fillWidth: true Layout.bottomMargin: 10 spacing: 10 Button { text: dialog.leftBtnText Layout.fillWidth: true onClicked: { close() } } D.WarningButton { text: dialog.rightBtnText Layout.fillWidth: true onClicked: { dialog.accepted() } } } } } ================================================ FILE: src/plugin-deepinid/qml/ConfirmManager.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D Item { id: root property alias title: confirmDlg.title property alias message: confirmDlg.message property alias leftBtnText: confirmDlg.leftBtnText property alias rightBtnText: confirmDlg.rightBtnText signal accepted() function show() { if (title.length === 0 && message.length === 0) { if (dccData.worker.checkPasswdEmpty()) { loader.sourceComponent = registerDlg } else { loader.sourceComponent = verifyDlg } loader.active = true } else { confirmDlg.show() } } // 检查密码是否合法,要求至少包含字母和数字,且8-64个字符 function checkPasswordValid(password) { let result = { isValid: true, message: "" } const hasLetter = /[a-zA-Z]/.test(password) const hasDigit = /\d/.test(password) if (!hasLetter || !hasDigit) { result.isValid = false result.message = qsTr("Password must contain numbers and letters") return result } if (password.length < 8 || password.length > 64) { result.isValid = false result.message = qsTr("Password must be between 8 and 64 characters") return result } return result } ConFirmDialog { id: confirmDlg onClosing: function (close) { confirmDlg.close() } onAccepted: { if (dccData.worker.checkPasswdEmpty()) { loader.sourceComponent = registerDlg } else { loader.sourceComponent = verifyDlg } loader.active = true confirmDlg.close() } } Loader { id: loader active: false onLoaded: function () { loader.item.show() } } Component { id: registerDlg RegisterDialog { onClosing: function (close) { loader.active = false } onRegisterPasswd: { dccData.worker.registerPasswd(passwd) root.accepted() loader.active = false } } } Component { id: verifyDlg VerifyDialog { onClosing: function (close) { loader.active = false } onVerifyPasswd: { root.accepted() loader.active = false } onForgetPasswd: { dccData.worker.openForgetPasswd() } } } } ================================================ FILE: src/plugin-deepinid/qml/DeepinIDAccountSecurity.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 DccObject { DccObject { name: "wechatAccount" parentName: "deepinid/userinfo/body" weight: 50 pageType: DccObject.Item visible: false page: DccGroupView {} DccObject { name: "wechatTitle" parentName: "deepinid/userinfo/body/wechatAccount" displayName: qsTr("Bind WeChat") description: qsTr("By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts.").arg(dccData.editionName()) weight: 10 pageType: DccObject.Editor } DccObject { name: "wechatInfo" parentName: "deepinid/userinfo/body/wechatAccount" weight: 20 pageType: DccObject.Item page: RowLayout { id: wechatLayout property bool isBindWechat: dccData.model.wechatName.length > 0 Item { implicitHeight: 40 Layout.leftMargin: 10 Layout.fillWidth: true Layout.fillHeight: true D.DciIcon { id: wechatIcon anchors.left: parent.left anchors.verticalCenter: parent.verticalCenter name: "dcc_secwechat" sourceSize: Qt.size(24, 24) opacity: wechatLayout.isBindWechat ? 1 : 0.6 } Label { text: wechatLayout.isBindWechat ? dccData.model.wechatName : qsTr("Unlinked") anchors.left: wechatIcon.right anchors.leftMargin: 10 anchors.verticalCenter: parent.verticalCenter horizontalAlignment: Text.AlignLeft opacity: wechatLayout.isBindWechat ? 1 : 0.6 } } D.ToolButton { text: wechatLayout.isBindWechat ? qsTr("Unbinding") : qsTr("Link") visible: dccData.editionName() === "deepin" ? false : true textColor: D.Palette { normal { common: D.DTK.makeColor(D.Color.Highlight) } normalDark: normal hovered { common: D.DTK.makeColor(D.Color.Highlight).lightness(+30) } hoveredDark: hovered } background: Item {} onClicked: { if (isBindWechat) { unbindWechat.show() } else { bindWechat.show() } } } ConfirmManager { id: unbindWechat title: qsTr("Are you sure you want to unbind WeChat?") message: qsTr("After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account.").arg(dccData.editionName()) leftBtnText: qsTr("Let me think it over") rightBtnText: qsTr("Unbinding") onAccepted: { dccData.worker.unBindPlatform() } } ConfirmManager { id: bindWechat onAccepted: { dccData.worker.bindAccount(); } } } } } DccObject { name: "localAccount" parentName: "deepinid/userinfo/body" weight: 60 pageType: DccObject.Item visible: false page: DccGroupView {} DccObject { name: "localTitle" parentName: "deepinid/userinfo/body/localAccount" displayName: qsTr("Local Account Binding") description: qsTr("After binding your local account, you can use the following functions:").arg(dccData.editionName()) weight: 10 pageType: DccObject.Editor } DccObject { parentName: "deepinid/userinfo/body/localAccount" displayName: qsTr("WeChat Scan Code Login System") description: qsTr("Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account.").arg(dccData.editionName()) icon: "dcc_wechattip" weight: 20 pageType: DccObject.Editor } DccObject { parentName: "deepinid/userinfo/body/localAccount" displayName: qsTr("Reset password via %1 ID").arg(dccData.editionName()) description: qsTr("Reset your local password via %1 ID in case you forget it.").arg(dccData.editionName()) icon: "dcc_uosidtip" weight: 30 pageType: DccObject.Editor } DccObject { parentName: "deepinid/userinfo/body/localAccount" displayName: qsTr("To use the above features, please go to Control Center - Accounts and turn on the corresponding options.") weight: 40 pageType: DccObject.Editor } } } ================================================ FILE: src/plugin-deepinid/qml/DeepinIDLogin.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { id: root property var parentView name: "login" parentName: "deepinid" pageType: DccObject.Item page: Flickable { Layout.fillWidth: true Layout.fillHeight: true contentHeight: groupView.height ScrollBar.vertical: ScrollBar { width: 10 } DccGroupView { id: groupView isGroup: false height: implicitHeight + 10 anchors { left: parent.left right: parent.right } } Component.onCompleted: { root.parentView = this } } DccObject { parentName: "deepinid/login" weight: 10 pageType: DccObject.Item page: Rectangle { implicitHeight: root.parentView ? root.parentView.height * 0.5 : 350 color: "transparent" Image { id: bgImage anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom fillMode: Image.Pad clip: true source: "qrc:/icons/deepin/builtin/icons/dcc_login_bg.svg" } D.DciIcon { id: logoImage anchors.horizontalCenter: parent.horizontalCenter anchors.bottom: parent.bottom name: "dcc_cloud_logo" } } onParentItemChanged: { if (parentItem) { parentItem.bottomPadding = 20 } } } DccObject { parentName: "deepinid/login" weight: 20 pageType: DccObject.Item page: RowLayout { Label { Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter font.pixelSize: 30 font.bold: true text: qsTr("Cloud Sync") } } onParentItemChanged: { if (parentItem) { parentItem.bottomPadding = 20 } } } DccObject { parentName: "deepinid/login" weight: 30 pageType: DccObject.Item page: RowLayout{ Label { Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter wrapMode: Text.WordWrap text: qsTr("Manage your %1 ID and sync your personal data across devices.\nSign in to %1 ID to get personalized features and services of Browser, App Store, and more.").arg(dccData.editionName()) } } onParentItemChanged: { if (parentItem) { parentItem.bottomPadding = 20 } } } DccObject { parentName: "deepinid/login" weight: 40 pageType: DccObject.Item page: RowLayout{ Button { Layout.preferredWidth: 200 Layout.preferredHeight: 30 Layout.alignment: Qt.AlignHCenter text: qsTr("Sign In to %1 ID").arg(dccData.editionName()) onClicked: { dccData.worker.loginUser() } } } } } ================================================ FILE: src/plugin-deepinid/qml/DeepinIDSyncService.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 DccObject { name: "syncService" parentName: "deepinid/userinfo" weight: 30 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "syncServiceSwitch" parentName: "deepinid/userinfo/syncService" displayName: qsTr("Auto Sync") description: qsTr("Securely store system settings and personal data in the cloud, and keep them in sync across devices") weight: 10 pageType: DccObject.Editor page: Control { implicitWidth: rowlayout.implicitWidth implicitHeight: rowlayout.implicitHeight RowLayout { id: rowlayout spacing: 10 Image { id: warnImg source: "qrc:/icons/deepin/builtin/icons/dcc_not_use_28px.svg" visible: !dccData.model.syncEnabled MouseArea { anchors.fill: parent hoverEnabled: true onEntered: { toolTip.visible = true } onExited: { toolTip.visible = false } } } Switch { checked: dccData.model.syncSwitch enabled: dccData.model.syncEnabled onCheckedChanged: { dccData.worker.setAutoSync(checked) } } } D.ToolTip { id: toolTip text: dccData.model.warnTipsMessage() y: warnImg.implicitHeight + 4 visible: false delay: 0 } } } DccObject { name: "systemSettings" parentName: "deepinid/userinfo/syncService" displayName: qsTr("System Settings") icon: "dcc-systemcset" weight: 20 backgroundType: DccObject.ClickStyle pageType: DccObject.Editor visible: dccData.model.syncSwitch page: Control { id: control rotation: dccData.model.syncItemShow ? 180 : 0 Behavior on rotation { NumberAnimation { duration: 200 } } contentItem: D.DciIcon { name: "arrow_ordinary_down" sourceSize: Qt.size(12, 12) theme: D.DTK.themeType palette: D.DTK.makeIconPalette(control.palette) } } onActive: { dccData.model.syncItemShow = !dccData.model.syncItemShow } } DccRepeater { model: dccData.model.syncInfoListModel() delegate: DccObject { name: model.type parentName: "deepinid/userinfo/syncService" weight: 30 + index icon: model.displayIcon displayName: model.displayName backgroundType: DccObject.ClickStyle visible: dccData.model.syncSwitch && dccData.model.syncItemShow pageType: DccObject.Editor property real iconSize: 16 property real leftPaddingSize: 14 page: DccCheckIcon { checked: model.isChecked onClicked: { dccData.worker.setSyncSwitcher(model.keyList, !model.isChecked) } } onActive: { dccData.worker.setSyncSwitcher(model.keyList, !model.isChecked) } } } DccRepeater { model: dccData.model.appInfoListModel() delegate: DccObject { name: model.key parentName: "deepinid/userinfo/syncService" weight: 50 + index icon: model.icon displayName: model.name backgroundType: DccObject.ClickStyle visible: dccData.model.syncSwitch pageType: DccObject.Editor page: DccCheckIcon { checked: model.enable onClicked: { dccData.worker.setUtcloudSwitcher(model.key, !model.enable) } } onActive: { dccData.worker.setUtcloudSwitcher(model.key, !model.enable) } } } DccObject { name: "syncTimeUpdate" parentName: "deepinid/userinfo/syncService" displayName: qsTr("Last sync time: %1").arg(dccData.model.lastSyncTime) weight: 100 visible: dccData.model.syncSwitch pageType: DccObject.Item page: RowLayout { DccLabel { Layout.leftMargin: 10 horizontalAlignment: Text.AlignLeft text: dccObj.displayName font: D.DTK.fontManager.t10 opacity: 0.7 } Item { Layout.fillWidth: true } D.ToolButton { Layout.preferredHeight: 40 text: qsTr("Clear cloud data") font: D.DTK.fontManager.t10 textColor: D.Palette { normal { common: D.DTK.makeColor(D.Color.Highlight) } normalDark: normal hovered { common: D.DTK.makeColor(D.Color.Highlight).lightness(+30) } hoveredDark: hovered } background: Item {} onClicked: { clearData.show() } ConfirmManager { id: clearData title: qsTr("Are you sure you want to clear your system settings and personal data saved in the cloud?") message: qsTr("Once the data is cleared, it cannot be recovered!") leftBtnText: qsTr("Cancel") rightBtnText: qsTr("Clear") onAccepted: { dccData.worker.clearData() } } } } } } ================================================ FILE: src/plugin-deepinid/qml/DeepinIDUserInfo.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import QtQuick.Effects import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 DccObject { id: root name: "userinfo" parentName: "deepinid" pageType: DccObject.Item page: DccRightView { Layout.fillWidth: true Layout.fillHeight: true } DccObject { name: "title" parentName: "deepinid/userinfo" weight: 10 pageType: DccObject.Item page: ColumnLayout { Rectangle { id: iconBackground width: 100 height: 100 Layout.alignment: Qt.AlignHCenter color: "transparent" Image { id: image anchors.fill: parent source: "file://" + dccData.model.avatar sourceSize: Qt.size(80, 80) layer.enabled: true layer.effect: MultiEffect { maskEnabled: true maskSource: maskRect maskThresholdMin: 0.5 maskSpreadAtMin: 1.0 } Rectangle { id: maskRect anchors.fill: parent radius: iconBackground.width / 2 layer.enabled: true visible: false } } } Label { id: userRegion Layout.fillWidth: true Layout.topMargin: 20 horizontalAlignment: Text.AlignHCenter font: D.DTK.fontManager.t8 text: dccData.model.region } Control { id: nameControl Layout.fillWidth: true property bool editing: false Label { id: nameLabel anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenterOffset: -10 anchors.top: parent.top horizontalAlignment: Text.AlignHCenter visible: !nameControl.editing font: D.DTK.fontManager.t6 text: dccData.model.userName } D.ActionButton { id: editButton anchors.left: nameLabel.right anchors.leftMargin: 10 anchors.verticalCenter: nameLabel.verticalCenter focusPolicy: Qt.NoFocus width: 30 height: 30 icon.name: "dcc-edit" icon.width: DS.Style.edit.actionIconSize icon.height: DS.Style.edit.actionIconSize hoverEnabled: true background: Rectangle { anchors.fill: parent property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } visible: !nameControl.editing onClicked: { nameControl.editing = true nameEdit.text = nameLabel.text nameEdit.selectAll() nameEdit.forceActiveFocus() } } D.LineEdit { id: nameEdit anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top width: 240 visible: nameControl.editing maximumLength: 32 // 限制昵称长度为32个字符 validator: RegularExpressionValidator { regularExpression: /^[^<>&'"\s]{0,32}$/ } //昵称不能包含<、>、&、'、"和空格 alertDuration: 3000 font: D.DTK.fontManager.t6 text: visible ? dccData.model.userName : "" activeFocusOnPress: false onTextChanged: { // 如果输入为空,需要弹出提示 if (nameEdit.text.length === 0) { nameEdit.alertText = qsTr("The nickname must be 1~32 characters long") nameEdit.showAlert = true } else if (nameEdit.showAlert) { nameEdit.showAlert = false } } onEditingFinished: { nameEdit.showAlert = false nameControl.editing = false if (nameEdit.text.length !== 0 && nameEdit.text !== dccData.model.userName) { dccData.worker.setFullName(text) } } Keys.onPressed: { // TODO: 按下回车键时,把焦点转移到昵称标签上,避免鼠标点击空白时又触发一次editingFinished信号 if (event.key === Qt.Key_Return) { nameLabel.forceActiveFocus(true); } } } } } onParentItemChanged: { if (parentItem) { parentItem.bottomPadding = 50 } } } DccTitleObject { name: "syncServiceTitle" parentName: "deepinid/userinfo" displayName: qsTr("Synchronization Service") weight: 20 } DeepinIDSyncService{} DccTitleObject { name: "accountSecurityTitle" parentName: "deepinid/userinfo" displayName: qsTr("Account and Security") weight: 40 visible: false } DeepinIDAccountSecurity{} DccObject { name: "buttonGrp" parentName: "deepinid/userinfo" pageType: DccObject.Item weight: 60 page: RowLayout { Button { text: qsTr("Sign out") onClicked: { dccData.worker.logoutUser() } } Item { Layout.fillWidth: true } Button { text: qsTr("Go to web settings") onClicked: { dccData.worker.openWeb() } } } } } ================================================ FILE: src/plugin-deepinid/qml/Deepinid.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.3 import org.deepin.dcc 1.0 DccObject { id: root name: "deepinid" parentName: "root" displayName: DccApp.uosEdition() === DccApp.UosCommunity ? qsTr("deepin ID") : qsTr("UOS ID") description: qsTr("Cloud services") icon: "deepinid" weight: 70 page: DccRowView {} visible: false DccDBusInterface { property var isLogin service: "com.deepin.deepinid" path: "/com/deepin/deepinid" inter: "com.deepin.deepinid" connection: DccDBusInterface.SessionBus onIsLoginChanged: { root.visible = true } } } ================================================ FILE: src/plugin-deepinid/qml/DeepinidMain.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { DeepinIDLogin { visible: !dccData.model.loginState } DeepinIDUserInfo { visible: dccData.model.loginState } } ================================================ FILE: src/plugin-deepinid/qml/RegisterDialog.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D D.DialogWindow { id: dialog icon: "dcc_union_id" width: 400 modality: Qt.WindowModal signal registerPasswd(string passwd) ColumnLayout { width: parent.width spacing: 10 Label { Layout.fillWidth: true font: D.DTK.fontManager.t5 text: qsTr("Set a Password") horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } Item { Layout.fillWidth: true height: 5 } D.PasswordEdit { id: edit0 Layout.fillWidth: true placeholderText: qsTr("8-64 characters") validator: RegularExpressionValidator { regularExpression: /^[a-zA-Z0-9~`!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]+$/ // 允许的输入数字、字母和特殊字符 } alertDuration: 3000 onTextChanged: { if (showAlert) showAlert = false } } D.PasswordEdit { id: edit1 Layout.fillWidth: true placeholderText: qsTr("Repeat the password") validator: RegularExpressionValidator { regularExpression: /^[a-zA-Z0-9~`!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]+$/ // 允许的输入数字、字母和特殊字符 } alertDuration: 3000 onTextChanged: { if (showAlert) showAlert = false } } RowLayout { Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 10 Layout.fillWidth: true spacing: 10 Button { text: qsTr("Cancel") Layout.fillWidth: true onClicked: { close() } } D.RecommandButton { text: qsTr("Confirm") Layout.fillWidth: true onClicked: { var result0 = checkPasswordValid(edit0.text) if (!result0.isValid) { edit0.showAlert = false edit0.showAlert = true edit0.alertText = result0.message return } var result1 = checkPasswordValid(edit1.text) if (!result1.isValid) { edit1.showAlert = false edit1.showAlert = true edit1.alertText = result1.message return } if(edit0.text != edit1.text) { edit1.showAlert = false edit1.showAlert = true edit1.alertText = qsTr("Passwords don't match") return; } dialog.registerPasswd(edit0.text) } } } } } ================================================ FILE: src/plugin-deepinid/qml/VerifyDialog.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D D.DialogWindow { id: dialog icon: "dcc_union_id" width: 400 modality: Qt.WindowModal signal verifyPasswd() signal forgetPasswd() ColumnLayout { width: parent.width Label { Layout.fillWidth: true font: D.DTK.fontManager.t5 text: qsTr("Security Verification") horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } Label { Layout.fillWidth: true font: D.DTK.fontManager.t6 text: qsTr("The action is sensitive, please enter the login password first") horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter } Item { Layout.fillWidth: true height: 10 } D.PasswordEdit { id: edit0 Layout.fillWidth: true placeholderText: qsTr("8-64 characters") validator: RegularExpressionValidator { regularExpression: /^[a-zA-Z0-9~`!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]+$/ // 允许的输入数字、字母和特殊字符 } alertDuration: 3000 onTextChanged: { if (showAlert) showAlert = false } } D.ToolButton { id: btn Layout.alignment: Qt.AlignRight Layout.preferredHeight: 30 text: qsTr("Forgot Password?") textColor: D.Palette { normal { common: D.DTK.makeColor(D.Color.Highlight) } normalDark: normal hovered { common: D.DTK.makeColor(D.Color.Highlight).lightness(+30) } hoveredDark: hovered } background: Item {} onClicked: { dialog.forgetPasswd() } } RowLayout { Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.bottomMargin: 10 Layout.fillWidth: true spacing: 10 Button { text: qsTr("Cancel") Layout.fillWidth: true onClicked: { close() } } D.WarningButton { text: qsTr("Confirm") Layout.fillWidth: true onClicked: { var result = checkPasswordValid(edit0.text) if (!result.isValid) { edit0.showAlert = false edit0.showAlert = true edit0.alertText = result.message return } var checkRes = dccData.worker.checkPassword(edit0.text) if (checkRes.isOk) { dialog.verifyPasswd() } else { edit0.showAlert = false edit0.showAlert = true edit0.alertText = checkRes.errMsg } } } } } } ================================================ FILE: src/plugin-defaultapp/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(DefaultApp_Name defaultapp) file(GLOB_RECURSE defaultapp_SRCS "operation/*.cpp" ) add_library(${DefaultApp_Name} MODULE ${defaultapp_SRCS} ) set(DefaultApp_Libraries ${DCC_FRAME_Library} ${QT_NS}::DBus ) target_link_libraries(${DefaultApp_Name} PRIVATE ${DefaultApp_Libraries} ) dcc_install_plugin(NAME ${DefaultApp_Name} TARGET ${DefaultApp_Name}) ================================================ FILE: src/plugin-defaultapp/operation/category.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "category.h" #include Category::Category(QObject *parent) : QObject(parent) { } void Category::setDefault(const App &def) { if (m_default.Id != def.Id) { m_default = def; Q_EMIT defaultChanged(def); } } void Category::setCategory(const QString &category) { if (m_category == category) return; m_category = category; Q_EMIT categoryNameChanged(category); } void Category::clear() { bool clearFlag = !m_applist.isEmpty(); m_systemAppList.clear(); m_userAppList.clear(); m_applist.clear(); if (clearFlag) Q_EMIT clearAll(); } void Category::addUserItem(const App &value) { if (value.isUser) { if (m_userAppList.contains(value)) return; m_userAppList << value; } else { if (m_systemAppList.contains(value)) return; m_systemAppList << value; } m_applist << value; Q_EMIT addedUserItem(value); } void Category::delUserItem(const App &value) { bool isRemove = false; if (value.isUser) { isRemove = m_userAppList.removeOne(value); } else { isRemove = m_systemAppList.removeOne(value); } if (isRemove) { m_applist.removeOne(value); Q_EMIT removedUserItem(value); } } ================================================ FILE: src/plugin-defaultapp/operation/category.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef CATEGORY_H #define CATEGORY_H #include #include struct App { QString dbusPath; QString Id; QString Name; QString DisplayName; QString Description; QString Icon; QString Exec; bool isUser; bool CanDelete; bool MimeTypeFit; App() : isUser(false), CanDelete(false), MimeTypeFit(false) {} bool operator ==(const App &app) const { return app.Id == Id && app.isUser == isUser; } bool operator !=(const App &app) const { return app.Id != Id && app.isUser != isUser; } }; class Category : public QObject { Q_OBJECT public: explicit Category(QObject *parent = 0); void setDefault(const App &def); const QString getName() const { return m_category;} void setCategory(const QString &category); inline const QList getappItem() const { return m_applist;} inline const QList systemAppList() const { return m_systemAppList; } inline const QList userAppList() const { return m_userAppList; } inline const App getDefault() { return m_default;} void clear(); void addUserItem(const App &value); void delUserItem(const App &value); Q_SIGNALS: void defaultChanged(const App &id); void addedUserItem(const App &app); void removedUserItem(const App &app); void categoryNameChanged(const QString &name); void clearAll(); private: QList m_applist; QList m_systemAppList; QList m_userAppList; QString m_category; App m_default; }; #endif // CATEGORY_H ================================================ FILE: src/plugin-defaultapp/operation/categorymodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "categorymodel.h" #include #include enum DefAppDataRole { DefAppIsUserRole = Qt::UserRole << (2 + 1), DefAppIdRole, DefAppCanDeleteRole, DefAppNameRole, DefAppIconRole, DefAppIsDefaultRole, }; CategoryModel::CategoryModel(Category *parent) : QAbstractItemModel(parent) , m_category(parent) { for (auto &&item : m_category->getappItem()) { onAddApp(item); } connect(m_category, &Category::addedUserItem, this, &CategoryModel::onAddApp); connect(m_category, &Category::removedUserItem, this, &CategoryModel::onRemoveApp); connect(m_category, &Category::defaultChanged, this, &CategoryModel::onDefaultChanged); connect(m_category, &Category::clearAll, this, &CategoryModel::resetApp); } CategoryModel::~CategoryModel() { } QHash CategoryModel::roleNames() const { QHash names = QAbstractItemModel::roleNames(); names[DefAppIsUserRole] = "isUser"; names[DefAppIdRole] = "id"; names[DefAppCanDeleteRole] = "canDelete"; names[DefAppNameRole] = "name"; names[DefAppIconRole] = "icon"; names[DefAppIsDefaultRole] = "isDefault"; return names; } QModelIndex CategoryModel::index(int row, int column, const QModelIndex &) const { if (row < 0 || row >= m_applist.size()) { return QModelIndex(); } return createIndex(row, column); } QModelIndex CategoryModel::parent(const QModelIndex &) const { return QModelIndex(); } int CategoryModel::rowCount(const QModelIndex &) const { return m_applist.size(); } int CategoryModel::columnCount(const QModelIndex &) const { return 1; } QVariant CategoryModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.row() < 0 || index.row() >= m_applist.size()) { return QModelIndex(); } const App &app = m_applist.at(index.row()); switch (role) { case Qt::DisplayRole: return app.DisplayName; case DefAppIsUserRole: return app.isUser; case DefAppIdRole: return app.Id; case DefAppCanDeleteRole: return app.CanDelete; case DefAppNameRole: return app.Name; case DefAppIconRole: return app.Icon.trimmed().isEmpty() ? "application-default-icon" : app.Icon; case DefAppIsDefaultRole: return app.Id == m_category->getDefault().Id; default: break; } return QVariant(); } void CategoryModel::addApp(const QString &path) { if (path.isEmpty()) return; QUrl url(path); QFileInfo info(url.toLocalFile()); Q_EMIT requestCreateFile(m_category->getName(), info); } void CategoryModel::removeApp(const QString &id) { const App *app = getAppById(id); if (!app || !isValid(*app)) { return; } Q_EMIT requestDelUserApp(m_category->getName(), *app); } void CategoryModel::setDefaultApp(const QString &id) { const App *app = getAppById(id); if (!app || !isValid(*app)) { return; } Q_EMIT requestSetDefaultApp(m_category->getName(), *app); } void CategoryModel::onAddApp(const App &app) { const QList &applist = m_category->getappItem(); if (!applist.contains(app)) return; int index = 0; for (auto &&item : m_applist) { if ((item.CanDelete && item.CanDelete != app.CanDelete) || item.Name > app.Name) { break; } index++; } beginInsertRows(QModelIndex(), index, index); m_applist.insert(index, app); endInsertRows(); } void CategoryModel::onRemoveApp(const App &app) { int index = m_applist.indexOf(app); if (index < 0) return; beginRemoveRows(QModelIndex(), index, index); m_applist.remove(index); endRemoveRows(); } void CategoryModel::onDefaultChanged(const App &) { Q_EMIT dataChanged(createIndex(0, 0), createIndex(m_applist.size() - 1, 0), { DefAppIsDefaultRole, Qt::CheckStateRole }); } void CategoryModel::resetApp() { beginResetModel(); m_applist = m_category->getappItem(); endResetModel(); } const App *CategoryModel::getAppById(const QString &appId) { auto res = std::find_if(m_category->getappItem().begin(), m_category->getappItem().end(), [&appId](const App &item) -> bool { return item.Id == appId; }); if (res != m_category->getappItem().cend()) { return &(*res); } return nullptr; } ================================================ FILE: src/plugin-defaultapp/operation/categorymodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef CATEGORYMODEL_H #define CATEGORYMODEL_H #include "category.h" #include #include class CategoryModel : public QAbstractItemModel { Q_OBJECT public: explicit CategoryModel(Category *parent = nullptr); ~CategoryModel() override; inline Category *category() const { return m_category; } // Basic functionality: QHash roleNames() const override; QModelIndex index(int row, int column, const QModelIndex &parentIndex = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; public Q_SLOTS: void addApp(const QString &path); void removeApp(const QString &id); void setDefaultApp(const QString &id); Q_SIGNALS: void requestCreateFile(const QString &category, const QFileInfo &info); void requestDelUserApp(const QString &name, const App &item); void requestSetDefaultApp(const QString &category, const App &item); private Q_SLOTS: void onAddApp(const App &app); void onRemoveApp(const App &app); void onDefaultChanged(const App &app); void resetApp(); private: const App *getAppById(const QString &appId); inline bool isValid(const App &app) const { return (!app.Id.isNull() && !app.Id.isEmpty()); } private: QList m_applist; Category *m_category; }; #endif // CATEGORYMODEL_H ================================================ FILE: src/plugin-defaultapp/operation/defappmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "defappmodel.h" #include "QtQml/qqml.h" #include "categorymodel.h" #include "dccfactory.h" #include "defappworker.h" #include "defappworkerold.h" #include "mimedbusproxyold.h" DefAppModel::DefAppModel(QObject *parent) : QObject(parent) { qmlRegisterType("org.deepin.dcc.defApp", 1, 0, "CategoryModel"); for (int i = 0; i < Count; i++) { m_categoryModel[i] = new CategoryModel(new Category(this)); } if (MimeDBusProxyOld::isRegisted()) { m_oldwork = new DefAppWorkerOld(this, this); m_isOldInterface = true; for (int i = 0; i < Count; i++) { m_categoryModel[i] = new CategoryModel(new Category(this)); connect(m_categoryModel[i], &CategoryModel::requestCreateFile, m_oldwork, &DefAppWorkerOld::onCreateFile); connect(m_categoryModel[i], &CategoryModel::requestDelUserApp, m_oldwork, &DefAppWorkerOld::onDelUserApp); connect(m_categoryModel[i], &CategoryModel::requestSetDefaultApp, m_oldwork, &DefAppWorkerOld::onSetDefaultApp); } m_oldwork->active(); m_oldwork->onGetListApps(); } else { m_work = new DefAppWorker(this, this); for (int i = 0; i < Count; i++) { m_categoryModel[i] = new CategoryModel(new Category(this)); connect(m_categoryModel[i], &CategoryModel::requestCreateFile, m_work, &DefAppWorker::onCreateFile); connect(m_categoryModel[i], &CategoryModel::requestDelUserApp, m_work, &DefAppWorker::onDelUserApp); connect(m_categoryModel[i], &CategoryModel::requestSetDefaultApp, m_work, &DefAppWorker::onSetDefaultApp); } m_work->active(); m_work->onGetListApps(); } } DefAppModel::~DefAppModel() { for (int i = 0; i < Count; i++) { m_categoryModel[i]->deleteLater(); } } DCC_FACTORY_CLASS(DefAppModel) #include "defappmodel.moc" ================================================ FILE: src/plugin-defaultapp/operation/defappmodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DEFAPPMODEL_H #define DEFAPPMODEL_H #include "category.h" #include "categorymodel.h" #include class Category; class DefAppWorker; class DefAppWorkerOld; class DefAppModel : public QObject { Q_OBJECT public: explicit DefAppModel(QObject *parent = 0); ~DefAppModel(); enum DefAppCategory { Browser = 0, Mail, Text, Music, Video, Picture, Terminal, Count, }; public Q_SLOTS: inline CategoryModel *browser() const { return m_categoryModel[Browser]; } inline CategoryModel *mail() const { return m_categoryModel[Mail]; } inline CategoryModel *text() const { return m_categoryModel[Text]; } inline CategoryModel *music() const { return m_categoryModel[Music]; } inline CategoryModel *video() const { return m_categoryModel[Video]; } inline CategoryModel *picture() const { return m_categoryModel[Picture]; } inline CategoryModel *terminal() const { return m_categoryModel[Terminal]; } inline Category *getModBrowser() const { return m_categoryModel[Browser]->category(); } inline Category *getModMail() const { return m_categoryModel[Mail]->category(); } inline Category *getModText() const { return m_categoryModel[Text]->category(); } inline Category *getModMusic() const { return m_categoryModel[Music]->category(); } inline Category *getModVideo() const { return m_categoryModel[Video]->category(); } inline Category *getModPicture() const { return m_categoryModel[Picture]->category(); } inline Category *getModTerminal() const { return m_categoryModel[Terminal]->category(); } private: CategoryModel *m_categoryModel[Count]; DefAppWorker *m_work; DefAppWorkerOld *m_oldwork; bool m_isOldInterface; }; #endif // DEFAPPMODEL_H ================================================ FILE: src/plugin-defaultapp/operation/defappworker.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "defappworker.h" #include "defappmodel.h" #include #include #include #include #include #include #include #include #include #include #include #include #include Q_LOGGING_CATEGORY(DdcDefaultWorker, "dcc-default-worker") const QString TerminalGSetting = QStringLiteral("com.deepin.desktop.default-applications.terminal"); DefAppWorker::DefAppWorker(DefAppModel *model, QObject *parent) : QObject(parent) , m_defAppModel(model) , m_dbusManager(new MimeDBusProxy(this)) , m_debounceTimer(new QTimer(this)) { m_stringToCategory.insert("Browser", Browser); m_stringToCategory.insert("Mail", Mail); m_stringToCategory.insert("Text", Text); m_stringToCategory.insert("Music", Music); m_stringToCategory.insert("Video", Video); m_stringToCategory.insert("Picture", Picture); m_stringToCategory.insert("Terminal", Terminal); m_debounceTimer->setSingleShot(true); m_debounceTimer->setInterval(500); connect(m_debounceTimer, &QTimer::timeout, this, &DefAppWorker::onGetListApps); connect(m_dbusManager, &MimeDBusProxy::Change, this, [this]() { m_debounceTimer->start(); }); m_userLocalPath = QDir::homePath() + "/.local/share/applications/"; // mkdir folder QDir dir(m_userLocalPath); dir.mkpath(m_userLocalPath); } DefAppWorker::~DefAppWorker() { } void DefAppWorker::active() { m_dbusManager->blockSignals(false); } void DefAppWorker::deactive() { m_dbusManager->blockSignals(true); } void DefAppWorker::onSetDefaultApp(const QString &category, const App &item) { if (category == "Terminal") { onSetDefaultTerminal(item); return; } QStringList mimelist = getTypeListByCategory(m_stringToCategory[category]); for (auto mimeType : mimelist) { QDBusPendingCall call = m_dbusManager->SetDefaultApp(mimeType, item.Id); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [watcher, this, item, category] { if (!watcher->isError()) { qCDebug(DdcDefaultWorker) << "Setting MIME " << category << "to " << item.Id; auto tosetCategory = getCategory(category); tosetCategory->setDefault(item); } else { qCWarning(DdcDefaultWorker) << "Cannot set MIME" << category << "to" << item.Id; } watcher->deleteLater(); }); } } bool DefAppWorker::executeGsettingsCommand(const QStringList &args, const QString &errorMessage) { QProcess process; process.start("gsettings", args); process.waitForStarted(); if (!process.waitForFinished(5000)) { qCWarning(DdcDefaultWorker) << errorMessage << process.errorString(); return false; } return true; } void DefAppWorker::onSetDefaultTerminal(const App &item) { Category *defaultTerminalCategory = getCategory("Terminal"); if (!defaultTerminalCategory) { qCWarning(DdcDefaultWorker) << "Failed to get Terminal category"; return; } // Set app-id if (!executeGsettingsCommand({"set", TerminalGSetting, "app-id", item.Id}, "Failed to set terminal app-id:")) { return; } // Set exec command QString execCommand = QStringLiteral("gdbus call --session --dest org.desktopspec.ApplicationManager1 " "--object-path '%1' --method org.desktopspec.ApplicationManager1.Application.Launch " "'' [] {}").arg(item.dbusPath); if (!executeGsettingsCommand({"set", TerminalGSetting, "exec", execCommand}, "Failed to set terminal exec:")) { return; } defaultTerminalCategory->setDefault(item); qCInfo(DdcDefaultWorker) << "Successfully set default terminal to:" << item.Id; } void DefAppWorker::onGetListApps() { // 遍历QMap去获取dbus数据 for (auto mimelist = m_stringToCategory.constBegin(); mimelist != m_stringToCategory.constEnd(); ++mimelist) { if (mimelist.key() == "Terminal") { QDBusPendingReply call = m_dbusManager->GetManagedObjects(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, &DefAppWorker::getManagerObjectFinished); continue; } const QString type{ getTypeByCategory(mimelist.value()) }; QDBusPendingReply call = m_dbusManager->ListApps(type); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [watcher, mimelist, type, this] { if (watcher->isError()) { qCWarning(DdcDefaultWorker) << "Cannot get AppList"; watcher->deleteLater(); return; } QDBusPendingReply call = *watcher; getListAppFinished(mimelist.key(), call.value()); QDBusPendingReply getDefaultAppCall = m_dbusManager->GetDefaultApp(type); QDBusPendingCallWatcher *defappWatcher = new QDBusPendingCallWatcher(getDefaultAppCall, this); connect(defappWatcher, &QDBusPendingCallWatcher::finished, this, [getDefaultAppCall, this, mimelist, type, defappWatcher] { if (getDefaultAppCall.isError()) { qCWarning(DdcDefaultWorker) << "Cannot get DefaultApp"; defappWatcher->deleteLater(); return; } QString mimeType = getDefaultAppCall.argumentAt<0>(); if (mimeType != type) { qCWarning(DdcDefaultWorker) << "MimeType not match"; defappWatcher->deleteLater(); return; } QDBusObjectPath objectPath = getDefaultAppCall.argumentAt<1>(); if (objectPath.path() == "/") { qCWarning(DdcDefaultWorker) << "Cannot find Mime: " << type; // Still call getDefaultAppFinished with empty id to trigger fallback logic getDefaultAppFinished(mimelist.key(), QString()); defappWatcher->deleteLater(); return; } getDefaultAppFinished(mimelist.key(), m_dbusManager->getAppId(objectPath)); defappWatcher->deleteLater(); }); watcher->deleteLater(); }); } } static QStringList getUILanguages() { QLocale syslocal = QLocale::system(); QStringList uiLanguages = syslocal.uiLanguages(); // the nameMap uses underscore instead of minus sign for (auto &lang : uiLanguages) { lang.replace('-', '_'); } uiLanguages << "default"; return uiLanguages; } void DefAppWorker::getManagerObjectFinished(QDBusPendingCallWatcher *call) { Category *category = getCategory("Terminal"); QList list; auto uiLanguages = getUILanguages(); QDBusPendingReply reply = *call; if (reply.isError()) { call->deleteLater(); return; } ObjectMap map = reply.value(); call->deleteLater(); for (auto it = map.cbegin(); it != map.cend(); it++) { QString dbusPath = it.key().path(); auto mapInterface = it.value(); for (const QVariantMap &mapInter : mapInterface) { if (mapInter.count() == 0) { continue; } if (mapInter.value("Categories").isNull()) { continue; } QStringList cats = qdbus_cast(mapInter["Categories"]); if (!cats.contains("TerminalEmulator")) { continue; } auto nameMap = qdbus_cast>(mapInter["Name"]); auto genericNameMap = qdbus_cast>(mapInter["GenericName"]); QString id = qdbus_cast(mapInter["ID"]); bool isDeepinVendor = qdbus_cast(mapInter["X_Deepin_Vendor"]) == "deepin"; QString name = id; for (auto &lang : uiLanguages) { auto iter = nameMap.find(lang); if (iter != nameMap.end()) { name = iter.value(); break; } } QString genericName; if (isDeepinVendor) { for (auto &lang : uiLanguages) { auto iter = genericNameMap.find(lang); if (iter != genericNameMap.end()) { genericName = iter.value(); break; } } } QString icon; if (auto mapicons = mapInter.value("Icons"); !mapicons.isNull()) { auto icons = qdbus_cast>(mapicons); if (!icons.value("Desktop Entry").isNull()) { icon = icons["Desktop Entry"]; } } App app; app.dbusPath = dbusPath; app.Id = id; app.Name = name; app.DisplayName = genericName != "" ? genericName : name; app.Icon = icon; app.isUser = false; list << app; break; } } QList systemList = category->getappItem(); for (App app : list) { if (!systemList.contains(app)) { category->addUserItem(app); } } systemList = category->getappItem(); for (App app : systemList) { if (!list.contains(app)) { category->delUserItem(app); } } category->setCategory("Terminal"); QProcess process; process.start("gsettings", {"get", TerminalGSetting, "app-id"}); if (!process.waitForFinished(5000)) { qCWarning(DdcDefaultWorker) << "Failed to get terminal app-id:" << process.errorString(); return; } QString id = process.readAllStandardOutput().trimmed().replace("\"", ""); if (id.isEmpty()) { qCWarning(DdcDefaultWorker) << "Got empty terminal app-id"; return; } auto it = std::find_if(list.cbegin(), list.cend(), [&id](const App &app) { return app.Id.trimmed() == id.remove(QChar('\''), Qt::CaseInsensitive).trimmed(); }); if (it != list.cend()) { category->setDefault(*it); } } void DefAppWorker::onDelUserApp([[maybe_unused]] const QString &mime, [[maybe_unused]] const App &item) { App itemToDelete = item; m_dbusManager->DeleteUserApp(itemToDelete.Id); // Delete user application if (Category *category = getCategory(mime)) { category->delUserItem(itemToDelete); } } void DefAppWorker::onCreateFile([[maybe_unused]] const QString &mime, [[maybe_unused]] const QFileInfo &info) { const bool isDesktop = info.suffix() == "desktop"; if (isDesktop) { // 获取相同mime类型的应用列表 QList appList = getCategory(mime)->getappItem(); // 检查是否存在与应用ID一致的文件名称(去掉后缀) for (const App &app : appList) { if (app.Id == info.completeBaseName()) { qCDebug(DdcDefaultWorker) << "File name matches app ID, skipping:" << info.completeBaseName(); return; } } QFile file(info.filePath()); QString name = "deepin-custom-" + mime + "-" + info.completeBaseName() + ".desktop"; QVariantMap appInfo; QMap nameMap; QMap execMap; QMap iconMap; QMap genericNameMap; const QStringList keys = { "Type", "Version", "Path", "Terminal", "Categories" }; if (file.open(QFile::ReadOnly)) { QTextStream in(&file); bool isEntry = false; while (!in.atEnd()) { QString line = in.readLine(); if (line.startsWith('[')) { isEntry = line == "[Desktop Entry]"; } else if (isEntry) { int index = line.indexOf('='); if (index > 0) { QString key = line.mid(0, index); QString value = line.mid(index + 1); if (key == "Icon" && !value.isEmpty()) { iconMap.insert("default", value); iconMap.insert("default-icon", value); } else if (key == "Exec") { execMap.insert("default", value); } else if (key.startsWith("Name")) { int nameIndex = key.indexOf('['); if (nameIndex < 0) { nameMap.insert("default", value); } else { nameMap.insert(key.mid(nameIndex + 1, key.length() - nameIndex - 2), value); } } else if (key.startsWith("GenericName")) { int genericNameIndex = key.indexOf('['); if (genericNameIndex < 0) { appInfo.insert("default", value); } else { genericNameMap.insert(key.mid(genericNameIndex + 1, key.length() - genericNameIndex - 2), value); } } else if (key == "X-Deepin-Vendor") { appInfo.insert("X-Deepin-Vendor", value); } else if (keys.contains(key)) { if ("Terminal" != mime && "Categories" == key) { value.remove("TerminalEmulator;"); } appInfo.insert(key, value); } } } } file.close(); } if (!appInfo.isEmpty() || !nameMap.isEmpty() || !iconMap.isEmpty() || !execMap.isEmpty()) { appInfo.insert("MimeType", getTypeListByCategory(m_stringToCategory.value(mime))); appInfo.insert("Name", QVariant::fromValue(nameMap)); appInfo.insert("Exec", QVariant::fromValue(execMap)); if (!genericNameMap.isEmpty()) { appInfo.insert("GenericName", QVariant::fromValue(genericNameMap)); } if (iconMap.isEmpty()) { iconMap.insert("default-icon", "application-default-icon"); } appInfo.insert("Icon", QVariant::fromValue(iconMap)); appInfo.insert("NoDisplay", true); QDBusPendingReply reply = m_dbusManager->addUserApplication(appInfo, name); reply.waitForFinished(); } } else { QVariantMap appInfo; appInfo.insert("Type", "Application"); appInfo.insert("Version", 1); QMap nameMap; nameMap.insert("default", info.completeBaseName()); appInfo.insert("Name", QVariant::fromValue(nameMap)); appInfo.insert("Path", info.path()); QMap execMap; execMap.insert("default", info.filePath()); appInfo.insert("Exec", QVariant::fromValue(execMap)); QMap iconMap; iconMap.insert("default-icon", "application-default-icon"); appInfo.insert("Icon", QVariant::fromValue(iconMap)); appInfo.insert("NoDisplay", true); appInfo.insert("Terminal", false); appInfo.insert("Categories", mime); appInfo.insert("MimeType", getTypeListByCategory(m_stringToCategory.value(mime))); QString name = "deepin-custom-" + mime + "-" + info.completeBaseName() + ".desktop"; QDBusPendingReply reply = m_dbusManager->addUserApplication(appInfo, name); reply.waitForFinished(); } // 刷新列表 onGetListApps(); } void DefAppWorker::getListAppFinished(const QString &mimeKey, const ObjectMap &map) { Category *category = getCategory(mimeKey); if (!category) { return; } QList list; auto uiLanguages = getUILanguages(); for (auto it = map.cbegin(); it != map.cend(); it++) { QString dbusPath = it.key().path(); auto mapInterface = it.value(); for (const QVariantMap &mapInter : mapInterface) { if (mapInter.count() == 0) { continue; } if (auto nodisplay = mapInter.value("NoDisplay"); !nodisplay.isNull() && !mapInter.value("ID").toString().contains("deepin-custom-")) { if (qdbus_cast(nodisplay)) { continue; } } auto nameMap = qdbus_cast>(mapInter["Name"]); auto genericNameMap = qdbus_cast>(mapInter["GenericName"]); QString id = qdbus_cast(mapInter["ID"]); bool isDeepinVendor = qdbus_cast(mapInter["X_Deepin_Vendor"]) == "deepin"; QString name = id; for (auto &lang : uiLanguages) { auto iter = nameMap.find(lang); if (iter != nameMap.end()) { name = iter.value(); break; } } QString genericName; if (isDeepinVendor) { for (auto &lang : uiLanguages) { auto iter = genericNameMap.find(lang); if (iter != genericNameMap.end()) { genericName = iter.value(); break; } } } QString icon; if (auto mapicons = mapInter.value("Icons"); !mapicons.isNull()) { auto icons = qdbus_cast>(mapicons); if (!icons.value("Desktop Entry").isNull()) { icon = icons["Desktop Entry"]; } } App app; app.dbusPath = dbusPath; app.Id = id; app.Name = name; app.DisplayName = genericName != "" ? genericName : name; app.Icon = icon; app.isUser = mapInter.value("X_Deepin_CreateBy").toString() == "dde-application-manager"; app.CanDelete = app.isUser; list << app; break; } } QList systemList = category->getappItem(); for (App app : list) { if (!systemList.contains(app)) { category->addUserItem(app); } } systemList = category->getappItem(); for (App app : systemList) { if (!list.contains(app)) { category->delUserItem(app); } } category->setCategory(mimeKey); } void DefAppWorker::getDefaultAppFinished(const QString &mimeKey, const QString &id) { Category *category = getCategory(mimeKey); if (!category) { return; } auto items = category->getappItem(); auto it = std::find_if(items.cbegin(), items.cend(), [id](const App &app) { return app.Id == id; }); if (it != items.cend()) { category->setDefault(*it); category->setCategory(mimeKey); } else { // If the default app is not found (e.g., uninstalled), fallback to the first system app auto systemApps = category->systemAppList(); if (!systemApps.isEmpty()) { category->setDefault(systemApps.first()); category->setCategory(mimeKey); } } } Category *DefAppWorker::getCategory(const QString &mime) const { switch (m_stringToCategory[mime]) { case Browser: return m_defAppModel->getModBrowser(); case Mail: return m_defAppModel->getModMail(); case Text: return m_defAppModel->getModText(); case Music: return m_defAppModel->getModMusic(); case Video: return m_defAppModel->getModVideo(); case Picture: return m_defAppModel->getModPicture(); case Terminal: return m_defAppModel->getModTerminal(); } return nullptr; } const QString DefAppWorker::getTypeByCategory(const DefaultAppsCategory &category) { return getTypeListByCategory(category)[0]; } // clang-format off const QStringList DefAppWorker::getTypeListByCategory(const DefaultAppsCategory &category) { switch (category) { case Browser: return QStringList() << "x-scheme-handler/http" << "x-scheme-handler/ftp" << "x-scheme-handler/https" << "text/html" << "text/xml" << "text/xhtml_xml" << "text/xhtml+xml"; case Mail: return QStringList() << "x-scheme-handler/mailto" << "message/rfc822" << "application/x-extension-eml" << "application/x-xpinstall"; case Text: return QStringList() << "text/plain"; case Music: return QStringList() << "audio/mpeg" << "audio/mp3" << "audio/x-mp3" << "audio/mpeg3" << "audio/x-mpeg-3" << "audio/x-mpeg" << "audio/flac" << "audio/x-flac" << "application/x-flac" << "audio/ape" << "audio/x-ape" << "application/x-ape" << "audio/ogg" << "audio/x-ogg" << "audio/musepack" << "application/musepack" << "audio/x-musepack" << "application/x-musepack" << "audio/mpc" << "audio/x-mpc" << "audio/vorbis" << "audio/x-vorbis" << "audio/x-wav" << "audio/x-ms-wma"; case Video: return QStringList() << "video/mp4" << "audio/mp4" << "audio/x-matroska" << "video/x-matroska" << "application/x-matroska" << "video/avi" << "video/msvideo" << "video/x-msvideo" << "video/ogg" << "application/ogg" << "application/x-ogg" << "video/3gpp" << "video/3gpp2" << "video/flv" << "video/x-flv" << "video/x-flic" << "video/mpeg" << "video/x-mpeg" << "video/x-ogm" << "application/x-shockwave-flash" << "video/x-theora" << "video/quicktime" << "video/x-ms-asf" << "application/vnd.rn-realmedia" << "video/x-ms-wmv"; case Picture: return QStringList() << "image/jpeg" << "image/pjpeg" << "image/bmp" << "image/x-bmp" << "image/png" << "image/x-png" << "image/tiff" << "image/svg+xml" << "image/x-xbitmap" << "image/gif" << "image/x-xpixmap" << "image/vnd.microsoft.icon"; case Terminal: return QStringList() << "application/x-terminal"; } return QStringList(); } // clang-format on ================================================ FILE: src/plugin-defaultapp/operation/defappworker.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DEFAPPWORKER_H #define DEFAPPWORKER_H #include #include #include #include "mimedbusproxy.h" #include "category.h" class QFileInfo; class QTimer; class DefAppModel; class Category; class DefAppWorker : public QObject { Q_OBJECT public: explicit DefAppWorker(DefAppModel *m_defAppModel, QObject *parent = 0); ~DefAppWorker(); enum DefaultAppsCategory { Browser, Mail, Text, Music, Video, Picture, Terminal }; void active(); void deactive(); public Q_SLOTS: void onSetDefaultApp(const QString &category, const App &item); void onSetDefaultTerminal(const App &item); void onGetListApps(); void onDelUserApp(const QString &mine, const App &item); void onCreateFile(const QString &mime, const QFileInfo &info); private Q_SLOTS: void getListAppFinished(const QString &mime, const ObjectMap &map); void getDefaultAppFinished(const QString &mime, const QString &w); void getManagerObjectFinished(QDBusPendingCallWatcher *call); private: DefAppModel *m_defAppModel; MimeDBusProxy *m_dbusManager; QMap m_stringToCategory; QString m_userLocalPath; QTimer *m_debounceTimer; // 防抖定时器 private: const QString getTypeByCategory(const DefAppWorker::DefaultAppsCategory &category); const QStringList getTypeListByCategory(const DefAppWorker::DefaultAppsCategory &category); Category* getCategory(const QString &mime) const; // QGSettings *m_defaultTerminal; bool executeGsettingsCommand(const QStringList &args, const QString &errorMessage); }; #endif // DEFAPPWORKER_H ================================================ FILE: src/plugin-defaultapp/operation/defappworkerold.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "defappworkerold.h" #include "defappmodel.h" #include #include #include #include #include #include #include #include #include #include Q_LOGGING_CATEGORY(DdcDefaultWorkerOld, "dcc-default-worker-old") DefAppWorkerOld::DefAppWorkerOld(DefAppModel *model, QObject *parent) : QObject(parent), m_defAppModel(model), m_dbusManager(new MimeDBusProxyOld(this)) { m_stringToCategory.insert("Browser", Browser); m_stringToCategory.insert("Mail", Mail); m_stringToCategory.insert("Text", Text); m_stringToCategory.insert("Music", Music); m_stringToCategory.insert("Video", Video); m_stringToCategory.insert("Picture", Picture); m_stringToCategory.insert("Terminal", Terminal); connect(m_dbusManager, &MimeDBusProxyOld::Change, this, &DefAppWorkerOld::onGetListApps); m_userLocalPath = QDir::homePath() + "/.local/share/applications/"; // mkdir folder QDir dir(m_userLocalPath); dir.mkpath(m_userLocalPath); } void DefAppWorkerOld::active() { m_dbusManager->blockSignals(false); } void DefAppWorkerOld::deactive() { m_dbusManager->blockSignals(true); } void DefAppWorkerOld::onSetDefaultApp(const QString &category, const App &item) { QStringList mimelist = getTypeListByCategory(m_stringToCategory[category]); QDBusPendingCall call = m_dbusManager->SetDefaultApp(mimelist, item.Id); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [call, watcher, this, item, category] { if (!call.isError()) { qCDebug(DdcDefaultWorkerOld) << "Setting MIME " << category << "to " << item.Id; auto tosetCategory = getCategory(category); tosetCategory->setDefault(item); } else { qCWarning(DdcDefaultWorkerOld) << "Cannot set MIME" << category << "to" << item.Id; } watcher->deleteLater(); }); } void DefAppWorkerOld::onGetListApps() { //遍历QMap去获取dbus数据 for (auto mimelist = m_stringToCategory.constBegin(); mimelist != m_stringToCategory.constEnd(); ++mimelist) { const QString type { getTypeByCategory(mimelist.value()) }; getDefaultAppFinished(mimelist.key(), m_dbusManager->GetDefaultApp(type)); getListAppFinished(mimelist.key(),m_dbusManager->ListApps(type), false); getListAppFinished(mimelist.key(),m_dbusManager->ListUserApps(type), true); } } void DefAppWorkerOld::onDelUserApp(const QString &mime, const App &item) { Category *category = getCategory(mime); category->delUserItem(item); if (item.CanDelete) { QStringList mimelist = getTypeListByCategory(m_stringToCategory[mime]); m_dbusManager->DeleteApp(mimelist, item.Id); } else { m_dbusManager->DeleteUserApp(item.Id); } //remove file QFile file(m_userLocalPath + item.Id); file.remove(); } void DefAppWorkerOld::onCreateFile(const QString &mime, const QFileInfo &info) { const bool isDesktop = info.suffix() == "desktop"; if (isDesktop) { QFile file(info.filePath()); QString newfile = m_userLocalPath + "deepin-custom-" + info.fileName(); file.copy(newfile); file.close(); QStringList mimelist = getTypeListByCategory(m_stringToCategory[mime]); QFileInfo fileInfo(info.filePath()); const QString &filename = "deepin-custom-" + fileInfo.completeBaseName() + ".desktop"; m_dbusManager->AddUserApp(mimelist, filename); App app; app.Id = filename; app.Name = fileInfo.baseName(); app.DisplayName = fileInfo.baseName(); app.Icon = "application-default-icon"; app.Description = ""; app.Exec = info.filePath(); app.isUser = true; onGetListApps(); } else { QFile file(m_userLocalPath + "deepin-custom-" + info.baseName() + ".desktop"); if (!file.open(QIODevice::WriteOnly | QIODevice::Text)) { return; } QTextStream out(&file); out << "[Desktop Entry]\n" "Type=Application\n" "Version=1.0\n" "Name=" + info.baseName() + "\n" "Path=" + info.path() + "\n" "Exec=" + info.filePath() + "\n" "Icon=application-default-icon\n" "Terminal=false\n" "Categories=" + mime + ";" #if (QT_VERSION < QT_VERSION_CHECK(5,15,0)) << endl; #else << Qt::endl; #endif out.flush(); file.close(); QStringList mimelist = getTypeListByCategory(m_stringToCategory[mime]); QFileInfo fileInfo(info.filePath()); m_dbusManager->AddUserApp(mimelist, "deepin-custom-" + fileInfo.baseName() + ".desktop"); App app; app.Id = "deepin-custom-" + fileInfo.baseName() + ".desktop"; app.Name = fileInfo.baseName(); app.DisplayName = fileInfo.baseName(); app.Icon = "application-default-icon"; app.Description = ""; app.Exec = info.filePath(); app.isUser = true; onGetListApps(); } } void DefAppWorkerOld::getListAppFinished(const QString &mime, const QString &defaultApp, bool isUser) { const QJsonArray defApp = QJsonDocument::fromJson(defaultApp.toUtf8()).array(); saveListApp(mime, defApp, isUser); } void DefAppWorkerOld::getDefaultAppFinished(const QString &mime, const QString &w) { const QJsonObject &defaultApp = QJsonDocument::fromJson(w.toStdString().c_str()).object(); saveDefaultApp(mime, defaultApp); } void DefAppWorkerOld::saveListApp(const QString &mime, const QJsonArray &json, const bool isUser) { Category *category = getCategory(mime); if (!category) { return; } QList list; for (const QJsonValue &value : json) { QJsonObject obj = value.toObject(); App app; app.Id = obj["Id"].toString(); app.Name = obj["Name"].toString(); app.DisplayName = obj["DisplayName"].toString(); app.Icon = obj["Icon"].toString(); app.Description = obj["Description"].toString(); app.Exec = obj["Exec"].toString(); app.isUser = isUser; app.CanDelete = obj["CanDelete"].toBool(); app.MimeTypeFit = obj["MimeTypeFit"].toBool(); list << app; } QList systemList = category->systemAppList(); QList userList = category->userAppList(); for (App app : list) { if (app.isUser == false) { for (App appUser : userList) { if (appUser.Exec == app.Exec) { category->delUserItem(appUser); } } } } for (App app : list) { if (!systemList.contains(app) || !userList.contains(app)) { category->addUserItem(app); } } if (isUser) { userList = category->userAppList(); for (App app : userList) { if (!list.contains(app)) { category->delUserItem(app); } } } else { systemList = category->systemAppList(); for (App app : systemList) { if (!list.contains(app)) { category->delUserItem(app); } } } category->setCategory(mime); } void DefAppWorkerOld::saveDefaultApp(const QString &mime, const QJsonObject &json) { Category *category = getCategory(mime); if (!category) { return; } category->setCategory(mime); App app; app.Id = json["Id"].toString(); app.Name = json["Name"].toString(); app.DisplayName = json["DisplayName"].toString(); app.Icon = json["Icon"].toString(); app.Description = json["Description"].toString(); app.Exec = json["Exec"].toString(); app.isUser = false; category->setDefault(app); } Category *DefAppWorkerOld::getCategory(const QString &mime) const { switch (m_stringToCategory[mime]) { case Browser: return m_defAppModel->getModBrowser(); case Mail: return m_defAppModel->getModMail(); case Text: return m_defAppModel->getModText(); case Music: return m_defAppModel->getModMusic(); case Video: return m_defAppModel->getModVideo(); case Picture: return m_defAppModel->getModPicture(); case Terminal: return m_defAppModel->getModTerminal(); } return nullptr; } const QString DefAppWorkerOld::getTypeByCategory(const DefaultAppsCategory &category) { return getTypeListByCategory(category)[0]; } const QStringList DefAppWorkerOld::getTypeListByCategory(const DefaultAppsCategory &category) { switch (category) { case Browser: return QStringList() << "x-scheme-handler/http" << "x-scheme-handler/ftp" << "x-scheme-handler/https" << "text/html" << "text/xml" << "text/xhtml_xml" << "text/xhtml+xml"; case Mail: return QStringList() << "x-scheme-handler/mailto" << "message/rfc822" << "application/x-extension-eml" << "application/x-xpinstall"; case Text: return QStringList() << "text/plain"; case Music: return QStringList() << "audio/mpeg" << "audio/mp3" << "audio/x-mp3" << "audio/mpeg3" << "audio/x-mpeg-3" << "audio/x-mpeg" << "audio/flac" << "audio/x-flac" << "application/x-flac" << "audio/ape" << "audio/x-ape" << "application/x-ape" << "audio/ogg" << "audio/x-ogg" << "audio/musepack" << "application/musepack" << "audio/x-musepack" << "application/x-musepack" << "audio/mpc" << "audio/x-mpc" << "audio/vorbis" << "audio/x-vorbis" << "audio/x-wav" << "audio/x-ms-wma"; case Video: return QStringList() << "video/mp4" << "audio/mp4" << "audio/x-matroska" << "video/x-matroska" << "application/x-matroska" << "video/avi" << "video/msvideo" << "video/x-msvideo" << "video/ogg" << "application/ogg" << "application/x-ogg" << "video/3gpp" << "video/3gpp2" << "video/flv" << "video/x-flv" << "video/x-flic" << "video/mpeg" << "video/x-mpeg" << "video/x-ogm" << "application/x-shockwave-flash" << "video/x-theora" << "video/quicktime" << "video/x-ms-asf" << "application/vnd.rn-realmedia" << "video/x-ms-wmv"; case Picture: return QStringList() << "image/jpeg" << "image/pjpeg" << "image/bmp" << "image/x-bmp" << "image/png" << "image/x-png" << "image/tiff" << "image/svg+xml" << "image/x-xbitmap" << "image/gif" << "image/x-xpixmap" << "image/vnd.microsoft.icon"; case Terminal: return QStringList() << "application/x-terminal"; } return QStringList(); } ================================================ FILE: src/plugin-defaultapp/operation/defappworkerold.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include "mimedbusproxyold.h" #include "category.h" class QFileInfo; class DefAppModel; class Category; class DefAppWorkerOld : public QObject { Q_OBJECT public: explicit DefAppWorkerOld(DefAppModel *m_defAppModel, QObject *parent = 0); enum DefaultAppsCategory { Browser, Mail, Text, Music, Video, Picture, Terminal }; void active(); void deactive(); public Q_SLOTS: void onSetDefaultApp(const QString &category, const App &item); void onGetListApps(); void onDelUserApp(const QString &mine, const App &item); void onCreateFile(const QString &mime, const QFileInfo &info); private Q_SLOTS: void getListAppFinished(const QString &mime, const QString &defaultApp, bool isUser); void getDefaultAppFinished(const QString &mime, const QString &w); void saveListApp(const QString &mime, const QJsonArray &json, const bool isUser); void saveDefaultApp(const QString &mime, const QJsonObject &json); private: DefAppModel *m_defAppModel; MimeDBusProxyOld *m_dbusManager; QMap m_stringToCategory; QString m_userLocalPath; private: const QString getTypeByCategory(const DefAppWorkerOld::DefaultAppsCategory &category); const QStringList getTypeListByCategory(const DefAppWorkerOld::DefaultAppsCategory &category); Category* getCategory(const QString &mime) const; }; ================================================ FILE: src/plugin-defaultapp/operation/mimedbusproxy.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "mimedbusproxy.h" #include #include #include #include #include #include #include const QString ApplicationManagerServer = QStringLiteral("org.desktopspec.ApplicationManager1"); const QString MimePath = QStringLiteral("/org/desktopspec/ApplicationManager1/MimeManager1"); const QString MimeInterface = QStringLiteral("org.desktopspec.MimeManager1"); const QString AMApplicationInterface = QStringLiteral("org.desktopspec.ApplicationManager1.Application"); const QString ObjectManagerInterface = QStringLiteral("org.desktopspec.DBus.ObjectManager"); const QString ApplicationManager1Path = QStringLiteral("/org/desktopspec/ApplicationManager1"); const QString ApplicationManager1Interface = QStringLiteral("org.desktopspec.ApplicationManager1"); MimeDBusProxy::MimeDBusProxy(QObject *parent) : QObject(parent) , m_mimeInter(new QDBusInterface(ApplicationManagerServer, MimePath, MimeInterface, QDBusConnection::sessionBus(), this)) , m_applicationManagerInter(new QDBusInterface(ApplicationManagerServer, ApplicationManager1Path, ObjectManagerInterface, QDBusConnection::sessionBus(), this)) { qRegisterMetaType(); qDBusRegisterMetaType(); qRegisterMetaType(); qDBusRegisterMetaType(); qRegisterMetaType(); qDBusRegisterMetaType(); qRegisterMetaType(); qDBusRegisterMetaType(); QDBusConnection::sessionBus().connect(ApplicationManagerServer, ApplicationManager1Path, "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SIGNAL(Change())); QDBusConnection::sessionBus().connect(ApplicationManagerServer, MimePath, MimeInterface, "MimeInfoReloaded", this, SIGNAL(Change())); } QDBusPendingReply MimeDBusProxy::GetManagedObjects() { return m_applicationManagerInter->asyncCall("GetManagedObjects"); } QDBusPendingReply MimeDBusProxy::SetDefaultApp(const QString &mimeType, const QString &desktopId) { QStringMap map; map.insert(mimeType, desktopId); return m_mimeInter->asyncCallWithArgumentList("setDefaultApplication", { QVariant::fromValue(map) }); } void MimeDBusProxy::DeleteApp([[maybe_unused]] const QStringList &mimeTypes, [[maybe_unused]] const QString &desktopId) { // QDBusPendingReply(m_mimeInter->asyncCall("DeleteApp", mimeTypes, desktopId)); } void MimeDBusProxy::DeleteUserApp([[maybe_unused]] const QString &desktopId) { // QDBusPendingReply(m_mimeInter->asyncCall("DeleteUserApp", desktopId)); QDBusMessage msg = QDBusMessage::createMethodCall(ApplicationManagerServer, ApplicationManager1Path, ApplicationManager1Interface, QStringLiteral("deleteUserApplication")); msg << desktopId; QDBusPendingReply<> reply = QDBusConnection::sessionBus().asyncCall(msg); if (reply.isError()) { qWarning() << "deleteUserApplication" << reply.error(); } } void MimeDBusProxy::AddUserApp([[maybe_unused]] const QStringList &mimeTypes, [[maybe_unused]] const QString &desktopId) { // QDBusPendingReply(m_mimeInter->asyncCall("AddUserApp", mimeTypes, desktopId)); } QDBusPendingReply MimeDBusProxy::addUserApplication(const QVariantMap &desktopFile, const QString &name) { QDBusMessage msg = QDBusMessage::createMethodCall(ApplicationManagerServer, ApplicationManager1Path, ApplicationManager1Interface, QStringLiteral("addUserApplication")); msg << desktopFile << name; QDBusPendingReply reply = QDBusConnection::sessionBus().asyncCall(msg); return reply; } QString MimeDBusProxy::getAppId(const QDBusObjectPath &appPath) { auto interface = QDBusInterface(ApplicationManagerServer, appPath.path(), AMApplicationInterface, QDBusConnection::sessionBus(), this); return interface.property("ID").toString(); } QDBusPendingReply MimeDBusProxy::GetDefaultApp(const QString &mimeType) { return m_mimeInter->asyncCallWithArgumentList("queryDefaultApplication", { mimeType }); } QDBusPendingReply MimeDBusProxy::ListApps(const QString &mimeType) { return m_mimeInter->asyncCallWithArgumentList("listApplications", { mimeType }); } ================================================ FILE: src/plugin-defaultapp/operation/mimedbusproxy.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include class QDBusInterface; class QDBusMessage; using ObjectInterfaceMap = QMap; using ObjectMap = QMap; using QStringMap = QMap; using PropMap = QMap; Q_DECLARE_METATYPE(ObjectInterfaceMap) Q_DECLARE_METATYPE(ObjectMap) Q_DECLARE_METATYPE(QStringMap) Q_DECLARE_METATYPE(PropMap) class MimeDBusProxy : public QObject { Q_OBJECT public: explicit MimeDBusProxy(QObject *parent = nullptr); QDBusPendingReply SetDefaultApp(const QString &mime, const QString &desktopId); void DeleteApp(const QStringList &mimeTypes, const QString &desktopId); void DeleteUserApp(const QString &desktopId); void AddUserApp(const QStringList &mimeTypes, const QString &desktopId); QDBusPendingReply addUserApplication(const QVariantMap &desktopFile, const QString &name); QDBusPendingReply GetManagedObjects(); QDBusPendingReply GetDefaultApp(const QString &mimeType); QDBusPendingReply ListApps(const QString &mimeType); QString getAppId(const QDBusObjectPath &path); Q_SIGNALS: void Change(); private: QDBusInterface *m_mimeInter; QDBusInterface *m_applicationManagerInter; }; ================================================ FILE: src/plugin-defaultapp/operation/mimedbusproxyold.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "mimedbusproxyold.h" #include #include #include #include #include const QString MimeService = QStringLiteral("org.deepin.dde.Mime1"); const QString MimePath = QStringLiteral("/org/deepin/dde/Mime1"); const QString MimeInterface = QStringLiteral("org.deepin.dde.Mime1"); bool MimeDBusProxyOld::isRegisted() { return QDBusConnection::sessionBus().interface()->isServiceRegistered(MimeInterface); } MimeDBusProxyOld::MimeDBusProxyOld(QObject *parent) : QObject(parent) , m_mimeInter(new QDBusInterface(MimeService, MimePath, MimeInterface, QDBusConnection::sessionBus(), this)) { connect(m_mimeInter, SIGNAL(Change()), this, SIGNAL(Change()), Qt::QueuedConnection); } QDBusPendingReply MimeDBusProxyOld::SetDefaultApp(const QStringList &mimeTypes, const QString &desktopId) { QList argumentList; argumentList << QVariant::fromValue(mimeTypes) << QVariant::fromValue(desktopId); return m_mimeInter->asyncCallWithArgumentList("SetDefaultApp", argumentList); } void MimeDBusProxyOld::DeleteApp(const QStringList &mimeTypes, const QString &desktopId) { QDBusPendingReply(m_mimeInter->asyncCall("DeleteApp", mimeTypes, desktopId)); } void MimeDBusProxyOld::DeleteUserApp(const QString &desktopId) { QDBusPendingReply(m_mimeInter->asyncCall("DeleteUserApp", desktopId)); } void MimeDBusProxyOld::AddUserApp(const QStringList &mimeTypes, const QString &desktopId) { QDBusPendingReply(m_mimeInter->asyncCall("AddUserApp", mimeTypes, desktopId)); } QString MimeDBusProxyOld::GetDefaultApp(const QString &mimeType) { return QDBusPendingReply(m_mimeInter->asyncCall("GetDefaultApp", mimeType)); } QString MimeDBusProxyOld::ListApps(const QString &mimeType) { return QDBusPendingReply(m_mimeInter->asyncCall("ListApps", mimeType)); } QString MimeDBusProxyOld::ListUserApps(const QString &mimeType) { return QDBusPendingReply(m_mimeInter->asyncCall("ListUserApps", mimeType)); } ================================================ FILE: src/plugin-defaultapp/operation/mimedbusproxyold.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include class QDBusInterface; class QDBusMessage; class MimeDBusProxyOld : public QObject { Q_OBJECT public: static bool isRegisted(); explicit MimeDBusProxyOld(QObject *parent = nullptr); QDBusPendingReply SetDefaultApp(const QStringList &mimeTypes, const QString &desktopId); void DeleteApp(const QStringList &mimeTypes, const QString &desktopId); void DeleteUserApp(const QString &desktopId); void AddUserApp(const QStringList &mimeTypes, const QString &desktopId); QString GetDefaultApp(const QString &mimeType); QString ListApps(const QString &mimeType); QString ListUserApps(const QString &mimeType); Q_SIGNALS: // SIGNALS void Change(); // begin property changed signals private: QDBusInterface *m_mimeInter; }; ================================================ FILE: src/plugin-defaultapp/qml/Defaultapp.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { name: "defaultapp" parentName: "system" displayName: qsTr("Default App") description: qsTr("Set the default application for opening various types of files") icon: "default_program" weight: 40 } ================================================ FILE: src/plugin-defaultapp/qml/DefaultappMain.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import org.deepin.dtk 1.0 as D import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dcc 1.0 import org.deepin.dcc.defApp 1.0 DccObject { DetailItem { name: "defappWebpage" parentName: "defaultapp" displayName: qsTr("Webpage") icon: "defapp_network" weight: 10 categoryModel: dccData.browser() } DetailItem { name: "defappMail" parentName: "defaultapp" displayName: qsTr("Mail") icon: "defapp_mail" weight: 20 categoryModel: dccData.mail() } DetailItem { name: "defappText" parentName: "defaultapp" displayName: qsTr("Text") icon: "defapp_text" weight: 30 categoryModel: dccData.text() } DetailItem { name: "defappMusic" parentName: "defaultapp" displayName: qsTr("Music") icon: "defapp_music" weight: 40 categoryModel: dccData.music() } DetailItem { name: "defappVideo" parentName: "defaultapp" displayName: qsTr("Video") icon: "defapp_video" weight: 50 categoryModel: dccData.video() } DetailItem { name: "defappPicture" parentName: "defaultapp" displayName: qsTr("Picture") icon: "defapp_picture" weight: 60 categoryModel: dccData.picture() } DetailItem { name: "defappTerminal" parentName: "defaultapp" displayName: qsTr("Terminal") icon: "defapp_terminal" weight: 70 categoryModel: dccData.terminal() } } ================================================ FILE: src/plugin-defaultapp/qml/DetailItem.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import Qt.labs.platform 1.1 import Qt.labs.qmlmodels 1.2 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 import org.deepin.dcc.defApp 1.0 DccObject { id: root property CategoryModel categoryModel: null property bool canDelete: false page: DccRightView { isGroup: true } DccObject { name: "title" parentName: root.name displayName: qsTr("Please choose the default program to open '%1'").arg(root.displayName) weight: 10 pageType: DccObject.Editor page: Button { implicitWidth: implicitContentWidth + 20 implicitHeight: 30 text: qsTr("add") onClicked: { fileDialog.open() } onVisibleChanged: { fileDialog.close() } FileDialog { id: fileDialog title: qsTr("Open Desktop file") folder: "/usr/share/applications" visible: false nameFilters: [qsTr("Apps (*.desktop)"), qsTr("All files (*)")] onAccepted: { categoryModel.addApp(fileDialog.currentFile) } } } } DccRepeater { model: categoryModel delegate: DccObject { name: model.id parentName: root.name weight: 20 + index icon: model.icon displayName: model.display backgroundType: DccObject.ClickStyle pageType: DccObject.Item page: D.ItemDelegate { id: control leftPadding: 10 rightPadding: 8 topPadding: 0 bottomPadding: 0 icon.name: dccObj.icon text: dccObj.displayName checked: false hoverEnabled: true cascadeSelected: false checkable: false onClicked: categoryModel.setDefaultApp(model.id) background: null implicitHeight: 48 content: RowLayout { width: 38 DccCheckIcon { Layout.alignment: Qt.AlignCenter visible: model.isDefault } D.IconButton { Layout.alignment: Qt.AlignCenter implicitHeight: 30 implicitWidth: 30 visible: !model.isDefault && model.canDelete && control.hovered icon { name: "dcc-delete" width: 16 height: 16 } onClicked: { categoryModel.removeApp(model.id) } background: Rectangle { property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } } } } onActive: { if (!model.isDefault) { categoryModel.setDefaultApp(model.id) } } } } } ================================================ FILE: src/plugin-defaultapp/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-device/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(Plugin_Name device) dcc_install_plugin(NAME ${Plugin_Name}) ================================================ FILE: src/plugin-device/qml/Device.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { name: "device" parentName: "root" displayName: qsTr("Bluetooth and Devices") icon: "hardware" weight: 40 } ================================================ FILE: src/plugin-device/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-display/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) ########################################### function(ws_generate_local type input_file output_name) pkg_get_variable(WAYLAND_SCANNER wayland-scanner wayland_scanner) message(${input_file}) execute_process(COMMAND ${WAYLAND_SCANNER} ${type}-header ${input_file} ${CMAKE_CURRENT_BINARY_DIR}/${output_name}.h ) execute_process(COMMAND ${WAYLAND_SCANNER} public-code ${input_file} ${CMAKE_CURRENT_BINARY_DIR}/${output_name}.c ) endfunction() find_package(PkgConfig REQUIRED) find_package(TreelandProtocols REQUIRED) pkg_check_modules(WaylandClient REQUIRED IMPORTED_TARGET wayland-client) pkg_check_modules(WLR_PROTOCOLS REQUIRED wlr-protocols) execute_process( COMMAND pkg-config --variable=pkgdatadir wlr-protocols OUTPUT_VARIABLE WLR_PROTOCOLS_XML_DIR OUTPUT_STRIP_TRAILING_WHITESPACE ) ws_generate_local(client ${WLR_PROTOCOLS_XML_DIR}/unstable/wlr-output-management-unstable-v1.xml wlr-output-management-unstable-v1-client-protocol) ws_generate_local(client ${TREELAND_PROTOCOLS_DATA_DIR}/treeland-output-manager-v1.xml treeland-output-management-client-protocol) file(GLOB_RECURSE LIBWAYQT_SRCS "wayland/libwayqt/*.cpp" "wayland/libwayqt/*.h" ) add_library(libwayqt6 OBJECT ${LIBWAYQT_SRCS} wlr-output-management-unstable-v1-client-protocol.c treeland-output-management-client-protocol.c ) # fix arm64 build failed relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol target_compile_options(libwayqt6 PRIVATE "-fpic") target_include_directories(libwayqt6 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/wayland/libwayqt" PRIVATE ${Qt6Gui_PRIVATE_INCLUDE_DIRS} ) target_link_libraries(libwayqt6 PUBLIC ${QT_NS}::Core ${QT_NS}::Gui ${QT_NS}::GuiPrivate PkgConfig::WaylandClient ) ########################################### set(Display_Name display) file(GLOB_RECURSE Display_SRCS "operation/*.cpp" ) add_library(${Display_Name} MODULE ${Display_SRCS} ) target_include_directories(${Display_Name} PUBLIC $ ) set(Display_Libraries ${DCC_FRAME_Library} ${QT_NS}::Gui ${QT_NS}::DBus ${QT_NS}::Quick ${DTK_NS}::Core ) target_link_libraries(${Display_Name} PRIVATE ${Display_Libraries} $ PkgConfig::WaylandClient ) dcc_install_plugin(NAME ${Display_Name} TARGET ${Display_Name}) ######################################### ================================================ FILE: src/plugin-display/operation/dccscreen.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dccscreen.h" #include "private/dccscreen_p.h" #include "private/displayworker.h" #include namespace dccV25 { DccScreenItem *DccScreenItemPrivate::New(Monitor *monitor, DccScreen *screen) { DccScreenItem *item = new DccScreenItem(screen); item->d_ptrDccScreenItem->m_monitor = monitor; QObject::connect(monitor, &Monitor::brightnessChanged, item, &DccScreenItem::brightnessChanged); return item; } DccScreenItemPrivate *DccScreenItemPrivate::Private(DccScreenItem *screenItem) { return screenItem->d_ptrDccScreenItem.get(); } DccScreenItemPrivate::DccScreenItemPrivate(DccScreenItem *screenItem) : q_ptr(screenItem) { } DccScreenItemPrivate::~DccScreenItemPrivate() { } bool DccScreenItem::canBrightness() const { return d_ptrDccScreenItem->m_monitor->canBrightness(); } double DccScreenItem::brightness() const { return d_ptrDccScreenItem->m_monitor->brightness(); } void DccScreenItem::setBrightness(const double brightness) { if (this->brightness() == brightness) { return; } DccScreen *screen = static_cast(parent()); DccScreenPrivate *ptr = DccScreenPrivate::Private(screen); ptr->worker()->setMonitorBrightness(d_ptrDccScreenItem->m_monitor, brightness); } QString DccScreenItem::name() const { return d_ptrDccScreenItem->m_monitor->name(); } DccScreenItem::DccScreenItem(QObject *parent) : QObject(parent) , d_ptrDccScreenItem(new DccScreenItemPrivate(this)) { } DccScreenItem::~DccScreenItem() { } DccScreen *DccScreenPrivate::New(QList monitors, DisplayWorker *worker, QObject *parent) { DccScreen *screen = new DccScreen(parent); screen->d_ptrDccScreen->m_worker = worker; screen->d_ptrDccScreen->setMonitors(monitors); return screen; } DccScreenPrivate *DccScreenPrivate::Private(DccScreen *screen) { return screen->d_ptrDccScreen.get(); } DccScreenPrivate::DccScreenPrivate(DccScreen *screen) : q_ptr(screen) , m_screen(nullptr) , m_maxScale(1.0) { } DccScreenPrivate::~DccScreenPrivate() { } void DccScreenPrivate::setMonitors(QList monitors) { m_monitors = monitors; std::sort(m_monitors.begin(), m_monitors.end(), [](const Monitor *monitor1, const Monitor *monitor2) { return monitor1->name() < monitor2->name(); }); QStringList name; auto updateMaxScaleFun = [this]() { updateMaxScale(); }; for (auto monitor : m_monitors) { name << monitor->name(); q_ptr->connect(monitor, &Monitor::currentModeChanged, q_ptr, updateMaxScaleFun); q_ptr->connect(monitor, &Monitor::enableChanged, q_ptr, updateMaxScaleFun); m_screenItems.append(DccScreenItemPrivate::New(monitor, q_ptr)); } Q_EMIT q_ptr->screenItemsChanged(); m_name = name.join(" = "); updateResolutionList(); updateRateList(); updateScreen(); updateMaxScale(); q_ptr->connect(monitor(), &Monitor::modelListChanged, q_ptr, [this]() { updateResolutionList(); updateRateList(); }); q_ptr->connect(monitor(), &Monitor::currentModeChanged, q_ptr, [this]() { updateResolutionList(); updateRateList(); q_ptr->currentResolutionChanged(); q_ptr->currentRateChanged(); q_ptr->availableFillModesChanged(); }); q_ptr->connect(monitor(), &Monitor::availableFillModesChanged, q_ptr, &DccScreen::availableFillModesChanged); q_ptr->connect(monitor(), &Monitor::currentFillModeChanged, q_ptr, &DccScreen::currentFillModeChanged); q_ptr->connect(monitor(), &Monitor::currentModeChanged, q_ptr, &DccScreen::currentModeChanged); q_ptr->connect(monitor(), &Monitor::enableChanged, q_ptr, &DccScreen::enableChanged); q_ptr->connect(monitor(), &Monitor::rotateChanged, q_ptr, &DccScreen::rotateChanged); q_ptr->connect(monitor(), &Monitor::xChanged, q_ptr, &DccScreen::xChanged); q_ptr->connect(monitor(), &Monitor::yChanged, q_ptr, &DccScreen::yChanged); q_ptr->connect(monitor(), &Monitor::wChanged, q_ptr, &DccScreen::widthChanged); q_ptr->connect(monitor(), &Monitor::hChanged, q_ptr, &DccScreen::heightChanged); q_ptr->connect(monitor(), &Monitor::wallpaperChanged, q_ptr, &DccScreen::wallpaperChanged); auto updateScreenFun = [this]() { updateScreen(); }; q_ptr->connect(qApp, &QGuiApplication::screenAdded, q_ptr, updateScreenFun); q_ptr->connect(qApp, &QGuiApplication::screenRemoved, q_ptr, updateScreenFun); } Monitor *DccScreenPrivate::monitor() { for (auto mon : m_monitors) { if (mon->isPrimary()) { return mon; } } return m_monitors.first(); } QList DccScreenPrivate::monitors() { return m_monitors; } void DccScreenPrivate::setMode(QSize resolution, double rate) { m_worker->backupConfig(); for (auto monitor : m_monitors) { quint32 id = 0; for (auto mode : monitor->modeList()) { if (mode.width() == resolution.width() && mode.height() == resolution.height()) { if (mode.rate() == rate) { id = mode.id(); break; } else if (id == 0) { id = mode.id(); } } } if (id != 0) { m_worker->setMonitorResolution(monitor, id); } else { m_worker->setMonitorResolutionBySize(monitor, resolution.width(), resolution.height()); } } m_worker->applyChanges(); } void DccScreenPrivate::setRotate(uint rotate) { m_worker->backupConfig(); m_worker->setMonitorRotate(monitor(), rotate); m_worker->applyChanges(); } void DccScreenPrivate::setFillMode(const QString &fileMode) { m_worker->backupConfig(); for (auto monitor : m_monitors) { m_worker->setCurrentFillMode(monitor, fileMode); } } void DccScreenPrivate::setScale(qreal scale) { for (auto monitor : m_monitors) { m_worker->setIndividualScaling(monitor, scale); } } void DccScreenPrivate::updateResolutionList() { QList resolutionList; for (auto monitor = m_monitors.cbegin(); monitor != m_monitors.cend(); monitor++) { QList tmpResolutionList; for (auto mode : (*monitor)->modeList()) { QSize tmpMode(mode.width(), mode.height()); if (!tmpResolutionList.contains(tmpMode)) { tmpResolutionList.append(tmpMode); } } if (monitor == m_monitors.cbegin()) { resolutionList = tmpResolutionList; } else { for (auto it = resolutionList.begin(); it != resolutionList.end();) { if (tmpResolutionList.contains(*it)) { it++; } else { it = resolutionList.erase(it); } } } } m_resolutionList = resolutionList; if (m_resolutionList != resolutionList) { m_resolutionList = resolutionList; Q_EMIT q_ptr->resolutionListChanged(); } } void DccScreenPrivate::updateRateList() { QList rateList; Resolution currentMode = monitor()->currentMode(); for (auto mode : monitor()->modeList()) { if (mode.width() == currentMode.width() && mode.height() == currentMode.height()) { rateList.append(mode.rate()); } } if (m_rateList != rateList) { m_rateList = rateList; Q_EMIT q_ptr->rateListChanged(); } } void DccScreenPrivate::updateScreen() { QString name = monitor()->name(); QRect rect = monitor()->rect(); QScreen *tmpScreen = nullptr; for (auto screen : QGuiApplication::screens()) { if (rect == screen->geometry()) { if (name == screen->name()) { tmpScreen = screen; } if (!tmpScreen) { tmpScreen = screen; } } } if (tmpScreen != m_screen) { m_screen = tmpScreen; Q_EMIT q_ptr->screenChanged(); } } void DccScreenPrivate::updateMaxScale() { qreal maxScale = 3.0; for (auto monitor : m_monitors) { if (!monitor->enable()) { continue; } auto tmode = monitor->currentMode(); if (tmode.width() == 0 || tmode.height() == 0) { maxScale = 1.0; break; } qreal maxWScale = tmode.width() / MinScreenWidth; qreal maxHScale = tmode.height() / MinScreenHeight; maxScale = std::min(maxScale, std::min(maxWScale, maxHScale)); } if (maxScale < 1.0) { maxScale = 1.0; } if (m_maxScale != maxScale) { m_maxScale = maxScale; Q_EMIT q_ptr->maxScaleChanged(); } } DccScreen::DccScreen(QObject *parent) : QObject(parent) , d_ptrDccScreen(new DccScreenPrivate(this)) { } DccScreen::~DccScreen() { } QString DccScreen::name() const { return d_ptrDccScreen->m_name; } bool DccScreen::enable() const { return d_ptrDccScreen->monitor()->enable(); } int DccScreen::x() const { return d_ptrDccScreen->monitor()->x(); } int DccScreen::y() const { return d_ptrDccScreen->monitor()->y(); } int DccScreen::width() const { return d_ptrDccScreen->monitor()->scale() > 0 ? (d_ptrDccScreen->monitor()->w() / d_ptrDccScreen->monitor()->scale()) : d_ptrDccScreen->monitor()->w(); } int DccScreen::height() const { return d_ptrDccScreen->monitor()->scale() > 0 ? (d_ptrDccScreen->monitor()->h() / d_ptrDccScreen->monitor()->scale()) : d_ptrDccScreen->monitor()->h(); } QSize DccScreen::bestResolution() const { Resolution resolution = d_ptrDccScreen->monitor()->bestMode(); return QSize(resolution.width(), resolution.height()); } QSize DccScreen::currentResolution() const { auto mode = d_ptrDccScreen->monitor()->currentMode(); return QSize(mode.width(), mode.height()); } void DccScreen::setCurrentResolution(const QSize &resolution) { d_ptrDccScreen->setMode(resolution, currentRate()); } double DccScreen::bestRate() const { return d_ptrDccScreen->monitor()->bestMode().rate(); } double DccScreen::currentRate() const { return d_ptrDccScreen->monitor()->currentMode().rate(); } void DccScreen::setCurrentRate(const double &rate) { d_ptrDccScreen->setMode(currentResolution(), rate); } QList DccScreen::resolutionList() const { return d_ptrDccScreen->m_resolutionList; } QList DccScreen::rateList() const { return d_ptrDccScreen->m_rateList; } uint DccScreen::rotate() const { return d_ptrDccScreen->monitor()->rotate(); } void DccScreen::setRotate(uint rotate) { d_ptrDccScreen->setRotate(rotate); } double DccScreen::brightness() const { return d_ptrDccScreen->monitor()->brightness(); } QString DccScreen::currentFillMode() const { QString fillMode = d_ptrDccScreen->monitor()->currentFillMode(); return fillMode.isEmpty() ? "None" : fillMode; } void DccScreen::setCurrentFillMode(const QString &fill) { d_ptrDccScreen->setFillMode(fill); } QStringList DccScreen::availableFillModes() const { return currentResolution() == bestResolution() ? QStringList() : d_ptrDccScreen->monitor()->availableFillModes(); } QScreen *DccScreen::screen() const { return d_ptrDccScreen->m_screen; } qreal DccScreen::scale() const { return d_ptrDccScreen->monitor()->scale(); } void DccScreen::setScale(qreal scale) { d_ptrDccScreen->setScale(scale); } qreal DccScreen::maxScale() const { return d_ptrDccScreen->m_maxScale; } QList DccScreen::screenItems() const { return d_ptrDccScreen->m_screenItems; } QString DccScreen::wallpaper() const { return d_ptrDccScreen->monitor()->wallpaper(); } } // namespace dccV25 ================================================ FILE: src/plugin-display/operation/dccscreen.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCSCREEN_H #define DCCSCREEN_H #include #include #include #include namespace dccV25 { class DccScreenPrivate; class DccScreenItemPrivate; class DccScreenItem : public QObject { Q_OBJECT Q_PROPERTY(double brightness READ brightness WRITE setBrightness NOTIFY brightnessChanged FINAL) Q_PROPERTY(QString name READ name NOTIFY nameChanged FINAL) public: Q_INVOKABLE bool canBrightness() const; double brightness() const; void setBrightness(const double brightness); QString name() const; Q_SIGNALS: void brightnessChanged(); void nameChanged(); protected: explicit DccScreenItem(QObject *parent = nullptr); ~DccScreenItem() override; QScopedPointer d_ptrDccScreenItem; Q_DECLARE_PRIVATE_D(d_ptrDccScreenItem, DccScreenItem) Q_DISABLE_COPY(DccScreenItem) friend class DccScreenItemPrivate; }; class DccScreen : public QObject { Q_OBJECT Q_PROPERTY(QString name READ name NOTIFY nameChanged FINAL) Q_PROPERTY(bool enable READ enable NOTIFY enableChanged FINAL) Q_PROPERTY(int x READ x NOTIFY xChanged FINAL) Q_PROPERTY(int y READ y NOTIFY yChanged FINAL) Q_PROPERTY(int width READ width NOTIFY widthChanged FINAL) Q_PROPERTY(int height READ height NOTIFY heightChanged FINAL) Q_PROPERTY(QSize bestResolution READ bestResolution NOTIFY bestResolutionChanged FINAL) Q_PROPERTY(QSize currentResolution READ currentResolution WRITE setCurrentResolution NOTIFY currentResolutionChanged FINAL) Q_PROPERTY(QList resolutionList READ resolutionList NOTIFY resolutionListChanged FINAL) Q_PROPERTY(double bestRate READ bestRate NOTIFY bestRateChanged FINAL) Q_PROPERTY(double currentRate READ currentRate WRITE setCurrentRate NOTIFY currentRateChanged FINAL) Q_PROPERTY(QList rateList READ rateList NOTIFY rateListChanged FINAL) Q_PROPERTY(double brightness READ brightness NOTIFY brightnessChanged FINAL) Q_PROPERTY(uint rotate READ rotate WRITE setRotate NOTIFY rotateChanged FINAL) Q_PROPERTY(QString currentFillMode READ currentFillMode WRITE setCurrentFillMode NOTIFY currentFillModeChanged FINAL) Q_PROPERTY(QStringList availableFillModes READ availableFillModes NOTIFY availableFillModesChanged FINAL) Q_PROPERTY(QScreen* screen READ screen NOTIFY screenChanged FINAL) Q_PROPERTY(qreal scale READ scale WRITE setScale NOTIFY scaleChanged FINAL) Q_PROPERTY(qreal maxScale READ maxScale NOTIFY maxScaleChanged FINAL) Q_PROPERTY(QList screenItems READ screenItems NOTIFY screenItemsChanged FINAL) Q_PROPERTY(QString wallpaper READ wallpaper NOTIFY wallpaperChanged FINAL) public: QString name() const; bool enable() const; int x() const; int y() const; int width() const; int height() const; QSize bestResolution() const; // 推荐分辨率 QSize currentResolution() const; // 分辨率 void setCurrentResolution(const QSize &resolution); QList resolutionList() const; // 可选分辨率 double bestRate() const; // 推荐刷新率 double currentRate() const; // 刷新率 void setCurrentRate(const double &rate); QList rateList() const; // 可选刷新率 uint rotate() const; void setRotate(uint rotate); double brightness() const; QString currentFillMode() const; void setCurrentFillMode(const QString &fill); QStringList availableFillModes() const; QScreen *screen() const; qreal scale() const; void setScale(qreal scale); qreal maxScale() const; QList screenItems() const; QString wallpaper() const; Q_SIGNALS: void nameChanged(); void enableChanged(); void xChanged(); void yChanged(); void widthChanged(); void heightChanged(); void bestResolutionChanged(); void currentResolutionChanged(); void resolutionListChanged(); void bestRateChanged(); void currentRateChanged(); void rateListChanged(); void rotateChanged(); void brightnessChanged(); void currentModeChanged(); void currentFillModeChanged(); void availableFillModesChanged(); void screenChanged(); void scaleChanged(); void maxScaleChanged(); void screenItemsChanged(); void wallpaperChanged(); protected: explicit DccScreen(QObject *parent = nullptr); ~DccScreen() override; QScopedPointer d_ptrDccScreen; Q_DECLARE_PRIVATE_D(d_ptrDccScreen, DccScreen) Q_DISABLE_COPY(DccScreen) friend class DccScreenPrivate; }; } // namespace dccV25 #endif // DCCSCREEN_H ================================================ FILE: src/plugin-display/operation/displaymodule.cpp ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "displaymodule.h" #include "WayQtUtils.h" #include "dccfactory.h" #include "dccscreen.h" #include "private/concatscreen.h" #include "private/dccscreen_p.h" #include "private/displaymodel.h" #include "private/displaymodule_p.h" #include "private/displayworker.h" #include #include #include #include #include #include #include #include namespace dccV25 { static const QString DEFAULT_TIME_FORMAT = "hh:mm"; class Rect : public QRect { public: using QRect::QRect; bool operator<(const Rect &r) const { if (x() < r.x()) { return true; } if (x() > r.x()) { return false; } if (y() < r.y()) { return true; } if (y() > r.y()) { return false; } if (width() < r.width()) { return true; } if (width() > r.width()) { return false; } if (height() < r.height()) { return true; } return false; } }; DisplayModulePrivate::DisplayModulePrivate(DisplayModule *parent) : q_ptr(parent) , m_primary(nullptr) , m_maxGlobalScale(1.0) { QMetaObject::invokeMethod( q_ptr, [this]() { init(); }, Qt::QueuedConnection); } void DisplayModulePrivate::init() { m_model = new DisplayModel(q_ptr); m_worker = new DisplayWorker(m_model, q_ptr); m_worker->active(); q_ptr->connect(m_model, &DisplayModel::monitorListChanged, [this]() { updateMonitorList(); }); q_ptr->connect(m_model, &DisplayModel::primaryScreenChanged, q_ptr, [this]() { updatePrimary(); }); q_ptr->connect(m_model, &DisplayModel::displayModeChanged, q_ptr, [this]() { updateVirtualScreens(); updateDisplayMode(); }); q_ptr->connect(m_model, &DisplayModel::colorTemperatureEnabledChanged, q_ptr, &DisplayModule::colorTemperatureEnabledChanged); q_ptr->connect(m_model, &DisplayModel::colorTemperatureChanged, q_ptr, &DisplayModule::colorTemperatureChanged); q_ptr->connect(m_model, &DisplayModel::customColorTempTimePeriodChanged, q_ptr, &DisplayModule::customColorTempTimePeriodChanged); q_ptr->connect(m_model, &DisplayModel::adjustCCTmodeChanged, q_ptr, &DisplayModule::colorTemperatureModeChanged); updateMonitorList(); updatePrimary(); updateDisplayMode(); } void DisplayModulePrivate::updateVirtualScreens() { bool changed = false; QMap> addScreenMap; for (auto srcScreen : m_screens) { if (!srcScreen->enable()) { continue; } DccScreenPrivate *screenPrivate = DccScreenPrivate::Private(srcScreen); Rect rect(QPoint(srcScreen->x(), srcScreen->y()), srcScreen->currentResolution()); if (addScreenMap.contains(rect)) { addScreenMap[rect].append(screenPrivate->monitors()); } else { addScreenMap.insert(rect, screenPrivate->monitors()); } } for (auto it = m_virtualScreens.cbegin(); it != m_virtualScreens.cend();) { DccScreenPrivate *screenPrivate = DccScreenPrivate::Private(*it); Rect rect(QPoint((*it)->x(), (*it)->y()), (*it)->currentResolution()); bool isSame = addScreenMap.contains(rect); if (isSame) { auto monitors = addScreenMap[rect]; auto screenMonitors = screenPrivate->monitors(); isSame = monitors.size() == screenMonitors.size(); if (isSame) { for (auto monitor : monitors) { if (!screenMonitors.contains(monitor)) { isSame = false; break; } } } } if (isSame) { addScreenMap.remove(rect); it++; } else { changed = true; (*it)->deleteLater(); it = m_virtualScreens.erase(it); } } for (auto monitors : addScreenMap) { changed = true; DccScreen *screen = DccScreenPrivate::New(monitors, m_worker, q_ptr); q_ptr->connect(screen, &DccScreen::rotateChanged, q_ptr, &DisplayModule::applyChanged, Qt::QueuedConnection); q_ptr->connect(screen, &DccScreen::currentModeChanged, q_ptr, &DisplayModule::applyChanged, Qt::QueuedConnection); q_ptr->connect(screen, &DccScreen::wallpaperChanged, q_ptr, &DisplayModule::wallpaperChanged); m_virtualScreens << screen; } if (changed) { // 屏幕按类型排序,同类型按名称排序,类型顺序:eDP-DP-DisplayPort-HDMI-DVI-VGA static const QStringList c_screenSort({ "vga", "dvi", "hdmi", "displayport", "dp", "edp" }); std::sort(m_virtualScreens.begin(), m_virtualScreens.end(), [](const DccScreen *screen1, const DccScreen *screen2) { int index1 = c_screenSort.indexOf(screen1->name().split('-').first().toLower()); int index2 = c_screenSort.indexOf(screen2->name().split('-').first().toLower()); if (index1 != index2) { return index1 > index2; } return screen1->name() < screen2->name(); }); updatePrimary(); Q_EMIT q_ptr->virtualScreensChanged(); } } void DisplayModulePrivate::updateMonitorList() { bool changed = false; QList addMonitorList = m_model->monitorList(); for (auto it = m_screens.cbegin(); it != m_screens.cend();) { Monitor *monitor = DccScreenPrivate::Private(*it)->monitor(); int index = addMonitorList.indexOf(monitor); if (index >= 0) { addMonitorList.remove(index); it++; } else { changed = true; (*it)->deleteLater(); it = m_screens.erase(it); } } auto updateVirtualScreensFun = [this]() { updateVirtualScreens(); }; auto updateMaxGlobalScaleFun = [this]() { updateMaxGlobalScale(); }; for (auto monitor : addMonitorList) { changed = true; m_screens << DccScreenPrivate::New({ monitor }, m_worker, q_ptr); q_ptr->connect(monitor, &Monitor::xChanged, q_ptr, updateVirtualScreensFun); q_ptr->connect(monitor, &Monitor::yChanged, q_ptr, updateVirtualScreensFun); q_ptr->connect(monitor, &Monitor::wChanged, q_ptr, updateVirtualScreensFun); q_ptr->connect(monitor, &Monitor::hChanged, q_ptr, updateVirtualScreensFun); q_ptr->connect(monitor, &Monitor::enableChanged, q_ptr, updateVirtualScreensFun); q_ptr->connect(monitor, &Monitor::enableChanged, q_ptr, [this]() { updateDisplayMode(); }); q_ptr->connect(monitor, &Monitor::currentModeChanged, q_ptr, updateMaxGlobalScaleFun); q_ptr->connect(monitor, &Monitor::enableChanged, q_ptr, updateMaxGlobalScaleFun); } if (changed) { std::sort(m_screens.begin(), m_screens.end(), [](const DccScreen *screen1, const DccScreen *screen2) { return screen1->name() < screen2->name(); }); updateVirtualScreens(); updateMaxGlobalScale(); updateDisplayMode(); Q_EMIT q_ptr->screensChanged(); } } void DisplayModulePrivate::updatePrimary() { DccScreen *primary = nullptr; for (auto screen : m_virtualScreens) { if (m_model->primary() == screen->name()) { primary = screen; break; } } if (m_primary != primary) { m_primary = primary; Q_EMIT q_ptr->primaryScreenChanged(); } } void DisplayModulePrivate::updateDisplayMode() { QString displayMode = m_displayMode; switch (m_model->displayMode()) { case MERGE_MODE: displayMode = "MERGE"; break; case EXTEND_MODE: displayMode = "EXTEND"; break; case SINGLE_MODE: for (auto screen : m_screens) { if (screen->enable()) { displayMode = screen->name(); break; } } break; default: break; } if (displayMode != m_displayMode) { m_displayMode = displayMode; Q_EMIT q_ptr->displayModeChanged(); } } void DisplayModulePrivate::updateMaxGlobalScale() { qreal maxScale = 3.0; for (auto monitor : m_model->monitorList()) { if (!monitor->enable()) { continue; } auto tmode = monitor->currentMode(); if (tmode.width() == 0 || tmode.height() == 0) { maxScale = 1.0; break; } qreal maxWScale = tmode.width() / MinScreenWidth; qreal maxHScale = tmode.height() / MinScreenHeight; maxScale = std::min(maxScale, std::min(maxWScale, maxHScale)); } if (maxScale < 1.0) { maxScale = 1.0; } if (m_maxGlobalScale != maxScale) { m_maxGlobalScale = maxScale; Q_EMIT q_ptr->maxGlobalScaleChanged(); } } DccScreen *DisplayModulePrivate::primary() const { return m_primary; } QString DisplayModulePrivate::displayMode() const { return m_displayMode; } void DisplayModulePrivate::setScreenPosition(QList screensData) { qRegisterMetaType>>("QHash>"); QHash> monitorPosition; int lstX = 1000000, lstY = 1000000; for (auto item : screensData) { if (lstX > qRound(item->rect().x())) { lstX = qRound(item->rect().x()); } if (lstY > qRound(item->rect().y())) { lstY = qRound(item->rect().y()); } DccScreenPrivate *screenPrivate = DccScreenPrivate::Private(item->screen()); for (auto monitor : screenPrivate->monitors()) { monitorPosition.insert(monitor, QPair(qRound(item->rect().x()), qRound(item->rect().y()))); } } for (auto &&pos : monitorPosition) { pos = QPair(pos.first - lstX, pos.second - lstY); } for (auto it = monitorPosition.cbegin(); it != monitorPosition.cend(); ++it) { qDebug() << "applySettings 处理之后:" << it.key()->name() << it.value() << it.key()->w() << it.key()->h(); } m_worker->setMonitorPosition(monitorPosition); } DisplayModule::DisplayModule(QObject *parent) : QObject(parent) , d_ptrDisplayModule(new DisplayModulePrivate(this)) { } DisplayModule::~DisplayModule() { } QList DisplayModule::virtualScreens() const { Q_D(const DisplayModule); return d->m_virtualScreens; } QList DisplayModule::screens() const { Q_D(const DisplayModule); return d->m_screens; } DccScreen *DisplayModule::primaryScreen() const { Q_D(const DisplayModule); return d->primary(); } void DisplayModule::setPrimaryScreen(DccScreen *primary) { Q_D(DisplayModule); d->m_worker->setPrimary(primary->name()); } QString DisplayModule::displayMode() const { Q_D(const DisplayModule); return d->displayMode(); } void DisplayModule::setDisplayMode(const QString &mode) { int modeType = SINGLE_MODE; QString name; if (mode == "MERGE") { modeType = MERGE_MODE; } else if (mode == "EXTEND") { modeType = EXTEND_MODE; } else { modeType = SINGLE_MODE; name = mode; } Q_D(DisplayModule); d->m_worker->switchMode(modeType, name); } bool DisplayModule::isX11() const { return !WQt::Utils::isTreeland(); } qreal DisplayModule::globalScale() const { Q_D(const DisplayModule); return d->m_model->uiScale(); } void DisplayModule::setGlobalScale(qreal scale) { Q_D(DisplayModule); d->m_worker->setUiScale(scale); } qreal DisplayModule::maxGlobalScale() const { Q_D(const DisplayModule); return d->m_maxGlobalScale; } bool DisplayModule::colorTemperatureEnabled() const { Q_D(const DisplayModule); return d->m_model->colorTemperatureEnabled(); } void DisplayModule::setColorTemperatureEnabled(bool enabled) { Q_D(DisplayModule); if (colorTemperatureEnabled() != enabled) d->m_worker->setColorTemperatureEnabled(enabled); } int DisplayModule::colorTemperatureMode() const { Q_D(const DisplayModule); switch (d->m_model->adjustCCTMode()) { // 0 禁用 1 日落到日出 2 全天 3 自定义 case 1: return 1; // 日落到日出 case 3: return 2; // 自定义 default: break; } return 0; // 全天 } void DisplayModule::setColorTemperatureMode(int mode) { int ccMode = 2; switch (mode) { case 1: ccMode = 1; break; case 2: ccMode = 3; default: break; } Q_D(DisplayModule); d->m_worker->SetMethodAdjustCCT(ccMode); } int DisplayModule::colorTemperature() const { Q_D(const DisplayModule); int kelvin = d->m_model->colorTemperature(); if (kelvin >= 6500) return 50 - (kelvin - 6500) / 300; else if (kelvin < 6500 && kelvin >= 1000) return 50 - (kelvin - 6500) / 100; else return 0; } void DisplayModule::setColorTemperature(int pos) { int kelvin = pos > 50 ? (6500 - (pos - 50) * 100) : (6500 + (50 - pos) * 300); Q_D(DisplayModule); if (d->m_model->colorTemperature() != kelvin) { d->m_worker->setColorTemperature(kelvin); } } QString DisplayModule::customColorTempTimePeriod() const { Q_D(const DisplayModule); QString timePeriod = d->m_model->customColorTempTimePeriod(); QRegularExpression re("^((2[0-3]|[01][0-9]):[0-5][0-9])-((2[0-3]|[01][0-9]):[0-5][0-9])$"); if (!re.match(timePeriod).hasMatch()) { timePeriod = "22:00-07:00"; } return timePeriod; } void DisplayModule::setCustomColorTempTimePeriod(const QString &timePeriod) { QString oldTimePeriod = customColorTempTimePeriod(); if (oldTimePeriod == timePeriod) { return; } const QRegularExpression re("^((2[0-3]|[01][0-9]):[0-5][0-9])-((2[0-3]|[01][0-9]):[0-5][0-9])$"); QRegularExpressionMatch match = re.match(timePeriod); if (!match.hasMatch()) { return; } QTime startTime = QTime::fromString(match.captured(1), "hh:mm"); QTime endTime = QTime::fromString(match.captured(3), "hh:mm"); // 计算时间差(秒),自动处理跨天情况 int dSecs = startTime.secsTo(endTime); if (dSecs < 0) { dSecs += 86400; // 加上一天的秒数 } // 确保最小时间差为5分钟 const int MIN_DURATION = 300; if (dSecs == 0) { QRegularExpressionMatch oldMatch = re.match(oldTimePeriod); if (!oldMatch.hasMatch()) { return; } dSecs = (oldMatch.captured(1) <= oldMatch.captured(3)) ? MIN_DURATION : -MIN_DURATION; } else if (dSecs < MIN_DURATION) { dSecs = MIN_DURATION; } else { // 反向计算时间差 dSecs = endTime.secsTo(startTime); if (dSecs < 0) { dSecs += 86400; } // 处理反向时间差 dSecs = (dSecs < MIN_DURATION) ? -MIN_DURATION : 0; } if (dSecs != 0) { QRegularExpressionMatch oldMatch = re.match(oldTimePeriod); if (!oldMatch.hasMatch()) { return; } QTime oldStartTime = QTime::fromString(oldMatch.captured(1), "hh:mm"); if (oldStartTime == startTime) { startTime = endTime.addSecs(-dSecs); } else { endTime = startTime.addSecs(dSecs); } } Q_D(DisplayModule); d->m_worker->setCustomColorTempTimePeriod(startTime.toString(DEFAULT_TIME_FORMAT) + "-" + endTime.toString(DEFAULT_TIME_FORMAT)); } void DisplayModule::saveChanges() { Q_D(DisplayModule); d->m_worker->saveChanges(); } void DisplayModule::resetBackup() { Q_D(DisplayModule); d->m_worker->resetBackup(); } void DisplayModule::adsorptionScreen(QList listItems, QObject *pw, qreal scale) { QQuickItem *tmpPw = dynamic_cast(pw); if (!tmpPw) { return; } QList tmpListItems; ScreenData *pwItem = nullptr; for (auto obj : listItems) { QQuickItem *tmpObj = dynamic_cast(obj); if (tmpObj) { ScreenData *item = new ScreenData(tmpObj, scale); tmpListItems.append(item); if (tmpObj == pw) { pwItem = item; } } } if (tmpListItems.isEmpty()) { return; } ConcatScreen *concatScreen = new ConcatScreen(tmpListItems, pwItem); concatScreen->adsorption(); delete concatScreen; qDeleteAll(tmpListItems); } void DisplayModule::executemultiScreenAlgo(QList listItems, QObject *pw, qreal scale) { QQuickItem *tmpPw = dynamic_cast(pw); if (!tmpPw) { return; } QList tmpListItems; ScreenData *pwItem = nullptr; for (auto obj : listItems) { QQuickItem *tmpObj = dynamic_cast(obj); if (tmpObj) { ScreenData *item = new ScreenData(tmpObj, scale); tmpListItems.append(item); if (tmpObj == pw) { pwItem = item; } } } if (tmpListItems.size() < 2 || !pwItem) { return; } ConcatScreen *concatScreen = new ConcatScreen(tmpListItems, pwItem); concatScreen->executemultiScreenAlgo(true); delete concatScreen; qDeleteAll(tmpListItems); } void DisplayModule::applySettings(QList listItems, qreal scale) { QList tmpListItems; for (auto obj : listItems) { QQuickItem *tmpObj = dynamic_cast(obj); if (tmpObj) { ScreenData *item = new ScreenData(tmpObj, scale); tmpListItems.append(item); } } Q_D(DisplayModule); d->setScreenPosition(tmpListItems); qDeleteAll(tmpListItems); } void DisplayModule::applyChanged() { Q_D(DisplayModule); if (!d->m_model->monitorModeChanging()) { return; } d->m_model->setmodeChanging(false); DccScreen *tmpPw = qobject_cast(sender()); if (!tmpPw || d_ptrDisplayModule->m_model->displayMode() != EXTEND_MODE) { return; } // Fix BUG-345219: Adjust position to keep displays adjacent when resolution changes, without reordering // Sort by current x-coordinate to preserve user-adjusted order QList tmpListItems; for (auto obj : virtualScreens()) { if (obj) { ScreenData *item = new ScreenData(obj); tmpListItems.append(item); } } if (tmpListItems.size() < 2) { qDeleteAll(tmpListItems); return; } // Sort by x-coordinate to preserve user-adjusted order std::sort(tmpListItems.begin(), tmpListItems.end(), [](const ScreenData *item1, const ScreenData *item2) { return item1->rect().x() < item2->rect().x(); }); // Arrange from left to right, keeping displays adjacent int currentX = 0; for (auto item : tmpListItems) { qreal dx = currentX - item->rect().x(); item->moveBy(dx, 0); currentX += static_cast(item->rect().width()); } d->setScreenPosition(tmpListItems); qDeleteAll(tmpListItems); } DCC_FACTORY_CLASS(DisplayModule) } // namespace dccV25 #include "displaymodule.moc" ================================================ FILE: src/plugin-display/operation/displaymodule.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DISPLAYMODULE_H #define DISPLAYMODULE_H #include QT_BEGIN_NAMESPACE class QQuickItem; QT_END_NAMESPACE namespace dccV25 { class DccScreen; class DisplayModulePrivate; class DisplayModule : public QObject { Q_OBJECT Q_PROPERTY(QList virtualScreens READ virtualScreens NOTIFY virtualScreensChanged FINAL) Q_PROPERTY(QList screens READ screens NOTIFY screensChanged FINAL) Q_PROPERTY(DccScreen * primaryScreen READ primaryScreen WRITE setPrimaryScreen NOTIFY primaryScreenChanged FINAL) Q_PROPERTY(QString displayMode READ displayMode WRITE setDisplayMode NOTIFY displayModeChanged FINAL) Q_PROPERTY(bool isX11 READ isX11 NOTIFY isX11Changed FINAL) Q_PROPERTY(qreal globalScale READ globalScale WRITE setGlobalScale NOTIFY globalScaleChanged FINAL) Q_PROPERTY(qreal maxGlobalScale READ maxGlobalScale NOTIFY maxGlobalScaleChanged FINAL) Q_PROPERTY(bool colorTemperatureEnabled READ colorTemperatureEnabled WRITE setColorTemperatureEnabled NOTIFY colorTemperatureEnabledChanged FINAL) Q_PROPERTY(int colorTemperatureMode READ colorTemperatureMode WRITE setColorTemperatureMode NOTIFY colorTemperatureModeChanged FINAL) Q_PROPERTY(int colorTemperature READ colorTemperature WRITE setColorTemperature NOTIFY colorTemperatureChanged FINAL) Q_PROPERTY(QString customColorTempTimePeriod READ customColorTempTimePeriod WRITE setCustomColorTempTimePeriod NOTIFY customColorTempTimePeriodChanged FINAL) public: explicit DisplayModule(QObject *parent = nullptr); ~DisplayModule() override; // 逻辑屏幕 去除禁用的 QList virtualScreens() const; // 物理屏幕 QList screens() const; DccScreen *primaryScreen() const; // 关联screens void setPrimaryScreen(DccScreen *primary); QString displayMode() const; void setDisplayMode(const QString &mode); bool isX11() const; qreal globalScale() const; void setGlobalScale(qreal scale); qreal maxGlobalScale() const; bool colorTemperatureEnabled() const; void setColorTemperatureEnabled(bool enabled); int colorTemperatureMode() const; void setColorTemperatureMode(int mode); int colorTemperature() const; void setColorTemperature(int pos); QString customColorTempTimePeriod() const; void setCustomColorTempTimePeriod(const QString &timePeriod); public Q_SLOTS: void saveChanges(); void resetBackup(); void adsorptionScreen(QList listItems, QObject *pw, qreal scale); void executemultiScreenAlgo(QList listItems, QObject *pw, qreal scale); void applySettings(QList listItems, qreal scale); void applyChanged(); // 修改分辨率、方向时,要重新处理下拼接 Q_SIGNALS: void virtualScreensChanged(); void screensChanged(); void primaryScreenChanged(); void displayModeChanged(); void isX11Changed(); void globalScaleChanged(); void globalScaleEnabledChanged(); void maxGlobalScaleChanged(); void colorTemperatureEnabledChanged(); void colorTemperatureModeChanged(); void colorTemperatureChanged(); void customColorTempTimePeriodChanged(); void wallpaperChanged(); private: QScopedPointer d_ptrDisplayModule; Q_DECLARE_PRIVATE_D(d_ptrDisplayModule, DisplayModule) Q_DISABLE_COPY(DisplayModule) }; } // namespace dccV25 #endif // DISPLAYMODULE_H ================================================ FILE: src/plugin-display/operation/private/concatscreen.cpp ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "concatscreen.h" #include "../dccscreen.h" #include namespace dccV25 { ScreenData::ScreenData(QQuickItem *item, qreal scale) : m_item(item) , m_screen(item->property("screen").value()) , m_scale(scale) , m_rect(QRectF(item->x() / scale, item->y() / scale, item->width() / scale, item->height() / scale)) { } ScreenData::ScreenData(DccScreen *screen) : m_item(nullptr) , m_screen(screen) , m_scale(1) , m_rect(QRectF(screen->x(), screen->y(), screen->width(), screen->height())) { } QRectF ScreenData::rect() const { return m_rect; } // 外扩0.05个像素, 规避由于计算导致精度丢失或者坐标值完全一致的情况下不能判定为相交的情况 QRectF ScreenData::rectEx() const { return m_rect.adjusted(-0.05, -0.05, 0.05, 0.05); } QRectF ScreenData::justIntersectRect() const { return m_rect.adjusted(1, 1, -1, -1); } DccScreen *ScreenData::screen() const { return m_screen; } void ScreenData::moveBy(qreal dx, qreal dy) { m_rect.translate(dx, dy); if (m_item) { m_item->setX(m_rect.x() * m_scale); m_item->setY(m_rect.y() * m_scale); } } void ScreenData::rebound() { m_rect = QRectF(m_screen->x(), m_screen->y(), m_screen->width(), m_screen->height()); if (m_item) { m_item->setX(m_rect.x() * m_scale); m_item->setY(m_rect.y() * m_scale); } } // 自动吸附实现 ConcatScreen::ConcatScreen(QList listItems, ScreenData *pw) : m_listItems(listItems) , m_movingItem(pw) { } void ConcatScreen::adsorption() { // 当鼠标移动的时候开始响应并执行自动吸附的逻辑 // 保证 bufferboundingRect 相交且 boundingRect 不相交,保证移动的块item始终在其他item的外边缘移动 qreal top = 0.0; qreal bottom = 0.0; qreal right = 0.0; qreal left = 0.0; qreal topLeft = 0.0; qreal topRight = 0.0; qreal bottomLeft = 0.0; qreal bottomRight = 0.0; qreal rightTop = 0.0; qreal rightBottom = 0.0; qreal leftTop = 0.0; qreal leftBottom = 0.0; int space = 200; auto minMoveLen = [=](qreal temp, qreal &len) { if (fabs(len) > 0.0) { if (fabs(temp) < fabs(len)) len = temp; } else { len = temp; } }; QRectF pwRect(m_movingItem->rect()); for (auto item : m_listItems) { if (item == m_movingItem) continue; QRectF itemRect(item->rect()); if (pwRect.intersects(itemRect)) return; // 与boundingRect 不相交 if (pwRect.intersects(QRectF(itemRect.topLeft(), itemRect.bottomRight()).adjusted(0, -space, 0, 0))) { // 上相交 qreal temp = itemRect.topRight().y() - pwRect.bottomLeft().y(); minMoveLen(temp, top); // 判断边对齐 temp = itemRect.topRight().x() - pwRect.bottomRight().x(); minMoveLen(temp, topLeft); temp = itemRect.topLeft().x() - pwRect.bottomLeft().x(); minMoveLen(temp, topRight); } else if (pwRect.intersects(QRectF(itemRect.bottomLeft(), itemRect.bottomRight()).adjusted(0, 0, 0, space))) { // 下相交 qreal temp = itemRect.bottomLeft().y() - pwRect.topLeft().y(); minMoveLen(temp, bottom); // 判断边对齐的可能 temp = itemRect.topRight().x() - pwRect.bottomRight().x(); minMoveLen(temp, bottomLeft); temp = itemRect.topLeft().x() - pwRect.bottomLeft().x(); minMoveLen(temp, bottomRight); } else if (pwRect.intersects(QRectF(itemRect.topLeft(), itemRect.bottomLeft()).adjusted(-space, 0, 0, 0))) { // 左相交 qreal temp = itemRect.bottomLeft().x() - pwRect.bottomRight().x(); minMoveLen(temp, left); // 判断边对齐的可能 temp = itemRect.topRight().y() - pwRect.topRight().y(); minMoveLen(temp, leftTop); temp = itemRect.bottomLeft().y() - pwRect.bottomLeft().y(); minMoveLen(temp, leftBottom); } else if (pwRect.intersects(QRectF(itemRect.topRight(), itemRect.bottomRight()).adjusted(0, 0, space, 0))) { // 右相交 qreal temp = itemRect.bottomRight().x() - pwRect.bottomLeft().x(); minMoveLen(temp, right); // 判断边对齐的可能 temp = itemRect.topRight().y() - pwRect.topRight().y(); minMoveLen(temp, rightTop); temp = itemRect.bottomLeft().y() - pwRect.bottomLeft().y(); minMoveLen(temp, rightBottom); } } auto edgeAlignment = [=](qreal x1, qreal x2) { if (fabs(x1) > fabs(x2)) return fabs(x2) < space ? x2 : 0; else return fabs(x1) < space ? x1 : 0; }; QPointF autoAdsorptionPos(0.0, 0.0), edgeAlignmentPos(0.0, 0.0); if (qFuzzyIsNull(top)) { edgeAlignmentPos.setX(edgeAlignment(bottomRight, bottomLeft)); autoAdsorptionPos.setY(bottom); } else if (qFuzzyIsNull(bottom)) { edgeAlignmentPos.setX(edgeAlignment(topRight, topLeft)); autoAdsorptionPos.setY(top); } else { autoAdsorptionPos.setY((fabs(top) < fabs(bottom)) ? top : bottom); edgeAlignmentPos.setX((fabs(top) < fabs(bottom)) ? edgeAlignment(topRight, topLeft) : edgeAlignment(bottomRight, bottomLeft)); } if (qFuzzyIsNull(left)) { autoAdsorptionPos.setX(right); edgeAlignmentPos.setY(edgeAlignment(rightTop, rightBottom)); } else if (qFuzzyIsNull(right)) { autoAdsorptionPos.setX(left); edgeAlignmentPos.setY(edgeAlignment(leftTop, leftBottom)); } else { autoAdsorptionPos.setX((fabs(left) < fabs(right)) ? left : right); edgeAlignmentPos.setY((fabs(left) < fabs(right)) ? edgeAlignment(leftTop, leftBottom) : edgeAlignment(rightTop, rightBottom)); } if (!qFuzzyIsNull(autoAdsorptionPos.x())) { edgeAlignmentPos.setX(0.0); } if (!qFuzzyIsNull(autoAdsorptionPos.y())) { edgeAlignmentPos.setY(0.0); } m_movingItem->moveBy(edgeAlignmentPos.x() + autoAdsorptionPos.x(), edgeAlignmentPos.y() + autoAdsorptionPos.y()); } void ConcatScreen::executemultiScreenAlgo(bool isRebound) { bool isRestore = false; if (multiScreenSortAlgo(isRestore, isRebound)) { multiScreenSortAlgo(isRestore, true); } if (isRestore == true) return; multiScreenAutoAdjust(); updateConnectedState(); } bool ConcatScreen::multiScreenSortAlgo(bool &isRestore, const bool isRebound) { // 排列算法 // 1、寻找位置变化的屏幕块,确定为被移动的块 // 2、判断被移动块和其他块之间的位置关系来进行图形拼接移动 //*根据中心点判定 QList lstActivedItemsX; QList lstActivedItemsY; QList lstNoMovedItems; QList lstShelterItems; QList> lstMoveingItemToCenterPosLen; // 所有块的中心点到移动点的距离 bool isMove = true; isRestore = false; bool isAutoAdsorption = false; bool isIntersect = false; qreal g_dx = 0.0; qreal g_dy = 0.0; qreal intersectedArea = 0.0; // 相交的面积 bool g_bXYTogetherMoved = false; // 标志XY方向是否一起移动,其余情况按哪个方向离得近向哪个方向移动 auto mapToSceneIntersectRect = [](ScreenData *item) { return item->rect().adjusted(1, 1, -1, -1); }; auto mapToSceneBoundingRect = [](ScreenData *item) { return item->rect(); }; QRectF moveItemIntersect = mapToSceneIntersectRect(m_movingItem); QRectF moveItemRect = mapToSceneBoundingRect(m_movingItem); QPointF moveCenter = moveItemRect.center(); for (auto &&item : m_listItems) { if (m_movingItem != item) { QRectF otherRect = mapToSceneBoundingRect(item); QRectF rect = moveItemIntersect.intersected(otherRect); intersectedArea += rect.width() * rect.height(); // 移动块大部分覆盖一个块时 执行自动回弹操作 QPointF otherCenter = otherRect.center(); qreal minDistance = std::min({ moveItemRect.width(), moveItemRect.height(), otherRect.width(), otherRect.height() }) * 0.15; minDistance = std::max(minDistance, 10.0); qreal dx = moveCenter.x() - otherCenter.x(); qreal dy = moveCenter.y() - otherCenter.y(); if (dx * dx + dy * dy < minDistance * minDistance) { lstShelterItems.append(item); } // 要么不相交,要相交就是要点线相交的 if (!mapToSceneIntersectRect(m_movingItem).intersects(otherRect) && mapToSceneBoundingRect(m_movingItem).intersects(otherRect)) { isAutoAdsorption = true; } // 出现相交的情况 if (mapToSceneIntersectRect(m_movingItem).intersects(otherRect) && mapToSceneBoundingRect(m_movingItem).intersects(otherRect)) { isIntersect = true; } lstNoMovedItems.append(item); } } // 移动块与其他的块有90%重叠 if (intersectedArea > (moveItemIntersect.width() * moveItemIntersect.height()) * 0.9) { qDebug() << "存在包含关系"; lstShelterItems.append(m_movingItem); } // 移动块到其他块中心点的距离排序 QPointF movedPos = moveItemRect.center(); for (auto item : lstNoMovedItems) { QPointF tempPos = mapToSceneBoundingRect(item).center(); qreal len = sqrt(pow(tempPos.x() - movedPos.x(), 2) + pow(tempPos.y() - movedPos.y(), 2)); lstMoveingItemToCenterPosLen.append(qMakePair(item, len)); } // 获取距离最近的块 std::sort(lstMoveingItemToCenterPosLen.begin(), lstMoveingItemToCenterPosLen.end(), [=](const QPair &item1, const QPair &item2) { return item1.second < item2.second; }); // 自动回弹的触发条件: 1. 一个屏幕完全包含另一个屏的时候 2. 一个屏幕剩下的屏幕集合所包围 if (lstShelterItems.size() > 0) { if (isMove) { if (isRebound) { autoRebound(); qDebug() << "自动回弹流程触发! == " << lstShelterItems.size(); isRestore = true; // return QPointF(0.0, 0.0); return false; } else { // 当改变方向时出现覆盖多个块的情况,会触发自动会弹流程,但是改变方向的上一个操作状态不存在或者说回弹到上一个状态没有意义,会导致屏幕重叠现象 // 如果是由于方向改变导致的重叠,那就将此块移动到items外接矩形的左下角再重新执行拼接算法。 m_movingItem->moveBy(-10000, 10000); return true; } } } else { // 没有完全重合的情况处理逻辑 std::sort(lstNoMovedItems.begin(), lstNoMovedItems.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().bottomLeft().x() < item2->rect().bottomLeft().x(); }); // 将MovedItem放入链表中排序,左排 右排,判定覆盖几个块 lstNoMovedItems.append(m_movingItem); // 左排序 std::sort(lstNoMovedItems.begin(), lstNoMovedItems.end(), [=](const ScreenData *item1, const ScreenData *item2) { if (item1 == m_movingItem) { return item1->rect().bottomRight().x() < item2->rect().bottomLeft().x(); } else if (item2 == m_movingItem) { return item1->rect().bottomLeft().x() < item2->rect().bottomRight().x(); } return item1->rect().bottomLeft().x() < item2->rect().bottomLeft().x(); }); int nBIndexLeft = lstNoMovedItems.indexOf(m_movingItem); // 右排序 std::sort(lstNoMovedItems.begin(), lstNoMovedItems.end(), [=](const ScreenData *item1, const ScreenData *item2) { if (item1 == m_movingItem) { return item1->rect().bottomLeft().x() < item2->rect().bottomRight().x(); } else if (item2 == m_movingItem) { return item1->rect().bottomRight().x() < item2->rect().bottomLeft().x(); } return item1->rect().bottomRight().x() < item2->rect().bottomRight().x(); }); int nBIndexRight = lstNoMovedItems.indexOf(m_movingItem); // 上排序 std::sort(lstNoMovedItems.begin(), lstNoMovedItems.end(), [=](const ScreenData *item1, const ScreenData *item2) { if (item1 == m_movingItem) { return item1->rect().bottomLeft().y() < item2->rect().topLeft().y(); } else if (item2 == m_movingItem) { return item1->rect().topLeft().y() < item2->rect().bottomLeft().y(); } return item1->rect().topLeft().y() < item2->rect().topLeft().y(); }); int nBIndexTop = lstNoMovedItems.indexOf(m_movingItem); // 下排序 std::sort(lstNoMovedItems.begin(), lstNoMovedItems.end(), [=](const ScreenData *item1, const ScreenData *item2) { if (item1 == m_movingItem) { return item1->rect().topLeft().y() < item2->rect().bottomLeft().y(); } else if (item2 == m_movingItem) { return item1->rect().bottomLeft().y() < item2->rect().topLeft().y(); } return item1->rect().bottomLeft().y() < item2->rect().bottomLeft().y(); }); int nBIndexBottom = lstNoMovedItems.indexOf(m_movingItem); int nItemSize = lstNoMovedItems.size() - 1; // 说明移动块在其他块X坐标有重合 if (nBIndexLeft != 0 && nBIndexRight != nItemSize) { // 移动X // 将MovedItem放入链表中排序,上排 下排,判定在Y轴移动的方向和距离 // 处理 qreal movex1 = m_movingItem->rect().topLeft().x(); qreal movex2 = m_movingItem->rect().topRight().x(); for (auto pair : lstMoveingItemToCenterPosLen) { qreal x1 = pair.first->rect().topLeft().x(); qreal x2 = pair.first->rect().topRight().x(); if (!((x1 >= movex1 && x1 >= movex2) || (x2 <= movex1 && x2 <= movex2))) { lstActivedItemsX.append(pair.first); } } lstActivedItemsX.append(m_movingItem); // 上排序 std::sort(lstActivedItemsX.begin(), lstActivedItemsX.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().topLeft().y() < item2->rect().topLeft().y(); }); int nIndexTop = lstActivedItemsX.indexOf(m_movingItem); // 下排序 std::sort(lstActivedItemsX.begin(), lstActivedItemsX.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().bottomLeft().y() < item2->rect().bottomLeft().y(); }); int nIndexBottom = lstActivedItemsX.indexOf(m_movingItem); // 先做预移动,如果有重合,把重合块加入激活块重新排序 if (nIndexTop == nIndexBottom) { // 移动块在最上面 if (nIndexTop == 0) { qreal dy = lstActivedItemsX.first()->rect().topLeft().y() - m_movingItem->rect().bottomLeft().y(); m_movingItem->moveBy(0, dy); // m_graphicsScene.update(); QList lstShelterItemsTemp; lstNoMovedItems.removeOne(m_movingItem); for (int i = 0; i < lstNoMovedItems.size(); i++) { if (m_movingItem->rect().intersects(lstNoMovedItems[i]->rect())) { lstShelterItemsTemp.append(lstNoMovedItems[i]); } } if (lstShelterItemsTemp.size() >= 0) { m_movingItem->moveBy(0, -dy); // 先移回去 // m_graphicsScene.update(); // 下排序 std::sort(lstActivedItemsX.begin(), lstActivedItemsX.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().bottomLeft().y() < item2->rect().bottomLeft().y(); }); // int nIndexBottomTemp = lstActivedItemsX.indexOf(m_movingItem); // 上排序 for (auto t : lstShelterItemsTemp) { if (!lstActivedItemsX.contains(t)) lstActivedItemsX.append(t); } std::sort(lstActivedItemsX.begin(), lstActivedItemsX.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().topLeft().y() < item2->rect().topLeft().y(); }); int nIndexTopTemp = lstActivedItemsX.indexOf(m_movingItem); lstActivedItemsX.removeOne(m_movingItem); if (!lstActivedItemsX.isEmpty()) { if (nIndexTopTemp == 0) { g_dy = lstActivedItemsX.first()->rect().topLeft().y() - m_movingItem->rect().bottomLeft().y(); qDebug() << "g_dy" << g_dy; } else { g_dy = lstActivedItemsX.last()->rect().bottomLeft().y() - m_movingItem->rect().topLeft().y(); qDebug() << "g_dy" << g_dy; } } } } // 移动块在最下面 else { if (!lstActivedItemsX.contains(m_movingItem)) lstActivedItemsX.append(m_movingItem); // 下排序 std::sort(lstActivedItemsX.begin(), lstActivedItemsX.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().bottomLeft().y() < item2->rect().bottomLeft().y(); }); qreal dy = lstActivedItemsX.last()->rect().bottomLeft().y() - m_movingItem->rect().topLeft().y(); m_movingItem->moveBy(0, dy); // m_graphicsScene.update(); lstNoMovedItems.removeOne(m_movingItem); QList lstShelterItemsTemp; for (int i = 0; i < lstNoMovedItems.size(); i++) { if (m_movingItem->rect().intersects(lstNoMovedItems[i]->rect())) { lstShelterItemsTemp.append(lstNoMovedItems[i]); } } if (lstShelterItemsTemp.size() >= 0) { m_movingItem->moveBy(0, -dy); // 先移回去 // m_graphicsScene.update(); // 上排序 for (auto t : lstShelterItemsTemp) { if (!lstActivedItemsX.contains(t)) lstActivedItemsX.append(t); } std::sort(lstActivedItemsX.begin(), lstActivedItemsX.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().topLeft().y() < item2->rect().topLeft().y(); }); int nIndexTopTemp = lstActivedItemsX.indexOf(m_movingItem); // 下排序 std::sort(lstActivedItemsX.begin(), lstActivedItemsX.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().bottomLeft().y() < item2->rect().bottomLeft().y(); }); // int nIndexBottomTemp = lstActivedItemsX.indexOf(m_movingItem); lstActivedItemsX.removeOne(m_movingItem); if (!lstActivedItemsX.isEmpty()) { if (nIndexTopTemp == 0) { g_dy = lstActivedItemsX.first()->rect().topLeft().y() - m_movingItem->rect().bottomLeft().y(); qDebug() << "g_dy" << g_dy; } else { g_dy = lstActivedItemsX.last()->rect().bottomLeft().y() - m_movingItem->rect().topLeft().y(); qDebug() << "g_dy" << g_dy; } } } } } } // 说明移动块在其他块Y坐标有重合 if (nBIndexTop != 0 && nBIndexBottom != nItemSize) { // 移动Y // 处理 qreal movey1 = m_movingItem->rect().topLeft().y(); qreal movey2 = m_movingItem->rect().bottomLeft().y(); for (auto pair : lstMoveingItemToCenterPosLen) { qreal y1 = pair.first->rect().topLeft().y(); qreal y2 = pair.first->rect().bottomLeft().y(); if (!((y1 >= movey1 && y1 >= movey2) || (y2 <= movey1 && y2 <= movey2))) { lstActivedItemsY.append(pair.first); } } lstActivedItemsY.append(m_movingItem); // 左排序 std::sort(lstActivedItemsY.begin(), lstActivedItemsY.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().topLeft().x() < item2->rect().topLeft().x(); }); int nIndexLeft = lstActivedItemsY.indexOf(m_movingItem); // 右排序 std::sort(lstActivedItemsY.begin(), lstActivedItemsY.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().topRight().x() < item2->rect().topRight().x(); }); int nIndexRight = lstActivedItemsY.indexOf(m_movingItem); if (nIndexLeft == nIndexRight) { // 移动块在最右侧 if (nIndexLeft == 0) { qreal dx = lstActivedItemsY.first()->rect().topLeft().x() - m_movingItem->rect().topRight().x(); m_movingItem->moveBy(dx, 0); // m_graphicsScene.update(); QList lstShelterItemsTemp; lstNoMovedItems.removeOne(m_movingItem); for (int i = 0; i < lstNoMovedItems.size(); i++) { if (m_movingItem->rect().intersects(lstNoMovedItems[i]->rect())) { lstShelterItemsTemp.append(lstNoMovedItems[i]); } } if (lstShelterItemsTemp.size() >= 0) { m_movingItem->moveBy(-dx, 0); // m_graphicsScene.update(); // 下排序 std::sort(lstActivedItemsY.begin(), lstActivedItemsY.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().topRight().x() < item2->rect().topRight().x(); }); // int nIndexRightTemp = lstActivedItemsY.indexOf(m_movingItem); // 上排序 for (auto t : lstShelterItemsTemp) { if (!lstActivedItemsY.contains(t)) lstActivedItemsY.append(t); } std::sort(lstActivedItemsY.begin(), lstActivedItemsY.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().topLeft().x() < item2->rect().topLeft().x(); }); int nIndexLeftTemp = lstActivedItemsY.indexOf(m_movingItem); lstActivedItemsY.removeOne(m_movingItem); if (!lstActivedItemsY.isEmpty()) { if (nIndexLeftTemp == 0) { g_dx = lstActivedItemsY.first()->rect().topLeft().x() - m_movingItem->rect().topRight().x(); qDebug() << "g_dx" << g_dx; } else { g_dx = lstActivedItemsY.last()->rect().topRight().x() - m_movingItem->rect().topLeft().x(); qDebug() << "g_dx" << g_dx; } } } } // 移动块在最左侧 else { if (!lstActivedItemsY.contains(m_movingItem)) lstActivedItemsY.append(m_movingItem); // 右排序 std::sort(lstActivedItemsY.begin(), lstActivedItemsY.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().topRight().x() < item2->rect().topRight().x(); }); qreal dx = lstActivedItemsY.last()->rect().topRight().x() - m_movingItem->rect().topLeft().x(); m_movingItem->moveBy(dx, 0); // m_graphicsScene.update(); lstNoMovedItems.removeOne(m_movingItem); QList lstShelterItemsTemp; for (int i = 0; i < lstNoMovedItems.size(); i++) { if (m_movingItem->rect().intersects(lstNoMovedItems[i]->rect())) { lstShelterItemsTemp.append(lstNoMovedItems[i]); } } if (lstShelterItemsTemp.size() >= 0) { m_movingItem->moveBy(-dx, 0); // m_graphicsScene.update(); // 上排序 for (auto t : lstShelterItemsTemp) { if (!lstActivedItemsY.contains(t)) lstActivedItemsY.append(t); } std::sort(lstActivedItemsY.begin(), lstActivedItemsY.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().topLeft().x() < item2->rect().topLeft().x(); }); int nIndexLeftTemp = lstActivedItemsY.indexOf(m_movingItem); // 下排序 std::sort(lstActivedItemsY.begin(), lstActivedItemsY.end(), [=](const ScreenData *item1, const ScreenData *item2) { return item1->rect().topRight().x() < item2->rect().topRight().x(); }); // int nIndexRightTemp = lstActivedItemsY.indexOf(m_movingItem); lstActivedItemsY.removeOne(m_movingItem); if (!lstActivedItemsY.isEmpty()) { if (nIndexLeftTemp == 0) { g_dx = lstActivedItemsY.first()->rect().topLeft().x() - m_movingItem->rect().topRight().x(); qDebug() << "g_dx" << g_dx; } else { g_dx = lstActivedItemsY.last()->rect().topRight().x() - m_movingItem->rect().topLeft().x(); qDebug() << "g_dx" << g_dx; } } } } } } // 说明移动块在其他块的四周 if ((nBIndexLeft == 0 || nBIndexRight == nItemSize) || (nBIndexTop == 0 || nBIndexBottom == nItemSize)) { // 表示X方向没有重叠的 // TODO: // 找距离他最近的顶点 // LT 左上 lstNoMovedItems.removeOne(m_movingItem); QRectF movedRectF = m_movingItem->rect(); QList> lstTempLen; if (nBIndexLeft == 0 && nBIndexTop == 0) { for (auto item : lstNoMovedItems) { QPointF tempPos = item->rect().topLeft(); qreal len = sqrt(pow(tempPos.x() - movedRectF.bottomRight().x(), 2) + pow(tempPos.y() - movedRectF.bottomRight().y(), 2)); lstTempLen.append(qMakePair(item, len)); } // 获取距离最近的块 std::sort(lstTempLen.begin(), lstTempLen.end(), [=](const QPair &item1, const QPair &item2) { return item1.second < item2.second; }); QPointF dPos = lstTempLen.first().first->rect().topLeft() - m_movingItem->rect().bottomRight(); g_dx = dPos.x(); g_dy = dPos.y(); qDebug() << "g_dx" << g_dx; qDebug() << "g_dy" << g_dy; g_bXYTogetherMoved = true; } // LB 左下 if (nBIndexLeft == 0 && nBIndexBottom == nItemSize) { for (auto item : lstNoMovedItems) { QPointF tempPos = item->rect().bottomLeft(); qreal len = sqrt(pow(tempPos.x() - movedRectF.topRight().x(), 2) + pow(tempPos.y() - movedRectF.topRight().y(), 2)); lstTempLen.append(qMakePair(item, len)); } // 获取距离最近的块 std::sort(lstTempLen.begin(), lstTempLen.end(), [=](const QPair &item1, const QPair &item2) { return item1.second < item2.second; }); QPointF dPos = lstTempLen.first().first->rect().bottomLeft() - m_movingItem->rect().topRight(); g_dx = dPos.x(); g_dy = dPos.y(); g_bXYTogetherMoved = true; qDebug() << "g_dx" << g_dx; qDebug() << "g_dy" << g_dy; } // RT 右上 if (nBIndexRight == nItemSize && nBIndexTop == 0) { for (auto item : lstNoMovedItems) { QPointF tempPos = item->rect().topRight(); qreal len = sqrt(pow(tempPos.x() - movedRectF.bottomLeft().x(), 2) + pow(tempPos.y() - movedRectF.bottomLeft().y(), 2)); lstTempLen.append(qMakePair(item, len)); } // 获取距离最近的块 std::sort(lstTempLen.begin(), lstTempLen.end(), [=](const QPair &item1, const QPair &item2) { return item1.second < item2.second; }); QPointF dPos = lstTempLen.first().first->rect().topRight() - m_movingItem->rect().bottomLeft(); g_dx = dPos.x(); g_dy = dPos.y(); g_bXYTogetherMoved = true; qDebug() << "g_dx" << g_dx; qDebug() << "g_dy" << g_dy; } // RB 右下 if (nBIndexRight == nItemSize && nBIndexBottom == nItemSize) { for (auto item : lstNoMovedItems) { QPointF tempPos = item->rect().bottomRight(); qreal len = sqrt(pow(tempPos.x() - movedRectF.topLeft().x(), 2) + pow(tempPos.y() - movedRectF.topLeft().y(), 2)); lstTempLen.append(qMakePair(item, len)); } // 获取距离最近的块 std::sort(lstTempLen.begin(), lstTempLen.end(), [=](const QPair &item1, const QPair &item2) { return item1.second < item2.second; }); QPointF dPos = lstTempLen.first().first->rect().bottomRight() - m_movingItem->rect().topLeft(); g_dx = dPos.x(); g_dy = dPos.y(); qDebug() << "g_dx" << g_dx; qDebug() << "g_dy" << g_dy; g_bXYTogetherMoved = true; } } } qreal dx = g_dx, dy = g_dy; // 是自动吸附并且没有相交的情况,不需要要移动 if (isAutoAdsorption && !isIntersect) { if (isMove) m_movingItem->moveBy(0, 0); else { dx = 0.0; dy = 0.0; } } // 其他情况需要移动 else { // 是否XY一起移动 if (g_bXYTogetherMoved) { if (isMove) m_movingItem->moveBy(g_dx, g_dy); qDebug() << "XY_XY_XY" << g_dx << g_dy; } else { // XY其中一个为0的情况, 执行移动 if (qFuzzyIsNull(g_dx) || qFuzzyIsNull(g_dy)) { if (isMove) m_movingItem->moveBy(g_dx, g_dy); qDebug() << "DBL_MIN" << g_dx << g_dy; } // X和Y都不为0的情况下,哪个移动的绝对值小移动哪一个 else { if (isMove) fabs(g_dx) < fabs(g_dy) ? m_movingItem->moveBy(g_dx, 0) : m_movingItem->moveBy(0, g_dy); else { fabs(g_dx) < fabs(g_dy) ? dy = 0.0 : dx = 0.0; } qDebug() << "fabs(g_dx) < fabs(g_dy) ?" << g_dx << g_dy; } } } return false; } void ConcatScreen::multiScreenAutoAdjust() { // 在自动拼接之后已经达成全连通状态,无效执行自动调整 updateConnectedState(); // 判断是否为全连通状态 if (getConnectedDomain(m_movingItem).size() == m_listItems.size()) { updateConnectedState(true); return; } // 存储移动块到临时变量 ScreenData *pwTemp = m_movingItem; QList lstChangedItems = m_listItems; // 处理之前变化的块为空则返回 if (lstChangedItems.isEmpty()) return; QMap> maplstItems; QMap mapItemsNeedMove; QList itemTemp; // 这个列表是存放的就是所有移动块相关的块 // 判断改变连通的块与移动块的剩余联通块是否存在连接 // 【这种是在移动块初始连接块是两个及以上的情况下触发的,如果是一个连通块的话不会改变连通状态的】 // 获取屏幕集群 for (auto iter : m_listItems) { if (!lstChangedItems.contains(iter)) continue; itemTemp = getConnectedDomain(iter); for (auto k : itemTemp) { if (lstChangedItems.contains(k) && k != iter) { lstChangedItems.removeOne(k); } } } for (auto item : lstChangedItems) { qDebug() << "处理之后变化的块:" << item->rect() << item; } for (auto iter : lstChangedItems) { maplstItems.insert(iter, getConnectedDomain(iter)); } for (auto iter : maplstItems.keys()) { qDebug() << "屏幕集群:" << iter->rect() << iter; for (auto k : maplstItems[iter]) { qDebug() << "val" << k->rect() << k; } } if (maplstItems.size() > 0) { // 说明除了移动块剩下的被拆分成了几部分,需要重新向其中一个部分移动了 // 找到中心屏幕集群(包含移动块) for (auto iter1 = maplstItems.begin(); iter1 != maplstItems.end(); ++iter1) { if (iter1.value().contains(pwTemp)) { m_lstSortItems = iter1.value(); break; } } // 其他屏幕集群依次向中心屏幕集群移动 for (auto iter = maplstItems.begin(); iter != maplstItems.end(); ++iter) { if (iter.value().contains(pwTemp)) continue; QList lstPos; QList lstX, lstY; for (auto item : iter.value()) { m_movingItem = item; bool isRestore = false; multiScreenSortAlgo(isRestore); if (!m_lstSortItems.contains(item)) m_lstSortItems.append(item); } } } m_lstSortItems = m_listItems; m_movingItem = pwTemp; // 自动调整完毕后,更新连通域 updateConnectedState(true); } bool ConcatScreen::updateConnectedState(bool isInit) { bool isIntersect = false; QList listItemsTemp; for (int i = 0; i < m_listItems.size(); i++) { listItemsTemp.clear(); for (int j = 0; j < m_listItems.size(); j++) { if (j != i && m_listItems[i]->rectEx().intersects(m_listItems[j]->rect()) && !listItemsTemp.contains(m_listItems[j]) && !m_listItems[i]->justIntersectRect().intersects(m_listItems[j]->rect())) { listItemsTemp.append(m_listItems[j]); } if (j != i && m_listItems[i]->justIntersectRect().intersects(m_listItems[j]->rect())) { isIntersect = true; } } if (isInit) { m_mapInitItemConnectedState.insert(m_listItems[i], listItemsTemp); } m_mapItemConnectedState.insert(m_listItems[i], listItemsTemp); } return isIntersect; } // 获取连通域 QList ConcatScreen::getConnectedDomain(ScreenData *item) { QList lstTemp1Items; QList lstTemp; QList lstItems; lstItems.append(item); for (auto iter : m_listItems) /*标记循环次数*/ { Q_UNUSED(iter) lstTemp.clear(); // 获取所有的value for (auto a : lstItems) { for (auto t : m_mapItemConnectedState[a]) { if (!lstTemp1Items.contains(t)) lstTemp.append(t); } } // 去重插入 for (auto t : lstTemp) { if (!lstTemp1Items.contains(t) && t != item) lstTemp1Items.append(t); else { lstTemp.removeOne(t); } } lstItems.clear(); lstItems.append(lstTemp); } lstTemp1Items.append(item); return lstTemp1Items; } void ConcatScreen::autoRebound() { for (auto &&item : m_listItems) { item->rebound(); } } } // namespace dccV25 ================================================ FILE: src/plugin-display/operation/private/concatscreen.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef CONCATSCREEN_H #define CONCATSCREEN_H #include #include #include #include QT_BEGIN_NAMESPACE class QQuickItem; QT_END_NAMESPACE namespace dccV25 { class DccScreen; class ScreenData { public: explicit ScreenData(QQuickItem *item, qreal scale); ScreenData(DccScreen *screen); QRectF rect() const; QRectF rectEx() const; QRectF justIntersectRect() const; DccScreen *screen() const; void moveBy(qreal dx, qreal dy); void rebound(); private: QQuickItem *m_item; DccScreen *m_screen; qreal m_scale; QRectF m_rect; }; class ConcatScreen { public: explicit ConcatScreen(QList listItems, ScreenData *pw); void adsorption(); void executemultiScreenAlgo(bool isRebound); private: bool multiScreenSortAlgo(bool &isRestore, const bool isRebound = true); // 排序算法 返回值 是否要重新拼接//为计算之后需要移动的XY值 void multiScreenAutoAdjust(); // 手动调整完如果出现没有完全连通的情况,需要启动自动调整算法 bool updateConnectedState(bool isInit = false); // 更新连通状态 QList getConnectedDomain(ScreenData *item); // 获取每个屏幕的连通域 void autoRebound(); // 自动回弹流程 private: QList m_listItems; ScreenData *m_movingItem; QList m_lstSortItems; QMap> m_mapItemConnectedState; // 所有块的实时连通状态 QMap> m_mapInitItemConnectedState; // 所有块的初始连通状态 }; } // namespace dccV25 #endif // CONCATSCREEN_H ================================================ FILE: src/plugin-display/operation/private/dccscreen_p.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCCSCREEN_P_H #define DCCSCREEN_P_H #include "monitor.h" #include namespace dccV25 { const float MinScreenWidth = 1024.0f; const float MinScreenHeight = 768.0f; class DisplayWorker; class DccScreen; class DccScreenItem; class DccScreenItemPrivate { public: static DccScreenItem *New(Monitor * monitor, DccScreen *screen); static DccScreenItemPrivate *Private(DccScreenItem *screenItem); explicit DccScreenItemPrivate(DccScreenItem *screenItem); virtual ~DccScreenItemPrivate(); Monitor * m_monitor; DccScreenItem *q_ptr; Q_DECLARE_PUBLIC(DccScreenItem) }; class DccScreenPrivate { public: static DccScreen *New(QList monitors, DisplayWorker *worker, QObject *parent = nullptr); static DccScreenPrivate *Private(DccScreen *screen); explicit DccScreenPrivate(DccScreen *screen); virtual ~DccScreenPrivate(); void setMonitors(QList monitors); Monitor *monitor(); QList monitors(); inline DisplayWorker *worker() { return m_worker; } void setMode(QSize resolution, double rate); void setRotate(uint rotate); void setFillMode(const QString &fileMode); void setScale(qreal scale); void updateResolutionList(); void updateRateList(); void updateScreen(); void updateMaxScale(); private: DccScreen *q_ptr; QList m_monitors; QList m_resolutionList; QList m_rateList; QString m_name; DisplayWorker *m_worker; QScreen *m_screen; qreal m_maxScale; QList m_screenItems; Q_DECLARE_PUBLIC(DccScreen) }; } // namespace dccV25 #endif // DCCSCREEN_P_H ================================================ FILE: src/plugin-display/operation/private/displaydbusproxy.cpp ================================================ // SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "displaydbusproxy.h" #include #include #include const static QString DisplayService = "org.deepin.dde.Display1"; const static QString DisplayPath = "/org/deepin/dde/Display1"; const static QString DisplayInterface = "org.deepin.dde.Display1"; const static QString AppearanceService = "org.deepin.dde.Appearance1"; const static QString AppearancePath = "/org/deepin/dde/Appearance1"; const static QString AppearanceInterface = "org.deepin.dde.Appearance1"; const static QString PowerService = "org.deepin.dde.Power1"; const static QString PowerPath = "/org/deepin/dde/Power1"; const static QString PowerInterface = "org.deepin.dde.Power1"; DisplayDBusProxy::DisplayDBusProxy(QObject *parent) : QObject(parent) { registerTouchscreenInfoList_V2MetaType(); registerTouchscreenMapMetaType(); registerResolutionListMetaType(); registerBrightnessMapMetaType(); registerTouchscreenInfoListMetaType(); registerScreenRectMetaType(); registerResolutionMetaType(); init(); } void DisplayDBusProxy::init() { m_dBusSystemDisplayInter = new DDBusInterface("org.deepin.dde.Display1", "/org/deepin/dde/Display1", "org.deepin.dde.Display1", QDBusConnection::systemBus(), this); m_dBusDisplayInter = new DDBusInterface(DisplayService, DisplayPath, DisplayInterface, QDBusConnection::sessionBus(), this); m_dBusAppearanceInter = new DDBusInterface(AppearanceService, AppearancePath, AppearanceInterface, QDBusConnection::sessionBus(), this); m_dBusPowerInter = new DDBusInterface(PowerService, PowerPath, PowerInterface, QDBusConnection::sessionBus(), this); QDBusConnection::sessionBus().connect("com.deepin.wm", "/com/deepin/wm", "com.deepin.wm", "WorkspaceSwitched", this, SIGNAL(WorkspaceSwitched(int, int))); } // power bool DisplayDBusProxy::ambientLightAdjustBrightness() { return qvariant_cast(m_dBusPowerInter->property("AmbientLightAdjustBrightness")); } void DisplayDBusProxy::setAmbientLightAdjustBrightness(bool value) { m_dBusPowerInter->setProperty("AmbientLightAdjustBrightness", QVariant::fromValue(value)); } bool DisplayDBusProxy::hasAmbientLightSensor() { return qvariant_cast(m_dBusPowerInter->property("HasAmbientLightSensor")); } QString DisplayDBusProxy::wallpaperURls() const { return qvariant_cast(m_dBusAppearanceInter->property("WallpaperURls")); } // display BrightnessMap DisplayDBusProxy::brightness() { return qvariant_cast(m_dBusDisplayInter->property("Brightness")); } bool DisplayDBusProxy::colorTemperatureEnabled() const { return qvariant_cast(m_dBusDisplayInter->property("ColorTemperatureEnabled")); } void DisplayDBusProxy::setColorTemperatureEnabled(bool enabled) { m_dBusDisplayInter->setProperty("ColorTemperatureEnabled", enabled); } int DisplayDBusProxy::colorTemperatureManual() { return qvariant_cast(m_dBusDisplayInter->property("ColorTemperatureManual")); } int DisplayDBusProxy::colorTemperatureMode() { return qvariant_cast(m_dBusDisplayInter->property("ColorTemperatureMode")); } const QString DisplayDBusProxy::customColorTempTimePeriod() { return qvariant_cast(m_dBusDisplayInter->property("CustomColorTempTimePeriod")); } QString DisplayDBusProxy::currentCustomId() { return qvariant_cast(m_dBusDisplayInter->property("CurrentCustomId")); } QStringList DisplayDBusProxy::customIdList() { return qvariant_cast(m_dBusDisplayInter->property("CustomIdList")); } uchar DisplayDBusProxy::displayMode() { return qvariant_cast(m_dBusDisplayInter->property("DisplayMode")); } bool DisplayDBusProxy::hasChanged() { return qvariant_cast(m_dBusDisplayInter->property("HasChanged")); } uint DisplayDBusProxy::maxBacklightBrightness() { return qvariant_cast(m_dBusDisplayInter->property("MaxBacklightBrightness")); } QList DisplayDBusProxy::monitors() { return qvariant_cast>(m_dBusDisplayInter->property("Monitors")); } QString DisplayDBusProxy::primary() { return qvariant_cast(m_dBusDisplayInter->property("Primary")); } ScreenRect DisplayDBusProxy::primaryRect() { return qvariant_cast(m_dBusDisplayInter->property("PrimaryRect")); } ushort DisplayDBusProxy::screenHeight() { return qvariant_cast(m_dBusDisplayInter->property("ScreenHeight")); } ushort DisplayDBusProxy::screenWidth() { return qvariant_cast(m_dBusDisplayInter->property("ScreenWidth")); } TouchscreenMap DisplayDBusProxy::touchMap() { return qvariant_cast(m_dBusDisplayInter->property("TouchMap")); } TouchscreenInfoList DisplayDBusProxy::touchscreens() { return qvariant_cast(m_dBusDisplayInter->property("Touchscreens")); } TouchscreenInfoList_V2 DisplayDBusProxy::touchscreensV2() { return qvariant_cast(m_dBusDisplayInter->property("TouchscreensV2")); } QDBusPendingReply DisplayDBusProxy::GetScaleFactor() { QList argumentList; return m_dBusAppearanceInter->asyncCallWithArgumentList(QStringLiteral("GetScaleFactor"), argumentList); } QDBusPendingReply> DisplayDBusProxy::GetScreenScaleFactors() { QList argumentList; return m_dBusAppearanceInter->asyncCallWithArgumentList(QStringLiteral("GetScreenScaleFactors"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::SetScaleFactor(double in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusAppearanceInter->asyncCallWithArgumentList(QStringLiteral("SetScaleFactor"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::SetScreenScaleFactors(const QMap &scaleFactors) { QList argumentList; argumentList << QVariant::fromValue(scaleFactors); return m_dBusAppearanceInter->asyncCallWithArgumentList(QStringLiteral("SetScreenScaleFactors"), argumentList); } QDBusPendingReply DisplayDBusProxy::GetCurrentWorkspaceBackgroundForMonitor(const QString &strMonitorName) { QList argumentList; argumentList << QVariant::fromValue(strMonitorName); return m_dBusAppearanceInter->asyncCallWithArgumentList(QStringLiteral("GetCurrentWorkspaceBackgroundForMonitor"), argumentList); } QString DisplayDBusProxy::GetConfig() { QList argumentList; return QDBusPendingReply(m_dBusSystemDisplayInter->asyncCallWithArgumentList(QStringLiteral("GetConfig"), argumentList)); } void DisplayDBusProxy::SetConfig(QString cfgStr) { QList argumentList; argumentList << cfgStr; m_dBusSystemDisplayInter->asyncCallWithArgumentList(QStringLiteral("SetConfig"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::ApplyChanges() { QList argumentList; return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("ApplyChanges"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::AssociateTouch(const QString &in0, const QString &in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("AssociateTouch"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::AssociateTouchByUUID(const QString &in0, const QString &in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("AssociateTouchByUUID"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::ChangeBrightness(bool in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("ChangeBrightness"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::DeleteCustomMode(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("DeleteCustomMode"), argumentList); } QDBusPendingReply DisplayDBusProxy::GetRealDisplayMode() { QList argumentList; return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("GetRealDisplayMode"), argumentList); } QDBusPendingReply DisplayDBusProxy::ListOutputNames() { QList argumentList; return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("ListOutputNames"), argumentList); } QDBusPendingReply DisplayDBusProxy::ListOutputsCommonModes() { QList argumentList; return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("ListOutputsCommonModes"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::ModifyConfigName(const QString &in0, const QString &in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("ModifyConfigName"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::RefreshBrightness() { QList argumentList; return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("RefreshBrightness"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::Reset() { QList argumentList; return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("Reset"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::ResetChanges() { QList argumentList; return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("ResetChanges"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::Save() { QList argumentList; return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("Save"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::SetAndSaveBrightness(const QString &in0, double in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("SetAndSaveBrightness"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::SetBrightness(const QString &in0, double in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("SetBrightness"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::SetColorTemperature(int in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("SetColorTemperature"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::SetCustomColorTempTimePeriod(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("SetCustomColorTempTimePeriod"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::SetMethodAdjustCCT(int in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("SetMethodAdjustCCT"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::SetPrimary(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("SetPrimary"), argumentList); } QDBusPendingReply<> DisplayDBusProxy::SwitchMode(uchar in0, const QString &in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusDisplayInter->asyncCallWithArgumentList(QStringLiteral("SwitchMode"), argumentList); } QDBusReply DisplayDBusProxy::CanSetBrightnessSync(const QString &name) { return m_dBusDisplayInter->call("CanSetBrightness", name); } QDBusReply DisplayDBusProxy::SupportSetColorTemperatureSync() { return m_dBusDisplayInter->call("SupportSetColorTemperature"); } ================================================ FILE: src/plugin-display/operation/private/displaydbusproxy.h ================================================ // SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DISPLAYDBUSPROXY_H #define DISPLAYDBUSPROXY_H #include "types/brightnessmap.h" #include "types/resolutionlist.h" #include "types/screenrect.h" #include "types/touchscreeninfolist.h" #include "types/touchscreeninfolist_v2.h" #include "types/touchscreenmap.h" #include #include #include #include using Dtk::Core::DDBusInterface; class QDBusMessage; class DisplayDBusProxy : public QObject { Q_OBJECT public: explicit DisplayDBusProxy(QObject *parent = nullptr); Q_PROPERTY(BrightnessMap Brightness READ brightness NOTIFY BrightnessChanged) BrightnessMap brightness(); Q_PROPERTY(bool ColorTemperatureEnabled READ colorTemperatureEnabled WRITE setColorTemperatureEnabled NOTIFY ColorTemperatureEnabledChanged FINAL) bool colorTemperatureEnabled() const; void setColorTemperatureEnabled(bool enabled); Q_PROPERTY(int ColorTemperatureManual READ colorTemperatureManual NOTIFY ColorTemperatureManualChanged) int colorTemperatureManual(); Q_PROPERTY(int ColorTemperatureMode READ colorTemperatureMode NOTIFY ColorTemperatureModeChanged) int colorTemperatureMode(); Q_PROPERTY(QString CustomColorTempTimePeriod READ customColorTempTimePeriod NOTIFY CustomColorTempTimePeriodChanged FINAL) const QString customColorTempTimePeriod(); Q_PROPERTY(QString CurrentCustomId READ currentCustomId NOTIFY CurrentCustomIdChanged) QString currentCustomId(); Q_PROPERTY(QStringList CustomIdList READ customIdList NOTIFY CustomIdListChanged) QStringList customIdList(); Q_PROPERTY(uchar DisplayMode READ displayMode NOTIFY DisplayModeChanged) uchar displayMode(); Q_PROPERTY(bool HasChanged READ hasChanged NOTIFY HasChangedChanged) bool hasChanged(); Q_PROPERTY(uint MaxBacklightBrightness READ maxBacklightBrightness NOTIFY MaxBacklightBrightnessChanged) uint maxBacklightBrightness(); Q_PROPERTY(QList Monitors READ monitors NOTIFY MonitorsChanged) QList monitors(); Q_PROPERTY(QString Primary READ primary NOTIFY PrimaryChanged) QString primary(); Q_PROPERTY(ScreenRect PrimaryRect READ primaryRect NOTIFY PrimaryRectChanged) ScreenRect primaryRect(); Q_PROPERTY(ushort ScreenHeight READ screenHeight NOTIFY ScreenHeightChanged) ushort screenHeight(); Q_PROPERTY(ushort ScreenWidth READ screenWidth NOTIFY ScreenWidthChanged) ushort screenWidth(); Q_PROPERTY(TouchscreenMap TouchMap READ touchMap NOTIFY TouchMapChanged) TouchscreenMap touchMap(); Q_PROPERTY(TouchscreenInfoList Touchscreens READ touchscreens NOTIFY TouchscreensChanged) TouchscreenInfoList touchscreens(); Q_PROPERTY(TouchscreenInfoList_V2 TouchscreensV2 READ touchscreensV2 NOTIFY TouchscreensV2Changed) TouchscreenInfoList_V2 touchscreensV2(); // power Q_PROPERTY(bool AmbientLightAdjustBrightness READ ambientLightAdjustBrightness WRITE setAmbientLightAdjustBrightness NOTIFY AmbientLightAdjustBrightnessChanged) bool ambientLightAdjustBrightness(); void setAmbientLightAdjustBrightness(bool value); Q_PROPERTY(bool HasAmbientLightSensor READ hasAmbientLightSensor NOTIFY HasAmbientLightSensorChanged) bool hasAmbientLightSensor(); Q_PROPERTY(QString WallpaperURls READ wallpaperURls NOTIFY WallpaperURlsChanged FINAL) QString wallpaperURls() const; private: void init(); public Q_SLOTS: // METHODS // Display QDBusPendingReply<> ApplyChanges(); QDBusPendingReply<> AssociateTouch(const QString &in0, const QString &in1); QDBusPendingReply<> AssociateTouchByUUID(const QString &in0, const QString &in1); QDBusPendingReply<> ChangeBrightness(bool in0); QDBusPendingReply<> DeleteCustomMode(const QString &in0); QDBusPendingReply GetRealDisplayMode(); QDBusPendingReply ListOutputNames(); QDBusPendingReply ListOutputsCommonModes(); QDBusPendingReply<> ModifyConfigName(const QString &in0, const QString &in1); QDBusPendingReply<> RefreshBrightness(); QDBusPendingReply<> Reset(); QDBusPendingReply<> ResetChanges(); QDBusPendingReply<> Save(); QDBusPendingReply<> SetAndSaveBrightness(const QString &in0, double in1); QDBusPendingReply<> SetBrightness(const QString &in0, double in1); QDBusPendingReply<> SetColorTemperature(int in0); QDBusPendingReply<> SetCustomColorTempTimePeriod(const QString &in0); QDBusPendingReply<> SetMethodAdjustCCT(int in0); QDBusPendingReply<> SetPrimary(const QString &in0); QDBusPendingReply<> SwitchMode(uchar in0, const QString &in1); QDBusReply CanSetBrightnessSync(const QString &name); QDBusReply SupportSetColorTemperatureSync(); // Appearance QDBusPendingReply GetScaleFactor(); QDBusPendingReply > GetScreenScaleFactors(); QDBusPendingReply<> SetScaleFactor(double in0); QDBusPendingReply<> SetScreenScaleFactors(const QMap &scaleFactors); QDBusPendingReply GetCurrentWorkspaceBackgroundForMonitor(const QString &strMonitorName); // SystemDisplay QString GetConfig(); void SetConfig(QString cfgStr); Q_SIGNALS: // SIGNALS // begin property changed signals void BrightnessChanged(BrightnessMap value) const; void ColorTemperatureEnabledChanged(bool value) const; void ColorTemperatureManualChanged(int value) const; void ColorTemperatureModeChanged(int value) const; void CustomColorTempTimePeriodChanged(const QString &value) const; void CurrentCustomIdChanged(const QString &value) const; void CustomIdListChanged(const QStringList &value) const; void DisplayModeChanged(uchar value) const; void HasChangedChanged(bool value) const; void MaxBacklightBrightnessChanged(uint value) const; void MonitorsChanged(const QList &value) const; void PrimaryChanged(const QString &value) const; void PrimaryRectChanged(ScreenRect value) const; void ScreenHeightChanged(ushort value) const; void ScreenWidthChanged(ushort value) const; void TouchMapChanged(TouchscreenMap value) const; void TouchscreensChanged(TouchscreenInfoList value) const; void TouchscreensV2Changed(TouchscreenInfoList_V2 value) const; // power void AmbientLightAdjustBrightnessChanged(bool value) const; void HasAmbientLightSensorChanged(bool value) const; void WallpaperURlsChanged(const QString &value) const; void WorkspaceSwitched(int oldIndex,int newIndex); private: Dtk::Core::DDBusInterface *m_dBusDisplayInter; Dtk::Core::DDBusInterface *m_dBusSystemDisplayInter; Dtk::Core::DDBusInterface *m_dBusAppearanceInter; Dtk::Core::DDBusInterface *m_dBusPowerInter; }; #endif // DISPLAYDBUSPROXY_H ================================================ FILE: src/plugin-display/operation/private/displaymodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "displaymodel.h" using namespace dccV25; const double DoubleZero = 0.000001; bool contains(const QList &container, const Resolution &item) { for (auto r : container) if (r.width() == item.width() && r.height() == item.height()) return true; return false; } DisplayModel::DisplayModel(QObject *parent) : QObject(parent) , m_screenHeight(0) , m_screenWidth(0) , m_uiScale(1) , m_minimumBrightnessScale(0.0) , m_redshiftIsValid(false) , m_allowEnableMultiScaleRatio(false) , m_resolutionRefreshEnable(true) , m_brightnessEnable(true) , m_monitorModeChanging(true) { } double DisplayModel::monitorScale(Monitor *moni) { qDebug() << "ui scale : " << m_uiScale << "\tmonitor scale:" << moni->scale(); return moni->scale() < 1.0 ? m_uiScale : moni->scale(); } Monitor *DisplayModel::primaryMonitor() const { for (auto mon : m_monitors) if (mon->name() == m_primary) return mon; return nullptr; } void DisplayModel::setScreenHeight(const int h) { if (m_screenHeight != h) { m_screenHeight = h; Q_EMIT screenHeightChanged(m_screenHeight); } } void DisplayModel::setScreenWidth(const int w) { if (m_screenWidth != w) { m_screenWidth = w; Q_EMIT screenWidthChanged(m_screenWidth); } } void DisplayModel::setDisplayMode(const int mode) { if (m_mode != mode && mode >= 0 && mode < 5) { m_mode = mode; Q_EMIT displayModeChanged(m_mode); } } void DisplayModel::setUIScale(const double scale) { if (fabs(m_uiScale - scale) > DoubleZero) { m_uiScale = scale; Q_EMIT uiScaleChanged(m_uiScale); } } void DisplayModel::setMinimumBrightnessScale(const double scale) { if (fabs(m_minimumBrightnessScale - scale) > DoubleZero) { m_minimumBrightnessScale = scale; Q_EMIT minimumBrightnessScaleChanged(m_minimumBrightnessScale); } } void DisplayModel::setPrimary(const QString &primary) { if (m_primary != primary) { m_primary = primary; Q_EMIT primaryScreenChanged(m_primary); } } void DisplayModel::monitorAdded(Monitor *mon) { m_monitors.append(mon); // 按照名称排序,显示的时候VGA在前,HDMI在后 std::sort(m_monitors.begin(), m_monitors.end(), [=](const Monitor *m1, const Monitor *m2){ return m1->name() > m2->name(); }); checkAllSupportFillModes(); Q_EMIT monitorListChanged(); } void DisplayModel::monitorRemoved(Monitor *mon) { m_monitors.removeOne(mon); checkAllSupportFillModes(); Q_EMIT monitorListChanged(); } void DisplayModel::setAutoLightAdjustIsValid(bool ala) { if (m_AutoLightAdjustIsValid == ala) return; m_AutoLightAdjustIsValid = ala; Q_EMIT autoLightAdjustVaildChanged(ala); } void DisplayModel::setBrightnessMap(const BrightnessMap &brightnessMap) { if (brightnessMap == m_brightnessMap) return; m_brightnessMap = brightnessMap; } void DisplayModel::setTouchscreenList(const TouchscreenInfoList_V2 &touchscreenList) { if (touchscreenList == m_touchscreenList) return; m_touchscreenList = touchscreenList; Q_EMIT touchscreenListChanged(); } void DisplayModel::setTouchMap(const TouchscreenMap &touchMap) { if (touchMap == m_touchMap) return; m_touchMap = touchMap; Q_EMIT touchscreenMapChanged(); } void DisplayModel::setAutoLightAdjust(bool ala) { if (ala == m_isAutoLightAdjust) return; m_isAutoLightAdjust = ala; Q_EMIT autoLightAdjustSettingChanged(m_isAutoLightAdjust); } bool DisplayModel::redshiftIsValid() const { return m_redshiftIsValid; } void DisplayModel::setColorTemperatureEnabled(bool enabled) { if (enabled == m_colorTemperatureEnabled) return; m_colorTemperatureEnabled = enabled; Q_EMIT colorTemperatureEnabledChanged(m_colorTemperatureEnabled); } void DisplayModel::setAdjustCCTmode(int mode) { if (m_adjustCCTMode == mode) return; m_adjustCCTMode = mode; Q_EMIT adjustCCTmodeChanged(mode); } void DisplayModel::setColorTemperature(int value) { if (m_colorTemperature == value) return; m_colorTemperature = value; Q_EMIT colorTemperatureChanged(value); } void DisplayModel::setCustomColorTempTimePeriod(const QString &timePeriod) { if (m_customColorTempTimePeriod == timePeriod) return; m_customColorTempTimePeriod = timePeriod; Q_EMIT customColorTempTimePeriodChanged(m_customColorTempTimePeriod); } void DisplayModel::setRedshiftIsValid(bool redshiftIsValid) { if (m_redshiftIsValid == redshiftIsValid) return; m_redshiftIsValid = redshiftIsValid; Q_EMIT redshiftVaildChanged(redshiftIsValid); } void DisplayModel::setAllowEnableMultiScaleRatio(bool allowEnableMultiScaleRatio) { if (m_allowEnableMultiScaleRatio == allowEnableMultiScaleRatio) return; m_allowEnableMultiScaleRatio = allowEnableMultiScaleRatio; } void DisplayModel::setRefreshRateEnable(bool isEnable) { m_RefreshRateEnable = isEnable; } void DisplayModel::setmaxBacklightBrightness(const uint value) { if (m_maxBacklightBrightness != value && value < 100) { m_maxBacklightBrightness = value; Q_EMIT maxBacklightBrightnessChanged(value); } } void DisplayModel::setResolutionRefreshEnable(const bool enable) { if (m_resolutionRefreshEnable != enable) { m_resolutionRefreshEnable = enable; Q_EMIT resolutionRefreshEnableChanged(m_resolutionRefreshEnable); } } void DisplayModel::setBrightnessEnable(const bool enable) { if (m_brightnessEnable != enable) { m_brightnessEnable = enable; Q_EMIT brightnessEnableChanged(m_brightnessEnable); } } void DisplayModel::checkAllSupportFillModes() { for (auto m : monitorList()) { if (m->availableFillModes().isEmpty()) { m_allSupportFillModes = false; return; } } m_allSupportFillModes = true; } void DisplayModel::setmodeChanging(bool changing) { m_monitorModeChanging = changing; } ================================================ FILE: src/plugin-display/operation/private/displaymodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef DISPLAYMODEL_H #define DISPLAYMODEL_H #include "math.h" #include #include #include "monitor.h" #include "types/brightnessmap.h" #include "types/touchscreeninfolist_v2.h" #include "types/touchscreenmap.h" #define CUSTOM_MODE 0 #define MERGE_MODE 1 #define EXTEND_MODE 2 #define SINGLE_MODE 3 namespace dccV25 { class DisplayWorker; class DisplayModel : public QObject { Q_OBJECT public: friend class DisplayWorker; public: explicit DisplayModel(QObject *parent = 0); double monitorScale(Monitor *moni); inline int screenHeight() const { return m_screenHeight; } inline int screenWidth() const { return m_screenWidth; } inline int displayMode() const { return m_mode; } inline double uiScale() const { return m_uiScale; } inline double minimumBrightnessScale() const { return m_minimumBrightnessScale; } inline const QString primary() const { return m_primary; } inline const QList monitorList() const { return m_monitors; } Monitor *primaryMonitor() const; inline const QString defaultFillMode() { return "None"; } bool isNightMode() const; void setIsNightMode(bool isNightMode); bool redshiftIsValid() const; inline bool colorTemperatureEnabled() const { return m_colorTemperatureEnabled; } void setColorTemperatureEnabled(bool enabled); inline int adjustCCTMode() const { return m_adjustCCTMode; } void setAdjustCCTmode(int mode); inline int colorTemperature() const { return m_colorTemperature; } void setColorTemperature(int value); inline QString customColorTempTimePeriod() const { return m_customColorTempTimePeriod; } void setCustomColorTempTimePeriod(const QString &timePeriod); inline bool autoLightAdjustIsValid() const { return m_AutoLightAdjustIsValid; } inline bool isAudtoLightAdjust() const { return m_isAutoLightAdjust; } void setAutoLightAdjust(bool); inline BrightnessMap brightnessMap() const { return m_brightnessMap; } void setBrightnessMap(const BrightnessMap &brightnessMap); inline TouchscreenInfoList_V2 touchscreenList() const { return m_touchscreenList; } void setTouchscreenList(const TouchscreenInfoList_V2 &touchscreenList); inline TouchscreenMap touchMap() const { return m_touchMap; } void setTouchMap(const TouchscreenMap &touchMap); inline bool allowEnableMultiScaleRatio() { return m_allowEnableMultiScaleRatio; } void setAllowEnableMultiScaleRatio(bool allowEnableMultiScaleRatio); inline bool isRefreshRateEnable() const { return m_RefreshRateEnable; } void setRefreshRateEnable(bool isEnable); inline uint maxBacklightBrightness() const { return m_maxBacklightBrightness; } inline bool resolutionRefreshEnable() const { return m_resolutionRefreshEnable; } void setResolutionRefreshEnable(const bool enable); inline bool brightnessEnable() const { return m_brightnessEnable; } void setBrightnessEnable(const bool enable); inline bool allSupportFillModes() const { return m_allSupportFillModes; } void checkAllSupportFillModes(); inline bool monitorModeChanging() const { return m_monitorModeChanging; } void setmodeChanging(bool changing); Q_SIGNALS: void screenHeightChanged(const int h) const; void screenWidthChanged(const int w) const; void displayModeChanged(const int mode) const; void uiScaleChanged(const double scale) const; void minimumBrightnessScaleChanged(const double) const; void primaryScreenChanged(const QString &primary) const; void monitorListChanged() const; void machinesListChanged() const; void nightModeChanged(const bool nightmode) const; void redshiftVaildChanged(const bool isvalid) const; void autoLightAdjustSettingChanged(bool setting) const; void autoLightAdjustVaildChanged(bool isvalid) const; void touchscreenListChanged() const; void touchscreenMapChanged() const; void maxBacklightBrightnessChanged(uint value); void adjustCCTmodeChanged(int mode); void colorTemperatureEnabledChanged(const bool enabled); void colorTemperatureChanged(int value); void resolutionRefreshEnableChanged(const bool enable); void brightnessEnableChanged(const bool enable); void deviceSharingSwitchChanged(const bool enable); void sharedClipboardChanged(bool on) const; void sharedDevicesChanged(bool on) const; void filesStoragePathChanged(const QString& path) const; void customColorTempTimePeriodChanged(const QString& timePeriod); private Q_SLOTS: void setScreenHeight(const int h); void setScreenWidth(const int w); void setDisplayMode(const int mode); void setUIScale(const double scale); void setMinimumBrightnessScale(const double scale); void setPrimary(const QString &primary); void setRedshiftIsValid(bool redshiftIsValid); void monitorAdded(Monitor *mon); void monitorRemoved(Monitor *mon); void setAutoLightAdjustIsValid(bool); void setmaxBacklightBrightness(const uint value); private: int m_screenHeight; int m_screenWidth; int m_mode {-1}; int m_colorTemperature {0}; //当前色温对应的颜色值 int m_adjustCCTMode {0}; //当前自动调节色温模式 0 不开启 1 自动调节 2 手动调节 double m_uiScale; double m_minimumBrightnessScale; QString m_primary; QString m_customColorTempTimePeriod; QList m_monitors; bool m_colorTemperatureEnabled; bool m_redshiftIsValid; bool m_RefreshRateEnable {false}; bool m_isAutoLightAdjust {false}; bool m_AutoLightAdjustIsValid {false}; bool m_allowEnableMultiScaleRatio; bool m_resolutionRefreshEnable; bool m_brightnessEnable; BrightnessMap m_brightnessMap; TouchscreenInfoList_V2 m_touchscreenList; TouchscreenMap m_touchMap; uint m_maxBacklightBrightness {0}; bool m_allSupportFillModes; bool m_monitorModeChanging; // 配置修改中,仅控制中心修改时才处理自动拼接 }; } #endif // DISPLAYMODEL_H ================================================ FILE: src/plugin-display/operation/private/displaymodule_p.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DISPLAYMODULE_P_H #define DISPLAYMODULE_P_H #include namespace dccV25 { class DisplayWorker; class DisplayModel; class DisplayModule; class DccScreen; class ScreenData; class DisplayModulePrivate { public: explicit DisplayModulePrivate(DisplayModule *parent); virtual ~DisplayModulePrivate() { } void init(); void updateVirtualScreens(); void updateMonitorList(); void updatePrimary(); void updateDisplayMode(); void updateMaxGlobalScale(); DccScreen *primary() const; QString displayMode() const; void setScreenPosition(QList screensData); public: DisplayModule *q_ptr; DisplayModel *m_model; DisplayWorker *m_worker; QList m_screens; QList m_virtualScreens; DccScreen *m_primary; QString m_displayMode; qreal m_maxGlobalScale; Q_DECLARE_PUBLIC(DisplayModule) }; } // namespace dccV25 #endif // DISPLAYMODULE_P_H ================================================ FILE: src/plugin-display/operation/private/displayworker.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "displayworker.h" #include "displaymodel.h" #include #include #include #include #include #include #include #include #include #include #include Q_LOGGING_CATEGORY(DdcDisplayWorker, "dcc-display-worker") const QString DisplayInterface("org.deepin.dde.Display1"); Q_DECLARE_METATYPE(QList) using namespace dccV25; DisplayWorker::DisplayWorker(DisplayModel *model, QObject *parent, bool isSync) : QObject(parent) , m_model(model) , m_displayInter(new DisplayDBusProxy(this)) , m_updateScale(false) , m_timer(new QTimer(this)) , m_dconfig(DTK_CORE_NAMESPACE::DConfig::create("org.deepin.dde.control-center", QStringLiteral("org.deepin.dde.control-center.display"), QString(), this)) { // NOTE: what will it be used? Q_UNUSED(isSync) m_timer->setSingleShot(true); m_timer->setInterval(200); if (WQt::Utils::isTreeland()) { m_reg = new WQt::Registry(WQt::Wayland::display(), this); connect(m_reg, &WQt::Registry::interfaceRegistered, this, &DisplayWorker::onInterfaceRegistered); m_reg->setup(); } else { connect(m_displayInter, &DisplayDBusProxy::WallpaperURlsChanged, this, &DisplayWorker::updateWallpaper); connect(m_displayInter, &DisplayDBusProxy::WorkspaceSwitched, this, &DisplayWorker::updateWallpaper); connect(m_displayInter, &DisplayDBusProxy::MonitorsChanged, this, &DisplayWorker::onMonitorListChanged); connect(m_displayInter, &DisplayDBusProxy::BrightnessChanged, this, &DisplayWorker::onMonitorsBrightnessChanged); connect(m_displayInter, &DisplayDBusProxy::BrightnessChanged, model, &DisplayModel::setBrightnessMap); connect(m_displayInter, &DisplayDBusProxy::TouchscreensV2Changed, model, &DisplayModel::setTouchscreenList); connect(m_displayInter, &DisplayDBusProxy::TouchMapChanged, model, &DisplayModel::setTouchMap); connect(m_displayInter, &DisplayDBusProxy::ScreenHeightChanged, model, &DisplayModel::setScreenHeight); connect(m_displayInter, &DisplayDBusProxy::ScreenWidthChanged, model, &DisplayModel::setScreenWidth); connect(m_displayInter, &DisplayDBusProxy::DisplayModeChanged, model, &DisplayModel::setDisplayMode); connect(m_displayInter, &DisplayDBusProxy::MaxBacklightBrightnessChanged, model, &DisplayModel::setmaxBacklightBrightness); connect(m_displayInter, &DisplayDBusProxy::ColorTemperatureEnabledChanged, model, &DisplayModel::setColorTemperatureEnabled); connect(m_displayInter, &DisplayDBusProxy::ColorTemperatureModeChanged, model, &DisplayModel::setAdjustCCTmode); connect(m_displayInter, &DisplayDBusProxy::ColorTemperatureManualChanged, model, &DisplayModel::setColorTemperature); connect(m_displayInter, &DisplayDBusProxy::CustomColorTempTimePeriodChanged, model, &DisplayModel::setCustomColorTempTimePeriod); connect(m_displayInter, static_cast(&DisplayDBusProxy::PrimaryChanged), model, &DisplayModel::setPrimary); //display redSfit/autoLight connect(m_displayInter, &DisplayDBusProxy::HasAmbientLightSensorChanged, m_model, &DisplayModel::autoLightAdjustVaildChanged); connect(m_timer, &QTimer::timeout, this, [this] { m_displayInter->ApplyChanges().waitForFinished(); m_displayInter->Save().waitForFinished(); }); } } DisplayWorker::~DisplayWorker() { qDeleteAll(m_monitors.keys()); qDeleteAll(m_monitors.values()); } void DisplayWorker::active() { if (!WQt::Utils::isTreeland()) { // m_model->setAllowEnableMultiScaleRatio( // valueByQSettings(DCC_CONFIG_FILES, // "Display", // "AllowEnableMultiScaleRatio", // false)); QDBusPendingCallWatcher *scalewatcher = new QDBusPendingCallWatcher(m_displayInter->GetScaleFactor()); connect(scalewatcher, &QDBusPendingCallWatcher::finished, this, &DisplayWorker::onGetScaleFinished); QDBusPendingCallWatcher *screenscaleswatcher = new QDBusPendingCallWatcher(m_displayInter->GetScreenScaleFactors()); connect(screenscaleswatcher, &QDBusPendingCallWatcher::finished, this, &DisplayWorker::onGetScreenScalesFinished); onMonitorsBrightnessChanged(m_displayInter->brightness()); m_model->setBrightnessMap(m_displayInter->brightness()); onMonitorListChanged(m_displayInter->monitors()); m_model->setDisplayMode(m_displayInter->displayMode()); m_model->setTouchscreenList(m_displayInter->touchscreensV2()); m_model->setTouchMap(m_displayInter->touchMap()); m_model->setPrimary(m_displayInter->primary()); m_model->setScreenHeight(m_displayInter->screenHeight()); m_model->setScreenWidth(m_displayInter->screenWidth()); m_model->setAdjustCCTmode(m_displayInter->colorTemperatureMode()); m_model->setColorTemperatureEnabled(m_displayInter->colorTemperatureEnabled()); m_model->setColorTemperature(m_displayInter->colorTemperatureManual()); m_model->setCustomColorTempTimePeriod(m_displayInter->customColorTempTimePeriod()); m_model->setmaxBacklightBrightness(m_displayInter->maxBacklightBrightness()); m_model->setAutoLightAdjustIsValid(m_displayInter->hasAmbientLightSensor()); bool isRedshiftValid = true; QDBusReply reply = m_displayInter->SupportSetColorTemperatureSync(); if (QDBusError::NoError == reply.error().type()) isRedshiftValid = reply.value(); else qCWarning(DdcDisplayWorker) << "Call SupportSetColorTemperature method failed: " << reply.error().message(); m_model->setRedshiftIsValid(isRedshiftValid); QVariant minBrightnessValue = 0.1f; minBrightnessValue = m_dconfig->value("minBrightnessValue", minBrightnessValue); m_model->setMinimumBrightnessScale(minBrightnessValue.toDouble()); // m_model->setResolutionRefreshEnable(m_dccSettings->get(GSETTINGS_SHOW_MUTILSCREEN).toBool()); // m_model->setBrightnessEnable(m_dccSettings->get(GSETTINGS_BRIGHTNESS_ENABLE).toBool()); } } void DisplayWorker::saveChanges() { clearBackup(); m_displayInter->Save().waitForFinished(); if (m_updateScale) setUiScale(m_currentScale); m_updateScale = false; } void DisplayWorker::switchMode(const int mode, const QString &name) { if (WQt::Utils::isTreeland()) { auto *opCfg = m_reg->outputManager()->createConfiguration(); m_model->setDisplayMode(mode); int posX = 0; for (auto it(m_wl_monitors.cbegin()); it != m_wl_monitors.cend(); ++it) { switch (mode) { case MERGE_MODE: { auto *cfgHead = opCfg->enableHead(it.value()); cfgHead->setPosition({0, 0}); break; } case EXTEND_MODE: { auto *cfgHead = opCfg->enableHead(it.value()); cfgHead->setPosition({posX, 0}); posX += it.key()->w(); break; } case SINGLE_MODE: { if (it.key()->name() == name) { auto *cfgHead = opCfg->enableHead(it.value()); WQt::OutputMode *preferMode = nullptr; for (auto *mode: it.value()->property(WQt::OutputHead::Modes).value>()) { preferMode = mode; if (mode->isPreferred()) break; } cfgHead->setMode(preferMode); cfgHead->setPosition({0, 0}); } else { opCfg->disableHead(it.value()); } break; } default: break; } } opCfg->apply(); } else { m_displayInter->SwitchMode(static_cast(mode), name).waitForFinished(); } } void DisplayWorker::onMonitorListChanged(const QList &mons) { QList ops; for (const auto *mon : m_monitors.keys()) ops << mon->path(); qCDebug(DdcDisplayWorker) << mons.size(); QList pathList; for (const auto &op : mons) { const QString path = op.path(); pathList << path; if (!ops.contains(path)) monitorAdded(path); } for (const auto &op : ops) if (!pathList.contains(op)) monitorRemoved(op); } void DisplayWorker::onWlMonitorListChanged() { // Only check new output here, listen OutputHead::finished for remove auto heads = m_reg->outputManager()->heads(); qCDebug(DdcDisplayWorker) << heads.size(); for (auto *head : heads) { bool isNew = true; for (const auto *oldHead : m_wl_monitors.values()) if (head == oldHead) { isNew = false; break; } if (isNew) wlMonitorAdded(head); } for (auto output : m_reg->waylandOutputs()) { wlOutputAdded(output); } connect(m_reg, &WQt::Registry::outputAdded, this, &DisplayWorker::wlOutputAdded); connect(m_reg, &WQt::Registry::outputRemoved, this, &DisplayWorker::wlOutputRemoved); } void DisplayWorker::updateWallpaper() { for (auto it(m_monitors.cbegin()); it != m_monitors.cend(); ++it) { updateMonitorWallpaper(it.key()); } } void DisplayWorker::updateMonitorWallpaper(Monitor *mon) { mon->setWallpaper(m_displayInter->GetCurrentWorkspaceBackgroundForMonitor(mon->name())); } void DisplayWorker::onBrightnessChanged(const treeland_output_color_control_v1 *colorControl, double brightness) { brightness = qBound(0.0, brightness / 100.0, 1.0); for (auto it(m_control_monitors.cbegin()); it != m_control_monitors.cend(); ++it) { if (it.value() == colorControl) { it.key()->setBrightness(brightness); return; } } } void DisplayWorker::onMonitorsBrightnessChanged(const BrightnessMap &brightness) { if (brightness.isEmpty()) return; for (auto it = m_monitors.begin(); it != m_monitors.end(); ++it) { it.key()->setBrightness(brightness[it.key()->name()]); } } void DisplayWorker::onGetScaleFinished(QDBusPendingCallWatcher *w) { QDBusPendingReply reply = w->reply(); m_model->setUIScale(reply); w->deleteLater(); } void DisplayWorker::onGetScreenScalesFinished(QDBusPendingCallWatcher *w) { QDBusPendingReply> reply = w->reply(); QMap rmap = reply; for (auto &m : m_model->monitorList()) { if (rmap.find(m->name()) != rmap.end()) { m->setScale(rmap.value(m->name()) < 1.0 ? m_model->uiScale() : rmap.value(m->name())); } } w->deleteLater(); } void DisplayWorker::onInterfaceRegistered(WQt::Registry::Interface interface) { switch (interface) { case WQt::Registry::OutputManagerInterface: { auto *opMgr = m_reg->outputManager(); if (!opMgr) { qCFatal(DdcDisplayWorker) << "Unable to start the output manager"; } connect(opMgr, &WQt::OutputManager::done, this, &DisplayWorker::onWlOutputManagerDone); } break; case WQt::Registry::TreeLandOutputManagerInterface: { connect(m_reg->treeLandOutputManager(), &WQt::TreeLandOutputManager::brightnessChanged, this, &DisplayWorker::onBrightnessChanged); } break; default: break; } } void DisplayWorker::onWlOutputManagerDone() { onWlMonitorListChanged(); m_model->setDisplayMode(EXTEND_MODE); // TODO: use dconfig auto *treelandOpMgr = m_reg->treeLandOutputManager(); m_model->setPrimary(treelandOpMgr->mPrimaryOutput); connect(treelandOpMgr, &WQt::TreeLandOutputManager::primaryOutputChanged, this, [this](){ m_model->setPrimary(m_reg->treeLandOutputManager()->mPrimaryOutput); }); m_model->setResolutionRefreshEnable(true); m_model->setBrightnessEnable(false); // TODO: support gamma effects } #ifndef DCC_DISABLE_ROTATE constexpr static int wlRotate2dcc(int wlRotate) { switch (wlRotate) { case WL_OUTPUT_TRANSFORM_NORMAL: return 1; case WL_OUTPUT_TRANSFORM_90: return 2; case WL_OUTPUT_TRANSFORM_180: return 4; case WL_OUTPUT_TRANSFORM_270: return 8; default: qWarning("dcc dont support FLIPPED"); return 0; } } constexpr static int dccRotate2wl(int dccRotate) { switch (dccRotate) { case 1: return WL_OUTPUT_TRANSFORM_NORMAL; case 2: return WL_OUTPUT_TRANSFORM_90; case 4: return WL_OUTPUT_TRANSFORM_180; case 8: return WL_OUTPUT_TRANSFORM_270; default: qWarning("unkone dccRotate, feedback to normal"); return WL_OUTPUT_TRANSFORM_NORMAL; } } void DisplayWorker::setMonitorRotate(Monitor *mon, const quint16 rotate) { m_model->setmodeChanging(true); if (WQt::Utils::isTreeland()) { auto *opCfg = m_reg->outputManager()->createConfiguration(); for (auto it(m_wl_monitors.cbegin()); it != m_wl_monitors.cend(); ++it) { if (!it.key()->enable()) { opCfg->disableHead(it.value()); continue; } auto *cfgHead = opCfg->enableHead(it.value()); if (m_model->displayMode() == MERGE_MODE || it.key() == mon) { cfgHead->setTransform(dccRotate2wl(rotate)); } } opCfg->apply(); } else { if (m_model->displayMode() == MERGE_MODE) { for (auto *m : m_monitors) { m->SetRotation(rotate).waitForFinished(); } } else { MonitorDBusProxy *inter = m_monitors.value(mon); inter->SetRotation(rotate).waitForFinished(); } } } #endif void DisplayWorker::setPrimary(const QString &name) { if (WQt::Utils::isTreeland()) { m_reg->treeLandOutputManager()->setPrimaryOutput(name.toStdString().c_str());; } else { m_displayInter->SetPrimary(name); } } void DisplayWorker::setMonitorEnable(Monitor *monitor, const bool enable) { if (WQt::Utils::isTreeland()) { auto *opCfg = m_reg->outputManager()->createConfiguration(); for (auto it(m_wl_monitors.cbegin()); it != m_wl_monitors.cend(); ++it) { if (it.key() == monitor) { if (enable) { auto *cfgHead = opCfg->enableHead(it.value()); WQt::OutputMode *preferMode = nullptr; for (auto *mode: it.value()->property(WQt::OutputHead::Modes).value>()) { preferMode = mode; if (mode->isPreferred()) break; } cfgHead->setMode(preferMode); } else { opCfg->disableHead(it.value()); } } else { if (!it.key()->enable()) { opCfg->disableHead(it.value()); } else { opCfg->enableHead(it.value()); } } } opCfg->apply(); } else { MonitorDBusProxy *inter = m_monitors.value(monitor); inter->Enable(enable).waitForFinished(); applyChanges(); } } void DisplayWorker::applyChanges() { if (!m_timer->isActive()) { m_timer->start(); } } void DisplayWorker::setColorTemperatureEnabled(bool enabled) { m_displayInter->setColorTemperatureEnabled(enabled); } void DisplayWorker::setColorTemperature(int value) { if (WQt::Utils::isTreeland()) { #if GAMMA_SUPPORT auto *gammaEffect = m_wl_gammaEffects->value(mon); auto *gammaConfig = m_wl_gammaConfig->value(mon); gammaConfig->temperature = value; gammaEffect->setConfiguration(*gammaConfig); #endif } else { m_displayInter->SetColorTemperature(value).waitForFinished(); } } void DisplayWorker::SetMethodAdjustCCT(int mode) { m_displayInter->SetMethodAdjustCCT(mode); } void DisplayWorker::setCustomColorTempTimePeriod(const QString &timePeriod) { m_displayInter->SetCustomColorTempTimePeriod(timePeriod); } void DisplayWorker::setCurrentFillMode(Monitor *mon,const QString fillMode) { if (WQt::Utils::isTreeland()) { // TODO: support treeland } else { MonitorDBusProxy *inter = m_monitors.value(mon); Q_ASSERT(inter); inter->setCurrentFillMode(fillMode); } } void DisplayWorker::backupConfig() { m_displayConfig = m_displayInter->GetConfig(); } void DisplayWorker::clearBackup() { m_displayConfig.clear(); } void DisplayWorker::resetBackup() { //TODO: can't use in treeland if (!m_displayConfig.isEmpty()) { QJsonDocument doc = QJsonDocument::fromJson(m_displayConfig.toLatin1()); QJsonObject jsonObj = doc.object(); QDateTime time = QDateTime::currentDateTime(); int offset = time.offsetFromUtc()/60; bool negative = offset <0; if (negative) offset = -offset; jsonObj.insert("UpdateAt", QString("%1%2%3:%4").arg(time.toString("yyyy-MM-ddThh:mm:ss.zzz000000")).arg(negative ? '-' : '+').arg(offset / 60, 2, 10, QChar('0')).arg(offset % 60, 2, 10, QChar('0'))); doc.setObject(jsonObj); m_displayInter->SetConfig(doc.toJson(QJsonDocument::Compact)); clearBackup(); } } void DisplayWorker::setMonitorResolution(Monitor *mon, const int mode) { m_model->setmodeChanging(true); if (WQt::Utils::isTreeland()) { auto *opCfg = m_reg->outputManager()->createConfiguration(); auto res = mon->getResolutionById(mode); if (!res.has_value()) return; for (auto it(m_wl_monitors.cbegin()); it != m_wl_monitors.cend(); ++it) { if (!it.key()->enable()) { opCfg->disableHead(it.value()); continue; } auto *cfgHead = opCfg->enableHead(it.value()); if (it.key() == mon) { for (auto *mode: it.value()->property(WQt::OutputHead::Modes).value>()) { if (mode->size().width() == res.value().width() && mode->size().height() == res.value().height() && qFuzzyCompare(mode->refreshRate()*0.001, res.value().rate())) { cfgHead->setMode(mode); break; } } } } opCfg->apply(); } else { MonitorDBusProxy *inter = m_monitors.value(mon); if (inter) inter->SetMode(static_cast(mode)).waitForFinished(); } } void DisplayWorker::setMonitorBrightness(Monitor *mon, const double brightness) { if (WQt::Utils::isTreeland()) { #if GAMMA_SUPPORT auto *gammaEffect = m_wl_gammaEffects->value(mon); auto *gammaConfig = m_wl_gammaConfig->value(mon); gammaConfig->brightness = brightness; gammaEffect->setConfiguration(*gammaConfig); #else for (auto it(m_control_monitors.cbegin()); it != m_control_monitors.cend(); ++it) { if (it.key() == mon) { m_reg->treeLandOutputManager()->setBrightness(it.value(), brightness * 100.0); break; } } #endif } else { m_displayInter->SetAndSaveBrightness(mon->name(), std::max(brightness, m_model->minimumBrightnessScale())).waitForFinished(); } } void DisplayWorker::setMonitorPosition(QHash> monitorPosition) { if (WQt::Utils::isTreeland()) { auto *opCfg = m_reg->outputManager()->createConfiguration(); for (auto it(monitorPosition.cbegin()); it != monitorPosition.cend(); ++it) { auto *head = m_wl_monitors.value(it.key()); Q_ASSERT(head); if (!it.key()->enable()) { opCfg->disableHead(head); continue; } auto *cfgHead = opCfg->enableHead(head); cfgHead->setPosition({ it.value().first, it.value().second }); } opCfg->apply(); } else { for (auto it(monitorPosition.cbegin()); it != monitorPosition.cend(); ++it) { MonitorDBusProxy *inter = m_monitors.value(it.key()); Q_ASSERT(inter); inter->SetPosition(static_cast(it.value().first), static_cast(it.value().second)).waitForFinished(); } applyChanges(); } } void DisplayWorker::setUiScale(const double value) { qCDebug(DdcDisplayWorker) << "set display scale:" << value; double rv = value; if (rv < 0) rv = m_model->uiScale(); for (auto &mm : m_model->monitorList()) { mm->setScale(-1); } if (WQt::Utils::isTreeland()) { auto *opCfg = m_reg->outputManager()->createConfiguration(); for (auto it(m_wl_monitors.cbegin()); it != m_wl_monitors.cend(); ++it) { if (!it.key()->enable()) { opCfg->disableHead(it.value()); continue; } auto *cfgHead = opCfg->enableHead(it.value()); cfgHead->setScale(rv); } opCfg->apply(); connect(opCfg, &WQt::OutputConfiguration::succeeded, this, [this, rv]() { m_model->setUIScale(rv); }); } else { QDBusPendingCall call = m_displayInter->SetScaleFactor(rv); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); watcher->waitForFinished(); if (!watcher->isError()) { m_model->setUIScale(rv); } watcher->deleteLater(); } } void DisplayWorker::setIndividualScaling(Monitor *m, const double scaling) { if (m && scaling >= 1.0) { m->setScale(scaling); } else { return; } if (WQt::Utils::isTreeland()) { auto *opCfg = m_reg->outputManager()->createConfiguration(); for (auto it(m_wl_monitors.cbegin()); it != m_wl_monitors.cend(); ++it) { if (!it.key()->enable()) { opCfg->disableHead(it.value()); continue; } auto *cfgHead = opCfg->enableHead(it.value()); if (it.key() == m) { cfgHead->setScale(scaling); } } opCfg->apply(); } else { QMap scalemap; for (Monitor *m : m_model->monitorList()) { scalemap[m->name()] = m_model->monitorScale(m); } m_displayInter->SetScreenScaleFactors(scalemap); } } void DisplayWorker::monitorAdded(const QString &path) { MonitorDBusProxy *inter = new MonitorDBusProxy(path, this); Monitor *mon = new Monitor(this); connect(inter, &MonitorDBusProxy::XChanged, mon, &Monitor::setX); connect(inter, &MonitorDBusProxy::YChanged, mon, &Monitor::setY); connect(inter, &MonitorDBusProxy::WidthChanged, mon, &Monitor::setW); connect(inter, &MonitorDBusProxy::HeightChanged, mon, &Monitor::setH); connect(inter, &MonitorDBusProxy::MmWidthChanged, mon, &Monitor::setMmWidth); connect(inter, &MonitorDBusProxy::MmHeightChanged, mon, &Monitor::setMmHeight); connect(inter, &MonitorDBusProxy::RotationChanged, mon, &Monitor::setRotate); connect(inter, &MonitorDBusProxy::NameChanged, mon, &Monitor::setName); connect(inter, &MonitorDBusProxy::CurrentModeChanged, mon, &Monitor::setCurrentMode); connect(inter, &MonitorDBusProxy::BestModeChanged, mon, &Monitor::setBestMode); connect(inter, &MonitorDBusProxy::CurrentModeChanged, this, [=](Resolution value) { if (value.id() == 0) { return; } auto maxWScale = value.width() / 1024.0; auto maxHScale = value.height() / 768.0; auto maxScale = maxWScale < maxHScale ? maxWScale : maxHScale; if ((m_model->uiScale() - maxScale) > 0.01 && maxScale >= 1.0) { m_currentScale = 1.0; for (int idx = 0; idx * 0.25 + 1.0 <= maxScale; ++idx) { m_currentScale = idx * 0.25 + 1.0; } m_updateScale = true; } }); connect(inter, &MonitorDBusProxy::ModesChanged, mon, &Monitor::setModeList); connect(inter, &MonitorDBusProxy::RotationsChanged, mon, &Monitor::setRotateList); connect(inter, &MonitorDBusProxy::EnabledChanged, mon, &Monitor::setMonitorEnable); connect(inter, &MonitorDBusProxy::CurrentRotateModeChanged, mon, &Monitor::setCurrentRotateMode); connect(inter, &MonitorDBusProxy::AvailableFillModesChanged, mon, &Monitor::setAvailableFillModes); connect(inter, &MonitorDBusProxy::CurrentFillModeChanged, mon, &Monitor::setCurrentFillMode); connect(m_displayInter, static_cast(&DisplayDBusProxy::PrimaryChanged), mon, &Monitor::setPrimary); connect(this, &DisplayWorker::requestUpdateModeList, this, [=] { mon->setModeList(inter->modes()); }); // NOTE: DO NOT using async dbus call. because we need to have a unique name to distinguish each monitor mon->setName(inter->name()); mon->setManufacturer(inter->manufacturer()); mon->setModel(inter->model()); QDBusReply reply = m_displayInter->CanSetBrightnessSync(inter->name()); mon->setCanBrightness(reply.value()); mon->setMonitorEnable(inter->enabled()); mon->setCurrentRotateMode(inter->currentRotateMode()); mon->setMonitorEnable(inter->enabled()); mon->setCurrentFillMode(inter->currentFillMode()); mon->setAvailableFillModes(inter->availableFillModes()); mon->setPath(path); mon->setX(inter->x()); mon->setY(inter->y()); mon->setW(inter->width()); mon->setH(inter->height()); mon->setRotate(inter->rotation()); mon->setCurrentMode(inter->currentMode()); mon->setBestMode(inter->bestMode()); mon->setModeList(inter->modes()); if (m_model->isRefreshRateEnable() == false) { for (auto resolutionModel : mon->modeList()) { if (qFuzzyCompare(resolutionModel.rate(), 0.0) == false) { m_model->setRefreshRateEnable(true); } } } mon->setRotateList(inter->rotations()); mon->setPrimary(m_displayInter->primary()); mon->setMmWidth(inter->mmWidth()); mon->setMmHeight(inter->mmHeight()); if (!m_model->brightnessMap().isEmpty()) { mon->setBrightness(m_model->brightnessMap()[mon->name()]); } updateMonitorWallpaper(mon); m_model->monitorAdded(mon); m_monitors.insert(mon, inter); } void DisplayWorker::monitorRemoved(const QString &path) { Monitor *monitor = nullptr; for (auto it(m_monitors.cbegin()); it != m_monitors.cend(); ++it) { if (it.key()->path() == path) { monitor = it.key(); break; } } if (!monitor) return; m_model->monitorRemoved(monitor); m_monitors[monitor]->deleteLater(); m_monitors.remove(monitor); monitor->deleteLater(); } static inline Resolution createResolutionFromMode(WQt::OutputMode *mode) { static int idcount = 0; Resolution res; res.m_id = ++idcount; res.m_width = mode->size().width(); res.m_height = mode->size().height(); res.m_rate = mode->refreshRate() * 0.001; return res; } void DisplayWorker::wlMonitorAdded(WQt::OutputHead *head) { Monitor *mon = new Monitor(this); connect(head, &WQt::OutputHead::finished, this, [head, this]() { wlMonitorRemoved(head); }); connect(head, &WQt::OutputHead::changed, mon, [mon, head](WQt::OutputHead::Property type) { switch (type) { case WQt::OutputHead::Name: mon->setName(head->property(WQt::OutputHead::Name).toString()); break; case WQt::OutputHead::PhysicalSize: { auto physicalSize = head->property(WQt::OutputHead::PhysicalSize).toSize(); mon->setMmWidth(physicalSize.width()); mon->setMmHeight(physicalSize.height()); break; } case WQt::OutputHead::Modes: { ResolutionList resolutionList; for (auto *mode: head->property(WQt::OutputHead::Modes).value>()) { Resolution res = createResolutionFromMode(mode); resolutionList << res; if (mode->isPreferred()) { mon->setBestMode(res); } } mon->setModeList(resolutionList); break; } case WQt::OutputHead::CurrentMode: { Resolution currentRes = createResolutionFromMode(head->property(WQt::OutputHead::CurrentMode).value()); mon->setCurrentMode(currentRes); mon->setW(currentRes.width()); mon->setH(currentRes.height()); break; } case WQt::OutputHead::Position: mon->setX(head->property(WQt::OutputHead::Position).toPoint().x()); mon->setY(head->property(WQt::OutputHead::Position).toPoint().y()); break; case WQt::OutputHead::Transform: mon->setRotate(wlRotate2dcc(head->property(WQt::OutputHead::Transform).toInt())); break; case WQt::OutputHead::Scale: mon->setScale(head->property(WQt::OutputHead::Scale).toFloat()); break; case WQt::OutputHead::Make: mon->setManufacturer(head->property(WQt::OutputHead::Make).toString()); break; case WQt::OutputHead::Model: mon->setModel(head->property(WQt::OutputHead::Model).toString()); break; case WQt::OutputHead::Enabled: case WQt::OutputHead::Description: case WQt::OutputHead::SerialNumber: // Not handle default: break; } }); // TODO: where to get UI Scale for model m_model->setUIScale(head->property(WQt::OutputHead::Scale).toFloat()); mon->setScale(head->property(WQt::OutputHead::Scale).toFloat()); // NOTE: we need to have a unique name to distinguish each monitor mon->setName(head->property(WQt::OutputHead::Name).toString()); mon->setManufacturer(head->property(WQt::OutputHead::Make).toString()); mon->setModel(head->property(WQt::OutputHead::Model).toString()); mon->setMonitorEnable(head->property(WQt::OutputHead::Enabled).toBool()); mon->setCanBrightness(true); mon->setX(head->property(WQt::OutputHead::Position).toPoint().x()); mon->setY(head->property(WQt::OutputHead::Position).toPoint().y()); mon->setRotateList({1, 2, 4, 8}); mon->setRotate(wlRotate2dcc(head->property(WQt::OutputHead::Transform).toInt())); ResolutionList resolutionList; for (auto *mode: head->property(WQt::OutputHead::Modes).value>()) { Resolution res = createResolutionFromMode(mode); resolutionList << res; if (mode->isPreferred()) { mon->setBestMode(res); } } mon->setModeList(resolutionList); Resolution currentRes = createResolutionFromMode(head->property(WQt::OutputHead::CurrentMode).value()); mon->setCurrentMode(currentRes); mon->setW(currentRes.width()); mon->setH(currentRes.height()); if (m_model->isRefreshRateEnable() == false) { for (auto resolutionModel : mon->modeList()) { if (qFuzzyCompare(resolutionModel.rate(), 0.0) == false) { m_model->setRefreshRateEnable(true); } } } mon->setPrimary(m_reg->treeLandOutputManager()->mPrimaryOutput); auto physicalSize = head->property(WQt::OutputHead::PhysicalSize).toSize(); mon->setMmWidth(physicalSize.width()); mon->setMmHeight(physicalSize.height()); m_model->monitorAdded(mon); m_wl_monitors.insert(mon, head); #if GAMMA_SUPPORT auto *gammaMgr = m_reg->gammaControlManager(); auto *gammaEffect = new DFL::GammaEffects(gammaMgr->getGammaControl(op->get())); auto *effectsConfig = new DFL::GammaEffectsConfig; effectsConfig->mode = 0x8EC945; effectsConfig->gamma = 0.5; effectsConfig->brightness = 0.3; effectsConfig->minTemp = 4000; effectsConfig->maxTemp = 6500; effectsConfig->temperature = 6500; effectsConfig->latitude = 0; // How to get effectsConfig->longitude = 0; effectsConfig->sunrise = QTime( 6, 30, 0 ); effectsConfig->sunset = QTime( 18, 30, 0 ); effectsConfig->whitepoint = { 0, 0, 0 }; // gammaEffect->setConfiguration(config); m_wl_gammaEffects->insert(mon, gammaEffect); m_wl_gammaConfig->insert(mon, effectsConfig); #endif } void DisplayWorker::wlMonitorRemoved(WQt::OutputHead *head) { Monitor *monitor = nullptr; for (auto it(m_wl_monitors.cbegin()); it != m_wl_monitors.cend(); ++it) { if (it.value() == head) { monitor = it.key(); break; } } if (!monitor) return; m_model->monitorRemoved(monitor); #if GAMMA_SUPPORT //delete m_wl_gammaConfig[monitor]; //delete m_wl_gammaEffects[monitor]; #endif head->deleteLater(); m_wl_monitors.remove(monitor); if (m_control_monitors.contains(monitor)) { m_reg->treeLandOutputManager()->destroyColorControl(m_control_monitors.value(monitor)); m_control_monitors.remove(monitor); } monitor->deleteLater(); } void DisplayWorker::wlOutputAdded(WQt::Output *output) { connect(output, &WQt::Output::done, this, &DisplayWorker::updateControl); } void DisplayWorker::wlOutputRemoved(WQt::Output *output) { Q_UNUSED(output); // TODO: } void DisplayWorker::updateControl() { for (auto output : m_reg->waylandOutputs()) { if (output->isReady()) { for (auto it(m_wl_monitors.cbegin()); it != m_wl_monitors.cend(); ++it) { if (it.key()->name() == output->name()) { if (!m_control_monitors.contains(it.key())) { auto control = m_reg->treeLandOutputManager()->getColorControl(output->get()); m_control_monitors.insert(it.key(), control); } break; } } } } } void DisplayWorker::setAmbientLightAdjustBrightness(bool able) { m_displayInter->setAmbientLightAdjustBrightness(able); } void DisplayWorker::setTouchScreenAssociation(const QString &monitor, const QString &touchscreenUUID) { m_displayInter->AssociateTouch(monitor, touchscreenUUID); } void DisplayWorker::setMonitorResolutionBySize(Monitor *mon, const int width, const int height) { m_model->setmodeChanging(true); if (WQt::Utils::isTreeland()) { auto *opCfg = m_reg->outputManager()->createConfiguration(); for (auto it(m_wl_monitors.cbegin()); it != m_wl_monitors.cend(); ++it) { if (!it.key()->enable()) { opCfg->disableHead(it.value()); continue; } auto *cfgHead = opCfg->enableHead(it.value()); if (it.key() == mon) cfgHead->setCustomMode({width, height}, mon->currentMode().rate()); } opCfg->apply(); } else { MonitorDBusProxy *inter = m_monitors.value(mon); Q_ASSERT(inter); QDBusPendingCall call = inter->SetModeBySize(static_cast(width), static_cast(height)); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { qCDebug(DdcDisplayWorker) << call.error().message(); } watcher->deleteLater(); }); watcher->waitForFinished(); } } ================================================ FILE: src/plugin-display/operation/private/displayworker.h ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef DISPLAYWORKER_H #define DISPLAYWORKER_H #include "Registry.h" #include "displaydbusproxy.h" #include "monitor.h" #include #include #include #include #define GAMMA_SUPPORT false /* * Disable gamma support for treeland now * We can't keep GammaTable when dde-control-center close * We need write a daemon in future */ DCORE_BEGIN_NAMESPACE class DConfig; DCORE_END_NAMESPACE namespace WQt { class Output; class Registry; class OutputHead; } struct treeland_output_color_control_v1; namespace dccV25 { class DisplayModel; class DisplayWorker : public QObject { Q_OBJECT public: explicit DisplayWorker(DisplayModel *model, QObject *parent = nullptr, bool isSync = false); ~DisplayWorker() override; void active(); public Q_SLOTS: void saveChanges(); void switchMode(const int mode, const QString &name); void setPrimary(const QString &name); void setMonitorEnable(Monitor *monitor, const bool enable); void applyChanges(); void setColorTemperatureEnabled(bool enabled); void setColorTemperature(int value); void SetMethodAdjustCCT(int mode); void setCustomColorTempTimePeriod(const QString &timePeriod); #ifndef DCC_DISABLE_ROTATE void setMonitorRotate(Monitor *mon, const quint16 rotate); #endif void setMonitorResolution(Monitor *mon, const int mode); void setMonitorBrightness(Monitor *mon, const double brightness); void setMonitorPosition(QHash> monitorPosition); void setUiScale(const double value); void setIndividualScaling(Monitor *m, const double scaling); void setTouchScreenAssociation(const QString &monitor, const QString &touchscreenUUID); void setMonitorResolutionBySize(Monitor *mon, const int width, const int height); void setAmbientLightAdjustBrightness(bool); void setCurrentFillMode(Monitor *mon, const QString fillMode); void backupConfig(); void clearBackup(); void resetBackup(); private Q_SLOTS: void onMonitorListChanged(const QList &mons); void onMonitorsBrightnessChanged(const BrightnessMap &brightness); void onGetScaleFinished(QDBusPendingCallWatcher *w); void onGetScreenScalesFinished(QDBusPendingCallWatcher *w); // for wlroots-based compositors void onInterfaceRegistered(WQt::Registry::Interface interface); void onWlOutputManagerDone(); void onWlMonitorListChanged(); void updateWallpaper(); void updateMonitorWallpaper(Monitor *mon); void onBrightnessChanged(const treeland_output_color_control_v1 *colorControl, double brightness); private: void monitorAdded(const QString &path); void monitorRemoved(const QString &path); // for wlroots-based compositors void wlMonitorAdded(WQt::OutputHead *head); void wlMonitorRemoved(WQt::OutputHead *head); void wlOutputAdded(WQt::Output *output); void wlOutputRemoved(WQt::Output *output); void updateControl(); Q_SIGNALS: void requestUpdateModeList(); private: DisplayModel *m_model; DisplayDBusProxy *m_displayInter; QMap m_monitors; // for wlroots-based compositors WQt::Registry *m_reg { nullptr }; QMap m_wl_monitors; QMap m_control_monitors; #if GAMMA_SUPPORT QMap *m_wl_gammaEffects; QMap *m_wl_gammaConfig; #endif double m_currentScale; bool m_updateScale; QTimer *m_timer; DTK_CORE_NAMESPACE::DConfig *m_dconfig; QString m_displayConfig; }; } #endif // DISPLAYWORKER_H ================================================ FILE: src/plugin-display/operation/private/monitor.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "monitor.h" #include #include using namespace dccV25; const double DoubleZero = 0.000001; Monitor::Monitor(QObject *parent) : QObject(parent) , m_x(0) , m_y(0) , m_w(0) , m_h(0) , m_mmWidth(0) , m_mmHeight(0) , m_scale(-1.0) , m_rotate(0) , m_brightness(1.0) , m_enable(false) , m_canBrightness(true) , m_screenSensingMode(RotateMode::Normal) { } void Monitor::setX(const int x) { if (m_x == x) return; m_x = x; Q_EMIT xChanged(m_x); Q_EMIT geometryChanged(); } void Monitor::setY(const int y) { if (m_y == y) return; m_y = y; Q_EMIT yChanged(m_y); Q_EMIT geometryChanged(); } void Monitor::setW(const int w) { if (m_w == w) return; m_w = w; Q_EMIT wChanged(m_w); } void Monitor::setH(const int h) { if (m_h == h) return; m_h = h; Q_EMIT hChanged(m_h); } void Monitor::setMmWidth(const uint mmWidth) { m_mmWidth = mmWidth; } void Monitor::setMmHeight(const uint mmHeight) { m_mmHeight = mmHeight; } void Monitor::setScale(const double scale) { if (fabs(m_scale - scale) < DoubleZero) return; m_scale = scale; Q_EMIT scaleChanged(m_scale); } void Monitor::setPrimary(const QString &primaryName) { m_primary = primaryName; } void Monitor::setRotate(const quint16 rotate) { if (m_rotate == rotate) return; m_rotate = rotate; Q_EMIT rotateChanged(m_rotate); } void Monitor::setBrightness(const double brightness) { if (fabs(m_brightness - brightness) < DoubleZero) return; m_brightness = brightness; Q_EMIT brightnessChanged(m_brightness); } void Monitor::setName(const QString &name) { m_name = name; } void Monitor::setManufacturer(const QString &manufacturer) { m_manufacturer = manufacturer; } void Monitor::setModel(const QString &model) { m_model = model; } void Monitor::setCanBrightness(bool canBrightness) { m_canBrightness = canBrightness; } void Monitor::setPath(const QString &path) { m_path = path; } void Monitor::setRotateList(const QList &rotateList) { m_rotateList = rotateList; } void Monitor::setCurrentMode(const Resolution &resolution) { m_currentMode = resolution; Q_EMIT currentModeChanged(m_currentMode); } bool compareResolution(const Resolution &first, const Resolution &second) { long firstSum = long(first.width()) * first.height(); long secondSum = long(second.width()) * second.height(); if (firstSum > secondSum || (firstSum == secondSum && (first.rate() - second.rate()) > 0.000001)) { return true; } return false; } void Monitor::setModeList(const ResolutionList &modeList) { m_modeList.clear(); QList miniMode; miniMode << 1024 << 768; for (auto m : modeList) { if (m.width() >= miniMode.at(0) && m.height() >= miniMode.at(1)) { m_modeList.append(m); } } std::sort(m_modeList.begin(), m_modeList.end(), compareResolution); Q_EMIT modelListChanged(m_modeList); } void Monitor::setAvailableFillModes(const QStringList &fillModeList) { if (m_fillModeList == fillModeList) return; m_fillModeList = fillModeList; Q_EMIT availableFillModesChanged(m_fillModeList); } void Monitor::setCurrentFillMode(const QString currentFillMode) { if (m_currentFillMode == currentFillMode) return; m_currentFillMode = currentFillMode; Q_EMIT currentFillModeChanged(currentFillMode); } void Monitor::setMonitorEnable(bool enable) { if (m_enable == enable) return; m_enable = enable; Q_EMIT enableChanged(enable); } void Monitor::setBestMode(const Resolution &mode) { if (m_bestMode == mode) return; m_bestMode = mode; Q_EMIT bestModeChanged(); } void Monitor::setCurrentRotateMode(const unsigned char mode) { RotateMode screenDate = static_cast(mode); if (screenDate == RotateMode::Gravity) Q_EMIT currentRotateModeChanged(); if (m_screenSensingMode != screenDate) { m_screenSensingMode = screenDate; } } bool Monitor::isSameResolution(const Resolution &r1, const Resolution &r2) { return r1.width() == r2.width() && r1.height() == r2.height(); } bool Monitor::isSameRatefresh(const Resolution &r1, const Resolution &r2) { return fabs(r1.rate() - r2.rate()) < 0.000001; } bool Monitor::hasResolution(const Resolution &r) { for (auto m : m_modeList) { if (isSameResolution(m, r)) { return true; } } return false; } bool Monitor::hasResolutionAndRate(const Resolution &r) { for (auto m : m_modeList) { if (fabs(m.rate() - r.rate()) < 0.000001 && m.width() == r.width() && m.height() == r.height()) { return true; } } return false; } bool Monitor::hasRatefresh(const double r) { for (auto m : m_modeList) { if (fabs(m.rate() - r) < 0.000001) { return true; } } return false; } QScreen *Monitor::getQScreen() { auto screens = QGuiApplication::screens(); for(auto screen : screens) { //x11下,qt获取的名字和后端给的名字一致 wayland下,qt获取的序列号中包含名称 if(screen->name() == name() || screen->model().contains(name())) return screen; } return nullptr; } std::optional Monitor::getResolutionById(quint32 id) { for (auto res : m_modeList) { if (res.id() == id) return res; } return std::nullopt; } void Monitor::setWallpaper(const QString &wallpaper) { if (m_wallpaper == wallpaper) return; m_wallpaper = wallpaper; Q_EMIT wallpaperChanged(); } ================================================ FILE: src/plugin-display/operation/private/monitor.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef MONITOR_H #define MONITOR_H #include "monitordbusproxy.h" #include #include #include namespace dccV25 { class DisplayWorker; class TouchscreenWorker; class Monitor : public QObject { Q_OBJECT friend class DisplayWorker; friend class TouchscreenWorker; public: enum RotateMode { Normal, Gravity, Rotate }; public: explicit Monitor(QObject *parent = 0); inline int x() const { return m_x; } inline int y() const { return m_y; } inline int w() const { return m_w; } inline int h() const { return m_h; } inline int mmWidth() const { return m_mmWidth; } inline int mmHeight() const { return m_mmHeight; } inline double scale() const { return m_scale; } inline bool isPrimary() const { return m_primary == m_name; } inline quint16 rotate() const { return m_rotate; } inline double brightness() const { return m_brightness; } inline const QRect rect() const { return QRect(m_x, m_y, m_w, m_h); } inline const QString name() const { Q_ASSERT(!m_name.isEmpty()); return m_name; } inline const QString manufacturer() const { Q_ASSERT(!m_manufacturer.isEmpty()); return m_manufacturer; } inline const QString model() const { Q_ASSERT(!m_model.isEmpty()); return m_model; } inline bool canBrightness() const { return m_canBrightness; } inline const QString path() const { return m_path; } inline const Resolution currentMode() const { return m_currentMode; } inline const QList rotateList() const { return m_rotateList; } inline const QList modeList() const { return m_modeList; } inline bool enable() const { return m_enable; } inline QStringList availableFillModes() const { return m_fillModeList; } inline QString currentFillMode() const { return m_currentFillMode; } inline const Resolution bestMode() const { return m_bestMode; } inline RotateMode currentRotateMode() const { return m_screenSensingMode; } inline QString wallpaper() const { return m_wallpaper; } Q_SIGNALS: void geometryChanged() const; void xChanged(const int x) const; void yChanged(const int y) const; void wChanged(const int w) const; void hChanged(const int h) const; void scaleChanged(const double scale) const; void rotateChanged(const quint16 rotate) const; void brightnessChanged(const double brightness) const; void currentModeChanged(const Resolution &resolution) const; void modelListChanged(const QList &resolution) const; void enableChanged(bool enable) const; void bestModeChanged() const; void availableFillModesChanged(const QStringList &fillModeList); // TODO: 重力旋转 void currentRotateModeChanged() const; void currentFillModeChanged(QString currentFillMode) const; void wallpaperChanged() const; public: static bool isSameResolution(const Resolution &r1, const Resolution &r2); static bool isSameRatefresh(const Resolution &r1, const Resolution &r2); bool hasResolution(const Resolution &r); bool hasResolutionAndRate(const Resolution &r); bool hasRatefresh(const double r); QScreen *getQScreen(); private Q_SLOTS: void setX(const int x); void setY(const int y); void setW(const int w); void setH(const int h); void setMmWidth(const uint mmWidth); void setMmHeight(const uint mmHeight); void setScale(const double scale); void setPrimary(const QString &primaryName); void setRotate(const quint16 rotate); void setBrightness(const double brightness); void setName(const QString &name); void setManufacturer(const QString &manufacturer); void setModel(const QString &model); void setCanBrightness(bool canBrightness); void setPath(const QString &path); void setRotateList(const QList &rotateList); void setCurrentMode(const Resolution &resolution); void setModeList(const ResolutionList &modeList); void setMonitorEnable(bool enable); void setBestMode(const Resolution &mode); void setCurrentRotateMode(const unsigned char mode); void setAvailableFillModes(const QStringList &fillModeList); void setCurrentFillMode(const QString currentFillMode); std::optional getResolutionById(quint32 id); void setWallpaper(const QString &wallpaper); private: int m_x; int m_y; int m_w; int m_h; uint m_mmWidth; uint m_mmHeight; double m_scale; quint16 m_rotate; double m_brightness; QString m_name; QString m_manufacturer; QString m_model; QString m_path; QString m_primary; Resolution m_currentMode; QList m_rotateList; QList m_modeList; bool m_enable; bool m_canBrightness; Resolution m_bestMode; RotateMode m_screenSensingMode; QStringList m_fillModeList; QString m_currentFillMode; QString m_wallpaper; }; } #endif // MONITOR_H ================================================ FILE: src/plugin-display/operation/private/monitordbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "monitordbusproxy.h" #include #include #include #include #include #include const static QString MonitorService = "org.deepin.dde.Display1"; const static QString MonitorInterface = "org.deepin.dde.Display1.Monitor"; const static QString PropertiesInterface = "org.freedesktop.DBus.Properties"; const static QString PropertiesChanged = "PropertiesChanged"; DCORE_USE_NAMESPACE MonitorDBusProxy::MonitorDBusProxy(QString monitorPath, QObject *parent) : QObject(parent) , m_monitorUserPath(monitorPath) { registerResolutionMetaType(); registerReflectListMetaType(); registerRotationListMetaType(); registerResolutionListMetaType(); init(); } void MonitorDBusProxy::init() { m_dBusMonitorInter = new DDBusInterface(MonitorService, m_monitorUserPath, MonitorInterface, QDBusConnection::sessionBus(), this); m_dBusMonitorPropertiesInter = new DDBusInterface(MonitorService, m_monitorUserPath, PropertiesInterface, QDBusConnection::sessionBus(), this); QDBusConnection dbusConnection = m_dBusMonitorInter->connection(); dbusConnection.connect(MonitorService, m_monitorUserPath, PropertiesInterface, PropertiesChanged, this, SLOT(onPropertiesChanged(QDBusMessage))); } QStringList MonitorDBusProxy::availableFillModes() { return qvariant_cast(m_dBusMonitorInter->property("AvailableFillModes")); } Resolution MonitorDBusProxy::bestMode() { Resolution val; m_dBusMonitorPropertiesInter->call("Get", MonitorInterface, "BestMode").arguments().at(0).value().variant().value() >> val; return val; } bool MonitorDBusProxy::connected() { return qvariant_cast(m_dBusMonitorInter->property("Connected")); } QString MonitorDBusProxy::currentFillMode() { return qvariant_cast(m_dBusMonitorInter->property("CurrentFillMode")); } void MonitorDBusProxy::setCurrentFillMode(const QString &value) { m_dBusMonitorInter->setProperty("CurrentFillMode", QVariant::fromValue(value)); } Resolution MonitorDBusProxy::currentMode() { Resolution val; m_dBusMonitorPropertiesInter->call("Get", MonitorInterface, "CurrentMode").arguments().at(0).value().variant().value() >> val; return val; } uchar MonitorDBusProxy::currentRotateMode() { return qvariant_cast(m_dBusMonitorInter->property("CurrentRotateMode")); } bool MonitorDBusProxy::enabled() { return qvariant_cast(m_dBusMonitorInter->property("Enabled")); } ushort MonitorDBusProxy::height() { return qvariant_cast(m_dBusMonitorInter->property("Height")); } QString MonitorDBusProxy::manufacturer() { return qvariant_cast(m_dBusMonitorInter->property("Manufacturer")); } uint MonitorDBusProxy::mmHeight() { return qvariant_cast(m_dBusMonitorInter->property("MmHeight")); } uint MonitorDBusProxy::mmWidth() { return qvariant_cast(m_dBusMonitorInter->property("MmWidth")); } QString MonitorDBusProxy::model() { return qvariant_cast(m_dBusMonitorInter->property("Model")); } ResolutionList MonitorDBusProxy::modes() { ResolutionList val; m_dBusMonitorPropertiesInter->call("Get", MonitorInterface, "Modes").arguments().at(0).value().variant().value() >> val; return val; } QString MonitorDBusProxy::name() { return qvariant_cast(m_dBusMonitorInter->property("Name")); } ushort MonitorDBusProxy::reflect() { return qvariant_cast(m_dBusMonitorInter->property("Reflect")); } ReflectList MonitorDBusProxy::reflects() { return qvariant_cast(m_dBusMonitorPropertiesInter->call("Get", MonitorInterface, "Reflects").arguments().at(0).value().variant()); } double MonitorDBusProxy::refreshRate() { return qvariant_cast(m_dBusMonitorInter->property("RefreshRate")); } ushort MonitorDBusProxy::rotation() { return qvariant_cast(m_dBusMonitorInter->property("Rotation")); } RotationList MonitorDBusProxy::rotations() { return qvariant_cast(m_dBusMonitorPropertiesInter->call("Get", MonitorInterface, "Rotations").arguments().at(0).value().variant()); } ushort MonitorDBusProxy::width() { return qvariant_cast(m_dBusMonitorInter->property("Width")); } short MonitorDBusProxy::x() { return qvariant_cast(m_dBusMonitorInter->property("X")); } short MonitorDBusProxy::y() { return qvariant_cast(m_dBusMonitorInter->property("Y")); } QDBusPendingReply<> MonitorDBusProxy::Enable(bool in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusMonitorInter->asyncCallWithArgumentList(QStringLiteral("Enable"), argumentList); } QDBusPendingReply<> MonitorDBusProxy::SetMode(uint in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusMonitorInter->asyncCallWithArgumentList(QStringLiteral("SetMode"), argumentList); } QDBusPendingReply<> MonitorDBusProxy::SetModeBySize(ushort in0, ushort in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusMonitorInter->asyncCallWithArgumentList(QStringLiteral("SetModeBySize"), argumentList); } QDBusPendingReply<> MonitorDBusProxy::SetPosition(short in0, short in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusMonitorInter->asyncCallWithArgumentList(QStringLiteral("SetPosition"), argumentList); } QDBusPendingReply<> MonitorDBusProxy::SetReflect(ushort in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusMonitorInter->asyncCallWithArgumentList(QStringLiteral("SetReflect"), argumentList); } QDBusPendingReply<> MonitorDBusProxy::SetRotation(ushort in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusMonitorInter->asyncCallWithArgumentList(QStringLiteral("SetRotation"), argumentList); } void MonitorDBusProxy::onPropertiesChanged(const QDBusMessage &message) { QVariantMap changedProps = qdbus_cast(message.arguments().at(1).value()); for (QVariantMap::const_iterator it = changedProps.begin(); it != changedProps.end(); ++it) { if(it.key() =="CurrentMode") { emit CurrentModeChanged(qdbus_cast(changedProps.value(it.key()))); } else if(it.key() =="BestMode") { emit BestModeChanged(qdbus_cast(changedProps.value(it.key()))); } else if(it.key() =="Modes") { emit ModesChanged(qdbus_cast(changedProps.value(it.key()))); } } } ================================================ FILE: src/plugin-display/operation/private/monitordbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef MONITORDBUSPROXY_H #define MONITORDBUSPROXY_H #include "types/resolutionlist.h" #include "types/reflectlist.h" #include "types/rotationlist.h" #include "types/resolution.h" #include #include #include #include class QDBusMessage; class MonitorDBusProxy : public QObject { Q_OBJECT public: static inline const char *staticInterfaceName() { return "org.deepin.dde.Display1.Monitor"; } public: explicit MonitorDBusProxy(QString monitorPath, QObject *parent = nullptr); Q_PROPERTY(QStringList AvailableFillModes READ availableFillModes NOTIFY AvailableFillModesChanged) QStringList availableFillModes(); Q_PROPERTY(Resolution BestMode READ bestMode NOTIFY BestModeChanged) Resolution bestMode(); Q_PROPERTY(bool Connected READ connected NOTIFY ConnectedChanged) bool connected(); Q_PROPERTY(QString CurrentFillMode READ currentFillMode WRITE setCurrentFillMode NOTIFY CurrentFillModeChanged) QString currentFillMode(); void setCurrentFillMode(const QString &value); Q_PROPERTY(Resolution CurrentMode READ currentMode NOTIFY CurrentModeChanged) Resolution currentMode(); Q_PROPERTY(uchar CurrentRotateMode READ currentRotateMode NOTIFY CurrentRotateModeChanged) uchar currentRotateMode(); Q_PROPERTY(bool Enabled READ enabled NOTIFY EnabledChanged) bool enabled(); Q_PROPERTY(ushort Height READ height NOTIFY HeightChanged) ushort height(); Q_PROPERTY(QString Manufacturer READ manufacturer NOTIFY ManufacturerChanged) QString manufacturer(); Q_PROPERTY(uint MmHeight READ mmHeight NOTIFY MmHeightChanged) uint mmHeight(); Q_PROPERTY(uint MmWidth READ mmWidth NOTIFY MmWidthChanged) uint mmWidth(); Q_PROPERTY(QString Model READ model NOTIFY ModelChanged) QString model(); Q_PROPERTY(ResolutionList Modes READ modes NOTIFY ModesChanged) ResolutionList modes(); Q_PROPERTY(QString Name READ name NOTIFY NameChanged) QString name(); Q_PROPERTY(ushort Reflect READ reflect NOTIFY ReflectChanged) ushort reflect(); Q_PROPERTY(ReflectList Reflects READ reflects NOTIFY ReflectsChanged) ReflectList reflects(); Q_PROPERTY(double RefreshRate READ refreshRate NOTIFY RefreshRateChanged) double refreshRate(); Q_PROPERTY(ushort Rotation READ rotation NOTIFY RotationChanged) ushort rotation(); Q_PROPERTY(RotationList Rotations READ rotations NOTIFY RotationsChanged) RotationList rotations(); Q_PROPERTY(ushort Width READ width NOTIFY WidthChanged) ushort width(); Q_PROPERTY(short X READ x NOTIFY XChanged) short x(); Q_PROPERTY(short Y READ y NOTIFY YChanged) short y(); private: void init(); public Q_SLOTS: // METHODS QDBusPendingReply<> Enable(bool in0); QDBusPendingReply<> SetMode(uint in0); QDBusPendingReply<> SetModeBySize(ushort in0, ushort in1); QDBusPendingReply<> SetPosition(short in0, short in1); QDBusPendingReply<> SetReflect(ushort in0); QDBusPendingReply<> SetRotation(ushort in0); void onPropertiesChanged(const QDBusMessage &message); Q_SIGNALS: // SIGNALS // begin property changed signals void AvailableFillModesChanged(const QStringList & value) const; void BestModeChanged(Resolution value) const; void ConnectedChanged(bool value) const; void CurrentFillModeChanged(const QString & value) const; void CurrentModeChanged(Resolution value) const; void CurrentRotateModeChanged(uchar value) const; void EnabledChanged(bool value) const; void HeightChanged(ushort value) const; void ManufacturerChanged(const QString & value) const; void MmHeightChanged(uint value) const; void MmWidthChanged(uint value) const; void ModelChanged(const QString & value) const; void ModesChanged(ResolutionList value) const; void NameChanged(const QString & value) const; void ReflectChanged(ushort value) const; void ReflectsChanged(ReflectList value) const; void RefreshRateChanged(double value) const; void RotationChanged(ushort value) const; void RotationsChanged(RotationList value) const; void WidthChanged(ushort value) const; void XChanged(short value) const; void YChanged(short value) const; private: Dtk::Core::DDBusInterface *m_dBusMonitorInter; Dtk::Core::DDBusInterface *m_dBusMonitorPropertiesInter; QString m_monitorUserPath; }; #endif // MONITORDBUSPROXY_H ================================================ FILE: src/plugin-display/operation/private/types/brightnessmap.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "brightnessmap.h" void registerBrightnessMapMetaType() { qRegisterMetaType("BrightnessMap"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-display/operation/private/types/brightnessmap.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef BRIGHTNESSMAP_H #define BRIGHTNESSMAP_H #include #include typedef QMap BrightnessMap; void registerBrightnessMapMetaType(); #endif // BRIGHTNESSMAP_H ================================================ FILE: src/plugin-display/operation/private/types/reflectlist.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "reflectlist.h" void registerReflectListMetaType() { qRegisterMetaType("ReflectList"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-display/operation/private/types/reflectlist.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef REFLECTLIST_H #define REFLECTLIST_H #include #include typedef QList ReflectList; void registerReflectListMetaType(); #endif // REFLECTLIST_H ================================================ FILE: src/plugin-display/operation/private/types/resolution.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "resolution.h" #include void registerResolutionMetaType() { qRegisterMetaType("Resolution"); qDBusRegisterMetaType(); } QDebug operator<<(QDebug debug, const Resolution &resolution) { debug << QString("Resolution(%1, %2, %3, %4)").arg(resolution.m_id) .arg(resolution.m_width) .arg(resolution.m_height) .arg(resolution.m_rate); return debug; } Resolution::Resolution() : m_rate(0.0) { } bool Resolution::operator!=(const Resolution &other) const { return m_width != other.m_width || m_height != other.m_height || m_rate != other.m_rate; } bool Resolution::operator==(const Resolution &other) const { return !(other != *this); } QDBusArgument &operator<<(QDBusArgument &arg, const Resolution &value) { arg.beginStructure(); arg << value.m_id << value.m_width << value.m_height << value.m_rate; arg.endStructure(); return arg; } const QDBusArgument &operator>>(const QDBusArgument &arg, Resolution &value) { arg.beginStructure(); arg >> value.m_id >> value.m_width >> value.m_height >> value.m_rate; arg.endStructure(); return arg; } ================================================ FILE: src/plugin-display/operation/private/types/resolution.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef RESOLUTION_H #define RESOLUTION_H #include class Resolution { public: friend QDebug operator<<(QDebug debug, const Resolution &resolution); friend QDBusArgument &operator<<(QDBusArgument &arg, const Resolution &value); friend const QDBusArgument &operator>>(const QDBusArgument &arg, Resolution &value); explicit Resolution(); bool operator!=(const Resolution &other) const; bool operator==(const Resolution &other) const; quint32 id() const { return m_id; } quint16 width() const { return m_width; } quint16 height() const { return m_height; } double rate() const { return m_rate; } public: quint32 m_id; quint16 m_width; quint16 m_height; double m_rate; }; Q_DECLARE_METATYPE(Resolution) void registerResolutionMetaType(); #endif // RESOLUTION_H ================================================ FILE: src/plugin-display/operation/private/types/resolutionlist.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "resolutionlist.h" void registerResolutionListMetaType() { registerResolutionMetaType(); qRegisterMetaType("ResolutionList"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-display/operation/private/types/resolutionlist.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef RESOLUTIONLIST_H #define RESOLUTIONLIST_H #include "resolution.h" #include typedef QList ResolutionList; void registerResolutionListMetaType(); #endif // RESOLUTIONLIST_H ================================================ FILE: src/plugin-display/operation/private/types/rotationlist.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "rotationlist.h" void registerRotationListMetaType() { qRegisterMetaType("RotationList"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-display/operation/private/types/rotationlist.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef ROTATIONLIST_H #define ROTATIONLIST_H #include #include typedef QList RotationList; void registerRotationListMetaType(); #endif // ROTATIONLIST_H ================================================ FILE: src/plugin-display/operation/private/types/screenrect.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "screenrect.h" ScreenRect::ScreenRect() : x(0), y(0), w(0), h(0) { } QDebug operator<<(QDebug debug, const ScreenRect &rect) { debug << QString("ScreenRect(%1, %2, %3, %4)").arg(rect.x) .arg(rect.y) .arg(rect.w) .arg(rect.h); return debug; } ScreenRect::operator QRect() const { return QRect(x, y, w, h); } QDBusArgument &operator<<(QDBusArgument &arg, const ScreenRect &rect) { arg.beginStructure(); arg << rect.x << rect.y << rect.w << rect.h; arg.endStructure(); return arg; } const QDBusArgument &operator>>(const QDBusArgument &arg, ScreenRect &rect) { arg.beginStructure(); arg >> rect.x >> rect.y >> rect.w >> rect.h; arg.endStructure(); return arg; } void registerScreenRectMetaType() { qRegisterMetaType("ScreenRect"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-display/operation/private/types/screenrect.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef SCREENRECT_H #define SCREENRECT_H #include #include #include #include struct ScreenRect { public: ScreenRect(); operator QRect() const; friend QDebug operator<<(QDebug debug, const ScreenRect &rect); friend const QDBusArgument &operator>>(const QDBusArgument &arg, ScreenRect &rect); friend QDBusArgument &operator<<(QDBusArgument &arg, const ScreenRect &rect); private: qint16 x; qint16 y; quint16 w; quint16 h; }; Q_DECLARE_METATYPE(ScreenRect) void registerScreenRectMetaType(); #endif // SCREENRECT_H ================================================ FILE: src/plugin-display/operation/private/types/touchscreeninfolist.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "touchscreeninfolist.h" QDBusArgument &operator<<(QDBusArgument &arg, const TouchscreenInfo &info) { arg.beginStructure(); arg << info.id << info.name << info.deviceNode << info.serialNumber; arg.endStructure(); return arg; } const QDBusArgument &operator>>(const QDBusArgument &arg, TouchscreenInfo &info) { arg.beginStructure(); arg >> info.id >> info.name >> info.deviceNode >> info.serialNumber; arg.endStructure(); return arg; } bool TouchscreenInfo::operator==(const TouchscreenInfo &info) { return id == info.id && name == info.name && deviceNode == info.deviceNode && serialNumber == info.serialNumber; } void registerTouchscreenInfoMetaType() { qRegisterMetaType("TouchscreenInfo"); qDBusRegisterMetaType(); } void registerTouchscreenInfoListMetaType() { registerTouchscreenInfoMetaType(); qRegisterMetaType("TouchscreenInfoList"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-display/operation/private/types/touchscreeninfolist.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef TOUCHSCREENINFOLIST_H #define TOUCHSCREENINFOLIST_H #include #include #include struct TouchscreenInfo { qint32 id; QString name; QString deviceNode; QString serialNumber; bool operator ==(const TouchscreenInfo& info); }; typedef QList TouchscreenInfoList; Q_DECLARE_METATYPE(TouchscreenInfo) Q_DECLARE_METATYPE(TouchscreenInfoList) QDBusArgument &operator<<(QDBusArgument &arg, const TouchscreenInfo &info); const QDBusArgument &operator>>(const QDBusArgument &arg, TouchscreenInfo &info); void registerTouchscreenInfoListMetaType(); #endif // !TOUCHSCREENINFOLIST_H ================================================ FILE: src/plugin-display/operation/private/types/touchscreeninfolist_v2.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "touchscreeninfolist_v2.h" QDBusArgument &operator<<(QDBusArgument &arg, const TouchscreenInfo_V2 &info) { arg.beginStructure(); arg << info.id << info.name << info.deviceNode << info.serialNumber << info.UUID; arg.endStructure(); return arg; } const QDBusArgument &operator>>(const QDBusArgument &arg, TouchscreenInfo_V2 &info) { arg.beginStructure(); arg >> info.id >> info.name >> info.deviceNode >> info.serialNumber >> info.UUID; arg.endStructure(); return arg; } bool operator==(const TouchscreenInfo_V2 &info1, const TouchscreenInfo_V2 &info2) { return info1.id == info2.id && info1.name == info2.name && info1.deviceNode == info2.deviceNode && info1.serialNumber == info2.serialNumber && info1.UUID == info2.UUID; } void registerTouchscreenInfoV2MetaType() { qRegisterMetaType("TouchscreenInfo_V2"); qDBusRegisterMetaType(); } void registerTouchscreenInfoList_V2MetaType() { registerTouchscreenInfoV2MetaType(); qRegisterMetaType("TouchscreenInfoList_V2"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-display/operation/private/types/touchscreeninfolist_v2.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef TOUCHSCREENINFOLISTV2_H #define TOUCHSCREENINFOLISTV2_H #include #include #include struct TouchscreenInfo_V2 { qint32 id; QString name; QString deviceNode; QString serialNumber; QString UUID; }; bool operator==(const TouchscreenInfo_V2 &info1, const TouchscreenInfo_V2 &info2); typedef QList TouchscreenInfoList_V2; Q_DECLARE_METATYPE(TouchscreenInfo_V2) Q_DECLARE_METATYPE(TouchscreenInfoList_V2) QDBusArgument &operator<<(QDBusArgument &arg, const TouchscreenInfo_V2 &info); const QDBusArgument &operator>>(const QDBusArgument &arg, TouchscreenInfo_V2 &info); void registerTouchscreenInfoList_V2MetaType(); #endif // !TOUCHSCREENINFOLISTV2_H ================================================ FILE: src/plugin-display/operation/private/types/touchscreenmap.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "touchscreenmap.h" void registerTouchscreenMapMetaType() { qRegisterMetaType("TouchscreenMap"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-display/operation/private/types/touchscreenmap.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef TOUCHSCREENMAP_H #define TOUCHSCREENMAP_H #include #include typedef QMap TouchscreenMap; void registerTouchscreenMapMetaType(); #endif // TOUCHSCREENMAP_H ================================================ FILE: src/plugin-display/operation/qrc/display.qrc ================================================ icons/dcc_nav_display_42px.svg icons/dcc_nav_display_84px.svg actions/dcc_break_32px.svg actions/dcc_brightnesslow_32px.svg actions/dcc_brightnesshigh_32px.svg icons/dark/icons/dark/Center.svg icons/dark/icons/dark/Fit.svg icons/dark/icons/dark/Stretch.svg icons/dark/icons/white/Center.svg icons/dark/icons/white/Fit.svg icons/dark/icons/white/Stretch.svg icons/dark/icons/hover/Center.svg icons/dark/icons/hover/Fit.svg icons/dark/icons/hover/Stretch.svg icons/light/icon/black/Center.svg icons/light/icon/black/Fit.svg icons/light/icon/black/Stretch.svg icons/light/icon/light/Center.svg icons/light/icon/light/Fit.svg icons/light/icon/light/Stretch.svg icons/light/icon/white/Center.svg icons/light/icon/white/Fit.svg icons/light/icon/white/Stretch.svg icons/light/icon/hover/Center.svg icons/light/icon/hover/Fit.svg icons/light/icon/hover/Stretch.svg icons/dark/icons/dark/Default.svg icons/dark/icons/hover/Default.svg icons/dark/icons/white/Default.svg icons/light/icon/black/Default.svg icons/light/icon/hover/Default.svg icons/light/icon/light/Default.svg icons/light/icon/white/Default.svg built-in-icons/dcc_display_bottom.dci built-in-icons/dcc_display_left.dci built-in-icons/dcc_display_right.dci built-in-icons/dcc_display_top.dci ================================================ FILE: src/plugin-display/qml/Display.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { name: "display" parentName: "system" displayName: qsTr("Display") description: qsTr("Brightness,resolution,scaling") icon: "display" weight: 10 } ================================================ FILE: src/plugin-display/qml/DisplayMain.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 DccObject { id: root property var screen: dccData.virtualScreens[0] property var activeDialogs: [] property var scaleModelConst: [{ "text": qsTr("100%"), "value": 1.0 }, { "text": qsTr("125%"), "value": 1.25 }, { "text": qsTr("150%"), "value": 1.50 }, { "text": qsTr("175%"), "value": 1.75 }, { "text": qsTr("200%"), "value": 2.0 }, { "text": qsTr("225%"), "value": 2.25 }, { "text": qsTr("250%"), "value": 2.50 }, { "text": qsTr("275%"), "value": 2.75 }, { "text": qsTr("300%"), "value": 3.0 }] function getResolutionModel(resolutionList, bestResolution) { var resolutionModel = [] for (let resolution of resolutionList) { if (resolution.width === bestResolution.width && resolution.height === bestResolution.height) { resolutionModel.unshift({ "text": qsTr("%1x%2 (Recommended)").arg(resolution.width).arg(resolution.height), "value": resolution }) } else { resolutionModel.push({ "text": qsTr("%1x%2").arg(resolution.width).arg(resolution.height), "value": resolution }) } } return resolutionModel } function getRateModel(rateList, bestRate) { var rateModel = [] for (let rate of rateList) { if (rate === bestRate) { rateModel.push({ "text": qsTr("%1Hz (Recommended)").arg((Math.round(rate * 100) / 100)), "value": rate }) } else { rateModel.push({ "text": qsTr("%1Hz").arg((Math.round(rate * 100) / 100)), "value": rate }) } } return rateModel } function getScaleModel(maxScale, scale) { var scaleModel = [] for (let scaleItem of scaleModelConst) { if (scaleItem.value <= maxScale) { scaleModel.push(scaleItem) } } return scaleModel } function indexOfScale(model, scale) { for (var i = 0; i < model.length; i++) { let v = model[i] if (v.value === scale) { return i } } return model.length - 1 } function getQtScreen(screen) { for (var s of Qt.application.screens) { if (s.virtualX === screen.x && s.virtualY === screen.y && (Math.abs(s.width * s.devicePixelRatio - screen.width) < 1) && (Math.abs(s.height * s.devicePixelRatio - screen.height) < 1)) { return s } } return null } function getControlCenterScreen() { var mainWindow = DccApp.mainWindow() if (mainWindow && mainWindow.screen) { return mainWindow.screen } return getQtScreen(dccData.primaryScreen) } function closeInvalidDialogs() { var validScreens = dccData.virtualScreens var validDialogs = [] for (var i = 0; i < activeDialogs.length; i++) { var dialog = activeDialogs[i] var screenExists = false for (var j = 0; j < validScreens.length; j++) { if (dialog.screen === validScreens[j]) { screenExists = true break } } if (screenExists) { validDialogs.push(dialog) } else { // Ensure save is false so that onClosing will reset the settings dialog.save = false dialog.close() } } activeDialogs = validDialogs } Connections { target: dccData function onVirtualScreensChanged() { if (!dccData.virtualScreens.includes(screen)) { screen = dccData.virtualScreens[0] } closeInvalidDialogs() } } Component { id: indicator ScreenIndicator {} } Component { id: recognize ScreenRecognize {} } DccTitleObject { name: "multipleDisplays" parentName: "display" displayName: qsTr("Multiple Displays Settings") weight: 10 visible: dccData.screens.length > 1 } DccObject { id: monitorControl property bool effective: false name: "monitorControl" parentName: "display" weight: 20 visible: dccData.screens.length > 1 backgroundType: DccObject.Normal pageType: DccObject.Item onParentItemChanged: item => { if (item) item.topPadding = 5 } page: DccGroupView { isGroup: false } DccObject { id: groundObj function cacheImage() { for (var i = 0; i < dccData.virtualScreens.length; i++) { var screen = dccData.virtualScreens[i] DccApp.cacheImage(screen.wallpaper) } } Connections { target: dccData function onVirtualScreensChanged() { groundObj.cacheImage() } function onWallpaperChanged() { groundObj.cacheImage() } } name: "monitorsGround" parentName: "monitorControl" weight: 10 enabled: dccData.virtualScreens.length > 1 Component.onCompleted: cacheImage() pageType: DccObject.Item onParentItemChanged: item => { if (item) { item.topInset = 0; item.bottomInset = 0 } } page: Item { id: monitorsGround property real translationX: 100 property real translationY: 20 property real scale: 0.1 implicitHeight: 240 clip: true onWidthChanged: monitorRepeater.adjustAll() Timer { interval: 2000 running: monitorControl.effective repeat: false onTriggered: { var listItems = [] for (var i = 0; i < monitorRepeater.count; i++) { var otherItem = monitorRepeater.itemAt(i) listItems.push(otherItem) } dccData.applySettings(listItems, monitorsGround.scale) monitorControl.effective = false } } Repeater { id: monitorRepeater property bool hasMove: false model: dccData.virtualScreens delegate: ScreenItem { z: selected ? 2 : 1 screen: model.modelData translationX: monitorsGround.translationX translationY: monitorsGround.translationY scale: monitorsGround.scale selected: root.screen === screen onPressed: monitorRepeater.pressedItem(this) onPositionChanged: monitorRepeater.positionChangedItem(this) onReleased: monitorRepeater.releasedItem(this) onUpdatePosition: { x = screen.x * scale + translationX y = screen.y * scale + translationY width = screen.width * scale height = screen.height * scale monitorRepeater.adjustAll() } } onCountChanged: adjustAll() Component.onCompleted: adjustAll() function pressedItem(item) { hasMove = false root.screen = item.screen if (dccData.isX11) { indicator.createObject(this, { "screen": getQtScreen(item.screen) }).show() } } function positionChangedItem(item) { monitorControl.effective = false hasMove = true var listItems = [] // 吸附距离 for (var i = 0; i < monitorRepeater.count; i++) { var otherItem = monitorRepeater.itemAt(i) listItems.push(otherItem) } dccData.adsorptionScreen(listItems, item, monitorsGround.scale) } function releasedItem(item) { if (!hasMove) { return } hasMove = false var listItems = [] for (var i = 0; i < monitorRepeater.count; i++) { var otherItem = monitorRepeater.itemAt(i) listItems.push(otherItem) } dccData.executemultiScreenAlgo(listItems, item, monitorsGround.scale) adjustAll() monitorControl.effective = false // 重置下定时器 monitorControl.effective = true } function adjustAll() { if (monitorRepeater.count === 0 || monitorsGround.scale === 0 || monitorsGround.width === 0 || monitorsGround.height === 0) { return } var firstItem = monitorRepeater.itemAt(0) var gx = (firstItem.x - monitorsGround.translationX) / monitorsGround.scale var gy = (firstItem.y - monitorsGround.translationY) / monitorsGround.scale var gx2 = firstItem.width / monitorsGround.scale + gx var gy2 = firstItem.height / monitorsGround.scale + gy var itemMaxH = gy2 - gy for (var i = 1; i < monitorRepeater.count; i++) { let otherItem = monitorRepeater.itemAt(i) if (!otherItem) { return } var ox = (otherItem.x - monitorsGround.translationX) / monitorsGround.scale var oy = (otherItem.y - monitorsGround.translationY) / monitorsGround.scale var ox2 = otherItem.width / monitorsGround.scale + ox var oy2 = otherItem.height / monitorsGround.scale + oy if (gx > ox) { gx = ox } if (gy > oy) { gy = oy } if (gx2 < ox2) { gx2 = ox2 } if (gy2 < oy2) { gy2 = oy2 } if (itemMaxH < oy2 - oy) { itemMaxH = oy2 - oy } } if (gx2 === gx || gy2 === gy) { return } var xScale = (monitorsGround.width) / ((gx2 - gx) * 1.2) var yScale = (monitorsGround.height) / ((gy2 - gy) * 1.2) var gScale = xScale < yScale ? xScale : yScale let tX = (monitorsGround.width - (gx2 - gx) * gScale) * 0.5 let tY = (monitorsGround.height - (gy2 - gy) * gScale) * 0.5 // +((gy2-gy)*0.1)*gScale for (var j = 0; j < monitorRepeater.count; j++) { let item = monitorRepeater.itemAt(j) item.x = ((item.x - monitorsGround.translationX) / monitorsGround.scale - gx) * gScale + tX item.y = ((item.y - monitorsGround.translationY) / monitorsGround.scale - gy) * gScale + tY item.width = item.width / monitorsGround.scale * gScale item.height = item.height / monitorsGround.scale * gScale } monitorsGround.scale = gScale monitorsGround.translationX = tX monitorsGround.translationY = tY } } } } DccObject { name: "identify" parentName: "monitorControl" displayName: qsTr("Identify") weight: 20 visible: dccData.virtualScreens.length > 1 || (dccData.virtualScreens.length === 1 && dccData.virtualScreens[0].screenItems.length > 1) pageType: DccObject.Item onParentItemChanged: item => { if (item) item.topInset = 6 } page: Item { implicitHeight: identifyBut.implicitHeight + 4 DccLabel { anchors.fill: parent horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter anchors.rightMargin: identifyBut.width + 5 anchors.leftMargin: identifyBut.width + 5 visible: monitorControl.effective text: qsTr("Screen rearrangement will take effect in %1s after changes").arg(2) clip: true } D.Button { id: identifyBut property var recognizes: [] implicitHeight: 24 implicitWidth: 72 anchors.right: parent.right anchors.verticalCenter: parent.verticalCenter anchors.rightMargin: 7 text: dccObj.displayName function closeWindow() { recognizeTimer.stop() for (var obj of identifyBut.recognizes) { obj.close() } identifyBut.recognizes = [] } Timer { id: recognizeTimer repeat: false interval: 5000 onTriggered: identifyBut.closeWindow() } onClicked: { // if (!dccData.isX11) { // return // } identifyBut.closeWindow() for (var i = 0; i < dccData.virtualScreens.length; i++) { var item = dccData.virtualScreens[i] var obj = recognize.createObject(this, { "screen": getQtScreen(item), "name": item.name }) obj.show() obj.escPressed.connect(identifyBut.closeWindow) recognizes.push(obj) } recognizeTimer.restart() } } } } } DccObject { name: "displayMultipleDisplays" parentName: "display" weight: 30 visible: dccData.screens.length > 1 pageType: DccObject.Item onParentItemChanged: item => { if (item) item.topInset = 2 } page: DccGroupView {} DccObject { name: "mode" parentName: "display/displayMultipleDisplays" displayName: qsTr("Mode") weight: 10 visible: dccData.screens.length > 1 && dccData.isX11 pageType: DccObject.Editor page: D.ComboBox { ListModel { id: modeModel } function getModeModel(screens) { modeModel.clear() modeModel.append({ "text": qsTr("Duplicate"), "value": "MERGE" // 1 }) modeModel.append({ "text": qsTr("Extend"), "value": "EXTEND" // 2 }) for (let screen of screens) { modeModel.append({ "text": qsTr("Only on %1").arg(screen.name), "value": screen.name }) } return modeModel } function indexOfMode(mode) { for (var i = 0; i < model.count; i++) { if (model.get(i).value === mode) { return i } } return -1 } flat: true textRole: "text" valueRole: "value" model: getModeModel(dccData.screens) currentIndex: indexOfMode(dccData.displayMode) onActivated: { if (dccData.displayMode !== currentValue) { dccData.displayMode = currentValue } } } } DccObject { name: "mainScreen" parentName: "display/displayMultipleDisplays" displayName: qsTr("Main Screen") weight: 20 pageType: DccObject.Editor visible: dccData.virtualScreens.length > 1 page: ComboBox { flat: true textRole: "name" model: dccData.virtualScreens function indexOfScreen(primary) { for (var i = 0; i < model.length; i++) { if (model[i].name === primary.name) { return i } } return -1 } currentIndex: dccData.primaryScreen ? indexOfScreen(dccData.primaryScreen) : -1 onActivated: { if (dccData.primaryScreen !== currentValue) { dccData.primaryScreen = currentValue } } } } } DccTitleObject { name: "screenTitle" parentName: "display" displayName: qsTr("Display And Layout") weight: 40 onParentItemChanged: item => { if (item) item.topInset = 12 } } DccObject { name: "screenTab" parentName: "display" weight: 50 visible: dccData.virtualScreens.length > 1 pageType: DccObject.Item Component { id: timeoutDialog TimeoutDialog {} } Timer { id: dialogDelayTimer interval: 300 repeat: false property var targetScreen: null property var parentItem: null function showDelayed(parentItemArg, screenArg) { targetScreen = screenArg parentItem = parentItemArg restart() } onTriggered: { // Check if parentItem is still valid and visible before creating dialog if (targetScreen && parentItem && parentItem.visible) { var dialog = timeoutDialog.createObject(parentItem, { "screen": targetScreen }) dialog.show() root.activeDialogs.push(dialog) } // Clear references to avoid stale object reuse targetScreen = null parentItem = null } } page: ScreenTab { model: dccData.virtualScreens screen: root.screen onScreenClicked: function (screen) { if (screen && screen !== root.screen) { root.screen = screen if (dccData.isX11) { indicator.createObject(this, { "screen": getQtScreen(root.screen) }).show() } } } } } component BrightnessComponent: RowLayout { property var screenItem Label { Layout.alignment: Qt.AlignVCenter text: Math.round(brightnessSlider.value * 100) + "%" font: D.DTK.fontManager.t10 opacity: 0.5 } D.DciIcon { Layout.alignment: Qt.AlignVCenter name: "dcc_brightnesslow" palette: D.DTK.makeIconPalette(parent.palette) } Slider { id: brightnessSlider implicitHeight: 24 Layout.alignment: Qt.AlignVCenter highlightedPassedGroove: true from: 0.1 to: 1 stepSize: 0.01 value: screenItem.brightness onMoved: { screenItem.brightness = value } } D.DciIcon { Layout.alignment: Qt.AlignVCenter name: "dcc_brightnesshigh" palette: D.DTK.makeIconPalette(parent.palette) } } DccObject { name: "brightnessGroup" parentName: "display" displayName: qsTr("Brightness") weight: 60 visible: screen.screenItems.length > 1 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "brightness" parentName: "display/brightnessGroup" displayName: qsTr("Brightness") weight: 10 pageType: DccObject.Editor onParentItemChanged: item => { if (item) item.implicitHeight = 36 } page: Item { } } DccRepeater { model: screen.screenItems delegate: DccObject { name: "brightness" + index parentName: "display/brightnessGroup" weight: 20 + index displayName: screen.screenItems[index].name pageType: DccObject.Editor page: BrightnessComponent { screenItem: screen.screenItems[index] } } } } DccObject { name: "screenGroup" parentName: "display" weight: 70 pageType: DccObject.Item page: DccGroupView {} onParentItemChanged: item => { if (item) item.topInset = 3 } DccObject { name: "brightness" parentName: "display/screenGroup" displayName: qsTr("Brightness") weight: 10 visible: screen.screenItems.length === 1 pageType: DccObject.Editor page: BrightnessComponent { screenItem: screen.screenItems[0] } } DccObject { name: "displayResolution" parentName: "display/screenGroup" displayName: qsTr("Resolution") // 分辨率 weight: 20 pageType: DccObject.Editor page: ComboBox { id: resolutionComboBox flat: true model: root.getResolutionModel(screen.resolutionList, screen.bestResolution) textRole: "text" valueRole: "value" property real popupContentWidth: 0 function indexOfSize(model, currentSize) { for (var i = 0; i < model.length; i++) { let v = model[i] if (v.value.width === currentSize.width && v.value.height === currentSize.height) { return i } } return -1 } TextMetrics { id: resolutionTextMetrics font: resolutionComboBox.font } function updatePopupWidth() { var maxWidth = 0 for (var i = 0; i < model.length; i++) { resolutionTextMetrics.text = model[i].text var itemWidth = resolutionTextMetrics.width + 80 if (itemWidth > maxWidth) { maxWidth = itemWidth } } popupContentWidth = maxWidth } Component.onCompleted: updatePopupWidth() onModelChanged: updatePopupWidth() popup.width: Math.max(popupContentWidth, width) currentIndex: indexOfSize(model, screen.currentResolution) onActivated: { if (screen.currentResolution === currentValue) { return } screen.currentResolution = currentValue if (dccData.isX11) { dialogDelayTimer.showDelayed(this, getControlCenterScreen()) } } } } DccObject { name: "resizeDesktop" parentName: "display/screenGroup" displayName: qsTr("Resize Desktop") // 屏幕显示 weight: 30 visible: screen.availableFillModes.length > 0 pageType: DccObject.Editor page: D.ComboBox { id: control ListModel { id: fillmodellist ListElement { text: qsTr("Default") icon: "DisplayDefault" value: "None" } ListElement { text: qsTr("Stretch") icon: "DisplayStretch" value: "Full" } ListElement { text: qsTr("Center") icon: "DisplayCenter" value: "Center" } ListElement { text: qsTr("Fit") icon: "DisplayFit" value: "Full aspect" } } ListModel { id: fillModel } function getFillModel(availableFillModes, currentFillMode) { fillModel.clear() for (var i = 0; i < fillmodellist.count; i++) { let fillmode = fillmodellist.get(i) let value = fillmode.value if (value === currentFillMode || availableFillModes.indexOf(value) >= 0) { fillModel.append(fillmode) } } return fillModel } function indexOfFill(model, currentFill) { for (var i = 0; i < model.count; i++) { let v = model.get(i) if (v.value === currentFill) { return i } } return -1 } flat: true textRole: "text" valueRole: "value" iconNameRole: "icon" contentItem: D.IconLabel { rightPadding: DS.Style.comboBox.spacing alignment: control.horizontalAlignment icon { name: (control.currentIndex >= 0 && control.iconNameRole && model.get(control.currentIndex)[control.iconNameRole] !== undefined) ? model.get(control.currentIndex)[control.iconNameRole] : null height: DS.Style.comboBox.iconSize width: DS.Style.comboBox.iconSize palette: D.DTK.makeIconPalette(control.palette) } text: control.editable ? control.editText : control.displayText font: control.font color: control.palette.windowText spacing: DS.Style.comboBox.spacing } model: getFillModel(screen.availableFillModes, screen.currentFillMode) currentIndex: indexOfFill(this.model, screen.currentFillMode) onActivated: { if (screen.currentFillMode === currentValue) { return } screen.currentFillMode = currentValue if (dccData.isX11) { dialogDelayTimer.showDelayed(this, getControlCenterScreen()) } } } } DccObject { name: "displayRefreshRate" parentName: "display/screenGroup" displayName: qsTr("Refresh Rate") // 刷新率 weight: 40 pageType: DccObject.Editor page: ComboBox { flat: true textRole: "text" valueRole: "value" model: root.getRateModel(screen.rateList, screen.bestRate) function indexOfRate(model, currentRate) { for (var i = 0; i < model.length; i++) { let v = model[i] if (v.value === currentRate) { return i } } return -1 } currentIndex: indexOfRate(model, screen.currentRate) onActivated: { if (screen.currentRate === currentValue) { return } screen.currentRate = currentValue if (dccData.isX11) { dialogDelayTimer.showDelayed(this, getControlCenterScreen()) } } } } DccObject { name: "displayRotate" parentName: "display/screenGroup" displayName: qsTr("Rotation") // 方向 weight: 50 visible: dccData.isX11 pageType: DccObject.Editor page: ComboBox { flat: true textRole: "text" valueRole: "value" model: [{ "text": qsTr("Standard"), "value": 1 }, { "text": qsTr("90°"), "value": 2 }, { "text": qsTr("180°"), "value": 4 }, { "text": qsTr("270°"), "value": 8 }] function indexOfRotate(rotate) { for (var i = 0; i < model.length; i++) { let v = model[i] if (v.value === rotate) { return i } } return -1 } currentIndex: indexOfRotate(screen.rotate) onActivated: { if (screen.rotate !== currentValue) { screen.rotate = currentValue if (dccData.isX11) { dialogDelayTimer.showDelayed(this, getControlCenterScreen()) } } } } } DccObject { name: "displayScaling" parentName: "display/screenGroup" displayName: qsTr("Scaling") //"缩放" description: screen.maxScale >= 1.25 ? "" : qsTr("The monitor only supports 100% display scaling") weight: 60 visible: !dccData.isX11 || dccData.virtualScreens.length === 1 pageType: DccObject.Editor page: ComboBox { flat: true textRole: "text" valueRole: "value" model: dccData.isX11 ? root.getScaleModel(dccData.maxGlobalScale, dccData.globalScale) : root.getScaleModel(screen.maxScale, screen.scale) currentIndex: dccData.isX11 ? root.indexOfScale(model, dccData.globalScale) : root.indexOfScale(model, screen.scale) onActivated: { if (dccData.isX11) { if (dccData.globalScale !== currentValue) { dccData.globalScale = currentValue } } else { if (screen.scale !== currentValue) { screen.scale = currentValue } } } } } } DccObject { name: "displayScaling" parentName: "display" displayName: qsTr("Scaling") //"缩放" description: dccData.maxGlobalScale >= 1.25 ? "" : qsTr("The monitor only supports 100% display scaling") weight: 80 visible: dccData.isX11 && dccData.virtualScreens.length > 1 backgroundType: DccObject.Normal pageType: DccObject.Editor onParentItemChanged: item => { if (item) item.topInset = 6 } page: ComboBox { flat: true textRole: "text" valueRole: "value" model: root.getScaleModel(dccData.maxGlobalScale, dccData.globalScale) currentIndex: root.indexOfScale(model, dccData.globalScale) onActivated: { if (dccData.globalScale !== currentValue) { dccData.globalScale = currentValue } } } } DccTitleObject { name: "displayColorTemperature" parentName: "display" displayName: qsTr("Eye Comfort") onParentItemChanged: item => { if (item) { item.topInset = 12; item.leftPadding = 14 } } weight: 90 } DccObject { name: "eyeComfort" parentName: "display" displayName: qsTr("Enable eye comfort") description: qsTr("Adjust screen display to warmer colors, reducing screen blue light") weight: 100 backgroundType: DccObject.Normal pageType: DccObject.Editor onParentItemChanged: item => { if (item) { item.rightItemTopMargin = 6; item.rightItemBottomMargin = 6 } } page: Switch { checked: dccData.colorTemperatureEnabled onClicked: dccData.colorTemperatureEnabled = checked } } DccObject { name: "eyeComfortGroup" parentName: "display" weight: 110 visible: dccData.colorTemperatureEnabled pageType: DccObject.Item onParentItemChanged: item => { if (item) { item.rightItemTopMargin = 6; item.rightItemBottomMargin = 6 } } page: DccGroupView {} DccObject { name: "time" parentName: "display/eyeComfortGroup" displayName: qsTr("Time") weight: 10 pageType: DccObject.Editor page: ComboBox { flat: true model: [qsTr("All day"), qsTr("Sunset to Sunrise"), qsTr("Custom Time")] currentIndex: dccData.colorTemperatureMode onActivated: dccData.colorTemperatureMode = currentIndex } } DccObject { name: "timeFrame" parentName: "display/eyeComfortGroup" weight: 20 visible: dccData.colorTemperatureMode === 2 pageType: DccObject.Editor page: RowLayout { Label { text: qsTr("from") } DccTimeRange { id: startTimeRange hour: dccData.customColorTempTimePeriod.split("-")[0].split(":")[0] minute: dccData.customColorTempTimePeriod.split("-")[0].split(":")[1] onTimeChanged: dccData.customColorTempTimePeriod = startTimeRange.timeString + "-" + endTimeRange.timeString } Label { text: qsTr("to") } DccTimeRange { id: endTimeRange hour: dccData.customColorTempTimePeriod.split("-")[1].split(":")[0] minute: dccData.customColorTempTimePeriod.split("-")[1].split(":")[1] onTimeChanged: dccData.customColorTempTimePeriod = startTimeRange.timeString + "-" + endTimeRange.timeString } Connections { target: dccData function onCustomColorTempTimePeriodChanged() { var period = dccData.customColorTempTimePeriod.split("-") startTimeRange.hour = period[0].split(":")[0] startTimeRange.minute = period[0].split(":")[1] endTimeRange.hour = period[1].split(":")[0] endTimeRange.minute = period[1].split(":")[1] } } } } DccObject { name: "colorTemperature" parentName: "display/eyeComfortGroup" displayName: qsTr("Color Temperature") weight: 30 pageType: DccObject.Editor page: RowLayout { property var screenItem Label { Layout.alignment: Qt.AlignVCenter text: Math.round(colorTemperatureSlider.value) + "%" font: D.DTK.fontManager.t10 opacity: 0.5 } D.DciIcon { Layout.alignment: Qt.AlignVCenter name: "cool_colour" } Slider { id: colorTemperatureSlider implicitHeight: 24 Layout.alignment: Qt.AlignVCenter from: 0 to: 100 stepSize: 1 value: dccData.colorTemperature onValueChanged: { if (dccData.colorTemperature !== value) dccData.colorTemperature = value } } D.DciIcon { Layout.alignment: Qt.AlignVCenter name: "warm_colour" } } } } } ================================================ FILE: src/plugin-display/qml/ScreenIndicator.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import org.deepin.dcc 1.0 Window { id: root flags: Qt.CoverWindow | Qt.WindowStaysOnTopHint | Qt.SplashScreen | Qt.FramelessWindowHint | Qt.X11BypassWindowManagerHint color: "#2ca7f8" x: screen.virtualX y: screen.virtualY width: screen.width height: 10 onClosing: destroy(10) Timer { interval: 1000 running: root.visible onTriggered: root.close() } Window { flags: Qt.CoverWindow | Qt.WindowStaysOnTopHint | Qt.SplashScreen | Qt.FramelessWindowHint | Qt.X11BypassWindowManagerHint visible: root.visible color: root.color screen: root.screen x: screen.virtualX y: screen.virtualY + screen.height - 10 width: screen.width height: 10 } Window { flags: Qt.CoverWindow | Qt.WindowStaysOnTopHint | Qt.SplashScreen | Qt.FramelessWindowHint | Qt.X11BypassWindowManagerHint visible: root.visible color: root.color screen: root.screen x: screen.virtualX y: screen.virtualY width: 10 height: screen.height } Window { flags: Qt.CoverWindow | Qt.WindowStaysOnTopHint | Qt.SplashScreen | Qt.FramelessWindowHint | Qt.X11BypassWindowManagerHint visible: root.visible color: root.color screen: root.screen x: screen.virtualX + screen.width - 10 y: screen.virtualY width: 10 height: screen.height } } ================================================ FILE: src/plugin-display/qml/ScreenItem.qml ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Effects import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 Item { id: root property var screen property real translationX: 100 property real translationY: 100 property real scale: 0.1 property real radius: 8 property bool selected: false property real offset: (imgRepeater.count - 1) * 6 signal pressed signal positionChanged signal released signal updatePosition // Home screen icon responsive sizing constants readonly property int homeIconMaxSize: 24 readonly property real homeIconSizeRatio: 0.25 readonly property int homeIconMinMargin: 4 readonly property real homeIconMarginRatio: 0.04 // Home screen icon responsive sizing readonly property int homeIconSize: Math.min(homeIconMaxSize, Math.round(root.width * homeIconSizeRatio)) readonly property int homeIconMargin: Math.max(homeIconMinMargin, Math.round(root.width * homeIconMarginRatio)) focus: true Repeater { id: imgRepeater model: screen.screenItems.length delegate: Image { id: image x: offset - index * 6 y: offset - index * 6 z: 1 - (0.01 * index) width: root.width - offset height: root.height - offset opacity: index != 0 ? 0.8 : 1 source: "image://DccImage/" + screen.wallpaper mipmap: true fillMode: Image.PreserveAspectCrop asynchronous: true layer.enabled: true layer.effect: MultiEffect { maskEnabled: true maskSource: imageMask antialiasing: true maskThresholdMin: 0.5 maskSpreadAtMin: 1.0 } Item { id: imageMask anchors.fill: parent layer.enabled: true visible: false Rectangle { anchors.fill: parent anchors.margins: 0.5 radius: root.radius } } Rectangle { anchors.fill: parent radius: root.radius color: "transparent" opacity: (index === 0 && root.selected) ? 0.7 : 0.2 border.color: (index === 0 && root.selected) ? this.palette.window : "#000000" border.width: 2 smooth: true } } } DccLabel { x: offset y: offset z: 2 width: root.width - offset height: root.height - offset padding: root.radius + 5 text: screen.name elide: Text.ElideMiddle color: "white" layer.enabled: true layer.effect: MultiEffect { shadowEnabled: true shadowBlur: 0.01 shadowColor: Qt.rgba(0.0, 0.0, 0.0, 0.7) shadowVerticalOffset: 1 } } D.DciIcon { z: 2 visible: screen && dccData.primaryScreen && (screen.name === dccData.primaryScreen.name) name: "home_screen" anchors.bottom: parent.bottom anchors.right: parent.right anchors.bottomMargin: root.homeIconMargin anchors.rightMargin: root.homeIconMargin sourceSize: Qt.size(root.homeIconSize, root.homeIconSize) } Loader { x: offset y: offset z: 2 width: root.width - offset height: root.height - offset active: root.selected sourceComponent: Rectangle { anchors.fill: parent radius: root.radius + 1 color: "transparent" border.color: this.palette.highlight border.width: 2 smooth: true } } MouseArea { z: 2 anchors.fill: parent drag.target: parent onPressed: root.pressed() onPositionChanged: root.positionChanged() onReleased: root.released() } Component.onCompleted: updatePosition() Connections { target: screen function onXChanged() { updatePosition() } function onYChanged() { updatePosition() } function onWidthChanged() { updatePosition() } function onHeightChanged() { updatePosition() } } } ================================================ FILE: src/plugin-display/qml/ScreenRecognize.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 Window { id: root property string name: "screen" signal escPressed flags: Qt.CoverWindow | Qt.WindowStaysOnTopHint | Qt.SplashScreen | Qt.FramelessWindowHint | Qt.X11BypassWindowManagerHint D.DWindow.enabled: true x: screen.virtualX + (screen.width - width) * 0.5 y: screen.virtualY + screen.height - height - 220 width: control.implicitWidth + 44 height: control.implicitHeight + 24 minimumWidth: 200 onClosing: destroy(10) Text { id: control anchors.centerIn: parent text: root.name font: D.DTK.fontManager.t4 color: control.palette.brightText } Shortcut { sequence: "Esc" onActivated: escPressed() onActivatedAmbiguously: escPressed() } } ================================================ FILE: src/plugin-display/qml/ScreenTab.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 Item { id: root property var screen property alias model: repeater.model signal screenClicked(var screen) implicitHeight: 30 RowLayout { Repeater { id: repeater delegate: Rectangle { property bool isSelect: model.modelData === screen property alias hovered: mouseArea.containsMouse implicitWidth: nameLabel.implicitWidth + 20 implicitHeight: 30 radius: 8 color: isSelect ? (D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.1) : Qt.rgba(1, 1, 1, 0.1)) : "transparent" Label { id: nameLabel anchors.centerIn: parent text: model.modelData.name color: hovered ? this.palette.link : (isSelect ? this.palette.highlight : this.palette.text) } MouseArea { id: mouseArea anchors.fill: parent hoverEnabled: true onClicked: { if (!isSelect) { screenClicked(model.modelData) } } } } } } } ================================================ FILE: src/plugin-display/qml/TimeoutDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Layouts 1.15 import QtQuick.Controls 2.5 import org.deepin.dtk 1.0 as D D.DialogWindow { id: root property string message: qsTr("Settings will be reverted in %1s.") property real timeout: 15 property bool save: false modality: Qt.ApplicationModal width: 380 x: screen.virtualX + ((screen.width - width) / 2) y: screen.virtualY + ((screen.height - height) / 2) icon: "preferences-system" title: qsTr("Save the display settings?") onClosing: { destroy(10) if (save) { dccData.saveChanges() } else { dccData.resetBackup() } } ColumnLayout { Timer { interval: 1000 running: root.visible repeat: true onTriggered: { root.timeout-- if (root.timeout < 1) { close() } // 定时更新下坐标 if (timeout > 10) { root.x = root.screen.virtualX + ((root.screen.width - root.width) / 2) root.y = root.screen.virtualY + ((root.screen.height - root.height) / 2) } } } width: parent.width Label { Layout.fillWidth: true Layout.leftMargin: 50 Layout.rightMargin: 50 text: title font.bold: true wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter } Label { Layout.fillWidth: true Layout.leftMargin: 50 Layout.rightMargin: 50 text: message.arg(timeout) wrapMode: Text.WordWrap horizontalAlignment: Text.AlignHCenter } RowLayout { Layout.topMargin: 10 Layout.bottomMargin: 10 D.RecommandButton { Layout.fillWidth: true text: qsTr("Revert") onClicked: close() } Rectangle { implicitWidth: 2 Layout.fillHeight: true color: this.palette.button } D.Button { Layout.fillWidth: true text: qsTr("Save") onClicked: { save = true close() } } } } } ================================================ FILE: src/plugin-display/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-display/wayland/libwayqt/Output.cpp ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "wayland-client-protocol.h" #include "Output.h" #include #include #include #include #include #include WQt::Output::Output(wl_output *op) { mObj = op; wl_output_add_listener(mObj, &mListener, this); } WQt::Output::~Output() { wl_output_destroy(mObj); } QString WQt::Output::name() { return mName; } QString WQt::Output::description() { return mDescr; } QString WQt::Output::make() { return mMake; } QString WQt::Output::model() { return mModel; } QPoint WQt::Output::position() { return mPos; } QSize WQt::Output::physicalSize() { return mPhysicalSize; } WQt::Output::OutputMode WQt::Output::mode() { return mMode; } WQt::Output::SubpixelGeometry WQt::Output::subpixelGeometry() { return (WQt::Output::SubpixelGeometry)mSubPixel; } WQt::Output::Rotation WQt::Output::transform() { return (WQt::Output::Rotation)mTransform; } int32_t WQt::Output::scale() { return mScale; } bool WQt::Output::isReady() const { return mDone; } wl_output *WQt::Output::get() { return mObj; } void WQt::Output::handleGeometryEvent(void *data, struct wl_output *, int32_t x, int32_t y, int32_t w, int32_t h, int32_t e, const char *f, const char *g, int32_t t) { Output *output = reinterpret_cast(data); output->mPos = QPoint(x, y); output->mPhysicalSize = QSize(w, h); output->mSubPixel = e; output->mMake = QString(f); output->mModel = QString(g); output->mTransform = t; } void WQt::Output::handleModeEvent(void *data, struct wl_output *, uint32_t current, int32_t xres, int32_t yres, int32_t refresh) { Output *output = reinterpret_cast(data); if (current) { output->mMode = { QSize(xres, yres), refresh, true }; } } void WQt::Output::handleDone(void *data, struct wl_output *) { Output *output = reinterpret_cast(data); output->mDone = true; Q_EMIT output->done(); } void WQt::Output::handleScale(void *data, struct wl_output *, int32_t scale) { Output *output = reinterpret_cast(data); output->mScale = scale; } void WQt::Output::handleNameEvent(void *data, struct wl_output *, const char *name) { Output *output = reinterpret_cast(data); output->mName = QString(name); } void WQt::Output::handleDescriptionEvent(void *data, struct wl_output *, const char *descr) { Output *output = reinterpret_cast(data); output->mDescr = descr; } const wl_output_listener WQt::Output::mListener = { handleGeometryEvent, handleModeEvent, handleDone, handleScale, handleNameEvent, handleDescriptionEvent, }; ================================================ FILE: src/plugin-display/wayland/libwayqt/Output.h ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include struct wl_output; struct wl_output_listener; namespace WQt { class Output; } class WQt::Output : public QObject { Q_OBJECT; public: enum SubpixelGeometry { Unknown = 0x634429, None, HorizontalRGB, HorizontalBGR, VerticalRGB, VerticalBGR, }; enum Rotation { Normal = 0x951893, Rotate90, Rotate180, Rotate270, Flipped, Flipped90, Flipped180, Flipped270, }; typedef struct output_mode_t { QSize resolution; int32_t refreshRate; bool current = false; } OutputMode; Output(wl_output *); ~Output(); QString name(); QString description(); QString make(); QString model(); QPoint position(); QSize physicalSize(); WQt::Output::OutputMode mode(); SubpixelGeometry subpixelGeometry(); Rotation transform(); int32_t scale(); bool isReady() const; wl_output *get(); Q_SIGNALS: void done(); private: static void handleGeometryEvent(void *, struct wl_output *, int32_t, int32_t, int32_t, int32_t, int32_t, const char *, const char *, int32_t); static void handleModeEvent(void *, struct wl_output *, uint32_t, int32_t, int32_t, int32_t); static void handleDone(void *, struct wl_output *); static void handleScale(void *, struct wl_output *, int32_t); static void handleNameEvent(void *, struct wl_output *, const char *); static void handleDescriptionEvent(void *, struct wl_output *, const char *); wl_output *mObj; static const wl_output_listener mListener; QPoint mPos; QSize mPhysicalSize; int32_t mSubPixel; QString mMake; QString mModel; int32_t mTransform; WQt::Output::OutputMode mMode; int32_t mScale; QString mName; QString mDescr; bool mDone = false; }; ================================================ FILE: src/plugin-display/wayland/libwayqt/OutputManager.cpp ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "OutputManager.h" #include "wlr-output-management-unstable-v1-client-protocol.h" #include #include #include #include #include #include #include /** * Output Manager * This is the beginning of all our operations. * Obtain a pointer to this object from Wayland Registry */ WQt::OutputManager::OutputManager(zwlr_output_manager_v1 *opMgr) { mObj = opMgr; zwlr_output_manager_v1_add_listener(mObj, &mListener, this); } WQt::OutputManager::~OutputManager() { zwlr_output_manager_v1_destroy(mObj); } QList WQt::OutputManager::heads() { return mHeads; } WQt::OutputConfiguration *WQt::OutputManager::createConfiguration() { return new WQt::OutputConfiguration(zwlr_output_manager_v1_create_configuration(mObj, mSerial)); } void WQt::OutputManager::stop() { zwlr_output_manager_v1_stop(mObj); } zwlr_output_manager_v1 *WQt::OutputManager::get() { return mObj; } void WQt::OutputManager::handleHead(void *data, zwlr_output_manager_v1 *, zwlr_output_head_v1 *head) { WQt::OutputManager *mgr = reinterpret_cast(data); WQt::OutputHead *opHead = new WQt::OutputHead(head); mgr->mHeads << opHead; connect(opHead, &WQt::OutputHead::finished, [=]() { mgr->mHeads.removeAll(opHead); }); emit mgr->headAttached(opHead); } void WQt::OutputManager::handleDone(void *data, zwlr_output_manager_v1 *, uint32_t serial) { WQt::OutputManager *mgr = reinterpret_cast(data); mgr->mSerial = serial; mgr->mIsDone = true; emit mgr->done(); } void WQt::OutputManager::handleFinished(void *data, zwlr_output_manager_v1 *) { WQt::OutputManager *mgr = reinterpret_cast(data); zwlr_output_manager_v1_destroy(mgr->mObj); mgr->mObj = nullptr; } const struct zwlr_output_manager_v1_listener WQt::OutputManager::mListener = { handleHead, handleDone, handleFinished, }; /** * Output Head * Heads are obtained from OutputManager class, via signals, * or via OutputManager::heads() function; */ WQt::OutputHead::OutputHead() { } WQt::OutputHead::OutputHead(zwlr_output_head_v1 *head) { mObj = head; zwlr_output_head_v1_add_listener(mObj, &mListener, this); } WQt::OutputHead::OutputHead(const WQt::OutputHead &otherHead) : QObject() { mObj = otherHead.mObj; mPropsMap = otherHead.mPropsMap; mModes = otherHead.mModes; mCurrentMode = otherHead.mCurrentMode; } WQt::OutputHead::~OutputHead() { zwlr_output_head_v1_destroy(mObj); } QVariant WQt::OutputHead::property(WQt::OutputHead::Property prop) { if (prop == WQt::OutputHead::Modes) { return QVariant::fromValue>(mModes); } else if (prop == WQt::OutputHead::CurrentMode) { return QVariant::fromValue(mCurrentMode); } else { return mPropsMap.value((int)prop); } } zwlr_output_head_v1 *WQt::OutputHead::get() { return mObj; } void WQt::OutputHead::handleName(void *data, zwlr_output_head_v1 *, const char *name) { WQt::OutputHead *opHead = reinterpret_cast(data); opHead->mPropsMap[WQt::OutputHead::Name] = name; emit opHead->changed(WQt::OutputHead::Name); } void WQt::OutputHead::handleDescription(void *data, zwlr_output_head_v1 *, const char *descr) { WQt::OutputHead *opHead = reinterpret_cast(data); opHead->mPropsMap[WQt::OutputHead::Description] = descr; emit opHead->changed(WQt::OutputHead::Description); } void WQt::OutputHead::handlePhysicalSize(void *data, zwlr_output_head_v1 *, int32_t width, int32_t height) { WQt::OutputHead *opHead = reinterpret_cast(data); opHead->mPropsMap[WQt::OutputHead::PhysicalSize] = QSize(width, height); emit opHead->changed(WQt::OutputHead::PhysicalSize); } void WQt::OutputHead::handleMode(void *data, zwlr_output_head_v1 *, zwlr_output_mode_v1 *mode) { WQt::OutputHead *opHead = reinterpret_cast(data); if (opHead->mPropsMap.contains(WQt::OutputHead::Modes)) { opHead->mPropsMap[WQt::OutputHead::Modes] = QVariant::fromValue>(QList()); } WQt::OutputMode *opMode = new WQt::OutputMode(mode); connect(opMode, &WQt::OutputMode::finished, [=]() { opHead->mModes.removeAll(opMode); }); opHead->mModes << opMode; emit opHead->changed(WQt::OutputHead::Modes); } void WQt::OutputHead::handleEnabled(void *data, zwlr_output_head_v1 *, int32_t yes) { WQt::OutputHead *opHead = reinterpret_cast(data); opHead->mPropsMap[WQt::OutputHead::Enabled] = (bool)yes; emit opHead->changed(WQt::OutputHead::Enabled); } void WQt::OutputHead::handleCurrentMode(void *data, zwlr_output_head_v1 *, zwlr_output_mode_v1 *curMode) { WQt::OutputHead *opHead = reinterpret_cast(data); for (auto *mode : opHead->property(WQt::OutputHead::Modes).value>()) { if (mode->get() == curMode) opHead->mCurrentMode = mode; } emit opHead->changed(WQt::OutputHead::CurrentMode); } void WQt::OutputHead::handlePosition(void *data, zwlr_output_head_v1 *, int32_t x, int32_t y) { WQt::OutputHead *opHead = reinterpret_cast(data); opHead->mPropsMap[WQt::OutputHead::Position] = QPoint(x, y); emit opHead->changed(WQt::OutputHead::Position); } void WQt::OutputHead::handleTransform(void *data, zwlr_output_head_v1 *, int32_t transform) { WQt::OutputHead *opHead = reinterpret_cast(data); opHead->mPropsMap[WQt::OutputHead::Transform] = transform; emit opHead->changed(WQt::OutputHead::Transform); } void WQt::OutputHead::handleScale(void *data, zwlr_output_head_v1 *, wl_fixed_t scale) { WQt::OutputHead *opHead = reinterpret_cast(data); opHead->mPropsMap[WQt::OutputHead::Scale] = wl_fixed_to_double(scale); emit opHead->changed(WQt::OutputHead::Scale); } void WQt::OutputHead::handleFinished(void *data, zwlr_output_head_v1 *) { WQt::OutputHead *opHead = reinterpret_cast(data); emit opHead->finished(); } void WQt::OutputHead::handleMake(void *data, zwlr_output_head_v1 *, const char *make) { WQt::OutputHead *opHead = reinterpret_cast(data); opHead->mPropsMap[WQt::OutputHead::Make] = make; emit opHead->changed(WQt::OutputHead::Make); } void WQt::OutputHead::handleModel(void *data, zwlr_output_head_v1 *, const char *model) { WQt::OutputHead *opHead = reinterpret_cast(data); opHead->mPropsMap[WQt::OutputHead::Model] = model; emit opHead->changed(WQt::OutputHead::Model); } void WQt::OutputHead::handleSerialNumber(void *data, zwlr_output_head_v1 *, const char *serialNo) { WQt::OutputHead *opHead = reinterpret_cast(data); opHead->mPropsMap[WQt::OutputHead::SerialNumber] = serialNo; emit opHead->changed(WQt::OutputHead::SerialNumber); } const struct zwlr_output_head_v1_listener WQt::OutputHead::mListener = { handleName, handleDescription, handlePhysicalSize, handleMode, handleEnabled, handleCurrentMode, handlePosition, handleTransform, handleScale, handleFinished, handleMake, handleModel, handleSerialNumber, }; /** * Output Mode * This describes a mode of an output head. * Obtained from OutputHead::property( Modes ) * or from OutputHead::property( CurrentMode ) */ WQt::OutputMode::OutputMode() { } WQt::OutputMode::OutputMode(zwlr_output_mode_v1 *mode) { mObj = mode; zwlr_output_mode_v1_add_listener(mObj, &mListener, this); } WQt::OutputMode::OutputMode(const WQt::OutputMode &otherMode) : QObject() { mObj = otherMode.mObj; mSize = otherMode.mSize; mRefreshRate = otherMode.mRefreshRate; mIsPreferred = otherMode.mIsPreferred; } WQt::OutputMode::~OutputMode() { zwlr_output_mode_v1_destroy(mObj); } QSize WQt::OutputMode::size() { return mSize; } int32_t WQt::OutputMode::refreshRate() { return mRefreshRate; } bool WQt::OutputMode::isPreferred() { return mIsPreferred; } zwlr_output_mode_v1 *WQt::OutputMode::get() { return mObj; } void WQt::OutputMode::handleSize(void *data, zwlr_output_mode_v1 *, int32_t width, int32_t height) { WQt::OutputMode *opMode = reinterpret_cast(data); opMode->mSize = QSize(width, height); emit opMode->sizeChanged(opMode->mSize); } void WQt::OutputMode::handleRefreshRate(void *data, zwlr_output_mode_v1 *, int32_t refreshRate) { WQt::OutputMode *opMode = reinterpret_cast(data); opMode->mRefreshRate = refreshRate; emit opMode->refreshRateChanged(refreshRate); } void WQt::OutputMode::handlePreferred(void *data, zwlr_output_mode_v1 *) { WQt::OutputMode *opMode = reinterpret_cast(data); opMode->mIsPreferred = true; emit opMode->setAsPreferred(); } void WQt::OutputMode::handleFinished(void *data, zwlr_output_mode_v1 *) { WQt::OutputMode *opMode = reinterpret_cast(data); emit opMode->finished(); } const struct zwlr_output_mode_v1_listener WQt::OutputMode::mListener = { handleSize, handleRefreshRate, handlePreferred, handleFinished, }; /** * Output Configuration * We can configure all the outputs using this object * Obtained from OutputManager::createConfiguration() */ WQt::OutputConfiguration::OutputConfiguration(zwlr_output_configuration_v1 *config) { mObj = config; zwlr_output_configuration_v1_add_listener(mObj, &mListener, this); } WQt::OutputConfiguration::~OutputConfiguration() { zwlr_output_configuration_v1_destroy(mObj); } WQt::OutputConfigurationHead *WQt::OutputConfiguration::enableHead(WQt::OutputHead *head) { return new WQt::OutputConfigurationHead( zwlr_output_configuration_v1_enable_head(mObj, head->get())); } void WQt::OutputConfiguration::disableHead(WQt::OutputHead *head) { zwlr_output_configuration_v1_disable_head(mObj, head->get()); } void WQt::OutputConfiguration::apply() { zwlr_output_configuration_v1_apply(mObj); } void WQt::OutputConfiguration::test() { zwlr_output_configuration_v1_test(mObj); } void WQt::OutputConfiguration::handleSucceeded(void *data, zwlr_output_configuration_v1 *) { WQt::OutputConfiguration *config = reinterpret_cast(data); emit config->succeeded(); zwlr_output_configuration_v1_destroy(config->mObj); } void WQt::OutputConfiguration::handleFailed(void *data, zwlr_output_configuration_v1 *) { WQt::OutputConfiguration *config = reinterpret_cast(data); emit config->failed(); zwlr_output_configuration_v1_destroy(config->mObj); } void WQt::OutputConfiguration::handleCanceled(void *data, zwlr_output_configuration_v1 *) { WQt::OutputConfiguration *config = reinterpret_cast(data); emit config->canceled(); zwlr_output_configuration_v1_destroy(config->mObj); // need? } const struct zwlr_output_configuration_v1_listener WQt::OutputConfiguration::mListener = { handleSucceeded, handleFailed, handleCanceled, }; /** * Output Configuration Head * We can set the resolution and refresh rate for a given head * Obtained from OutputConfiguration::enableHead() */ WQt::OutputConfigurationHead::OutputConfigurationHead(zwlr_output_configuration_head_v1 *configHead) { mObj = configHead; } WQt::OutputConfigurationHead::~OutputConfigurationHead() { zwlr_output_configuration_head_v1_destroy(mObj); } void WQt::OutputConfigurationHead::setMode(WQt::OutputMode *mode) { zwlr_output_configuration_head_v1_set_mode(mObj, mode->get()); } void WQt::OutputConfigurationHead::setCustomMode(QSize size, int32_t refresh) { zwlr_output_configuration_head_v1_set_custom_mode(mObj, size.width(), size.height(), refresh); } void WQt::OutputConfigurationHead::setPosition(QPoint pos) { zwlr_output_configuration_head_v1_set_position(mObj, pos.x(), pos.y()); } void WQt::OutputConfigurationHead::setTransform(int32_t transform) { zwlr_output_configuration_head_v1_set_transform(mObj, transform); } void WQt::OutputConfigurationHead::setScale(qreal scale) { zwlr_output_configuration_head_v1_set_scale(mObj, wl_fixed_from_double(scale)); } ================================================ FILE: src/plugin-display/wayland/libwayqt/OutputManager.h ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include struct wl_buffer; struct wl_output; struct zwlr_output_manager_v1; struct zwlr_output_head_v1; struct zwlr_output_mode_v1; struct zwlr_output_configuration_v1; struct zwlr_output_configuration_head_v1; struct zwlr_output_manager_v1_listener; struct zwlr_output_head_v1_listener; struct zwlr_output_mode_v1_listener; struct zwlr_output_configuration_v1_listener; namespace WQt { class OutputManager; class OutputHead; class OutputMode; class OutputConfiguration; class OutputConfigurationHead; } // namespace WQt class WQt::OutputManager : public QObject { Q_OBJECT; public: OutputManager(zwlr_output_manager_v1 *); ~OutputManager(); /** Create a configuration object */ WQt::OutputConfiguration *createConfiguration(); QList heads(); /** Stop monitoring the outupts */ void stop(); zwlr_output_manager_v1 *get(); private: static void handleHead(void *, zwlr_output_manager_v1 *, zwlr_output_head_v1 *); static void handleDone(void *, zwlr_output_manager_v1 *, uint32_t); static void handleFinished(void *, zwlr_output_manager_v1 *); zwlr_output_manager_v1 *mObj; uint32_t mSerial; static const zwlr_output_manager_v1_listener mListener; QList mHeads; bool mIsDone = false; Q_SIGNALS: void headAttached(WQt::OutputHead *); void done(); }; class WQt::OutputHead : public QObject { Q_OBJECT; public: enum Property { Name = 0xbf278e, Description, PhysicalSize, Modes, Enabled, CurrentMode, Position, Transform, Scale, Make, Model, SerialNumber, }; OutputHead(); OutputHead(zwlr_output_head_v1 *); OutputHead(const WQt::OutputHead &); ~OutputHead(); /** Get the suitable property of this head */ QVariant property(WQt::OutputHead::Property); zwlr_output_head_v1 *get(); private: static void handleName(void *, zwlr_output_head_v1 *, const char *); static void handleDescription(void *, zwlr_output_head_v1 *, const char *); static void handlePhysicalSize(void *, zwlr_output_head_v1 *, int32_t, int32_t); static void handleMode(void *, zwlr_output_head_v1 *, zwlr_output_mode_v1 *); static void handleEnabled(void *, zwlr_output_head_v1 *, int32_t); static void handleCurrentMode(void *, zwlr_output_head_v1 *, zwlr_output_mode_v1 *); static void handlePosition(void *, zwlr_output_head_v1 *, int32_t, int32_t); static void handleTransform(void *, zwlr_output_head_v1 *, int32_t); static void handleScale(void *, zwlr_output_head_v1 *, wl_fixed_t); static void handleFinished(void *, zwlr_output_head_v1 *); static void handleMake(void *, zwlr_output_head_v1 *, const char *); static void handleModel(void *, zwlr_output_head_v1 *, const char *); static void handleSerialNumber(void *, zwlr_output_head_v1 *, const char *); static const zwlr_output_head_v1_listener mListener; zwlr_output_head_v1 *mObj; /** Properties map */ QMap mPropsMap; QList mModes; WQt::OutputMode *mCurrentMode; Q_SIGNALS: void changed(WQt::OutputHead::Property); void finished(); }; class WQt::OutputMode : public QObject { Q_OBJECT; public: OutputMode(); OutputMode(zwlr_output_mode_v1 *); OutputMode(const WQt::OutputMode &); ~OutputMode(); QSize size(); int32_t refreshRate(); bool isPreferred(); zwlr_output_mode_v1 *get(); private: static void handleSize(void *, zwlr_output_mode_v1 *, int32_t, int32_t); static void handleRefreshRate(void *, zwlr_output_mode_v1 *, int32_t); static void handlePreferred(void *, zwlr_output_mode_v1 *); static void handleFinished(void *, zwlr_output_mode_v1 *); static const zwlr_output_mode_v1_listener mListener; zwlr_output_mode_v1 *mObj{ nullptr }; /** Resolution */ QSize mSize{ 0, 0 }; /** Refresh rate */ int32_t mRefreshRate{ 0 }; /** By default this is false */ bool mIsPreferred{ false }; Q_SIGNALS: void sizeChanged(QSize); void refreshRateChanged(int32_t); void setAsPreferred(); void finished(); }; class WQt::OutputConfiguration : public QObject { Q_OBJECT; public: enum Error { AlreadyConfiguredHead = 1, UnconfiguredHead = 2, AlreadyUsed = 3, }; OutputConfiguration(zwlr_output_configuration_v1 *); ~OutputConfiguration(); /** Get the outupt configuration head object for the enabled output head */ WQt::OutputConfigurationHead *enableHead(WQt::OutputHead *); /** Disabled the given head */ void disableHead(WQt::OutputHead *); /** This object is destroyed after calling this function */ void apply(); /** This object is destroyed after calling this function */ void test(); private: static void handleSucceeded(void *, zwlr_output_configuration_v1 *); static void handleFailed(void *, zwlr_output_configuration_v1 *); static void handleCanceled(void *, zwlr_output_configuration_v1 *); static const zwlr_output_configuration_v1_listener mListener; zwlr_output_configuration_v1 *mObj; Q_SIGNALS: void succeeded(); void failed(); void canceled(); }; class WQt::OutputConfigurationHead : public QObject { Q_OBJECT; public: enum Error { AlreadySet = 1, InvalidMode = 2, InvalidCustomMode = 3, InvalidTransform = 4, InvalidScale = 5, }; OutputConfigurationHead(zwlr_output_configuration_head_v1 *); ~OutputConfigurationHead(); void setMode(WQt::OutputMode *); void setCustomMode(QSize, int32_t); void setPosition(QPoint); void setTransform(int32_t); void setScale(qreal); private: zwlr_output_configuration_head_v1 *mObj; }; Q_DECLARE_METATYPE(WQt::OutputHead); Q_DECLARE_METATYPE(WQt::OutputMode); Q_DECLARE_METATYPE(QList); Q_DECLARE_METATYPE(QList); ================================================ FILE: src/plugin-display/wayland/libwayqt/Registry.cpp ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "treeland-output-management-client-protocol.h" #include "wayland-client-protocol.h" #include "wlr-output-management-unstable-v1-client-protocol.h" #include "Output.h" #include "OutputManager.h" #include "Registry.h" #include "TreeLandOutputManager.h" #include #include #include /* Convenience functions */ void WQt::Registry::globalAnnounce( void *data, struct wl_registry *, uint32_t name, const char *interface, uint32_t version) { auto r = reinterpret_cast(data); r->handleAnnounce(name, interface, version); } void WQt::Registry::globalRemove(void *data, struct wl_registry *, uint32_t name) { // who cares :D // but we will call WQt::Registry::handleRemove just for the heck of it auto r = reinterpret_cast(data); r->handleRemove(name); } const struct wl_registry_listener WQt::Registry::mRegListener = { globalAnnounce, globalRemove, }; WQt::Registry::Registry(wl_display *wlDisplay, QObject *parent) : QObject(parent) { mWlDisplay = wlDisplay; mObj = wl_display_get_registry(mWlDisplay); if (wl_proxy_get_listener((wl_proxy *)mObj) != &mRegListener) { wl_registry_add_listener(mObj, &mRegListener, this); } wl_display_roundtrip(mWlDisplay); } WQt::Registry::~Registry() { wl_registry_destroy(mObj); wl_seat_destroy(mWlSeat); wl_shm_destroy(mWlShm); for (WQt::Output *op : mOutputs) { delete op; } if (mOutputMgr != nullptr) { delete mOutputMgr; } if (mTreeLandOutputMgr != nullptr) { delete mTreeLandOutputMgr; } } void WQt::Registry::setup() { if (!mIsSetup) { mIsSetup = true; for (WQt::Registry::ErrorType et : pendingErrors) { emit errorOccured(et); } for (WQt::Registry::Interface iface : pendingInterfaces) { emit interfaceRegistered(iface); } for (WQt::Output *op : pendingOutputs) { emit outputAdded(op); } } } wl_registry *WQt::Registry::get() { return mObj; } wl_display *WQt::Registry::waylandDisplay() { return mWlDisplay; } wl_seat *WQt::Registry::waylandSeat() { return mWlSeat; } wl_shm *WQt::Registry::waylandShm() { return mWlShm; } QList WQt::Registry::waylandOutputs() { return mOutputs.values(); } QList WQt::Registry::registeredInterfaces() { return mRegisteredInterfaces; } WQt::OutputManager *WQt::Registry::outputManager() { return mOutputMgr; } WQt::TreeLandOutputManager *WQt::Registry::treeLandOutputManager() { return mTreeLandOutputMgr; } void WQt::Registry::handleAnnounce(uint32_t name, const char *interface, uint32_t version) { /** * We really don't care about wl_seat version right now. */ if (strcmp(interface, wl_seat_interface.name) == 0) { mWlSeat = (wl_seat *)wl_registry_bind(mObj, name, &wl_seat_interface, version); if (!mWlSeat) { emitError(WQt::Registry::EmptySeat); } } /** * We really don't care about wl_shm version right now. */ if (strcmp(interface, wl_shm_interface.name) == 0) { mWlShm = (wl_shm *)wl_registry_bind(mObj, name, &wl_shm_interface, version); if (!mWlShm) { emitError(WQt::Registry::EmptyShm); } else { mRegisteredInterfaces << ShmInterface; emitInterface(ShmInterface, true); } } /** * We really don't care about wl_output version right now. */ if (strcmp(interface, wl_output_interface.name) == 0) { wl_output *op = (wl_output *)wl_registry_bind(mObj, name, &wl_output_interface, version); if (op) { auto outputObj = new WQt::Output(op); mOutputs[name] = outputObj; emitOutput(outputObj, true); } } /** * We've implemented version 2. * And wlroots 0.15.0 has version 2 available. */ else if (strcmp(interface, zwlr_output_manager_v1_interface.name) == 0) { mWlrOutputMgr = (zwlr_output_manager_v1 *) wl_registry_bind(mObj, name, &zwlr_output_manager_v1_interface, 2); if (!mWlrOutputMgr) { emitError(WQt::Registry::EmptyOutputManager); } else { mOutputMgr = new WQt::OutputManager(mWlrOutputMgr); mRegisteredInterfaces << OutputManagerInterface; emitInterface(OutputManagerInterface, true); } } else if (strcmp(interface, treeland_output_manager_v1_interface.name) == 0) { m_treeland_output_mgr = (treeland_output_manager_v1 *) wl_registry_bind(mObj, name, &treeland_output_manager_v1_interface, 2); if (!m_treeland_output_mgr) { emitError(WQt::Registry::EmptyTreeLandOuputManager); } else { mTreeLandOutputMgr = new WQt::TreeLandOutputManager(m_treeland_output_mgr); mRegisteredInterfaces << TreeLandOutputManagerInterface; emitInterface(TreeLandOutputManagerInterface, true); } } } void WQt::Registry::handleRemove(uint32_t name) { /** * While we do not care about most of the handleRemove, * we need to worry about the wl_output * objects. */ if (mOutputs.keys().contains(name)) { WQt::Output *output = mOutputs.take(name); emitOutput(output, false); } } void WQt::Registry::emitError(ErrorType et) { if (mIsSetup) { emit errorOccured(et); } else { pendingErrors << et; } } void WQt::Registry::emitOutput(WQt::Output *op, bool added) { if (mIsSetup) { if (added) { emit outputAdded(op); } else { emit outputRemoved(op); } } else { if (added) { pendingOutputs << op; } else { pendingOutputs.removeAll(op); } } } void WQt::Registry::emitInterface(WQt::Registry::Interface iface, bool added) { if (mIsSetup) { if (added) { emit interfaceRegistered(iface); } else { emit interfaceDeregistered(iface); } } else { if (added) { pendingInterfaces << iface; } else { pendingInterfaces.removeAll(iface); } } } ================================================ FILE: src/plugin-display/wayland/libwayqt/Registry.h ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include struct wl_registry; struct wl_display; struct wl_seat; struct wl_shm; struct wl_output; // struct wl_compositor; struct wl_registry_listener; struct xdg_wm_base; struct zwlr_output_manager_v1; struct zwlr_gamma_control_manager_v1; struct treeland_output_manager_v1; namespace WQt { class Registry; class XdgShell; class Output; class OutputManager; class TreeLandOutputManager; } // namespace WQt class WQt::Registry : public QObject { Q_OBJECT; public: enum ErrorType { EmptyShm, EmptyIdle, EmptySeat, EmptyXdgWmBase, EmptyCompositor, EmptyOutputManager, EmptyTreeLandOuputManager }; Q_ENUM(ErrorType); enum Interface { ShmInterface, IdleInterface, SeatInterface, WlrIdleInterface, XdgWmBaseInterface, CompositorInterface, OutputManagerInterface, TreeLandOutputManagerInterface }; Q_ENUM(Interface); Registry(wl_display *wlDisplay, QObject *parent = nullptr); ~Registry(); void setup(); wl_registry *get(); wl_display *waylandDisplay(); wl_seat *waylandSeat(); wl_shm *waylandShm(); QList waylandOutputs(); /** List the already registered interfaces */ QList registeredInterfaces(); /* Ready to use Wayland Classes */ /** * XdgShell - Xdg Shell protocol implementation */ WQt::XdgShell *xdgShell(); /** * OutputManager - Output Management protocol implementation */ WQt::OutputManager *outputManager(); /** * TreeLandOutputManager - Primary Output Manager */ WQt::TreeLandOutputManager *treeLandOutputManager(); private: /** Raw C pointer to this class */ wl_registry *mObj = nullptr; /** wl_display object */ wl_display *mWlDisplay = nullptr; /** wl_seat object */ wl_seat *mWlSeat = nullptr; /** wl_shm object */ wl_shm *mWlShm = nullptr; /** Connected outputs */ QHash mOutputs; /** List of registered interfaces */ QList mRegisteredInterfaces; /** * Output Manager Objects */ zwlr_output_manager_v1 *mWlrOutputMgr = nullptr; WQt::OutputManager *mOutputMgr = nullptr; /** * Gamma Control Objects */ zwlr_gamma_control_manager_v1 *mWlrGammaCtrl = nullptr; treeland_output_manager_v1 *m_treeland_output_mgr = nullptr; WQt::TreeLandOutputManager *mTreeLandOutputMgr = nullptr; static const wl_registry_listener mRegListener; static void globalAnnounce(void *data, wl_registry *registry, uint32_t name, const char *interface, uint32_t version); static void globalRemove(void *data, wl_registry *registry, uint32_t name); void handleAnnounce(uint32_t name, const char *interface, uint32_t version); void handleRemove(uint32_t name); QList pendingErrors; QList pendingOutputs; QList pendingInterfaces; /** Flag to ensure setup() is called only once. */ bool mIsSetup = false; /** emit errorOccured or store it in pending */ void emitError(ErrorType); /** * emit output added/removed or store in pending. * bool indicates the state: true => added, false => removed. */ void emitOutput(WQt::Output *, bool); /** * emit iInterface registered/deregistered, or store in pending. * bool indicates the state: true => registered, false => deregistered. */ void emitInterface(WQt::Registry::Interface, bool); signals: void errorOccured(ErrorType et); void outputAdded(WQt::Output *); void outputRemoved(WQt::Output *); void interfaceRegistered(WQt::Registry::Interface); void interfaceDeregistered(WQt::Registry::Interface); }; ================================================ FILE: src/plugin-display/wayland/libwayqt/TreeLandOutputManager.cpp ================================================ // SPDX-FileCopyrightText: 2018 - 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "TreeLandOutputManager.h" #include "treeland-output-management-client-protocol.h" #include #include #include #include #include WQt::TreeLandOutputManager::TreeLandOutputManager(treeland_output_manager_v1 *opMgr) { mObj = opMgr; treeland_output_manager_v1_add_listener(mObj, &mListener, this); } WQt::TreeLandOutputManager::~TreeLandOutputManager() { treeland_output_manager_v1_destroy(mObj); } void WQt::TreeLandOutputManager::setPrimaryOutput(const char *name) { treeland_output_manager_v1_set_primary_output(mObj, name); } treeland_output_color_control_v1 *WQt::TreeLandOutputManager::getColorControl(struct wl_output *output) { auto colorControl = treeland_output_manager_v1_get_color_control(mObj, output); if (colorControl) { treeland_output_color_control_v1_add_listener(colorControl, &mColorControlListener, this); } return colorControl; } void WQt::TreeLandOutputManager::setBrightness(treeland_output_color_control_v1 *control, const double brightness) { if (control) { treeland_output_color_control_v1_set_brightness(control, wl_fixed_from_double(brightness)); treeland_output_color_control_v1_commit(control); } } void WQt::TreeLandOutputManager::destroyColorControl(treeland_output_color_control_v1 *treeland_output_color_control_v1) { treeland_output_color_control_v1_destroy(treeland_output_color_control_v1); } void WQt::TreeLandOutputManager::handlePrimaryOutput(void *data, struct treeland_output_manager_v1 *treeland_output_manager_v1, const char *output_name) { Q_UNUSED(treeland_output_manager_v1) WQt::TreeLandOutputManager *manager = reinterpret_cast(data); manager->mPrimaryOutput = QString::fromLocal8Bit(output_name); emit manager->primaryOutputChanged(output_name); } void WQt::TreeLandOutputManager::handleResult(void *data, treeland_output_color_control_v1 *treeland_output_color_control_v1, uint32_t success) { // TODO: handleResult } void WQt::TreeLandOutputManager::handleColorTemperature(void *data, treeland_output_color_control_v1 *treeland_output_color_control_v1, uint32_t temperature) { WQt::TreeLandOutputManager *manager = reinterpret_cast(data); emit manager->colorTemperatureChanged(treeland_output_color_control_v1, temperature); } void WQt::TreeLandOutputManager::handleBrightness(void *data, struct treeland_output_color_control_v1 *treeland_output_color_control_v1, wl_fixed_t brightness) { WQt::TreeLandOutputManager *manager = reinterpret_cast(data); double brightnessValue = wl_fixed_to_double(brightness); emit manager->brightnessChanged(treeland_output_color_control_v1, brightnessValue); } const treeland_output_manager_v1_listener WQt::TreeLandOutputManager::mListener = { handlePrimaryOutput }; const treeland_output_color_control_v1_listener WQt::TreeLandOutputManager::mColorControlListener = { handleResult, // result handleColorTemperature, // color_temperature handleBrightness }; ================================================ FILE: src/plugin-display/wayland/libwayqt/TreeLandOutputManager.h ================================================ // SPDX-FileCopyrightText: 2018 - 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include struct wl_buffer; struct wl_output; struct treeland_output_manager_v1; struct treeland_output_manager_v1_listener; struct treeland_output_color_control_v1; struct treeland_output_color_control_v1_listener; namespace WQt { class TreeLandOutputManager; } class WQt::TreeLandOutputManager : public QObject { Q_OBJECT; public: TreeLandOutputManager(treeland_output_manager_v1 *); ~TreeLandOutputManager(); /** Set the primary output */ void setPrimaryOutput(const char *); QString mPrimaryOutput; treeland_output_color_control_v1 * getColorControl(struct wl_output *output); void setBrightness(treeland_output_color_control_v1 * treeland_output_color_control_v1,const double brightness); void destroyColorControl(treeland_output_color_control_v1 *treeland_output_color_control_v1); private: static void handlePrimaryOutput(void *data, struct treeland_output_manager_v1 *treeland_output_manager_v1, const char *output_name); static void handleResult(void *data, struct treeland_output_color_control_v1 *treeland_output_color_control_v1, uint32_t success); static void handleColorTemperature(void *data, struct treeland_output_color_control_v1 *treeland_output_color_control_v1, uint32_t temperature); static void handleBrightness(void *data, struct treeland_output_color_control_v1 *treeland_output_color_control_v1, wl_fixed_t brightness); static const treeland_output_manager_v1_listener mListener; static const treeland_output_color_control_v1_listener mColorControlListener; treeland_output_manager_v1 *mObj; Q_SIGNALS: void primaryOutputChanged(const char *); void brightnessChanged(const treeland_output_color_control_v1 *,double brightness); void colorTemperatureChanged(const treeland_output_color_control_v1 *,uint temperature); }; ================================================ FILE: src/plugin-display/wayland/libwayqt/WayQtUtils.cpp ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "WayQtUtils.h" #include #include #include #include #include wl_display *WQt::Wayland::display() { QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); if (!native) { return nullptr; } struct wl_display *display = reinterpret_cast(native->nativeResourceForIntegration("display")); return display; } wl_compositor *WQt::Wayland::compositor() { QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); if (!native) { return nullptr; } struct wl_compositor *display = reinterpret_cast(native->nativeResourceForIntegration("compositor")); return display; } wl_seat *WQt::Wayland::seat() { QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); if (!native) { return nullptr; } struct wl_seat *display = reinterpret_cast(native->nativeResourceForIntegration("wl_seat")); return display; } wl_pointer *WQt::Wayland::pointer() { QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); if (!native) { return nullptr; } struct wl_pointer *display = reinterpret_cast(native->nativeResourceForIntegration("wl_pointer")); return display; } wl_keyboard *WQt::Wayland::keyboard() { QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); if (!native) { return nullptr; } struct wl_keyboard *display = reinterpret_cast(native->nativeResourceForIntegration("wl_keyboard")); return display; } wl_touch *WQt::Wayland::touch() { QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); if (!native) { return nullptr; } struct wl_touch *display = reinterpret_cast(native->nativeResourceForIntegration("wl_touch")); return display; } void WQt::Utils::flushDisplay() { wl_display_flush(WQt::Wayland::display()); } void WQt::Utils::displayRoundtrip() { wl_display_roundtrip(WQt::Wayland::display()); } wl_output *WQt::Utils::wlOutputFromQScreen(QScreen *screen) { QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); if (!native) { return nullptr; } struct wl_output *output = reinterpret_cast(native->nativeResourceForScreen("output", screen)); return output; } wl_surface *WQt::Utils::wlSurfaceFromQWindow(QWindow *window) { window->create(); QPlatformNativeInterface *native = QGuiApplication::platformNativeInterface(); if (!native) { return nullptr; } struct wl_surface *surface = reinterpret_cast(native->nativeResourceForWindow("surface", window)); return surface; } bool WQt::Utils::isWayland() { /* Check if XDG_SESSION_TYPE is set */ QString session = qgetenv("XDG_SESSION_TYPE"); if (session.toLower() == QStringLiteral("wayland")) { return true; } /* * May be XDG_SESSION_TYPE is not set. Try Harder. * We check if WAYLAND_DISPLAY is set. */ QString wlID = qgetenv("WAYLAND_DISPLAY"); if (!wlID.isEmpty()) { return true; } /* It's probably not a wayland session. */ return false; } bool WQt::Utils::isTreeland() { /** Checking the WAYFIRE_CONFIG_FILE variable is sufficient for our cause */ static auto diff = qgetenv("DDE_CURRENT_COMPOSITOR").compare("TreeLand", Qt::CaseInsensitive); return diff == 0; } ================================================ FILE: src/plugin-display/wayland/libwayqt/WayQtUtils.h ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once class QWindow; class QScreen; struct wl_display; struct wl_compositor; struct wl_touch; struct wl_keyboard; struct wl_seat; struct wl_pointer; struct wl_output; struct wl_surface; namespace WQt { namespace Wayland { struct wl_display *display(); struct wl_compositor *compositor(); struct wl_seat *seat(); struct wl_pointer *pointer(); struct wl_keyboard *keyboard(); struct wl_touch *touch(); } // namespace Wayland namespace Utils { struct wl_output *wlOutputFromQScreen(QScreen *screen); struct wl_surface *wlSurfaceFromQWindow(QWindow *window); void flushDisplay(); void displayRoundtrip(); bool isWayland(); bool isTreeland(); } // namespace Utils } // namespace WQt ================================================ FILE: src/plugin-dock/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(PLUGIN_NAME dock) file(GLOB_RECURSE Dock_Plugin_SRCS "operation/*.cpp" "operation/*.hpp" "operation/*.h" "res/dcc-dock-plugin.qrc" ) add_library(${PLUGIN_NAME} MODULE ${Dock_Plugin_SRCS} ) target_link_libraries(${PLUGIN_NAME} PRIVATE ${DCC_FRAME_Library} ${DTK_NS}::Gui ) dcc_install_plugin(NAME ${PLUGIN_NAME} TARGET ${PLUGIN_NAME}) ================================================ FILE: src/plugin-dock/operation/dccdockexport.cpp ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dccfactory.h" #include "operation/dockpluginmodel.h" #include "operation/dockpluginsortproxymodel.h" #include #include "dccdockexport.h" #include #include #include #include #include #include #include #include #include #include #include #include // 显示模式定义 #define CUSTOM_MODE 0 #define MERGE_MODE 1 #define EXTEND_MODE 2 #define SINGLE_MODE 3 constexpr auto PLUGIN_ICON_DIR = "/usr/share/dde-dock/icons/dcc-setting"; constexpr auto PLUGIN_ICON_PREFIX = "dcc-"; constexpr auto PLUGIN_ICON_DEFAULT = "dcc_dock_plug_in"; static const QMap pluginIconMap = { {"AiAssistant", "dcc_dock_assistant"} , {"show-desktop", "dcc_dock_desktop"} , {"onboard", "dcc_dock_keyboard"} , {"notifications", "dcc_dock_notify"} , {"shutdown", "dcc_dock_power"} , {"multitasking", "dcc_dock_task"} , {"datetime", "dcc_dock_time"} , {"system-monitor", "dcc_dock_systemmonitor"} , {"grand-search", "dcc_dock_grandsearch"} , {"trash", "dcc_dock_trash"} , {"shot-start-plugin", "dcc_dock_shot_start_plugin"} }; DGUI_USE_NAMESPACE; DccDockExport::DccDockExport(QObject *parent) : QObject(parent) , m_dockDbusProxy(new DockDBusProxy(this)) , m_pluginModel(new DockPluginModel(this)) , m_sortProxyModel(new DockPluginSortProxyModel(this)) , m_dconfig(Dtk::Core::DConfig::create("org.deepin.dde.shell", "org.deepin.ds.dock.taskmanager", QString(), this)) , m_displayInter(nullptr) , m_displayMode(EXTEND_MODE) , m_monitorCount(0) , m_combineApp(true) { if (m_dconfig && m_dconfig->isValid()) { const bool noTaskGrouping = m_dconfig->value("noTaskGrouping", false).toBool(); m_combineApp = !noTaskGrouping; connect(m_dconfig, &Dtk::Core::DConfig::valueChanged, this, [this](const QString &key) { if (key == QLatin1String("noTaskGrouping")) { const bool noTaskGrouping = m_dconfig->value("noTaskGrouping", false).toBool(); bool combine = !noTaskGrouping; if (m_combineApp != combine) { m_combineApp = combine; Q_EMIT combineAppChanged(m_combineApp); } } }); } initData(); initDisplayModeConnection(); // 设置排序代理模型的源模型 m_sortProxyModel->setSourceModel(m_pluginModel); connect(m_dockDbusProxy, &DockDBusProxy::pluginVisibleChanged, m_pluginModel, &DockPluginModel::setPluginVisible); connect(m_dockDbusProxy, &DockDBusProxy::pluginsChanged, this, &DccDockExport::loadPluginData); // if it has no blur effect, dcc do not need to show multitask-view plugin connect(DWindowManagerHelper::instance(), &DWindowManagerHelper::hasBlurWindowChanged, this, &DccDockExport::initData); } DccDockExport::~DccDockExport() { if (m_displayInter) { delete m_displayInter; m_displayInter = nullptr; } } void DccDockExport::initData() { auto dciPaths = DIconTheme::dciThemeSearchPaths(); dciPaths.push_back(PLUGIN_ICON_DIR); DIconTheme::setDciThemeSearchPaths(dciPaths); loadPluginData(); } void DccDockExport::loadPluginData() { QDBusPendingReply pluginInfos = m_dockDbusProxy->plugins(); auto infos = pluginInfos.value(); for (auto &info : infos) { QString pluginIconStr{}; if (QFile::exists(QString(PLUGIN_ICON_DIR) + QDir::separator() + PLUGIN_ICON_PREFIX + info.name + ".dci")) { pluginIconStr = PLUGIN_ICON_PREFIX + info.name; } else if (QFile::exists(QString(PLUGIN_ICON_DIR) + QDir::separator() + info.name + ".dci")) { pluginIconStr = info.name; } else if (QFile::exists(info.dcc_icon)) { pluginIconStr = info.dcc_icon; } else if (pluginIconMap.contains(info.itemKey)) { pluginIconStr = pluginIconMap.value(info.itemKey); } QIcon tmpIcon = QIcon::fromTheme(pluginIconStr); if (tmpIcon.isNull()) { pluginIconStr = PLUGIN_ICON_DEFAULT; } info.dcc_icon = pluginIconStr; } m_pluginModel->resetData(infos); } bool DccDockExport::combineApp() const { return m_combineApp; } void DccDockExport::initDisplayModeConnection() { // 创建DBus接口连接 m_displayInter = new QDBusInterface("org.deepin.dde.Display1", "/org/deepin/dde/Display1", "org.deepin.dde.Display1", QDBusConnection::sessionBus(), this); if (!m_displayInter->isValid()) { qWarning() << "Display DBus interface is not valid!"; return; } // 获取当前显示模式 QVariant displayModeVar = m_displayInter->property("DisplayMode"); if (displayModeVar.isValid()) { uchar mode = displayModeVar.toUInt(); if (m_displayMode != mode) { m_displayMode = mode; Q_EMIT displayModeChanged(); } } QVariant monitorsVar = m_displayInter->property("Monitors"); if (monitorsVar.isValid()) { QList monitors; if (monitorsVar.userType() == qMetaTypeId()) { const QDBusArgument &arg = monitorsVar.value(); arg >> monitors; } else { monitors = qvariant_cast>(monitorsVar); } int count = monitors.count(); if (m_monitorCount != count) { m_monitorCount = count; Q_EMIT monitorCountChanged(); } } QDBusConnection::sessionBus().connect("org.deepin.dde.Display1", "/org/deepin/dde/Display1", "org.freedesktop.DBus.Properties", "PropertiesChanged", this, SLOT(onPropertiesChanged(QString,QMap,QStringList))); } int DccDockExport::displayMode() const { return m_displayMode; } int DccDockExport::monitorCount() const { return m_monitorCount; } void DccDockExport::setCombineApp(bool value) { if (m_combineApp == value) return; m_combineApp = value; if (!m_dconfig || !m_dconfig->isValid()) return; const bool noTaskGrouping = !value; m_dconfig->setValue("noTaskGrouping", noTaskGrouping); Q_EMIT combineAppChanged(m_combineApp); } void DccDockExport::onDisplayModeChanged(uint mode) { int newMode = static_cast(mode); if (m_displayMode != newMode) { m_displayMode = newMode; Q_EMIT displayModeChanged(); } } void DccDockExport::onPropertiesChanged(const QString &/*interfaceName*/, const QMap &changedProperties, const QStringList &/*invalidatedProperties*/) { if (changedProperties.contains("DisplayMode")) { uint newMode = changedProperties["DisplayMode"].toUInt(); onDisplayModeChanged(newMode); } if (changedProperties.contains("Monitors")) { QVariant monitorsVar = changedProperties["Monitors"]; QList monitors; if (monitorsVar.userType() == qMetaTypeId()) { const QDBusArgument &arg = monitorsVar.value(); arg >> monitors; } else { monitors = qvariant_cast>(monitorsVar); } int count = monitors.count(); if (m_monitorCount != count) { m_monitorCount = count; Q_EMIT monitorCountChanged(); } } } DCC_FACTORY_CLASS(DccDockExport) #include "dccdockexport.moc" ================================================ FILE: src/plugin-dock/operation/dccdockexport.h ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "operation/dockdbusproxy.h" #include "operation/dockpluginsortproxymodel.h" #include #include namespace Dtk { namespace Core { class DConfig; } } class DccDockExport : public QObject { Q_OBJECT Q_PROPERTY(DockDBusProxy *dockInter MEMBER m_dockDbusProxy CONSTANT) Q_PROPERTY(DockPluginSortProxyModel *pluginModel MEMBER m_sortProxyModel CONSTANT) Q_PROPERTY(int displayMode READ displayMode NOTIFY displayModeChanged) Q_PROPERTY(int monitorCount READ monitorCount NOTIFY monitorCountChanged) Q_PROPERTY(bool combineApp READ combineApp WRITE setCombineApp NOTIFY combineAppChanged) public: explicit DccDockExport(QObject *parent = nullptr); ~DccDockExport() override; int displayMode() const; int monitorCount() const; bool combineApp() const; private: void initData(); void initDisplayModeConnection(); public Q_SLOTS: void loadPluginData(); void setCombineApp(bool value); Q_SIGNALS: void displayModeChanged(); void monitorCountChanged(); void combineAppChanged(bool combineApp); private: DockDBusProxy *m_dockDbusProxy; DockPluginModel *m_pluginModel; DockPluginSortProxyModel *m_sortProxyModel; Dtk::Core::DConfig *m_dconfig; QDBusInterface *m_displayInter; int m_displayMode; int m_monitorCount; bool m_combineApp; private Q_SLOTS: void onDisplayModeChanged(uint mode); void onPropertiesChanged(const QString &interfaceName, const QMap &changedProperties, const QStringList &invalidatedProperties); }; ================================================ FILE: src/plugin-dock/operation/dockdbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "dockdbusproxy.h" #include #include #include #include const static QString DaemonDockService = "org.deepin.dde.daemon.Dock1"; const static QString DaemonDockPath = "/org/deepin/dde/daemon/Dock1"; const static QString DaemonDockInterface = "org.deepin.dde.daemon.Dock1"; const static QString DockService = "org.deepin.dde.Dock1"; const static QString DockPath = "/org/deepin/dde/Dock1"; const static QString DockInterface = "org.deepin.dde.Dock1"; const static QString PropertiesInterface = "org.freedesktop.DBus.Properties"; const static QString PropertiesChanged = "PropertiesChanged"; QDBusArgument &operator<<(QDBusArgument &arg, const DockItemInfo &info) { arg.beginStructure(); arg << info.name << info.displayName << info.itemKey << info.settingKey << info.dcc_icon << info.visible; arg.endStructure(); return arg; } const QDBusArgument &operator>>(const QDBusArgument &arg, DockItemInfo &info) { arg.beginStructure(); arg >> info.name >> info.displayName >> info.itemKey >> info.settingKey >> info.dcc_icon >> info.visible; arg.endStructure(); return arg; } static void registDockItemType() { static bool isRegister = false; if (isRegister) return; qRegisterMetaType("DockItemInfo"); qDBusRegisterMetaType(); qRegisterMetaType("DockItemInfos"); qDBusRegisterMetaType(); isRegister = true; } DockDBusProxy::DockDBusProxy(QObject *parent) : QObject(parent) , m_daemonDockInter(new QDBusInterface(DaemonDockService, DaemonDockPath, DaemonDockInterface, QDBusConnection::sessionBus(), this)) , m_dockInter(new QDBusInterface(DockService, DockPath, DockInterface, QDBusConnection::sessionBus(), this)) { QDBusConnection::sessionBus().connect(DaemonDockService, DaemonDockPath, DaemonDockInterface, "DisplayModeChanged", this, SIGNAL(DisplayModeChanged(int))); QDBusConnection::sessionBus().connect(DaemonDockService, DaemonDockPath, DaemonDockInterface, "PositionChanged", this, SIGNAL(PositionChanged(int))); QDBusConnection::sessionBus().connect(DaemonDockService, DaemonDockPath, DaemonDockInterface, "HideModeChanged", this, SIGNAL(HideModeChanged(int))); QDBusConnection::sessionBus().connect(DaemonDockService, DaemonDockPath, DaemonDockInterface, "WindowSizeEfficientChanged", this, SIGNAL(WindowSizeEfficientChanged(uint))); QDBusConnection::sessionBus().connect(DaemonDockService, DaemonDockPath, DaemonDockInterface, "WindowSizeFashionChanged", this, SIGNAL(WindowSizeFashionChanged(uint))); QDBusConnection::sessionBus().connect(DaemonDockService, DaemonDockPath, DaemonDockInterface, "showRecentChanged", this, SIGNAL(showRecentChanged(bool))); QDBusConnection::sessionBus().connect(DaemonDockService, DaemonDockPath, DaemonDockInterface, "LockedChanged", this, SIGNAL(LockedChanged(bool))); QDBusConnection::sessionBus().connect(DockService, DockPath, DockInterface, "showInPrimaryChanged", this, SIGNAL(ShowInPrimaryChanged(bool))); QDBusConnection::sessionBus().connect(DockService, DockPath, DockInterface, "pluginVisibleChanged", this, SIGNAL(pluginVisibleChanged(const QString &, bool))); QDBusConnection::sessionBus().connect(DockService, DockPath, DockInterface, "pluginsChanged", this, SIGNAL(pluginsChanged())); registDockItemType(); } int DockDBusProxy::displayMode() { return qvariant_cast(m_daemonDockInter->property("DisplayMode")); } void DockDBusProxy::setDisplayMode(int mode) { m_daemonDockInter->setProperty("DisplayMode", QVariant::fromValue(mode)); } int DockDBusProxy::position() { return qvariant_cast(m_daemonDockInter->property("Position")); } void DockDBusProxy::setPosition(int value) { m_daemonDockInter->setProperty("Position", QVariant::fromValue(value)); } int DockDBusProxy::hideMode() { return qvariant_cast(m_daemonDockInter->property("HideMode")); } void DockDBusProxy::setHideMode(int value) { m_daemonDockInter->setProperty("HideMode", QVariant::fromValue(value)); } uint DockDBusProxy::windowSizeEfficient() { return qvariant_cast(m_daemonDockInter->property("WindowSizeEfficient")); } void DockDBusProxy::setWindowSizeEfficient(uint value) { m_daemonDockInter->setProperty("WindowSizeEfficient", QVariant::fromValue(value)); } uint DockDBusProxy::windowSizeFashion() { return qvariant_cast(m_daemonDockInter->property("WindowSizeFashion")); } void DockDBusProxy::setWindowSizeFashion(uint value) { m_daemonDockInter->setProperty("WindowSizeFashion", QVariant::fromValue(value)); } bool DockDBusProxy::showInPrimary() { return qvariant_cast(m_dockInter->property("showInPrimary")); } void DockDBusProxy::setShowInPrimary(bool value) { m_dockInter->setProperty("showInPrimary", QVariant::fromValue(value)); } bool DockDBusProxy::locked() { return qvariant_cast(m_daemonDockInter->property("Locked")); } void DockDBusProxy::setLocked(bool value) { m_daemonDockInter->setProperty("Locked", QVariant::fromValue(value)); } bool DockDBusProxy::showRecent() { return qvariant_cast(m_daemonDockInter->property("ShowRecent")); } void DockDBusProxy::resizeDock(int offset, bool dragging) { m_dockInter->call(QDBus::CallMode::Block, QStringLiteral("resizeDock"), QVariant::fromValue(offset), QVariant::fromValue(dragging)); } QDBusPendingReply DockDBusProxy::GetLoadedPlugins() { QDBusPendingReply reply = m_dockInter->asyncCall(QStringLiteral("GetLoadedPlugins")); reply.waitForFinished(); return reply; } QDBusPendingReply DockDBusProxy::getPluginKey(const QString &pluginName) { QList argumentList; argumentList << QVariant::fromValue(pluginName); return m_dockInter->asyncCallWithArgumentList(QStringLiteral("getPluginKey"), argumentList); } QDBusPendingReply DockDBusProxy::getPluginVisible(const QString &pluginName) { QList argumentList; argumentList << QVariant::fromValue(pluginName); return m_dockInter->asyncCallWithArgumentList(QStringLiteral("getPluginVisible"), argumentList); } QDBusPendingReply<> DockDBusProxy::setPluginVisible(const QString &pluginName, bool visible) { QList argumentList; argumentList << QVariant::fromValue(pluginName) << QVariant::fromValue(visible); return m_dockInter->asyncCallWithArgumentList(QStringLiteral("setPluginVisible"), argumentList); } QDBusPendingReply<> DockDBusProxy::SetShowRecent(bool visible) { QList argumengList; argumengList << QVariant::fromValue(visible); return m_daemonDockInter->asyncCallWithArgumentList(QStringLiteral("SetShowRecent"), argumengList); } QDBusPendingReply DockDBusProxy::plugins() { QDBusPendingReply reply = m_dockInter->asyncCall(QStringLiteral("plugins")); reply.waitForFinished(); return reply; } QDBusPendingReply<> DockDBusProxy::setItemOnDock(const QString settingKey, const QString &itemKey, bool visible) { QList argumengList; argumengList << settingKey << itemKey << QVariant::fromValue(visible); return m_dockInter->asyncCallWithArgumentList("setItemOnDock", argumengList); } ================================================ FILE: src/plugin-dock/operation/dockdbusproxy.h ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef DOCKDBUSPROXY_H #define DOCKDBUSPROXY_H #include #include #include "dockpluginmodel.h" class QDBusInterface; class QDBusMessage; QDBusArgument &operator<<(QDBusArgument &arg, const DockItemInfo &info); const QDBusArgument &operator>>(const QDBusArgument &arg, DockItemInfo &info); Q_DECLARE_METATYPE(DockItemInfo) Q_DECLARE_METATYPE(DockItemInfos) class DockDBusProxy : public QObject { Q_OBJECT public: explicit DockDBusProxy(QObject *parent = nullptr); Q_PROPERTY(int DisplayMode READ displayMode WRITE setDisplayMode NOTIFY DisplayModeChanged) int displayMode(); Q_INVOKABLE void setDisplayMode(int mode); Q_PROPERTY(int Position READ position WRITE setPosition NOTIFY PositionChanged) int position(); Q_INVOKABLE void setPosition(int value); Q_PROPERTY(int HideMode READ hideMode WRITE setHideMode NOTIFY HideModeChanged) int hideMode(); Q_INVOKABLE void setHideMode(int value); Q_PROPERTY(uint WindowSizeEfficient READ windowSizeEfficient WRITE setWindowSizeEfficient NOTIFY WindowSizeEfficientChanged) uint windowSizeEfficient(); void setWindowSizeEfficient(uint value); Q_PROPERTY(uint WindowSizeFashion READ windowSizeFashion WRITE setWindowSizeFashion NOTIFY WindowSizeFashionChanged) uint windowSizeFashion(); void setWindowSizeFashion(uint value); Q_PROPERTY(bool showInPrimary READ showInPrimary WRITE setShowInPrimary NOTIFY ShowInPrimaryChanged) bool showInPrimary(); Q_INVOKABLE void setShowInPrimary(bool value); Q_PROPERTY(bool locked READ locked WRITE setLocked NOTIFY LockedChanged) bool locked(); Q_INVOKABLE void setLocked(bool value); Q_PROPERTY(bool ShowRecent READ showRecent NOTIFY showRecentChanged) bool showRecent(); public Q_SLOTS: void resizeDock(int offset, bool dragging); QDBusPendingReply GetLoadedPlugins(); QDBusPendingReply getPluginKey(const QString &pluginName); QDBusPendingReply getPluginVisible(const QString &pluginName); QDBusPendingReply<> setPluginVisible(const QString &pluginName, bool visible); QDBusPendingReply<> SetShowRecent(bool visible); QDBusPendingReply plugins(); QDBusPendingReply<> setItemOnDock(const QString settingKey, const QString &itemKey, bool visible); Q_SIGNALS: // property changed signals void DisplayModeChanged(int displayMode) const; void PositionChanged(int position) const; void HideModeChanged(int hideMode) const; void WindowSizeEfficientChanged(uint windowSizeEfficient) const; void WindowSizeFashionChanged(uint windowSizeFashion) const; void ShowInPrimaryChanged(bool showInPrimary) const; void LockedChanged(bool locked) const; // real singals void pluginVisibleChanged(const QString &pluginName, bool visible) const; void showRecentChanged(bool) const; void pluginsChanged() const; private: QDBusInterface *m_daemonDockInter; QDBusInterface *m_dockInter; }; #endif // DOCKDBUSPROXY_H ================================================ FILE: src/plugin-dock/operation/dockpluginmodel.cpp ================================================ //SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "dockpluginmodel.h" DockPluginModel::DockPluginModel(QObject *parent) : QAbstractItemModel(parent) { } QModelIndex DockPluginModel::index(int row, int column, const QModelIndex &parent) const { if (row < 0 || row >= rowCount() || parent.isValid() || column != 0) return QModelIndex(); return createIndex(row, 0); } QModelIndex DockPluginModel::parent(const QModelIndex &child) const { Q_UNUSED(child) return QModelIndex(); } int DockPluginModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return m_dockItemInfos.size(); } int DockPluginModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent) return 1; } QVariant DockPluginModel::data(const QModelIndex &index, int role) const { int row = index.row(); if (row < 0 || row >= m_dockItemInfos.size()) { return {}; } switch (role) { case Qt::DisplayRole: return m_dockItemInfos[row].displayName; case PluginNameRole: return m_dockItemInfos[row].name; case PlugindisplayNameRole: return m_dockItemInfos[row].displayName; case PluginItemKeyRole: return m_dockItemInfos[row].itemKey; case PluginSettingKeyRole: return m_dockItemInfos[row].settingKey; case PluginIconKeyRole: return m_dockItemInfos[row].dcc_icon; case PluginVisibleRole: return m_dockItemInfos[row].visible; } return {}; } QHash DockPluginModel::roleNames() const { QHash roles = QAbstractItemModel::roleNames();; roles[PluginNameRole] = "name"; roles[PlugindisplayNameRole] = "displayName"; roles[PluginItemKeyRole] = "key"; roles[PluginSettingKeyRole] = "settingKey"; roles[PluginIconKeyRole] = "icon"; roles[PluginVisibleRole] = "visible"; return roles; } void DockPluginModel::setPluginVisible(const QString &pluginName, bool visible) { for (int i = 0; i < m_dockItemInfos.size(); ++i) { if (pluginName == m_dockItemInfos[i].itemKey) { m_dockItemInfos[i].visible = visible; emit dataChanged(index(i, 0), index(i, 0)); return; } } } void DockPluginModel::resetData(const DockItemInfos &pluginInfos) { beginResetModel(); m_dockItemInfos = pluginInfos; endResetModel(); } ================================================ FILE: src/plugin-dock/operation/dockpluginmodel.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include struct DockItemInfo { QString name; QString displayName; QString itemKey; QString settingKey; QString dcc_icon; bool visible; }; typedef QList DockItemInfos; class DockPluginModel : public QAbstractItemModel { Q_OBJECT enum DockPluginTypeRole { PluginNameRole = Qt::UserRole + 1, PlugindisplayNameRole, PluginItemKeyRole, PluginSettingKeyRole, PluginIconKeyRole, PluginVisibleRole }; public: explicit DockPluginModel(QObject *parent = nullptr); QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &child) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; void setPluginVisible(const QString &pluginName, bool visible); void resetData(const DockItemInfos &pluginInfos); protected: QHash roleNames() const override; private: DockItemInfos m_dockItemInfos; }; ================================================ FILE: src/plugin-dock/operation/dockpluginsortproxymodel.cpp ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "dockpluginsortproxymodel.h" #include #include DockPluginSortProxyModel::DockPluginSortProxyModel(QObject *parent) : QSortFilterProxyModel(parent) { setDynamicSortFilter(true); // 启用动态排序,当源模型数据变化时自动重新排序 setSortRole(Qt::DisplayRole); // 默认按 displayName 排序 sort(0, Qt::AscendingOrder); } DockPluginSortProxyModel::StringGroup DockPluginSortProxyModel::classifyString(const QString &s) const { for (QChar c : s) { if (c.isSpace()) continue; if (c.isDigit()) return StringGroup::Digit; ushort u = c.unicode(); if ((u >= 'A' && u <= 'Z') || (u >= 'a' && u <= 'z')) return StringGroup::Latin; return StringGroup::CJK; } return StringGroup::CJK; } // 按显示名,支持“数字 -> 英文 -> 中文”三段排序 bool DockPluginSortProxyModel::lessThan(const QModelIndex &leftIndex, const QModelIndex &rightIndex) const { const QString left = sourceModel()->data(leftIndex, Qt::DisplayRole).toString(); const QString right = sourceModel()->data(rightIndex, Qt::DisplayRole).toString(); const StringGroup leftGroup = classifyString(left); const StringGroup rightGroup = classifyString(right); // 不同组:直接比优先级 if (leftGroup != rightGroup) return static_cast(leftGroup) < static_cast(rightGroup); // 数字:自然数字排序 if (leftGroup == StringGroup::Digit) { QCollator digitCollator(QLocale::c()); digitCollator.setNumericMode(true); digitCollator.setCaseSensitivity(Qt::CaseInsensitive); return digitCollator.compare(left, right) < 0; } // 英文:字母序 if (leftGroup == StringGroup::Latin) { return QString::compare(left, right, Qt::CaseInsensitive) < 0; } // 中文:拼音序(强制中文 locale) QCollator zhCollator(QLocale(QLocale::Chinese, QLocale::China)); zhCollator.setNumericMode(true); zhCollator.setCaseSensitivity(Qt::CaseInsensitive); return zhCollator.compare(left, right) < 0; } ================================================ FILE: src/plugin-dock/operation/dockpluginsortproxymodel.h ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include class DockPluginSortProxyModel : public QSortFilterProxyModel { Q_OBJECT enum StringGroup { Digit = 0, Latin = 1, CJK = 2 }; public: explicit DockPluginSortProxyModel(QObject *parent = nullptr); DockPluginSortProxyModel::StringGroup classifyString(const QString &s) const; protected: bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; }; ================================================ FILE: src/plugin-dock/qml/CustomComBobox.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS D.ComboBox { id: control flat: true textRole: "text" valueRole: "value" delegate: D.MenuItem { id: menuItem useIndicatorPadding: true width: control.width text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData highlighted: control.isInteractingWithContent ? control.highlightedIndex === index : false hoverEnabled: control.hoverEnabled autoExclusive: true checked: control.currentIndex === index implicitHeight: DS.Style.control.implicitHeight(menuItem) readonly property real availableTextWidth: contentItem ? contentItem.width : (width - leftPadding - rightPadding) FontMetrics { id: fontMetrics font: menuItem.font } D.ToolTip { visible: menuItem.hovered && fontMetrics.advanceWidth(menuItem.text) > menuItem.availableTextWidth text: menuItem.text delay: 500 } } // To replace function: indexOfValue function indexByValue(value) { for (var i = 0; i < model.count; i++) { if (model.get(i).value === value) { return i; } } return -1; } } ================================================ FILE: src/plugin-dock/qml/Dock.qml ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { name: "dock" parentName: "personalization" displayName: qsTr("Desktop and taskbar") description: qsTr("Desktop organization, taskbar mode, plugin area settings") icon: "dock" weight: 100 } ================================================ FILE: src/plugin-dock/qml/DockMain.qml ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { readonly property int modeDelegateWidth: 144 readonly property int modeDelegateHeight: 72 readonly property int modeDelegatePadding: 4 readonly property int modeDelegateRadius: 9 DccTitleObject { name: "taskBarTitle" weight: 500 parentName: "personalization/dock" displayName: qsTr("Dock") } DccObject { name: "taskBarModeGroup" parentName: "personalization/dock" weight: 600 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "dockmode" parentName: "personalization/dock/taskBarModeGroup" displayName: qsTr("Mode") weight: 10 pageType: DccObject.Item page: ColumnLayout { Label { Layout.topMargin: 10 font: D.DTK.fontManager.t7 text: dccObj.displayName Layout.leftMargin: 10 } Flow { id: modeLayout spacing: 10 Layout.fillWidth: true Layout.bottomMargin: 10 Layout.leftMargin: 10 ListModel { id: modeData ListElement { text: qsTr("Classic Mode"); icon: "effcient_left"; value: 1 } ListElement { text: qsTr("Centered Mode"); icon: "effcient_center"; value: 0 } // ListElement { text: qsTr("Fashion Mode"); icon: "fashion"; value: 2 } } Repeater { id: modeRepeater model: modeData ColumnLayout { D.ItemDelegate { id: modeDelegate Layout.preferredWidth: modeDelegateWidth Layout.preferredHeight: modeDelegateHeight Layout.alignment: Qt.AlignHCenter Layout.margins: 0 checkable: false backgroundVisible: false focusPolicy: Qt.TabFocus activeFocusOnTab: index === 0 padding: modeDelegatePadding function activate() { dccData.dockInter.setDisplayMode(model.value) } background: Rectangle { radius: modeDelegateRadius color: "transparent" border.width: dccData.dockInter.DisplayMode === model.value || modeDelegate.activeFocus ? 2 : 0 border.color: D.DTK.platformTheme.activeColor } contentItem: Control { id: iconControl contentItem: D.DciIcon { palette: D.DTK.makeIconPalette(iconControl.palette) theme: iconControl.D.ColorSelector.controlTheme sourceSize: Qt.size(iconControl.width, iconControl.height) name: model.icon } } onClicked: activate() Keys.onSpacePressed: activate() Keys.onReturnPressed: activate() Keys.onLeftPressed: { if (index > 0) { modeRepeater.itemAt(index - 1).children[0].forceActiveFocus() } } Keys.onRightPressed: { if (index < modeRepeater.count - 1) { modeRepeater.itemAt(index + 1).children[0].forceActiveFocus() } } } Text { text: model.text Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font: D.DTK.fontManager.t9 color: dccData.dockInter.DisplayMode === model.value ? D.DTK.platformTheme.activeColor : this.palette.windowText } } } } } } } DccObject { name: "dockSettingsGroup" parentName: "personalization/dock" weight: 700 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "docksize" parentName: "personalization/dock/dockSettingsGroup" displayName: qsTr("Dock size") weight: 10 pageType: DccObject.Editor page: RowLayout { spacing: 10 Label { Layout.alignment: Qt.AlignVCenter font: D.DTK.fontManager.t7 text: qsTr("Small") } D.Slider { Layout.alignment: Qt.AlignVCenter id: balanceSlider handleType: Slider.HandleType.ArrowBottom implicitHeight: 24 highlightedPassedGroove: true stepSize: 1 value: dccData.dockInter.DisplayMode === 2 ? dccData.dockInter.WindowSizeFashion : dccData.dockInter.WindowSizeEfficient from: 37 to: 100 onValueChanged: { dccData.dockInter.resizeDock(value, true) } onPressedChanged: { dccData.dockInter.resizeDock(value, pressed) } } D.Label { Layout.alignment: Qt.AlignVCenter font: D.DTK.fontManager.t7 text: qsTr("Large") } } } DccObject { name: "lockedDock" parentName: "personalization/dock/dockSettingsGroup" displayName: qsTr("Lock the Dock") weight: 20 pageType: DccObject.Editor page: Switch { checked: dccData.dockInter.locked onCheckedChanged: { if (dccData.dockInter.locked != checked) dccData.dockInter.setLocked(checked) } } } DccObject { name: "positionInScreen" parentName: "personalization/dock/dockSettingsGroup" displayName: qsTr("Position on the screen") weight: 100 pageType: DccObject.Editor page: CustomComBobox { flat: true model: alignModel currentIndex: indexByValue(dccData.dockInter.Position) ListModel { id: alignModel ListElement { text: qsTr("Top"); value: 0 } ListElement { text: qsTr("Bottom"); value: 2 } ListElement { text: qsTr("Left"); value: 3 } ListElement { text: qsTr("Right"); value: 1 } } onCurrentIndexChanged: { var selectedValue = model.get(currentIndex).value; dccData.dockInter.setPosition(selectedValue) } } } DccObject { name: "positionInScreen" parentName: "personalization/dock/dockSettingsGroup" displayName: qsTr("Status") weight: 200 pageType: DccObject.Editor page: CustomComBobox { flat: true model: hideModel currentIndex: indexByValue(dccData.dockInter.HideMode) ListModel { id: hideModel ListElement { text: qsTr("Keep shown"); value: 0 } ListElement { text: qsTr("Keep hidden"); value: 1 } ListElement { text: qsTr("Smart hide"); value: 2 } } onCurrentIndexChanged: { var selectedValue = model.get(currentIndex).value; dccData.dockInter.setHideMode(selectedValue) } } } DccObject { name: "combineApp" parentName: "personalization/dock/dockSettingsGroup" displayName: qsTr("Combine application icons") weight: 200 pageType: DccObject.Editor page: Switch { checked: dccData.combineApp onCheckedChanged: { if (dccData.combineApp !== checked) dccData.setCombineApp(checked) } } } } DccObject { name: "multiscreenGroup" parentName: "personalization/dock" weight: 800 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "multiscreenItem" parentName: "personalization/dock/multiscreenGroup" displayName: qsTr("Multiple Displays") description: qsTr("Set the position of the taskbar on the screen") visible: dccData.displayMode === 2 && dccData.monitorCount > 1 weight: 10 pageType: DccObject.Editor page: CustomComBobox { flat: true model: showModeModel currentIndex: indexByValue(dccData.dockInter.showInPrimary) implicitWidth: 260 ListModel { id: showModeModel ListElement { text: qsTr("Only on main"); value: true } ListElement { text: qsTr("On screen where the cursor is"); value: false } } onCurrentIndexChanged: { var selectedValue = model.get(currentIndex).value; dccData.dockInter.setShowInPrimary(selectedValue) } } } } DccObject { name: "pluginArea" weight:900 icon: "plugin" parentName: "personalization/dock" displayName: qsTr("Plugin Area") description: qsTr("Select which icons appear in the Dock") PluginArea {} } } ================================================ FILE: src/plugin-dock/qml/PluginArea.qml ================================================ //SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { Connections { target: DccApp function onActiveObjectChanged(activeObject) { if (activeObject.name === "pluginArea") { console.log("pluginArea object activated, refreshing plugin data...") dccData.loadPluginData() } } } DccObject { name: "pluginAreaTitle" weight: 10 parentName: "personalization/dock/pluginArea" pageType: DccObject.Item displayName: qsTr("Plugin Area") description: qsTr("Select which icons appear in the Dock") onParentItemChanged: item => { if (item) item.activeFocusOnTab = false } page: ColumnLayout { Label { property D.Palette textColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.9) normalDark: Qt.rgba(1, 1, 1, 0.9) } font.family: D.DTK.fontManager.t5.family font.pixelSize: D.DTK.fontManager.t5.pixelSize font.weight: 500 Layout.leftMargin: 14 text: dccObj.displayName color: D.ColorSelector.textColor } Label { Layout.leftMargin: 14 text: dccObj.description } } } DccObject { name: "pluginAreaView" parentName: "personalization/dock/pluginArea" weight: 100 pageType: DccObject.Item page: DccGroupView {} DccRepeater { model: dccData.pluginModel delegate: DccObject { name: "plugin" + model.key property real iconSize: 16 parentName: "personalization/dock/pluginArea/pluginAreaView" weight: 10 + index * 10 backgroundType: DccObject.Normal icon: model.icon displayName: model.displayName pageType: DccObject.Editor page: DccCheckIcon { checked: model.visible onClicked: { dccData.dockInter.setItemOnDock(model.settingKey, model.key, !checked) } } onParentItemChanged: function(item) { if (!item) return item.activeFocusOnTab = true function isSameGroup(obj) { return obj && obj.toString().indexOf("DccEditorItem") >= 0 } function findContainer() { var container = item.parent while (container && container.children.length <= 1) { container = container.parent } return container } function findEdgeItem(forward) { var container = findContainer() if (!container) return null var siblings = container.children if (forward) { for (var i = siblings.length - 1; i >= 0; i--) { if (isSameGroup(siblings[i])) return siblings[i] } } else { for (var i = 0; i < siblings.length; i++) { if (isSameGroup(siblings[i])) return siblings[i] } } return null } item.Keys.onUpPressed.connect(function() { var next = item.nextItemInFocusChain(false) if (isSameGroup(next)) { next.forceActiveFocus(Qt.BacktabFocusReason) } else { var lastItem = findEdgeItem(true) if (lastItem) lastItem.forceActiveFocus(Qt.BacktabFocusReason) } }) item.Keys.onDownPressed.connect(function() { var next = item.nextItemInFocusChain(true) if (isSameGroup(next)) { next.forceActiveFocus(Qt.TabFocusReason) } else { var firstItem = findEdgeItem(false) if (firstItem) firstItem.forceActiveFocus(Qt.TabFocusReason) } }) } } } } } ================================================ FILE: src/plugin-dock/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-dock/res/dcc-dock-plugin.qrc ================================================ dark/icons/effcient_center_70px.svg dark/icons/effcient_left_70px.svg dark/icons/fashion_70px.svg light/icons/effcient_center_70px.svg light/icons/effcient_left_70px.svg light/icons/fashion_70px.svg icons/plugin.dci icons/dock.dci texts/dcc_dock_time_16px.svg texts/dcc_dock_assistant_16px.svg texts/dcc_dock_desktop_16px.svg texts/dcc_dock_keyboard_16px.svg texts/dcc_dock_notify_16px.svg texts/dcc_dock_plug_in_16px.svg texts/dcc_dock_power_16px.svg texts/dcc_dock_task_16px.svg texts/dcc_dock_trash_16px.svg texts/dcc_dock_grandsearch_16px.svg texts/dcc_dock_systemmonitor_16px.svg texts/dcc_dock_shot_start_plugin_16px.svg ================================================ FILE: src/plugin-keyboard/CMakeLists.txt ================================================ if (BUILD_PLUGIN) set(Plugin_Name keyboard) file(GLOB_RECURSE keyboard_SRCS "operation/*.h" "operation/*.cpp" "operation/qrc/keyboard.qrc" ) file(GLOB_RECURSE keyboard_qml_SRCS "qml/*.qml" ) # pkg_check_modules(QGSettings REQUIRED IMPORTED_TARGET gsettings-qt) add_library(${Plugin_Name} MODULE ${keyboard_SRCS} ) set(keyboard_Includes src/plugin-keyboard/operation ) find_package(PolkitQt6-1 REQUIRED) set(keyboard_Libraries ${DCC_FRAME_Library} ${DTK_NS}::Gui ${QT_NS}::DBus ${QT_NS}::Gui ${QT_NS}::Qml PolkitQt6-1::Agent ) target_include_directories(${Plugin_Name} PUBLIC ${keyboard_Includes} ) target_link_libraries(${Plugin_Name} PRIVATE ${keyboard_Libraries} dcc-shared-utils ) dcc_install_plugin(NAME ${Plugin_Name} TARGET ${Plugin_Name}) # dcc_handle_plugin_translation(NAME ${Plugin_Name} QML_FILES ${keyboard_qml_SRCS} SOURCE_FILES ${keyboard_SRCS}) endif() ================================================ FILE: src/plugin-keyboard/operation/keyboardcontroller.cpp ================================================ //SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "keyboardcontroller.h" #include "dccfactory.h" #include "layoutsmodel.h" #include #include namespace dccV25 { DCC_FACTORY_CLASS(KeyboardController) KeyboardController::KeyboardController(QObject *parent) : QObject(parent) { m_model = new KeyboardModel(this); m_worker = new KeyboardWorker(m_model, this); m_shortcutModel = new ShortcutModel(this); m_worker->setShortcutModel(m_shortcutModel); connect(m_model, &KeyboardModel::repeatIntervalChanged, this, &KeyboardController::repeatIntervalChanged); connect(m_model, &KeyboardModel::repeatDelayChanged, this, &KeyboardController::repeatDelayChanged); connect(m_model, &KeyboardModel::numLockChanged, this, &KeyboardController::numLockChanged); connect(m_model, &KeyboardModel::capsLockChanged, this, &KeyboardController::capsLockChanged); connect(m_model, &KeyboardModel::userLayoutChanged, this, &KeyboardController::layoutCountChanged); connect(m_model, &KeyboardModel::curLayoutChanged, this, &KeyboardController::currentLayoutChanged); connect(m_model, &KeyboardModel::keyboardEnabledChanged, this, &KeyboardController::keyboardEnabledChanged); connect(m_shortcutModel, &ShortcutModel::keyEvent, this, [this](bool press, const QString &shortcut){ ShortcutInfo *current = m_shortcutModel->currentInfo(); ShortcutInfo *conflict = m_shortcutModel->getInfo(shortcut); if (!press) { if (shortcut.isEmpty()) { Q_EMIT requestRestore(); return; } if (shortcut == "BackSpace" || shortcut == "Delete") { Q_EMIT requestClear(); return; } // have conflict if (conflict) { // self conflict if (conflict == current && conflict->accels == current->accels) { Q_EMIT requestRestore(); return; } auto conflictName = QString("%1").arg(conflict->name.toHtmlEscaped()); QString text = KeyboardController::tr("This shortcut conflicts with [%1]").arg(conflictName); setConflictText(text); Q_EMIT keyConflicted(current ? current->accels : "", conflict->accels); } else { // save if (current) { current->accels = shortcut; } Q_EMIT keyDone(shortcut); } } Q_EMIT keyEvent(shortcut); }); QMetaObject::invokeMethod(m_worker, "active", Qt::QueuedConnection); } uint KeyboardController::repeatInterval() const { return m_model->repeatInterval(); } void KeyboardController::setRepeatInterval(uint newRepeatInterval) { if (repeatInterval() == newRepeatInterval) return; m_worker->setRepeatInterval(newRepeatInterval); } uint KeyboardController::repeatDelay() const { return m_model->repeatDelay(); } void KeyboardController::setRepeatDelay(uint newRepeatDelay) { if (repeatDelay() == newRepeatDelay) return; m_worker->setRepeatDelay(newRepeatDelay); } bool KeyboardController::keyboardEnabled() const { return m_model->keyboardEnabled(); } void KeyboardController::setKeyboardEnabled(bool enabled) { if (keyboardEnabled() == enabled) return; connect(PolkitQt1::Authority::instance(), &PolkitQt1::Authority::checkAuthorizationFinished, this, [this, enabled](PolkitQt1::Authority::Result authenticationResult) { disconnect(PolkitQt1::Authority::instance(), nullptr, this, nullptr); if (PolkitQt1::Authority::Result::Yes == authenticationResult) { m_worker->setKeyboardEnabled(enabled); } else { Q_EMIT keyboardEnabledChanged(); } }); PolkitQt1::Authority::instance()->checkAuthorization("org.deepin.dde.accounts.user-administration", PolkitQt1::UnixProcessSubject(getpid()), PolkitQt1::Authority::AllowUserInteraction); } bool KeyboardController::numLock() const { return m_model->numLock(); } void KeyboardController::setNumLock(bool newNumLock) { m_worker->setNumLock(newNumLock); } bool KeyboardController::capsLock() const { return m_model->capsLock(); } void KeyboardController::setCapsLock(bool newCapsLock) { if (capsLock() == newCapsLock) return; m_worker->setCapsLock(newCapsLock); } QMap KeyboardController::userLayouts() const { return m_model->userLayout(); } QString KeyboardController::userLayoutAt(int index, bool isValue/* = true*/) const { const QStringList &list = m_model->getUserLayoutList(); const QString &key = list.value(index); if (!isValue) return key; return userLayouts().value(key); } bool KeyboardController::userLayoutsContains(const QString &key) { return userLayouts().contains(key); } QSortFilterProxyModel *KeyboardController::layoutSearchModel() { if (m_layoutSearchModel) return m_layoutSearchModel; m_layoutSearchModel = new LayoutFilterModel(this); m_worker->onPinyin(); connect(m_model, &KeyboardModel::userLayoutChanged, m_layoutSearchModel, [this](const QString &, const QString &){ m_layoutSearchModel->invalidate(); }); auto sourceModel = new LayoutsModel(m_worker); m_layoutSearchModel->setSourceModel(sourceModel); m_layoutSearchModel->setFilterRole(LayoutsModel::SearchedTextRole); m_layoutSearchModel->setSortRole(LayoutsModel::SectionRole); m_layoutSearchModel->setFilterCaseSensitivity(Qt::CaseInsensitive); return m_layoutSearchModel; } QSortFilterProxyModel *KeyboardController::shortcutSearchModel() { if (m_shortcutSearchModel) return m_shortcutSearchModel; m_shortcutSearchModel = new QSortFilterProxyModel(this); auto sourceModel = new ShortcutListModel(this); sourceModel->setSouceModel(m_shortcutModel); connect(m_shortcutModel, &ShortcutModel::delCustomInfo, sourceModel, &ShortcutListModel::reset); connect(m_shortcutModel, &ShortcutModel::addCustomInfo, sourceModel, &ShortcutListModel::reset); connect(m_shortcutModel, &ShortcutModel::shortcutChanged, sourceModel, &ShortcutListModel::onUpdateShortcut); connect(m_shortcutModel, &ShortcutModel::windowSwitchChanged, sourceModel, &ShortcutListModel::reset); m_shortcutSearchModel->setSourceModel(sourceModel); m_shortcutSearchModel->setFilterRole(ShortcutListModel::SearchedTextRole); m_shortcutSearchModel->setFilterCaseSensitivity(Qt::CaseInsensitive); return m_shortcutSearchModel; } void KeyboardController::updateKey(const QString &id, const int &type) { ShortcutInfo *shortcut = nullptr; if (!id.isEmpty()) { // new shortcuts shortcut = m_shortcutModel->findInfoIf([id, type](ShortcutInfo *info){ return id == info->id && type == info->type; }); if (!shortcut) { qWarning() << "shortcut not found..." << id << type; return; } } m_worker->updateKey(shortcut); } QStringList KeyboardController::formatKeys(const QString &shortcuts) { return ShortcutModel::formatKeys(shortcuts); } QString KeyboardController::checkDesktopCmd(const QString &cmd) { // Check and process desktop commands, add dde-am prefix if desktop file exists if (!cmd.isEmpty() && cmd.startsWith("/") && cmd.endsWith(".desktop")) { QFileInfo fileInfo(cmd); if (fileInfo.exists() && fileInfo.isFile()) { return "dde-am " + cmd; } } return cmd; } void KeyboardController::addCustomShortcut(const QString &name, const QString &cmd, const QString &accels) { // Clear conflicting shortcuts when adding if (auto conflict = m_shortcutModel->getInfo(accels)) { m_worker->onDisableShortcut(conflict); } // Check and process desktop commands, add dde-am prefix if needed QString newCmd = checkDesktopCmd(cmd); m_worker->addCustomShortcut(name, newCmd, accels); } void KeyboardController::modifyCustomShortcut(const QString &id, const QString &name, const QString &cmd, const QString &accels) { ShortcutInfo *shortcut = m_shortcutModel->findInfoIf([id](ShortcutInfo *info){ return id == info->id; }); if (!shortcut) { qWarning() << "shortcut not found..." << id << name; return; } // Clear conflicting shortcuts when modifying if (auto conflict = m_shortcutModel->getInfo(accels)) { m_worker->onDisableShortcut(conflict); } shortcut->name = name; shortcut->command = checkDesktopCmd(cmd); shortcut->accels = accels; m_worker->modifyCustomShortcut(shortcut); } void KeyboardController::deleteCustomShortcut(const QString &id) { ShortcutInfo *shortcut = m_shortcutModel->findInfoIf([id](ShortcutInfo *info){ return id == info->id; }); if (!shortcut) { qWarning() << "shortcut not found..." << id; return; } m_worker->delShortcut(shortcut); } void KeyboardController::modifyShortcut(const QString &id, const QString &accels, const int &type) { ShortcutInfo *shortcut = m_shortcutModel->findInfoIf([id, type](ShortcutInfo *info){ return id == info->id && type == info->type; }); if (!shortcut) { qWarning() << "shortcut not found..." << id << type; return; } if (shortcut->accels != accels) { // Clear conflicting shortcuts when modifying if (auto conflict = m_shortcutModel->getInfo(accels)) { m_worker->onDisableShortcut(conflict); shortcut->accels = accels; } } m_worker->modifyShortcutEdit(shortcut); } void KeyboardController::clearShortcut(const QString &id, const int &type) { ShortcutInfo *shortcut = m_shortcutModel->findInfoIf([id, type](ShortcutInfo *info){ return id == info->id && type == info->type; }); if (!shortcut) { qWarning() << "shortcut not found..." << id << type; return; } m_worker->onDisableShortcut(shortcut); } void KeyboardController::resetAllShortcuts() { m_worker->resetAll(); } void KeyboardController::addUserLayout(const QString &layout) { m_worker->addUserLayout(layout); } void KeyboardController::deleteUserLayout(const QString &layout) { m_worker->delUserLayout(layout); } int KeyboardController::layoutCount() const { return userLayouts().count(); } QString KeyboardController::currentLayout() const { return m_model->curLayout(); } void KeyboardController::setCurrentLayout(const QString &key) { if (currentLayout() == key) return; m_worker->setLayout(key); } QString KeyboardController::conflictText() const { return m_conflictText; } void KeyboardController::setConflictText(const QString &newConflictText) { if (m_conflictText == newConflictText) return; m_conflictText = newConflictText; emit conflictTextChanged(); } bool KeyboardController::isCustomShortcutNameExists(const QString &name, const QString &excludeId) { if (name.trimmed().isEmpty()) return false; const auto customInfos = m_shortcutModel->customInfo(); for (const auto *info : customInfos) { // Exclude the current editing shortcut (if in edit mode) if (!excludeId.isEmpty() && info->id == excludeId) continue; if (info->name.trimmed() == name.trimmed()) { return true; } } return false; } bool KeyboardController::isSystemShortcutNameExists(const QString &name) { if (!m_shortcutModel) { return false; } return m_shortcutModel->containsSystemShortcutName(name); } bool KeyboardController::isShortcutNameExists(const QString &name, const QString &excludeId) { if (name.trimmed().isEmpty()) { return false; } // Check system shortcut conflicts first if (isSystemShortcutNameExists(name)) { return true; } // Then check custom shortcut conflicts return isCustomShortcutNameExists(name, excludeId); } } #include "keyboardcontroller.moc" ================================================ FILE: src/plugin-keyboard/operation/keyboardcontroller.h ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef KEYBOARDCONTROLLER_H #define KEYBOARDCONTROLLER_H #include "keyboardmodel.h" #include "keyboardwork.h" #include #include namespace dccV25 { class KeyboardController : public QObject { Q_OBJECT Q_PROPERTY(uint repeatInterval READ repeatInterval WRITE setRepeatInterval NOTIFY repeatIntervalChanged FINAL) Q_PROPERTY(uint repeatDelay READ repeatDelay WRITE setRepeatDelay NOTIFY repeatDelayChanged FINAL) Q_PROPERTY(bool keyboardEnabled READ keyboardEnabled WRITE setKeyboardEnabled NOTIFY keyboardEnabledChanged FINAL) Q_PROPERTY(bool numLock READ numLock WRITE setNumLock NOTIFY numLockChanged FINAL) Q_PROPERTY(bool capsLock READ capsLock WRITE setCapsLock NOTIFY capsLockChanged FINAL) Q_PROPERTY(int layoutCount READ layoutCount NOTIFY layoutCountChanged FINAL) Q_PROPERTY(QString currentLayout READ currentLayout WRITE setCurrentLayout NOTIFY currentLayoutChanged FINAL) Q_PROPERTY(QString conflictText READ conflictText WRITE setConflictText NOTIFY conflictTextChanged FINAL) public: explicit KeyboardController(QObject *parent = nullptr); uint repeatInterval() const; void setRepeatInterval(uint newRepeatInterval); uint repeatDelay() const; void setRepeatDelay(uint newRepeatDelay); bool keyboardEnabled() const; void setKeyboardEnabled(bool enabled); bool numLock() const; void setNumLock(bool newNumLock); bool capsLock() const; void setCapsLock(bool newCapsLock); int layoutCount() const; QString currentLayout() const; void setCurrentLayout(const QString &key); QString conflictText() const; void setConflictText(const QString &newConflictText); public Q_SLOTS: void addUserLayout(const QString &layout); void deleteUserLayout(const QString &layout); QMap userLayouts() const; QString userLayoutAt(int index, bool isValue = true) const; bool userLayoutsContains(const QString &key); QSortFilterProxyModel *layoutSearchModel(); QSortFilterProxyModel *shortcutSearchModel(); void updateKey(const QString &id, const int &type); QStringList formatKeys(const QString &shortcuts); void addCustomShortcut(const QString &name, const QString &cmd, const QString &accels); void modifyCustomShortcut(const QString &id, const QString &name, const QString &cmd, const QString &accels); void modifyShortcut(const QString &id, const QString &accels, const int &type); void deleteCustomShortcut(const QString &id); void clearShortcut(const QString &id, const int &type); void resetAllShortcuts(); // 检查自定义快捷键名称是否已存在(排除指定ID) bool isCustomShortcutNameExists(const QString &name, const QString &excludeId = QString()); // 检查系统快捷键名称是否已存在 bool isSystemShortcutNameExists(const QString &name); // 统一检查快捷键名称是否已存在(包含系统和自定义快捷键) bool isShortcutNameExists(const QString &name, const QString &excludeId = QString()); signals: void repeatIntervalChanged(); void repeatDelayChanged(); void numLockChanged(); void capsLockChanged(); void layoutCountChanged(); void currentLayoutChanged(); void requestRestore(); void requestClear(); void keyConflicted(const QString &oldAccels, const QString &newAccels); void keyDone(const QString &accels); void keyEvent(const QString &accels); void conflictTextChanged(); void keyboardEnabledChanged(); private: // 检查并处理desktop命令,如果desktop文件存在则添加dde-am前缀 QString checkDesktopCmd(const QString &cmd); uint m_repeatInterval; uint m_repeatDelay; bool m_numLock; bool m_capsLock; KeyboardWorker *m_worker = nullptr; KeyboardModel *m_model = nullptr; ShortcutModel *m_shortcutModel = nullptr; QSortFilterProxyModel *m_layoutSearchModel = nullptr; QSortFilterProxyModel *m_shortcutSearchModel = nullptr; QString m_conflictText; }; } #endif // KEYBOARDCONTROLLER_H ================================================ FILE: src/plugin-keyboard/operation/keyboarddbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "keyboarddbusproxy.h" #include #include #include #include #include #include const static QString LangSelectorService = "org.deepin.dde.LangSelector1"; const static QString LangSelectorPath = "/org/deepin/dde/LangSelector1"; const static QString LangSelectorInterface = "org.deepin.dde.LangSelector1"; const static QString KeyboardService = "org.deepin.dde.InputDevices1"; const static QString KeyboardPath = "/org/deepin/dde/InputDevice1/Keyboard"; const static QString KeyboardInterface = "org.deepin.dde.InputDevice1.Keyboard"; const static QString KeybingdingService = "org.deepin.dde.Keybinding1"; const static QString KeybingdingPath = "/org/deepin/dde/Keybinding1"; const static QString KeybingdingInterface = "org.deepin.dde.Keybinding1"; const static QString WMService = "com.deepin.wm"; const static QString WMPath = "/com/deepin/wm"; const static QString WMInterface = "com.deepin.wm"; KeyboardDBusProxy::KeyboardDBusProxy(QObject *parent) : QObject(parent) { qRegisterMetaType("KeyboardLayoutList"); qDBusRegisterMetaType(); qRegisterMetaType("LocaleInfo"); qDBusRegisterMetaType(); qRegisterMetaType("LocaleList"); qDBusRegisterMetaType(); init(); } void KeyboardDBusProxy::init() { m_dBusLangSelectorInter = new DDBusInterface(LangSelectorService, LangSelectorPath, LangSelectorInterface, QDBusConnection::sessionBus(), this); m_dBusKeyboardInter = new DDBusInterface(KeyboardService, KeyboardPath, KeyboardInterface, QDBusConnection::sessionBus(), this); m_dBusKeybingdingInter = new DDBusInterface(KeybingdingService, KeybingdingPath, KeybingdingInterface, QDBusConnection::sessionBus(), this); m_dBusWMInter = new DDBusInterface(WMService, WMPath, WMInterface, QDBusConnection::sessionBus(), this); QDBusConnection::sessionBus().connect(WMService, WMPath, WMInterface, "wmCompositingEnabledChanged", this, SIGNAL(compositingEnabledChanged(bool))); } void KeyboardDBusProxy::langSelectorStartServiceProcess() { if (m_dBusLangSelectorInter->isValid()) { qWarning() << "Service" << LangSelectorService << "is already started."; return; } QDBusInterface freedesktopInter = QDBusInterface("org.freedesktop.DBus", "/", "org.freedesktop.DBus", QDBusConnection::systemBus(), this); QDBusMessage msg = QDBusMessage::createMethodCall("org.freedesktop.DBus", "/", "org.freedesktop.DBus", QStringLiteral("StartServiceByName")); msg << LangSelectorService << quint32(0); QDBusPendingReply async = freedesktopInter.connection().asyncCall(msg); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(async, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, &KeyboardDBusProxy::onLangSelectorStartServiceProcessFinished); } void KeyboardDBusProxy::onLangSelectorStartServiceProcessFinished(QDBusPendingCallWatcher *w) { QDBusPendingReply reply = *w; Q_EMIT langSelectorServiceStartFinished(reply.value()); w->deleteLater(); } //Keyboard bool KeyboardDBusProxy::capslockToggle() { return qvariant_cast(m_dBusKeyboardInter->property("CapslockToggle")); } void KeyboardDBusProxy::setCapslockToggle(bool value) { m_dBusKeyboardInter->setProperty("CapslockToggle", QVariant::fromValue(value)); } QString KeyboardDBusProxy::currentLayout() { return qvariant_cast(m_dBusKeyboardInter->property("CurrentLayout")); } void KeyboardDBusProxy::setCurrentLayout(const QString &value) { m_dBusKeyboardInter->setProperty("CurrentLayout", QVariant::fromValue(value)); } int KeyboardDBusProxy::cursorBlink() { return qvariant_cast(m_dBusKeyboardInter->property("CursorBlink")); } void KeyboardDBusProxy::setCursorBlink(int value) { m_dBusKeyboardInter->setProperty("CursorBlink", QVariant::fromValue(value)); } int KeyboardDBusProxy::layoutScope() { return qvariant_cast(m_dBusKeyboardInter->property("LayoutScope")); } void KeyboardDBusProxy::setLayoutScope(int value) { m_dBusKeyboardInter->setProperty("LayoutScope", QVariant::fromValue(value)); } uint KeyboardDBusProxy::repeatDelay() { return qvariant_cast(m_dBusKeyboardInter->property("RepeatDelay")); } void KeyboardDBusProxy::setRepeatDelay(uint value) { m_dBusKeyboardInter->setProperty("RepeatDelay", QVariant::fromValue(value)); } bool KeyboardDBusProxy::repeatEnabled() { return qvariant_cast(m_dBusKeyboardInter->property("RepeatEnabled")); } void KeyboardDBusProxy::setRepeatEnabled(bool value) { m_dBusKeyboardInter->setProperty("RepeatEnabled", QVariant::fromValue(value)); } uint KeyboardDBusProxy::repeatInterval() { return qvariant_cast(m_dBusKeyboardInter->property("RepeatInterval")); } void KeyboardDBusProxy::setRepeatInterval(uint value) { m_dBusKeyboardInter->setProperty("RepeatInterval", QVariant::fromValue(value)); } QStringList KeyboardDBusProxy::userLayoutList() { return qvariant_cast(m_dBusKeyboardInter->property("UserLayoutList")); } QStringList KeyboardDBusProxy::userOptionList() { return qvariant_cast(m_dBusKeyboardInter->property("UserOptionList")); } //LangSelector QString KeyboardDBusProxy::currentLocale() { return qvariant_cast(m_dBusLangSelectorInter->property("CurrentLocale")); } int KeyboardDBusProxy::localeState() { return qvariant_cast(m_dBusLangSelectorInter->property("LocaleState")); } QStringList KeyboardDBusProxy::locales() { return qvariant_cast(m_dBusLangSelectorInter->property("Locales")); } //Keybinding int KeyboardDBusProxy::numLockState() { return qvariant_cast(m_dBusKeybingdingInter->property("NumLockState")); } uint KeyboardDBusProxy::shortcutSwitchLayout() { return qvariant_cast(m_dBusKeybingdingInter->property("ShortcutSwitchLayout")); } void KeyboardDBusProxy::setShortcutSwitchLayout(uint value) { m_dBusKeybingdingInter->setProperty("ShortcutSwitchLayout", QVariant::fromValue(value)); } bool KeyboardDBusProxy::langSelectorIsValid() { return m_dBusLangSelectorInter->isValid(); } QDBusPendingReply<> KeyboardDBusProxy::KeybindingReset() { QList argumentList; return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("Reset"), argumentList); } QDBusPendingReply KeyboardDBusProxy::ListAllShortcuts() { QList argumentList; return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("ListAllShortcuts"), argumentList); } QString KeyboardDBusProxy::LookupConflictingShortcut(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return QDBusPendingReply(m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("LookupConflictingShortcut"), argumentList)); } QDBusPendingReply<> KeyboardDBusProxy::ClearShortcutKeystrokes(const QString &in0, int in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("ClearShortcutKeystrokes"), argumentList); } QDBusPendingReply<> KeyboardDBusProxy::AddShortcutKeystroke(const QString &in0, int in1, const QString &in2) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1) << QVariant::fromValue(in2); return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("AddShortcutKeystroke"), argumentList); } QDBusPendingReply<> KeyboardDBusProxy::AddCustomShortcut(const QString &in0, const QString &in1, const QString &in2) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1) << QVariant::fromValue(in2); return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("AddCustomShortcut"), argumentList); } QDBusPendingReply<> KeyboardDBusProxy::ModifyCustomShortcut(const QString &in0, const QString &in1, const QString &in2, const QString &in3) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1) << QVariant::fromValue(in2) << QVariant::fromValue(in3); return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("ModifyCustomShortcut"), argumentList); } QDBusPendingReply<> KeyboardDBusProxy::DeleteCustomShortcut(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("DeleteCustomShortcut"), argumentList); } QDBusPendingReply<> KeyboardDBusProxy::GrabScreen() { QList argumentList; return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("GrabScreen"), argumentList); } void KeyboardDBusProxy::SetNumLockState(int in0) { QList argumentList; argumentList << QVariant::fromValue(in0); m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("SetNumLockState"), argumentList); } QDBusPendingReply KeyboardDBusProxy::GetShortcut(const QString &in0, int in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("GetShortcut"), argumentList); } QDBusPendingReply KeyboardDBusProxy::SearchShortcuts(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("SearchShortcuts"), argumentList); } QDBusPendingReply KeyboardDBusProxy::Query(const QString &in0, int in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("Query"), argumentList); } void KeyboardDBusProxy::SelectKeystroke() { QList argumentList; m_dBusKeybingdingInter->asyncCallWithArgumentList(QStringLiteral("SelectKeystroke"), argumentList); } //keyBoard QDBusPendingReply KeyboardDBusProxy::LayoutList() { QList argumentList; return m_dBusKeyboardInter->asyncCallWithArgumentList(QStringLiteral("LayoutList"), argumentList); } QDBusPendingReply KeyboardDBusProxy::AllLayoutList() { QList argumentList; return m_dBusKeyboardInter->asyncCallWithArgumentList(QStringLiteral("AllLayoutList"), argumentList); } void KeyboardDBusProxy::AddUserLayout(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); m_dBusKeyboardInter->asyncCallWithArgumentList(QStringLiteral("AddUserLayout"), argumentList); } void KeyboardDBusProxy::DeleteUserLayout(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); m_dBusKeyboardInter->asyncCallWithArgumentList(QStringLiteral("DeleteUserLayout"), argumentList); } QDBusPendingReply KeyboardDBusProxy::GetLayoutDesc(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusKeyboardInter->asyncCallWithArgumentList(QStringLiteral("GetLayoutDesc"), argumentList); } QDBusPendingReply<> KeyboardDBusProxy::AddLocale(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusLangSelectorInter->asyncCallWithArgumentList(QStringLiteral("AddLocale"), argumentList); } QDBusPendingReply<> KeyboardDBusProxy::DeleteLocale(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusLangSelectorInter->asyncCallWithArgumentList(QStringLiteral("DeleteLocale"), argumentList); } QDBusPendingReply<> KeyboardDBusProxy::SetLocale(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); return m_dBusLangSelectorInter->asyncCallWithArgumentList(QStringLiteral("SetLocale"), argumentList); } QDBusPendingReply KeyboardDBusProxy::GetLocaleList() { QList argumentList; return m_dBusLangSelectorInter->asyncCallWithArgumentList(QStringLiteral("GetLocaleList"), argumentList); } ================================================ FILE: src/plugin-keyboard/operation/keyboarddbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef KEYBOARDDBUSPROXY_H #define KEYBOARDDBUSPROXY_H #include #include #include class QDBusInterface; class QDBusMessage; using Dtk::Core::DDBusInterface; typedef QMap KeyboardLayoutList; class LocaleInfo { public: LocaleInfo(){} friend QDBusArgument &operator<<(QDBusArgument &arg, const LocaleInfo &info) { arg.beginStructure(); arg << info.id << info.name; arg.endStructure(); return arg; } friend const QDBusArgument &operator>>(const QDBusArgument &arg, LocaleInfo &info) { arg.beginStructure(); arg >> info.id >> info.name; arg.endStructure(); return arg; } friend QDataStream &operator<<(QDataStream &ds, const LocaleInfo &info) { return ds << info.id << info.name; } friend const QDataStream &operator>>(QDataStream &ds, LocaleInfo &info) { return ds >> info.id >> info.name; } bool operator ==(const LocaleInfo &info) { return id==info.id && name==info.name; } public: QString id{""}; QString name{""}; }; typedef QList LocaleList; namespace dccV25 { class DCCDBusInterface; } class KeyboardDBusProxy : public QObject { Q_OBJECT public: explicit KeyboardDBusProxy(QObject *parent = nullptr); //Keyboard Q_PROPERTY(bool CapslockToggle READ capslockToggle WRITE setCapslockToggle NOTIFY CapslockToggleChanged) bool capslockToggle(); void setCapslockToggle(bool value); Q_PROPERTY(QString CurrentLayout READ currentLayout WRITE setCurrentLayout NOTIFY CurrentLayoutChanged) QString currentLayout(); void setCurrentLayout(const QString &value); Q_PROPERTY(int CursorBlink READ cursorBlink WRITE setCursorBlink NOTIFY CursorBlinkChanged) int cursorBlink(); void setCursorBlink(int value); Q_PROPERTY(int LayoutScope READ layoutScope WRITE setLayoutScope NOTIFY LayoutScopeChanged) int layoutScope(); void setLayoutScope(int value); Q_PROPERTY(uint RepeatDelay READ repeatDelay WRITE setRepeatDelay NOTIFY RepeatDelayChanged) uint repeatDelay(); void setRepeatDelay(uint value); Q_PROPERTY(bool RepeatEnabled READ repeatEnabled WRITE setRepeatEnabled NOTIFY RepeatEnabledChanged) bool repeatEnabled(); void setRepeatEnabled(bool value); Q_PROPERTY(uint RepeatInterval READ repeatInterval WRITE setRepeatInterval NOTIFY RepeatIntervalChanged) uint repeatInterval(); void setRepeatInterval(uint value); Q_PROPERTY(QStringList UserLayoutList READ userLayoutList NOTIFY UserLayoutListChanged) QStringList userLayoutList(); Q_PROPERTY(QStringList UserOptionList READ userOptionList NOTIFY UserOptionListChanged) QStringList userOptionList(); //LangSelector Q_PROPERTY(QString CurrentLocale READ currentLocale NOTIFY CurrentLocaleChanged) QString currentLocale(); Q_PROPERTY(int LocaleState READ localeState NOTIFY LocaleStateChanged) int localeState(); Q_PROPERTY(QStringList Locales READ locales NOTIFY LocalesChanged) QStringList locales(); //Keybinding Q_PROPERTY(int NumLockState READ numLockState NOTIFY NumLockStateChanged) int numLockState(); Q_PROPERTY(uint ShortcutSwitchLayout READ shortcutSwitchLayout WRITE setShortcutSwitchLayout NOTIFY ShortcutSwitchLayoutChanged) uint shortcutSwitchLayout(); void setShortcutSwitchLayout(uint value); bool langSelectorIsValid(); void langSelectorStartServiceProcess(); signals: // Keyboard property void CapslockToggleChanged(bool value) const; void CurrentLayoutChanged(const QString & value) const; void CursorBlinkChanged(int value) const; void LayoutScopeChanged(int value) const; void RepeatDelayChanged(uint value) const; void RepeatEnabledChanged(bool value) const; void RepeatIntervalChanged(uint value) const; void UserLayoutListChanged(const QStringList & value) const; void UserOptionListChanged(const QStringList & value) const; // LangSelector property void CurrentLocaleChanged(const QString & value) const; void LocaleStateChanged(int value) const; void LocalesChanged(const QStringList & value) const; // Keybinding property void NumLockStateChanged(int value) const; void ShortcutSwitchLayoutChanged(uint value) const; // Keybinding void Added(const QString &in0, int in1); void Changed(const QString &in0, int in1); void Deleted(const QString &in0, int in1); void KeyEvent(bool in0, const QString &in1); //wm void compositingEnabledChanged(bool enabled); void langSelectorServiceStartFinished(const quint32 ret) const; public slots: // Keybinding QDBusPendingReply<> KeybindingReset(); QDBusPendingReply ListAllShortcuts(); QString LookupConflictingShortcut(const QString &in0); QDBusPendingReply<> ClearShortcutKeystrokes(const QString &in0, int in1); QDBusPendingReply<> AddShortcutKeystroke(const QString &in0, int in1, const QString &in2); QDBusPendingReply<> AddCustomShortcut(const QString &in0, const QString &in1, const QString &in2); QDBusPendingReply<> ModifyCustomShortcut(const QString &in0, const QString &in1, const QString &in2, const QString &in3); QDBusPendingReply<> DeleteCustomShortcut(const QString &in0); QDBusPendingReply<> GrabScreen(); void SetNumLockState(int in0); QDBusPendingReply GetShortcut(const QString &in0, int in1); QDBusPendingReply SearchShortcuts(const QString &in0); QDBusPendingReply Query(const QString &in0, int in1); void SelectKeystroke(); //KeyBoard QDBusPendingReply LayoutList(); QDBusPendingReply AllLayoutList(); void AddUserLayout(const QString &in0); void DeleteUserLayout(const QString &in0); QDBusPendingReply GetLayoutDesc(const QString &in0); QDBusPendingReply<> AddLocale(const QString &in0); QDBusPendingReply<> DeleteLocale(const QString &in0); QDBusPendingReply<> SetLocale(const QString &in0); QDBusPendingReply GetLocaleList(); private slots: void onLangSelectorStartServiceProcessFinished(QDBusPendingCallWatcher *w); private: void init(); private: DDBusInterface *m_dBusLangSelectorInter; DDBusInterface *m_dBusKeyboardInter; DDBusInterface *m_dBusKeybingdingInter; DDBusInterface *m_dBusWMInter; }; Q_DECLARE_METATYPE(KeyboardLayoutList) Q_DECLARE_METATYPE(LocaleInfo) Q_DECLARE_METATYPE(LocaleList) #endif // KeyboardDBusProxy_H ================================================ FILE: src/plugin-keyboard/operation/keyboardmodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "keyboardmodel.h" #include using namespace dccV25; KeyboardModel::KeyboardModel(QObject *parent) : QObject(parent) , m_keyboardEnabled(true) , m_capsLock(true) , m_numLock(true) , m_repeatInterval(1) , m_repeatDelay(1) { } void KeyboardModel::setLangChangedState(const int state) { if (m_status != state) { m_status = state; Q_EMIT onSetCurLangFinish(state); } } void KeyboardModel::setLayoutLists(QMap lists) { m_layouts = lists; } void KeyboardModel::setAllLayoutLists(QMap lists) { m_allLayouts = lists; } QString KeyboardModel::langByKey(const QString &key) const { auto res = std::find_if(m_langList.cbegin(), m_langList.end(), [key] (const MetaData &data)->bool{ return data.key() == key; }); if (res != m_langList.cend()) { return res->text(); } return QString(); } QString KeyboardModel::langFromText(const QString &text) const { auto res = std::find_if(m_langList.cbegin(), m_langList.end(), [text] (const MetaData &data)->bool{ return data.text() == text; }); if (res != m_langList.cend()) { return res->key(); } return QString(); } void KeyboardModel::setLayout(const QString &key) { if (key.isEmpty()) return; if (m_layout == key) return ; m_layout = key; Q_EMIT curLayoutChanged(m_layout); } QString KeyboardModel::curLayout() const { return m_layout; } void KeyboardModel::setLang(const QString &value) { qDebug() << "old key is " << m_currentLangKey << " new is " << value; if (m_currentLangKey != value && !value.isEmpty()) { m_currentLangKey = value; const QString &langName = langByKey(value); qDebug() << "value is " << value << " langName is " << langName; if (!langName.isEmpty()) Q_EMIT curLangChanged(langName); } } QStringList KeyboardModel::convertLang(const QStringList &langList) { QStringList realLangList; for (int i = 0; i < langList.size(); ++i) { QString lang = langByKey(langList[i]); if (!lang.isEmpty()) { realLangList << lang; } } return realLangList; } void KeyboardModel::setLocaleLang(const QStringList &localLangList) { QStringList langList = convertLang(localLangList); if (m_localLangList != langList && !langList.isEmpty()) { m_localLangList = langList; Q_EMIT curLocalLangChanged(m_localLangList); } } void KeyboardModel::setLocaleList(const QList &langList) { if (langList.isEmpty()) return; m_langList = langList; Q_EMIT langChanged(langList); const QString ¤tLang = langByKey(m_currentLangKey); if (!currentLang.isEmpty()) Q_EMIT curLangChanged(currentLang); } void KeyboardModel::setCapsLock(bool value) { if (m_capsLock != value) { m_capsLock = value; Q_EMIT capsLockChanged(value); } } uint KeyboardModel::repeatDelay() const { return m_repeatDelay; } void KeyboardModel::setRepeatDelay(const uint &repeatDelay) { if (m_repeatDelay != repeatDelay) { m_repeatDelay = repeatDelay; Q_EMIT repeatDelayChanged(repeatDelay); } } uint KeyboardModel::repeatInterval() const { return m_repeatInterval; } void KeyboardModel::setRepeatInterval(const uint &repeatInterval) { if (m_repeatInterval != repeatInterval) { m_repeatInterval = repeatInterval; Q_EMIT repeatIntervalChanged(repeatInterval); } } bool KeyboardModel::keyboardEnabled() const { return m_keyboardEnabled; } void KeyboardModel::setKeyboardEnabled(bool keyboardEnabled) { if (m_keyboardEnabled != keyboardEnabled) { m_keyboardEnabled = keyboardEnabled; Q_EMIT keyboardEnabledChanged(m_keyboardEnabled); } } void KeyboardModel::setAllShortcut(const QMap &map) { m_shortcutMap = map; } bool KeyboardModel::numLock() const { return m_numLock; } void KeyboardModel::setNumLock(bool numLock) { if (m_numLock != numLock) { m_numLock = numLock; Q_EMIT numLockChanged(m_numLock); } } void KeyboardModel::cleanUserLayout() { m_userLayout.clear(); } QString KeyboardModel::curLang() const { qDebug() << "curLang key is " << m_currentLangKey; return langByKey(m_currentLangKey); } QMap KeyboardModel::userLayout() const { return m_userLayout; } QMap KeyboardModel::kbLayout() const { return m_layouts; } QStringList KeyboardModel::localLang() const { return m_localLangList; } void KeyboardModel::addUserLayout(const QString &id, const QString &value) { if (!m_userLayout.contains(id)) { m_userLayout.insert(id, value); Q_EMIT userLayoutChanged(id, value); } } QList KeyboardModel::langLists() const { return m_langList; } bool KeyboardModel::capsLock() const { return m_capsLock; } QMap KeyboardModel::allShortcut() const { return m_shortcutMap; } ================================================ FILE: src/plugin-keyboard/operation/keyboardmodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef KEYBOARDMODEL_H #define KEYBOARDMODEL_H #include "metadata.h" #include #include #include namespace dccV25 { class KeyboardModel : public QObject { Q_OBJECT public: explicit KeyboardModel(QObject *parent = nullptr); enum KBLayoutScope { system = 0, application = 1 }; #ifndef DCC_DISABLE_KBLAYOUT void setLayoutLists(QMap lists); void setAllLayoutLists(QMap lists); #endif QString langByKey(const QString &key) const; QString langFromText(const QString &text) const; QString curLayout() const; QString curLang() const; QMap userLayout() const; QMap kbLayout() const; QMap allLayout() const { return m_allLayouts; } QStringList localLang() const; QList langLists() const; bool capsLock() const; QMap allShortcut() const; uint repeatInterval() const; void setRepeatInterval(const uint &repeatInterval); bool keyboardEnabled() const; uint repeatDelay() const; void setRepeatDelay(const uint &repeatDelay); bool numLock() const; void setNumLock(bool numLock); void cleanUserLayout(); inline int getLangChangedState() const { return m_status; } void setLangChangedState(const int state); inline QStringList &getUserLayoutList() { return m_userLaylist; } Q_SIGNALS: #ifndef DCC_DISABLE_KBLAYOUT void curLayoutChanged(const QString &layout); #endif void keyboardEnabledChanged(bool value); void curLangChanged(const QString &lang); void capsLockChanged(bool value); void numLockChanged(bool value); void repeatDelayChanged(const uint value); void repeatIntervalChanged(const uint value); void userLayoutChanged(const QString &id, const QString &value); void langChanged(const QList &data); void curLocalLangChanged(const QStringList &localLangList); void onSetCurLangFinish(const int value); public Q_SLOTS: #ifndef DCC_DISABLE_KBLAYOUT void setLayout(const QString &key); #endif void setLang(const QString &value); void setLocaleLang(const QStringList &localLangList); void addUserLayout(const QString &id, const QString &value); void setLocaleList(const QList &langList); void setCapsLock(bool value); void setAllShortcut(const QMap &map); void setKeyboardEnabled(bool keyboardEnabled); private: QStringList convertLang(const QStringList &langList); private: bool m_keyboardEnabled; bool m_capsLock; bool m_numLock; uint m_repeatInterval; uint m_repeatDelay; QString m_layout; QString m_currentLangKey; QStringList m_localLangList; QStringList m_userLaylist; QMap m_userLayout; QMap m_layouts; QMap m_allLayouts; QList m_langList; QMap m_shortcutMap; int m_status{0}; }; } #endif // KEYBOARDMODEL_H ================================================ FILE: src/plugin-keyboard/operation/keyboardwork.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "keyboardwork.h" #include "dcclocale.h" #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace DTK_NAMESPACE::Core; using namespace dccV25; bool caseInsensitiveLessThan(const MetaData &s1, const MetaData &s2); const QMap &ModelKeycode = {{"minus", "-"}, {"equal", "="}, {"backslash", "\\"}, {"question", "?/"}, {"exclam", "1"}, {"numbersign", "3"}, {"semicolon", ";"}, {"apostrophe", "'"}, {"less", ",<"}, {"period", ">."}, {"slash", "?/"}, {"parenleft", "9"}, {"bracketleft", "["}, {"parenright", "0"}, {"bracketright", "]"}, {"quotedbl", "'"}, {"space", " "}, {"dollar", "$"}, {"plus", "+"}, {"asterisk", "*"}, {"underscore", "_"}, {"bar", "|"}, {"grave", "`"}, {"at", "2"}, {"percent", "5"}, {"greater", ">."}, {"asciicircum", "6"}, {"braceleft", "["}, {"colon", ":"}, {"comma", ",<"}, {"asciitilde", "~"}, {"ampersand", "7"}, {"braceright", "]"}, {"Escape", "Esc"} }; KeyboardWorker::KeyboardWorker(KeyboardModel *model, QObject *parent) : QObject(parent) , m_model(model) , m_keyboardDBusProxy(new KeyboardDBusProxy(this)) , m_translatorLanguage(nullptr) , m_inputDevCfg(DConfig::create("org.deepin.dde.daemon", "org.deepin.dde.daemon.inputdevices", QString(), this)) { connect(m_keyboardDBusProxy, &KeyboardDBusProxy::compositingEnabledChanged, this, &KeyboardWorker::onGetWindowWM); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::Added, this, &KeyboardWorker::onAdded); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::Deleted, this, &KeyboardWorker::removed); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::UserLayoutListChanged, this, &KeyboardWorker::onUserLayout); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::CurrentLayoutChanged, this, &KeyboardWorker::onCurrentLayout); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::CapslockToggleChanged, m_model, &KeyboardModel::setCapsLock); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::NumLockStateChanged, m_model, &KeyboardModel::setNumLock); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::langSelectorServiceStartFinished, this, [=] { QTimer::singleShot(100, this, &KeyboardWorker::onLangSelectorServiceFinished); }); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::RepeatDelayChanged, this, &KeyboardWorker::setModelRepeatDelay); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::RepeatIntervalChanged, this, &KeyboardWorker::setModelRepeatInterval); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::Changed, this, &KeyboardWorker::onShortcutChanged); m_model->setLangChangedState(m_keyboardDBusProxy->localeState()); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::LocaleStateChanged, m_model, &KeyboardModel::setLangChangedState); } void KeyboardWorker::resetAll() { // Prevent duplicate calls while resetting if (m_isResetting) { qDebug() << "KeyboardWorker::resetAll: Already resetting, ignoring duplicate call"; return; } m_isResetting = true; QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(m_keyboardDBusProxy->KeybindingReset(), this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] (QDBusPendingCallWatcher *reply) { watcher->deleteLater(); if (reply->isError()) { qDebug() << Q_FUNC_INFO << reply->error(); } // Reset completed, restore flag and emit signal m_isResetting = false; Q_EMIT onResetFinished(); }); } void KeyboardWorker::onGetWindowWM(bool) { windowSwitch(); } void KeyboardWorker::setShortcutModel(ShortcutModel *model) { m_shortcutModel = model; connect(m_keyboardDBusProxy, &KeyboardDBusProxy::KeyEvent, model, &ShortcutModel::keyEvent); } void KeyboardWorker::refreshShortcut() { QDBusPendingCallWatcher *result = new QDBusPendingCallWatcher(m_keyboardDBusProxy->ListAllShortcuts(), this); connect(result, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(onRequestShortcut(QDBusPendingCallWatcher*))); } void KeyboardWorker::refreshLang() { m_keyboardDBusProxy->blockSignals(false); if (!m_keyboardDBusProxy->langSelectorIsValid()) m_keyboardDBusProxy->langSelectorStartServiceProcess(); else onLangSelectorServiceFinished(); } void KeyboardWorker::windowSwitch() { QDBusInterface licenseInfo("com.deepin.wm", "/com/deepin/wm", "com.deepin.wm", QDBusConnection::sessionBus()); if (!licenseInfo.isValid()) { qDebug() << "com.deepin.license error ," << licenseInfo.lastError().name(); return; } if (m_shortcutModel) m_shortcutModel->onWindowSwitchChanged(licenseInfo.property("compositingEnabled").toBool()); } void KeyboardWorker::active() { m_keyboardDBusProxy->blockSignals(false); setModelRepeatDelay(m_keyboardDBusProxy->repeatDelay()); setModelRepeatInterval(m_keyboardDBusProxy->repeatInterval()); m_metaDatas.clear(); m_letters.clear(); Q_EMIT onDatasChanged(m_metaDatas); Q_EMIT onLettersChanged(m_letters); m_model->setCapsLock(m_keyboardDBusProxy->capslockToggle()); m_model->setNumLock(m_keyboardDBusProxy->numLockState()); onRefreshKBLayout(); refreshLang(); windowSwitch(); refreshShortcut(); if (m_inputDevCfg->isValid()) { QMetaObject::invokeMethod(m_model, "setKeyboardEnabled", Qt::DirectConnection, Q_ARG(bool, m_inputDevCfg->value("keyboardEnabled", true).toBool())); connect(m_inputDevCfg, &DConfig::valueChanged, this, [=](QString key) { if (key == "keyboardEnabled") { QMetaObject::invokeMethod(m_model, "setKeyboardEnabled", Qt::DirectConnection, Q_ARG(bool, m_inputDevCfg->value(key).toBool())); } }); } else { qWarning() << QString("DConfig is invalide, name:[%1], subpath[%2].").arg(m_inputDevCfg->name(), m_inputDevCfg->subpath()); } } void KeyboardWorker::deactive() { m_keyboardDBusProxy->blockSignals(true); } bool KeyboardWorker::keyOccupy(const QStringList &list) { int bit = 0; for (QString t : list) { if (t == "Control") bit += Modifier::control; else if (t == "Alt") bit += Modifier::alt; else if (t == "Super") bit += Modifier::super; else if (t == "Shift") bit += Modifier::shift; else continue; } QMap keylist = m_model->allShortcut(); QMap::iterator i; for (i = keylist.begin(); i != keylist.end(); ++i) { if (bit == i.value() && i.key().last() == list.last()) { return false; } } return true; } #ifndef DCC_DISABLE_KBLAYOUT void KeyboardWorker::onRefreshKBLayout() { QDBusPendingCallWatcher *allLayoutResult = new QDBusPendingCallWatcher(m_keyboardDBusProxy->AllLayoutList(), this); connect(allLayoutResult, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onAllLayoutListsFinished); QDBusPendingCallWatcher *layoutResult = new QDBusPendingCallWatcher(m_keyboardDBusProxy->LayoutList(), this); connect(layoutResult, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onLayoutListsFinished); onCurrentLayout(m_keyboardDBusProxy->currentLayout()); onUserLayout(m_keyboardDBusProxy->userLayoutList()); } #endif void KeyboardWorker::modifyShortcutEditAux(ShortcutInfo *info, bool isKPDelete) { if (!info) return; if (info->replace) { onDisableShortcut(info->replace); } QString shortcut = info->accels; if (!isKPDelete) { shortcut = shortcut.replace("KP_Delete", "Delete"); } const QString &result = m_keyboardDBusProxy->LookupConflictingShortcut(shortcut); if (!result.isEmpty()) { const QJsonObject obj = QJsonDocument::fromJson(result.toLatin1()).object(); QString targetKey = info->id + "_" + QString::number(info->type); m_replacingShortcuts.insert(targetKey); QDBusPendingCall call = m_keyboardDBusProxy->ClearShortcutKeystrokes(obj["Id"].toString(), obj["Type"].toInt()); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); watcher->setProperty("id", info->id); watcher->setProperty("type", info->type); watcher->setProperty("shortcut", shortcut); watcher->setProperty("clean", !isKPDelete); connect(watcher, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onConflictShortcutCleanFinished); } else { if (isKPDelete) { m_keyboardDBusProxy->AddShortcutKeystroke(info->id, static_cast(info->type), shortcut); } else { cleanShortcutSlef(info->id, static_cast(info->type), shortcut); } } } void KeyboardWorker::modifyShortcutEdit(ShortcutInfo *info) { modifyShortcutEditAux(info); } void KeyboardWorker::addCustomShortcut(const QString &name, const QString &command, const QString &accels) { m_keyboardDBusProxy->AddCustomShortcut(name, command, accels); } void KeyboardWorker::modifyCustomShortcut(ShortcutInfo *info) { if (info->replace) { onDisableShortcut(info->replace); } // reset replace shortcut info->replace = nullptr; const QString &result = m_keyboardDBusProxy->LookupConflictingShortcut(info->accels); if (!result.isEmpty()) { const QJsonObject obj = QJsonDocument::fromJson(result.toUtf8()).object(); QString targetKey = info->id + "_" + QString::number(info->type); m_replacingShortcuts.insert(targetKey); QDBusPendingCall call = m_keyboardDBusProxy->ClearShortcutKeystrokes(obj["Id"].toString(), obj["Type"].toInt()); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); watcher->setProperty("id", info->id); watcher->setProperty("name", info->name); watcher->setProperty("command", info->command); watcher->setProperty("shortcut", info->accels); connect(watcher, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onCustomConflictCleanFinished); } else { QString targetKey = info->id + "_" + QString::number(info->type); m_replacingShortcuts.insert(targetKey); m_keyboardDBusProxy->ModifyCustomShortcut(info->id, info->name, info->command, info->accels); } } void KeyboardWorker::grabScreen() { m_keyboardDBusProxy->GrabScreen(); } bool KeyboardWorker::checkAvaliable(const QString &key) { const QString &value = m_keyboardDBusProxy->LookupConflictingShortcut(key); return value.isEmpty(); } void KeyboardWorker::delShortcut(ShortcutInfo* info) { m_keyboardDBusProxy->DeleteCustomShortcut(info->id); if (m_shortcutModel) m_shortcutModel->delInfo(info); } void KeyboardWorker::setRepeatDelay(uint value) { m_keyboardDBusProxy->setRepeatDelay(converToDBusDelay(value)); } void KeyboardWorker::setRepeatInterval(uint value) { m_keyboardDBusProxy->setRepeatInterval(static_cast(converToDBusInterval(value))); } void KeyboardWorker::setModelRepeatDelay(uint value) { m_model->setRepeatDelay(converToModelDelay(value)); } void KeyboardWorker::setModelRepeatInterval(uint value) { m_model->setRepeatInterval(converToModelInterval(value)); } void KeyboardWorker::setNumLock(bool value) { m_keyboardDBusProxy->SetNumLockState(value); } void KeyboardWorker::setCapsLock(bool value) { m_keyboardDBusProxy->setCapslockToggle(value); } void KeyboardWorker::setKeyboardEnabled(bool value) { if (m_inputDevCfg->isValid()) { m_inputDevCfg->setValue("keyboardEnabled", value); } } void KeyboardWorker::addUserLayout(const QString &value) { // Use allLayout as the data source const auto &layouts = m_model->allLayout(); // Find the layout key in the layout source QString layoutKey = layouts.key(value); // If not found, the value might already be a key, try to use it directly if (layoutKey.isEmpty() && layouts.contains(value)) { layoutKey = value; } // If we still don't have a valid key, log error and return if (layoutKey.isEmpty()) { qWarning() << "KeyboardWorker::addUserLayout: Could not find layout key for value:" << value; qWarning() << "Available layout keys:" << layouts.keys(); return; } qDebug() << "KeyboardWorker::addUserLayout: Using layout key:" << layoutKey << "for value:" << value; m_keyboardDBusProxy->AddUserLayout(layoutKey); } void KeyboardWorker::delUserLayout(const QString &value) { m_keyboardDBusProxy->DeleteUserLayout(m_model->userLayout().key(value)); } bool caseInsensitiveLessThan(const MetaData &s1, const MetaData &s2) { QCollator qc; int i = qc.compare(s1.pinyin(), s2.pinyin()); if (i < 0) return true; else return false; } void KeyboardWorker::onRequestShortcut(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; if(reply.isError()) { watch->deleteLater(); return; } QString info = reply.value(); QMap map; QJsonArray array = QJsonDocument::fromJson(info.toStdString().c_str()).array(); Q_FOREACH(QJsonValue value, array) { QJsonObject obj = value.toObject(); if (obj.isEmpty()) continue; if (obj["Accels"].toArray().isEmpty()) continue; QString accels = obj["Accels"].toArray().at(0).toString(); accels.replace("<", ""); accels.replace(">", "-"); //转换为list QStringList key; key = accels.split("-"); int bit = 0; for (QString &t : key) { if (t == "Control") bit += Modifier::control; else if (t == "Alt") bit += Modifier::alt; else if (t == "Super") bit += Modifier::super; else if (t == "Shift") bit += Modifier::shift; else { QString s = t; s = ModelKeycode.value(s); if (!s.isEmpty()) t = s; } } if (bit == 0) continue; map.insert(key, bit); } m_model->setAllShortcut(map); if (m_shortcutModel) m_shortcutModel->onParseInfo(info); watch->deleteLater(); } void KeyboardWorker::onAdded(const QString &in0, int in1) { QDBusPendingReply reply = m_keyboardDBusProxy->GetShortcut(in0, in1); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onAddedFinished); } void KeyboardWorker::onDisableShortcut(ShortcutInfo *info) { // disable shortcut need wait! m_keyboardDBusProxy->ClearShortcutKeystrokes(info->id, static_cast(info->type)).waitForFinished(); info->accels.clear(); } void KeyboardWorker::onAddedFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; if (m_shortcutModel && !watch->isError()) m_shortcutModel->onCustomInfo(reply.value()); watch->deleteLater(); } void KeyboardWorker::onLayoutListsFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; KeyboardLayoutList tmp_map = reply.value(); m_model->setLayoutLists(tmp_map); watch->deleteLater(); } void KeyboardWorker::onAllLayoutListsFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; KeyboardLayoutList tmp_map = reply.value(); m_model->setAllLayoutLists(tmp_map); watch->deleteLater(); } void KeyboardWorker::onLocalListsFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; m_datas.clear(); LocaleList list = reply.value(); QStringList languageCodes; QList metaDatas; for (int i = 0; i != list.size(); ++i) { MetaData md; md.setKey(list.at(i).id); languageCodes << list.at(i).id; metaDatas << md; } QStringList dialectNames = DCCLocale::dialectNames(languageCodes); for (int i = 0; i != metaDatas.size(); ++i) { metaDatas[i].setText(QString("%1 - %2").arg(list.at(i).name).arg(dialectNames.at(i))); } m_datas.append(metaDatas); std::sort(m_datas.begin(), m_datas.end(), caseInsensitiveLessThan); m_model->setLocaleList(m_datas); watch->deleteLater(); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::CurrentLocaleChanged, m_model, &KeyboardModel::setLang); connect(m_keyboardDBusProxy, &KeyboardDBusProxy::LocalesChanged, m_model, &KeyboardModel::setLocaleLang); m_model->setLocaleLang(m_keyboardDBusProxy->locales()); m_model->setLang(m_keyboardDBusProxy->currentLocale()); } void KeyboardWorker::onUserLayout(const QStringList &list) { m_model->cleanUserLayout(); m_model->getUserLayoutList() = list; for (const QString &data : list) { QDBusPendingCallWatcher *layoutResult = new QDBusPendingCallWatcher(m_keyboardDBusProxy->GetLayoutDesc(data), this); layoutResult->setProperty("id", data); connect(layoutResult, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onUserLayoutFinished); } } void KeyboardWorker::onUserLayoutFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; m_model->addUserLayout(watch->property("id").toString(), reply.value()); watch->deleteLater(); } void KeyboardWorker::onCurrentLayout(const QString &value) { QDBusPendingCallWatcher *layoutResult = new QDBusPendingCallWatcher(m_keyboardDBusProxy->GetLayoutDesc(value), this); connect(layoutResult, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onCurrentLayoutFinished); } void KeyboardWorker::onSearchShortcuts(const QString &searchKey) { qDebug() << "onSearchShortcuts: " << searchKey; QDBusPendingReply reply = m_keyboardDBusProxy->SearchShortcuts(searchKey); QDBusPendingCallWatcher *searchResult = new QDBusPendingCallWatcher(reply, this); connect(searchResult, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onSearchFinished); } void KeyboardWorker::onCurrentLayoutFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; m_model->setLayout(reply.value()); watch->deleteLater(); } void KeyboardWorker::onSearchFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; if (m_shortcutModel && !watch->isError()) { m_shortcutModel->setSearchResult(reply.value()); } else { qDebug() << "search finished error." << watch->error(); } watch->deleteLater(); } void KeyboardWorker::onPinyin() { m_letters.clear(); m_metaDatas.clear(); QDBusInterface dbus_pinyin("org.deepin.dde.Pinyin1", "/org/deepin/dde/Pinyin1", "org.deepin.dde.Pinyin1"); const auto ¤tLayouts = m_model->kbLayout(); const auto &layouts = m_model->allLayout().isEmpty() ? currentLayouts : m_model->allLayout(); Q_FOREACH (const QString &key, layouts.keys()) { MetaData md; QString title = layouts[key]; md.setText(title); md.setKey(key); QChar letterFirst = title[0]; QStringList letterFirstList; if (letterFirst.isLower() || letterFirst.isUpper()) { letterFirstList << QString(letterFirst); md.setPinyin(title); } else { QDBusMessage message = dbus_pinyin.call("Query", title); letterFirstList = message.arguments()[0].toStringList(); md.setPinyin(letterFirstList.at(0)); } append(md); } QLocale locale; if (locale.language() == QLocale::Chinese) { // ListView.section does not need this.... // QChar ch = '\0'; // for (int i(0); i != m_metaDatas.size(); ++i) // { // const QChar flag = m_metaDatas[i].pinyin().at(0).toUpper(); // if (flag == ch) // continue; // ch = flag; // m_letters.append(ch); // m_metaDatas.insert(i, MetaData(ch, true)); // } } else { std::sort(m_metaDatas.begin(), m_metaDatas.end(), caseInsensitiveLessThan); } Q_EMIT onDatasChanged(m_metaDatas); Q_EMIT onLettersChanged(m_letters); } void KeyboardWorker::append(const MetaData &md) { if(m_metaDatas.count() == 0) { m_metaDatas.append(md); return; } int index = 0; for (int i = 0; i != m_metaDatas.size(); ++i) { if(m_metaDatas.at(i) > md) { m_metaDatas.insert(index,md); return; } index++; } m_metaDatas.append(md); } void KeyboardWorker::onLangSelectorServiceFinished() { QDBusPendingCallWatcher *localResult = new QDBusPendingCallWatcher(m_keyboardDBusProxy->GetLocaleList(), this); connect(localResult, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onLocalListsFinished); m_keyboardDBusProxy->currentLocale(); } void KeyboardWorker::onShortcutChanged(const QString &id, int type) { QString key = makeShortcutKey(id, type); qint64 currentTime = QDateTime::currentMSecsSinceEpoch(); m_shortcutQueryTime[key] = currentTime; QDBusPendingCallWatcher *result = new QDBusPendingCallWatcher(m_keyboardDBusProxy->Query(id, type)); result->setProperty("queryTime", currentTime); result->setProperty("queryKey", key); connect(result, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onGetShortcutFinished); } void KeyboardWorker::onGetShortcutFinished(QDBusPendingCallWatcher *watch) { QDBusPendingReply reply = *watch; qint64 queryTime = watch->property("queryTime").toLongLong(); QString key = watch->property("queryKey").toString(); if (queryTime < m_shortcutQueryTime.value(key, 0)) { watch->deleteLater(); return; } if (m_shortcutModel && !watch->isError()) { const QJsonObject obj = QJsonDocument::fromJson(reply.value().toStdString().c_str()).object(); const QJsonArray accels = obj["Accels"].toArray(); // Skip UI update if shortcut is being replaced to prevent flicker // Wait until the new shortcut data is available (non-empty accels) if (m_replacingShortcuts.contains(key)) { if (!accels.isEmpty()) { // New shortcut data has arrived, clear the flag and proceed with update m_replacingShortcuts.remove(key); } else { // Still waiting for new shortcut data, skip this stale response watch->deleteLater(); return; } } m_shortcutModel->onKeyBindingChanged(reply.value()); } else if (watch->isError()) { if (m_replacingShortcuts.contains(key)) { m_replacingShortcuts.remove(key); } } watch->deleteLater(); } void KeyboardWorker::updateKey(ShortcutInfo *info) { if (m_shortcutModel) m_shortcutModel->setCurrentInfo(info); m_keyboardDBusProxy->SelectKeystroke(); } void KeyboardWorker::cleanShortcutSlef(const QString &id, const int type, const QString &shortcut) { QString key = makeShortcutKey(id, type); m_replacingShortcuts.insert(key); QDBusPendingCall call = m_keyboardDBusProxy->ClearShortcutKeystrokes(id, type); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); watcher->setProperty("id", id); watcher->setProperty("type", type); watcher->setProperty("shortcut", shortcut); connect(watcher, &QDBusPendingCallWatcher::finished, this, &KeyboardWorker::onShortcutCleanFinished); } void KeyboardWorker::setNewCustomShortcut(const QString &id, const QString &name, const QString &command, const QString &accles) { m_keyboardDBusProxy->ModifyCustomShortcut(id, name, command, accles); } void KeyboardWorker::onConflictShortcutCleanFinished(QDBusPendingCallWatcher *watch) { if (!watch->isError()) { const QString &id = watch->property("id").toString(); const int type = watch->property("type").toInt(); const QString &shortcut = watch->property("shortcut").toString(); const bool clean = watch->property("clean").toBool(); if (clean) { cleanShortcutSlef(id, type, shortcut); } else { m_keyboardDBusProxy->AddShortcutKeystroke(id, type, shortcut); } } else { const QString &id = watch->property("id").toString(); const int type = watch->property("type").toInt(); QString key = makeShortcutKey(id, type); m_replacingShortcuts.remove(key); } watch->deleteLater(); } void KeyboardWorker::onShortcutCleanFinished(QDBusPendingCallWatcher *watch) { if (!watch->isError()) { const QString &id = watch->property("id").toString(); const int type = watch->property("type").toInt(); const QString &shortcut = watch->property("shortcut").toString(); m_keyboardDBusProxy->AddShortcutKeystroke(id, type, shortcut); if (shortcut.contains("Delete") && !shortcut.contains("KP_Delete")) { ShortcutInfo si; si.id = id; si.type = static_cast(type); si.accels = shortcut; si.accels = si.accels.replace("Delete", "KP_Delete"); modifyShortcutEditAux(&si, true); } } else { qDebug() << watch->error(); const QString &id = watch->property("id").toString(); const int type = watch->property("type").toInt(); QString key = makeShortcutKey(id, type); m_replacingShortcuts.remove(key); } watch->deleteLater(); } void KeyboardWorker::onCustomConflictCleanFinished(QDBusPendingCallWatcher *w) { if (!w->isError()) { const QString &id = w->property("id").toString(); const QString name = w->property("name").toString(); const QString &command = w->property("command").toString(); const QString &accles = w->property("shortcut").toString(); setNewCustomShortcut(id, name, command, accles); } else { const QString &id = w->property("id").toString(); QString key = id + "_1"; m_replacingShortcuts.remove(key); } w->deleteLater(); } QString KeyboardWorker::makeShortcutKey(const QString &id, int type) { return id + "_" + QString::number(type); } uint KeyboardWorker::converToDBusDelay(uint value) { switch (value) { case 1: return 20; case 2: return 80; case 3: return 150; case 4: return 250; case 5: return 360; case 6: return 480; case 7: return 600; default: return 4; } } uint KeyboardWorker::converToModelDelay(uint value) { if (value <= 20) return 1; else if (value <= 80) return 2; else if (value <= 150) return 3; else if (value <= 250) return 4; else if (value <= 360) return 5; else if (value <= 480) return 6; else return 7; } int KeyboardWorker::converToDBusInterval(int value) { switch (value) { case 1: return 100; case 2: return 80; case 3: return 65; case 4: return 50; case 5: return 35; case 6: return 25; case 7: return 20; default: return 4; } } uint KeyboardWorker::converToModelInterval(uint value) { if (value <= 20) return 7; else if (value <= 25) return 6; else if (value <= 35) return 5; else if (value <= 50) return 4; else if (value <= 65) return 3; else if (value <= 80) return 2; else return 1; } void KeyboardWorker::setLayout(const QString &value) { m_keyboardDBusProxy->setCurrentLayout(value); } void KeyboardWorker::setLang(const QString &value) { Q_EMIT requestSetAutoHide(false); QDBusPendingCall call = m_keyboardDBusProxy->SetLocale(value); qDebug() << "setLang is " << value; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { qDebug() << "setLang error: " << call.error().type(); m_model->setLang(m_keyboardDBusProxy->currentLocale()); } qDebug() << "setLang success"; Q_EMIT requestSetAutoHide(true); watcher->deleteLater(); }); } void KeyboardWorker::addLang(const QString &value) { Q_EMIT requestSetAutoHide(false); QDBusPendingCall call = m_keyboardDBusProxy->AddLocale(value); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { qDebug() << "add Locale language error: " << call.error().type(); } Q_EMIT requestSetAutoHide(true); watcher->deleteLater(); }); } void KeyboardWorker::deleteLang(const QString &value) { Q_EMIT requestSetAutoHide(false); QString lang = m_model->langFromText(value); QDBusPendingCall call = m_keyboardDBusProxy->DeleteLocale(lang); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=] { if (call.isError()) { qDebug() << "delete Locale language error: " << call.error().type(); } Q_EMIT requestSetAutoHide(true); watcher->deleteLater(); }); } ================================================ FILE: src/plugin-keyboard/operation/keyboardwork.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef KEYBOARDWORK_H #define KEYBOARDWORK_H #include "operation/metadata.h" #include "shortcutmodel.h" #include "keyboardmodel.h" #include "keyboarddbusproxy.h" #include #include class QDBusPendingCallWatcher; class QTranslator; namespace dccV25 { class KeyboardWorker : public QObject { Q_OBJECT public: explicit KeyboardWorker(KeyboardModel* model, QObject *parent = nullptr); enum Modifier { control = 1, super = 2, alt = 4, shift = 8 }; void resetAll(); void setShortcutModel(ShortcutModel * model); void refreshShortcut(); void refreshLang(); void windowSwitch(); inline QList getDatas() {return m_metaDatas;} inline QList getLetters() {return m_letters;} void modifyShortcutEditAux(ShortcutInfo* info, bool isKPDelete = false); void modifyShortcutEdit(ShortcutInfo* info); void addCustomShortcut(const QString& name, const QString& command, const QString& accels); void modifyCustomShortcut(ShortcutInfo *info); void grabScreen(); bool checkAvaliable(const QString& key); void delShortcut(ShortcutInfo *info); void setRepeatDelay(uint value); void setRepeatInterval(uint value); void setModelRepeatDelay(uint value); void setModelRepeatInterval(uint value); void setNumLock(bool value); void setCapsLock(bool value); void setKeyboardEnabled(bool value); Q_INVOKABLE void active(); void deactive(); bool keyOccupy(const QStringList &list); void onRefreshKBLayout(); Q_SIGNALS: void KeyEvent(bool in0, const QString &in1); void searchChangd(ShortcutInfo* info, const QString& key); void removed(const QString &id, int type); void requestSetAutoHide(const bool visible); void onDatasChanged(QList datas); void onLettersChanged(QList letters); // 快捷键恢复默认完成 void onResetFinished(); public Q_SLOTS: void setLang(const QString &value); void addLang(const QString &value); void deleteLang(const QString& value); void setLayout(const QString& value); void addUserLayout(const QString& value); void delUserLayout(const QString& value); void onRequestShortcut(QDBusPendingCallWatcher* watch); void onAdded(const QString&in0, int in1); void onDisableShortcut(ShortcutInfo* info); void onAddedFinished(QDBusPendingCallWatcher *watch); void onLocalListsFinished(QDBusPendingCallWatcher *watch); void onGetWindowWM(bool value); void onLayoutListsFinished(QDBusPendingCallWatcher *watch); void onAllLayoutListsFinished(QDBusPendingCallWatcher *watch); void onUserLayout(const QStringList &list); void onUserLayoutFinished(QDBusPendingCallWatcher *watch); void onCurrentLayout(const QString &value); void onCurrentLayoutFinished(QDBusPendingCallWatcher *watch); void onPinyin(); void onSearchShortcuts(const QString &searchKey); void onSearchFinished(QDBusPendingCallWatcher *watch); void append(const MetaData& md); void onLangSelectorServiceFinished(); void onShortcutChanged(const QString &id, int type); void onGetShortcutFinished(QDBusPendingCallWatcher *watch); void updateKey(ShortcutInfo *info); void cleanShortcutSlef(const QString &id, const int type, const QString &shortcut); void setNewCustomShortcut(const QString &id, const QString &name, const QString &command, const QString &accles); void onConflictShortcutCleanFinished(QDBusPendingCallWatcher *watch); void onShortcutCleanFinished(QDBusPendingCallWatcher *watch); void onCustomConflictCleanFinished(QDBusPendingCallWatcher *w); private: static QString makeShortcutKey(const QString &id, int type); uint converToDBusDelay(uint value); uint converToModelDelay(uint value); int converToDBusInterval(int value); uint converToModelInterval(uint value); private: QList m_datas; QList m_metaDatas; QList m_letters; int m_delayValue; int m_speedValue; KeyboardModel* m_model; KeyboardDBusProxy *m_keyboardDBusProxy; ShortcutModel *m_shortcutModel = nullptr; QTranslator *m_translatorLanguage; Dtk::Core::DConfig *m_inputDevCfg; bool m_isResetting = false; // Flag to prevent duplicate reset calls QMap m_shortcutQueryTime; // 记录每个快捷键最后一次 Query 的时间戳 QSet m_replacingShortcuts; // 记录正在替换的快捷键,用于屏蔽中间状态的UI更新 }; } #endif // KEYBOARDWORK_H ================================================ FILE: src/plugin-keyboard/operation/layoutsmodel.cpp ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "layoutsmodel.h" #include "keyboardwork.h" #include "keyboardcontroller.h" namespace dccV25 { LayoutsModel::LayoutsModel(QObject *parent) : QAbstractListModel{ parent } { } int LayoutsModel::rowCount(const QModelIndex &) const { KeyboardWorker *worker = dynamic_cast(parent()); if (!worker) return 0; const QList &datas = worker->getDatas(); return datas.size(); } QVariant LayoutsModel::data(const QModelIndex &index, int role) const { KeyboardWorker *worker = dynamic_cast(parent()); if (!worker) return QVariant(); QList datas = worker->getDatas(); if (!index.isValid() || index.row() >= datas.size()) return QVariant(); const MetaData &data = datas.value(index.row()); switch (role) { case Qt::DisplayRole: return data.text(); case SearchedTextRole: return data.pinyin() + data.key() + data.text(); case IdRole: return data.key(); case SectionRole: return data.pinyin().left(1).toUpper(); default: break; } return QVariant(); } QHash LayoutsModel::roleNames() const { QHash names = QAbstractListModel::roleNames(); names[SearchedTextRole] = "searchedText"; names[IdRole] = "id"; names[SectionRole] = "section"; return names; } LayoutFilterModel::LayoutFilterModel(QObject *parent) :QSortFilterProxyModel(parent) { } bool LayoutFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { KeyboardController *controller = dynamic_cast(parent()); if (!controller) return false; QModelIndex modelIndex = this->sourceModel()->index(sourceRow, 0, sourceParent); if (!modelIndex.isValid()) return false; bool accepted = QSortFilterProxyModel::filterAcceptsRow(sourceRow, sourceParent); return accepted && !controller->userLayoutsContains(modelIndex.data(LayoutsModel::IdRole).toString()); } } ================================================ FILE: src/plugin-keyboard/operation/layoutsmodel.h ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef LAYOUTSMODEL_H #define LAYOUTSMODEL_H #include #include namespace dccV25 { class LayoutsModel : public QAbstractListModel { public: explicit LayoutsModel(QObject *parent = nullptr); enum LayoutRole { SearchedTextRole = Qt::UserRole + 1, IdRole, SectionRole }; // QAbstractItemModel interface int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override; }; class LayoutFilterModel : public QSortFilterProxyModel { public: explicit LayoutFilterModel(QObject *parent = nullptr); virtual bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; }; } #endif // LAYOUTSMODEL_H ================================================ FILE: src/plugin-keyboard/operation/metadata.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "metadata.h" #include namespace dccV25 { MetaData::MetaData(const QString &text, bool section) : m_text(text) , m_pinyin(QString()) , m_section(section) , m_selected(false) { } void MetaData::setPinyin(const QString &py) { m_pinyin = py; } QString MetaData::pinyin() const { return m_pinyin == QString() ? m_text : m_pinyin; } void MetaData::setText(const QString &text) { m_text = text; } QString MetaData::text() const { return m_text; } void MetaData::setKey(const QString &key) { m_key = key; } QString MetaData::key() const { return m_key; } void MetaData::setSection(bool section) { m_section = section; } bool MetaData::section() const { return m_section; } void MetaData::setSelected(bool selected) { m_selected = selected; } bool MetaData::selected() const { return m_selected; } bool MetaData::operator ==(const MetaData &md) const { return m_text == md.m_text; } bool MetaData::operator >(const MetaData &md) const { int x = QString::compare(m_pinyin, md.m_pinyin, Qt::CaseInsensitive); return x > 0; } QDebug &operator<<(QDebug &dbg, const MetaData &md) { dbg.nospace() << QString("key: %1, text: %2, m_section: %3, pinyin: %4") .arg(md.key()) .arg(md.text()) .arg(md.section()) .arg(md.pinyin()); return dbg; } } ================================================ FILE: src/plugin-keyboard/operation/metadata.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include namespace dccV25 { class MetaData { public: MetaData(const QString &text = QString(), bool section = false); void setPinyin(const QString &py); QString pinyin() const; void setText(const QString &text); QString text() const; void setKey(const QString &key); QString key() const; void setSection(bool section); bool section() const; void setSelected(bool selected); bool selected() const; bool operator ==(const MetaData &md) const; bool operator >(const MetaData &md) const; private: QString m_key; QString m_text; QString m_pinyin; bool m_section; bool m_selected; friend QDebug &operator<<(QDebug &dbg, const MetaData &md); }; QDebug &operator<<(QDebug &dbg, const MetaData &md); } Q_DECLARE_METATYPE(dccV25::MetaData) ================================================ FILE: src/plugin-keyboard/operation/qrc/keyboard.qrc ================================================ icons/dcc_nav_keyboard_42px.svg icons/dcc_nav_keyboard_84px.svg icons/list_select@2x.png icons/list_select.png ================================================ FILE: src/plugin-keyboard/operation/shortcutmodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "shortcutmodel.h" #include #include #include #include #include #include #include #include #include #include QStringList systemFilter = {"terminal", "terminalQuake", "globalSearch", "screenshot", "screenshotDelayed", "screenshotFullscreen", "screenshotWindow", "screenshotScroll", "screenshotOcr", "deepinScreenRecorder", "switchGroup", "switchGroupBackward", "previewWorkspace", "launcher", "switchApplications", "switchApplicationsBackward", "showDesktop", "fileManager", "lockScreen", "logout", "wmSwitcher", "systemMonitor", "colorPicker", "clipboard", "switchMonitors" }; const QStringList &windowFilter = {"activateWindowMenu", "maximize", "unmaximize", "minimize", "beginMove", "beginResize", "close", "toggleToLeft", "toggleToRight" }; const QStringList &workspaceFilter = {"switchToWorkspaceLeft", "switchToWorkspaceRight", "moveToWorkspaceLeft", "moveToWorkspaceRight"}; const QStringList &assistiveToolsFilter = {"textToSpeech", "speechToText", "translation", "viewZoomIn", "viewZoomOut", "viewActualSize"}; // from dquickrectangle_p.h #define NoneCorner 0x0 #define TopLeftCorner 0x1 #define TopRightCorner 0x2 #define BottomLeftCorner 0x4 #define BottomRightCorner 0x8 #define TopCorner TopLeftCorner | TopRightCorner #define BottomCorner BottomLeftCorner| BottomRightCorner #define LeftCorner TopLeftCorner| BottomLeftCorner #define RightCorner TopRightCorner| BottomRightCorner #define AllCorner TopCorner | BottomCorner static const QString FieldSeparator = QString(QChar(0x1F)); static const QMap &DisplaykeyMap = { {"exclam", "!"}, {"at", "@"}, {"numbersign", "#"}, {"dollar", "$"}, {"percent", "%"}, {"asciicircum", "^"}, {"ampersand", "&"}, {"asterisk", "*"}, {"parenleft", "("}, {"parenright", ")"}, {"underscore", "_"}, {"plus", "+"}, {"braceleft", "{"}, {"braceright", "}"}, {"bar", "|"}, {"colon", ":"}, {"quotedbl", "\""}, {"less", "<"}, {"greater", ">"}, {"question", "?"}, {"minus", "-"}, {"equal", "="}, {"brackertleft", "["}, {"breckertright", "]"}, {"backslash", "\\"}, {"semicolon", ";"}, {"apostrophe", "'"}, {"comma", ","}, {"period", "."}, {"slash", "/"}, {"Up", "↑"}, {"Left", "←"}, {"Down", "↓"}, {"Right", "→"}, {"asciitilde", "~"}, {"grave", "`"}, {"Control", "Ctrl"}, {"Super_L", "Super"}, {"Super_R", "Super"} }; static QString toPinyin(const QString &name) { DCORE_USE_NAMESPACE return pinyin(name, TS_NoneTone).join(FieldSeparator) + FieldSeparator + firstLetters(name).join(FieldSeparator); } using namespace dccV25; DCORE_USE_NAMESPACE ShortcutModel::ShortcutModel(QObject *parent) : QObject(parent) , m_windowSwitchState(false) { } ShortcutModel::~ShortcutModel() { qDeleteAll(m_infos); m_infos.clear(); m_systemInfos.clear(); m_windowInfos.clear(); m_workspaceInfos.clear(); m_customInfos.clear(); qDeleteAll(m_searchList); m_searchList.clear(); } QList ShortcutModel::systemInfo() const { return m_systemInfos; } QList ShortcutModel::windowInfo() const { return m_windowInfos; } QList ShortcutModel::workspaceInfo() const { return m_workspaceInfos; } QList ShortcutModel::assistiveToolsInfo() const { return m_assistiveToolsInfos; } QList ShortcutModel::customInfo() const { return m_customInfos; } QList ShortcutModel::infos() const { return m_infos; } ShortcutInfo *ShortcutModel::shortcutAt(int index, int *corners) { if (index < 0) return nullptr; auto getCorners = [](QList&list, int index) { if (index == 0) return TopCorner; else if (index == list.count() - 1) return BottomCorner; else return NoneCorner; }; #define CHECK_INDEX_DCC(List) \ if (index < List.count()) { \ if (corners) \ *corners = getCorners(List, index); \ return List.value(index); \ } else { \ index -= List.count(); \ } CHECK_INDEX_DCC(m_systemInfos) CHECK_INDEX_DCC(m_windowInfos) CHECK_INDEX_DCC(m_workspaceInfos) CHECK_INDEX_DCC(m_assistiveToolsInfos) CHECK_INDEX_DCC(m_customInfos) return nullptr; } void ShortcutModel::delInfo(ShortcutInfo *info) { if (m_infos.contains(info)) { m_infos.removeOne(info); } if (m_customInfos.contains(info)) { m_customInfos.removeOne(info); } Q_EMIT delCustomInfo(info); delete info; info = nullptr; } void ShortcutModel::onParseInfo(const QString &info) { QStringList systemShortKeys; if (DSysInfo::UosServer == DSysInfo::uosType()) { QStringList systemFilterServer = systemFilter; systemFilterServer.removeOne("wm-switcher"); systemFilterServer.removeOne("preview-workspace"); systemShortKeys = systemFilterServer; } else { systemShortKeys = systemFilter; } #ifdef DISABLE_SCREEN_RECORDING QStringList systemFilterServer = systemShortKeys; systemFilterServer.removeOne("deepin-screen-recorder"); systemShortKeys = systemFilterServer; #endif // Save custom info IDs before clearing QStringList customInfoIds; for (auto info : m_customInfos) { customInfoIds << info->id; } qDeleteAll(m_infos); m_infos.clear(); m_systemInfos.clear(); m_windowInfos.clear(); m_workspaceInfos.clear(); m_assistiveToolsInfos.clear(); m_customInfos.clear(); // 清理系统快捷键名称缓存,因为数据即将更新 invalidateSystemShortcutNamesCache(); QJsonArray array = QJsonDocument::fromJson(info.toStdString().c_str()).array(); Q_FOREACH (QJsonValue value, array) { QJsonObject obj = value.toObject(); int type = obj["Type"].toInt(); ShortcutInfo *info = new ShortcutInfo(); info->type = type; info->accels = obj["Accels"].toArray().first().toString(); info->id = obj["Id"].toString(); info->name = obj["Name"].toString(); if (systemShortKeys.contains(info->id)) { info->name = info->name.trimmed(); } info->pinyin = toPinyin(info->name); info->command = obj["Exec"].toString(); m_infos << info; if (type != MEDIAKEY) { if (systemShortKeys.contains(info->id)) { info->sectionName = tr("System"); m_systemInfos << info; continue; } if (windowFilter.contains(info->id)) { info->sectionName = tr("Window"); m_windowInfos << info; continue; } if (workspaceFilter.contains(info->id)) { info->sectionName = tr("Workspace"); m_workspaceInfos << info; continue; } if (assistiveToolsFilter.contains(info->id)) { info->sectionName = tr("AssistiveTools"); m_assistiveToolsInfos << info; continue; } if (type == 1) { info->sectionName = tr("Custom"); m_customInfos << info; } } } std::sort(m_systemInfos.begin(), m_systemInfos.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return systemShortKeys.indexOf(s1->id) < systemShortKeys.indexOf(s2->id); }); // More efficient implementation using std::find_if auto it = std::find_if(m_systemInfos.begin(), m_systemInfos.end(), [](const ShortcutInfo* info) { return info->id == "previewWorkspace"; }); m_windowSwitchStateInfos.clear(); if (it != m_systemInfos.end()) { int index = std::distance(m_systemInfos.begin(), it); (*it)->index = index; m_windowSwitchStateInfos << *it; if (!m_windowSwitchState) { m_systemInfos.erase(it); // More efficient than removeOne } } std::sort(m_windowInfos.begin(), m_windowInfos.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return windowFilter.indexOf(s1->id) < windowFilter.indexOf(s2->id); }); std::sort(m_workspaceInfos.begin(), m_workspaceInfos.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return workspaceFilter.indexOf(s1->id) < workspaceFilter.indexOf(s2->id); }); std::sort(m_assistiveToolsInfos.begin(), m_assistiveToolsInfos.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return assistiveToolsFilter.indexOf(s1->id) < assistiveToolsFilter.indexOf(s2->id); }); // Rebuild m_customInfos in original order first QList orderedCustomInfos; for (const QString &id : customInfoIds) { auto it = std::find_if(m_customInfos.begin(), m_customInfos.end(), [id](ShortcutInfo *info) { return info->id == id && info->type == 1; }); if (it != m_customInfos.end()) { orderedCustomInfos << *it; } } // Add new custom infos that weren't in original list for (auto info : m_customInfos) { if (info->type == 1 && !customInfoIds.contains(info->id)) { orderedCustomInfos << info; } } m_customInfos = orderedCustomInfos; Q_EMIT listChanged(m_systemInfos, InfoType::System); Q_EMIT listChanged(m_windowInfos, InfoType::Window); Q_EMIT listChanged(m_workspaceInfos, InfoType::Workspace); Q_EMIT listChanged(m_assistiveToolsInfos, InfoType::AssistiveTools); Q_EMIT listChanged(m_customInfos, InfoType::Custom); } void ShortcutModel::onCustomInfo(const QString &json) { QJsonObject obj = QJsonDocument::fromJson(json.toStdString().c_str()).object(); ShortcutInfo *info = new ShortcutInfo(); info->type = obj["Type"].toInt(); QString accels = obj["Accels"].toArray().at(0).toString(); info->accels = accels; info->name = obj["Name"].toString(); info->pinyin = toPinyin(info->name); info->id = obj["Id"].toString(); info->command = obj["Exec"].toString(); info->sectionName = tr("Custom"); m_infos.append(info); m_customInfos.append(info); Q_EMIT addCustomInfo(info); } void ShortcutModel::onKeyBindingChanged(const QString &value) { const QJsonObject &obj = QJsonDocument::fromJson(value.toStdString().c_str()).object(); const QString &update_id = obj["Id"].toString(); const int &update_type = obj["Type"].toInt(); auto res = std::find_if(m_infos.begin(), m_infos.end(), [ = ] (const ShortcutInfo *info)->bool{ return info->id == update_id && info->type == update_type; }); if (res != m_infos.end()) { (*res)->type = obj["Type"].toInt(); (*res)->accels = obj["Accels"].toArray().first().toString(); (*res)->name = obj["Name"].toString(); (*res)->command = obj["Exec"].toString(); Q_EMIT shortcutChanged((*res)); } } void ShortcutModel::onWindowSwitchChanged(bool value) { if (m_windowSwitchState != value) { m_windowSwitchState = value; if (m_windowSwitchState) { for (int i = m_windowSwitchStateInfos.size() - 1; i >= 0; i--) { m_systemInfos.insert(m_windowSwitchStateInfos.at(i)->index, m_windowSwitchStateInfos.at(i)); } } else { for (int i = 0; i < m_windowSwitchStateInfos.size(); i++) { m_systemInfos.removeOne(m_windowSwitchStateInfos.at(i)); } } // 系统快捷键列表发生变化,清理缓存 invalidateSystemShortcutNamesCache(); Q_EMIT windowSwitchChanged(m_windowSwitchState); } } bool ShortcutModel::getWindowSwitch() { return m_windowSwitchState; } QStringList ShortcutModel::formatKeys(const QString &shortcut) { if (shortcut.isEmpty()) return QStringList{ShortcutModel::tr("None")}; QString accels = shortcut; accels = accels.replace("<", ""); accels = accels.replace(">", "-"); accels = accels.replace("_L", ""); accels = accels.replace("_R", ""); accels = accels.replace("Control", "Ctrl"); QStringList keylist = accels.split("-"); QStringList newList; for (int i = 0; i < keylist.size(); ++i) { const QString &value = DisplaykeyMap.value(keylist.value(i)); newList << (value.isEmpty() ? keylist.value(i) : value); } return newList; } int ShortcutModel::indexOfShortcut(ShortcutInfo *info) { if (!info) return -1; const QList *lists[] = { &m_systemInfos, &m_windowInfos, &m_workspaceInfos, &m_assistiveToolsInfos, &m_customInfos }; int row = 0; for (const auto *list : lists) { const int idx = list->indexOf(info); if (idx >= 0) return row + idx; row += list->size(); } return -1; } ShortcutInfo *ShortcutModel::currentInfo() const { return m_currentInfo; } void ShortcutModel::setCurrentInfo(ShortcutInfo *currentInfo) { m_currentInfo = currentInfo; } ShortcutInfo *ShortcutModel::findInfoIf(std::function cb) { auto res = std::find_if(m_infos.begin(), m_infos.end(), cb); if (res != m_infos.end()) { return *res; } return nullptr; } ShortcutInfo *ShortcutModel::getInfo(const QString &shortcut) { if (shortcut.isEmpty()) return nullptr; return findInfoIf([ = ] (const ShortcutInfo *info)->bool{ return !QString::compare(info->accels, shortcut, Qt::CaseInsensitive); //判断是否相等,相等则返回0 }); } void ShortcutModel::setSearchResult(const QString &searchResult) { qDeleteAll(m_searchList); m_searchList.clear(); QList systemInfoList; QList windowInfoList; QList workspaceInfoList; QList customInfoList; QList speechInfoList; QJsonArray array = QJsonDocument::fromJson(searchResult.toStdString().c_str()).array(); for (auto value : array) { QJsonObject obj = value.toObject(); int type = obj["Type"].toInt(); ShortcutInfo *info = new ShortcutInfo(); info->type = type; info->accels = obj["Accels"].toArray().first().toString(); info->name = obj["Name"].toString(); info->id = obj["Id"].toString(); info->command = obj["Exec"].toString(); if (type != MEDIAKEY) { if (systemFilter.contains(info->id)) { systemInfoList << info; continue; } if (windowFilter.contains(info->id)) { windowInfoList << info; continue; } if (workspaceFilter.contains(info->id)) { workspaceInfoList << info; continue; } if (assistiveToolsFilter.contains(info->id)) { speechInfoList << info; continue; } if (type == 1) { customInfoList << info; }else{ delete info; info = nullptr; } } else { qDebug() << "not search is:" << info->name; delete info; info = nullptr; } } std::sort(systemInfoList.begin(), systemInfoList.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return systemFilter.indexOf(s1->id) < systemFilter.indexOf(s2->id); }); std::sort(windowInfoList.begin(), windowInfoList.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return windowFilter.indexOf(s1->id) < windowFilter.indexOf(s2->id); }); std::sort(workspaceInfoList.begin(), workspaceInfoList.end(), [ = ](ShortcutInfo *s1, ShortcutInfo *s2) { return workspaceFilter.indexOf(s1->id) < workspaceFilter.indexOf(s2->id); }); m_searchList.append(systemInfoList); m_searchList.append(windowInfoList); m_searchList.append(workspaceInfoList); m_searchList.append(speechInfoList); m_searchList.append(customInfoList); int i = 0; for (auto search : m_searchList) { qDebug() << "search" << ++i << " is: " << search->name; } Q_EMIT searchFinished(m_searchList); } bool ShortcutModel::searchResultContains(const QString &id) { auto res = std::find_if(m_searchList.begin(), m_searchList.end(), [ = ] (const ShortcutInfo *info)->bool{ return info->id == id; }); return res != m_infos.end(); } QStringList ShortcutModel::getSystemShortcutNames() const { QStringList names; // 合并所有系统相关的快捷键列表 QList> systemLists = { m_systemInfos, m_windowInfos, m_workspaceInfos, m_assistiveToolsInfos }; for (const auto &list : systemLists) { for (const auto *info : list) { if (info && !info->name.trimmed().isEmpty()) { names.append(info->name.trimmed()); } } } return names; } bool ShortcutModel::containsSystemShortcutName(const QString &name) const { // 处理边界情况 if (name.trimmed().isEmpty()) { return false; } // 使用成员变量缓存提高查找效率 if (m_systemNamesCache.isEmpty()) { // 构建缓存 const QStringList systemNames = getSystemShortcutNames(); m_systemNamesCache = QSet(systemNames.begin(), systemNames.end()); } return m_systemNamesCache.contains(name.trimmed()); } void ShortcutModel::invalidateSystemShortcutNamesCache() const { // 清空缓存,强制下次访问时重新构建 m_systemNamesCache.clear(); } ShortcutListModel::ShortcutListModel(QObject *parent) : QAbstractListModel(parent) { } void ShortcutListModel::setSouceModel(ShortcutModel *model) { if (m_model == model) return; m_model = model; } ShortcutModel *ShortcutListModel::souceModel() { return m_model; } void ShortcutListModel::reset() { beginResetModel(); endResetModel(); } void ShortcutListModel::onUpdateShortcut(ShortcutInfo *info) { if (!m_model || !info) return; int row = m_model->indexOfShortcut(info); if (row >= 0) { QModelIndex modelIndex = index(row); Q_EMIT dataChanged(modelIndex, modelIndex, {Qt::DisplayRole, KeySequenceRole}); } } int ShortcutListModel::rowCount(const QModelIndex &) const { if (!m_model) return 0; return m_model->count(); } QVariant ShortcutListModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.row() >= m_model->count()) return QVariant(); int corners = NoneCorner; ShortcutInfo *info = m_model->shortcutAt(index.row(), &corners); if (!info) return QVariant(); auto displayKeys = ShortcutModel::formatKeys(info->accels); switch (role) { case Qt::DisplayRole: return info->name; case SearchedTextRole: return info->name + info->pinyin + FieldSeparator + displayKeys.join(FieldSeparator); case IdRole: return info->id; case TypeRole: return info->type; case KeySequenceRole: return displayKeys; case CommandRole: return info->command; case AccelsRole: return info->accels; case SectionNameRole: return info->sectionName; case CornersRole: return corners; case IsCustomRole: return info->type == ShortcutModel::Custom; default: break; } return QVariant(); } QHash ShortcutListModel::roleNames() const { QHash names = QAbstractListModel::roleNames(); names[SearchedTextRole] = "searchedText"; names[IdRole] = "id"; names[TypeRole] = "type"; names[KeySequenceRole] = "keySequence"; names[CommandRole] = "command"; names[SectionNameRole] = "section"; names[AccelsRole] = "accels"; names[CornersRole] = "corners"; names[IsCustomRole] = "isCustom"; return names; } ================================================ FILE: src/plugin-keyboard/operation/shortcutmodel.h ================================================ // SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef SHORTCUTMODEL_H #define SHORTCUTMODEL_H #define MEDIAKEY 2 #include #include #include #include namespace dccV25 { class ShortcutItem; struct ShortcutInfo { QString accels; QString id; QString name; QString command; int type; ShortcutInfo *replace = nullptr; ShortcutItem *item = nullptr; QString sectionName; QString pinyin; int index = 0; ShortcutInfo() : type(0) , replace(nullptr) , item(nullptr) { } bool operator==(const ShortcutInfo &info) const { return id == info.id && type == info.type; } QString toString() { return name + accels + command + "_" + id + "_" + QString::number(type); } }; typedef QList ShortcutInfoList; class ShortcutModel : public QObject { Q_OBJECT public: explicit ShortcutModel(QObject *parent = nullptr); ~ShortcutModel(); enum InfoType { System, Custom, Media, Window, Workspace, AssistiveTools, }; QList systemInfo() const; QList windowInfo() const; QList workspaceInfo() const; QList assistiveToolsInfo() const; QList customInfo() const; QList infos() const; inline int count() { int c = m_systemInfos.count() + m_windowInfos.count() + m_workspaceInfos.count() + m_assistiveToolsInfos.count() + m_customInfos.count(); return c; } ShortcutInfo *shortcutAt(int index, int *corners = nullptr); void delInfo(ShortcutInfo *info); ShortcutInfo *currentInfo() const; void setCurrentInfo(ShortcutInfo *currentInfo); ShortcutInfo *findInfoIf(std::function cb); ShortcutInfo *getInfo(const QString &shortcut); void setSearchResult(const QString &searchResult); bool searchResultContains(const QString &id); bool getWindowSwitch(); // 新增:获取所有系统快捷键名称列表 QStringList getSystemShortcutNames() const; // 新增:检查指定名称是否在系统快捷键中存在 bool containsSystemShortcutName(const QString &name) const; static QStringList formatKeys(const QString &shortcut); int indexOfShortcut(ShortcutInfo *info); Q_SIGNALS: void listChanged(QList, InfoType); void addCustomInfo(ShortcutInfo *info); void delCustomInfo(ShortcutInfo *info); void shortcutChanged(ShortcutInfo *info); void keyEvent(bool press, const QString &shortcut); void searchFinished(const QList searchResult); void windowSwitchChanged(bool value); public Q_SLOTS: void onParseInfo(const QString &info); void onCustomInfo(const QString &json); void onKeyBindingChanged(const QString &value); void onWindowSwitchChanged(bool value); private: // 清理系统快捷键名称缓存 void invalidateSystemShortcutNamesCache() const; QString m_info; QList m_infos; QList m_systemInfos; QList m_windowInfos; QList m_workspaceInfos; QList m_assistiveToolsInfos; QList m_customInfos; QList m_searchList; QList m_windowSwitchStateInfos; ShortcutInfo *m_currentInfo = nullptr; bool m_windowSwitchState; // 系统快捷键名称缓存 mutable QSet m_systemNamesCache; // dcc::display::DisplayModel m_dis; }; class ShortcutListModel : public QAbstractListModel { Q_OBJECT public: explicit ShortcutListModel(QObject *parent = nullptr); enum ShortcutRole { SearchedTextRole = Qt::UserRole + 1, IdRole, TypeRole, CommandRole, KeySequenceRole, AccelsRole, SectionNameRole, CornersRole, IsCustomRole }; void setSouceModel(ShortcutModel *model); ShortcutModel *souceModel(); int rowCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override; public Q_SLOTS: void reset(); void onUpdateShortcut(ShortcutInfo *info); private: ShortcutModel *m_model = nullptr; }; } // namespace dccV25 #endif // SHORTCUTMODEL_H ================================================ FILE: src/plugin-keyboard/qml/Common.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 DccObject { DccTitleObject { name: "Common" parentName: "KeyboardCommon" displayName: qsTr("Common") weight: 10 } DccObject { name: "enableKeyboard" parentName: "KeyboardCommon" displayName: qsTr("Enable Keyboard") visible: false weight: 20 backgroundType: DccObject.Normal pageType: DccObject.Editor page: D.Switch { checked: dccData.keyboardEnabled onCheckedChanged: { dccData.keyboardEnabled = checked } } } DccObject { name: "RepeatDelay" parentName: "KeyboardCommon" displayName: qsTr("Repeat delay") backgroundType: DccObject.Normal weight: 30 visible: dccData.keyboardEnabled pageType: DccObject.Item page: ColumnLayout { Layout.fillHeight: true Label { id: speedText Layout.topMargin: 10 font: D.DTK.fontManager.t6 text: dccObj.displayName Layout.leftMargin: 14 } D.TipsSlider { id: scrollSlider readonly property var tips: [qsTr("Short"), (""), (""), (""), (""), (""), qsTr("Long")] property real leftTextWidth: 10 property real rightTextWidth: 10 property real dynamicLeftMargin: Math.max(10, leftTextWidth / 2) property real dynamicRightMargin: Math.max(10, rightTextWidth / 2) Layout.preferredHeight: 90 Layout.alignment: Qt.AlignCenter Layout.leftMargin: dynamicLeftMargin Layout.rightMargin: dynamicRightMargin Layout.topMargin: 10 Layout.bottomMargin: 10 Layout.fillWidth: true TextMetrics { id: leftTextMetrics font: D.DTK.fontManager.t7 text: scrollSlider.tips[0] Component.onCompleted: { scrollSlider.leftTextWidth = width } } TextMetrics { id: rightTextMetrics font: D.DTK.fontManager.t7 text: scrollSlider.tips[scrollSlider.tips.length - 1] Component.onCompleted: { scrollSlider.rightTextWidth = width } } tickDirection: D.TipsSlider.TickDirection.Back slider.handleType: Slider.HandleType.ArrowBottom slider.value: dccData.repeatDelay slider.from: 1 slider.to: ticks.length slider.live: true slider.stepSize: 1 slider.snapMode: Slider.SnapAlways ticks: [ D.SliderTipItem { text: scrollSlider.tips[0] highlight: scrollSlider.slider.value === 1 }, D.SliderTipItem { text: scrollSlider.tips[1] highlight: scrollSlider.slider.value === 2 }, D.SliderTipItem { text: scrollSlider.tips[2] highlight: scrollSlider.slider.value === 3 }, D.SliderTipItem { text: scrollSlider.tips[3] highlight: scrollSlider.slider.value === 4 }, D.SliderTipItem { text: scrollSlider.tips[4] highlight: scrollSlider.slider.value === 5 }, D.SliderTipItem { text: scrollSlider.tips[5] highlight: scrollSlider.slider.value === 6 }, D.SliderTipItem { text: scrollSlider.tips[6] highlight: scrollSlider.slider.value === 7 } ] slider.onValueChanged: { if (dccData.repeatDelay !== slider.value) dccData.repeatDelay = slider.value } } } } DccObject { name: "RepeatRateGroup" parentName: "KeyboardCommon" weight: 40 visible: dccData.keyboardEnabled pageType: DccObject.Item page: DccGroupView { height: implicitHeight + 20 } DccObject { name: "RepeatRate" parentName: "RepeatRateGroup" displayName: qsTr("Repeat rate") weight: 50 visible: dccData.keyboardEnabled backgroundType: DccObject.Normal pageType: DccObject.Item page: Rectangle { color: "transparent" implicitHeight: rowView.height + 20 RowLayout { id: rowView width: parent.width ColumnLayout { Layout.fillHeight: true Label { id: doubleClickText Layout.topMargin: 10 Layout.leftMargin: 14 font: D.DTK.fontManager.t6 text: dccObj.displayName } D.TipsSlider { id: repeatRateSlider readonly property var tips: [qsTr("Slow"), (""), (""), (""), (""), (""), qsTr("Fast")] // 动态计算左右边距 property real leftTextWidth: 0 property real rightTextWidth: 0 property real dynamicLeftMargin: Math.max(10, leftTextWidth / 2 + 5) property real dynamicRightMargin: Math.max(10, rightTextWidth / 2 + 5) Layout.preferredHeight: 90 Layout.alignment: Qt.AlignCenter Layout.leftMargin: dynamicLeftMargin Layout.rightMargin: dynamicRightMargin Layout.topMargin: 10 Layout.bottomMargin: 10 Layout.fillWidth: true // 测量左右端文字宽度 TextMetrics { id: repeatLeftTextMetrics font: D.DTK.fontManager.t7 text: repeatRateSlider.tips[0] // 最左边的文字 Component.onCompleted: { repeatRateSlider.leftTextWidth = width } } TextMetrics { id: repeatRightTextMetrics font: D.DTK.fontManager.t7 text: repeatRateSlider.tips[repeatRateSlider.tips.length - 1] // 最右边的文字 Component.onCompleted: { repeatRateSlider.rightTextWidth = width } } tickDirection: D.TipsSlider.TickDirection.Back slider.handleType: Slider.HandleType.ArrowBottom slider.value: dccData.repeatInterval slider.from: 1 slider.to: ticks.length slider.live: true slider.stepSize: 1 slider.snapMode: Slider.SnapAlways ticks: [ D.SliderTipItem { text: repeatRateSlider.tips[0] highlight: repeatRateSlider.slider.value === 1 }, D.SliderTipItem { text: repeatRateSlider.tips[1] highlight: repeatRateSlider.slider.value === 2 }, D.SliderTipItem { text: repeatRateSlider.tips[2] highlight: repeatRateSlider.slider.value === 3 }, D.SliderTipItem { text: repeatRateSlider.tips[3] highlight: repeatRateSlider.slider.value === 4 }, D.SliderTipItem { text: repeatRateSlider.tips[4] highlight: repeatRateSlider.slider.value === 5 }, D.SliderTipItem { text: repeatRateSlider.tips[5] highlight: repeatRateSlider.slider.value === 6 }, D.SliderTipItem { text: repeatRateSlider.tips[6] highlight: repeatRateSlider.slider.value === 7 } ] slider.onValueChanged: { if (dccData.repeatInterval !== slider.value) dccData.repeatInterval = slider.value } } } } } } DccObject { name: "EditTesting" parentName: "RepeatRateGroup" weight: 60 visible: dccData.keyboardEnabled backgroundType: DccObject.Normal pageType: DccObject.Item page: TextField { id: textField placeholderText: qsTr("test here") background: null horizontalAlignment: textMetrics.boundingRect.width > width ? Text.AlignRight : Text.AlignHCenter font: D.DTK.fontManager.t8 onActiveFocusChanged: { if (!activeFocus) { text = "" } } // 创建文本测量器 TextMetrics { id: textMetrics font: textField.font // 使用与 TextField 相同的字体 text: textField.text // 绑定到当前文本 } } } } DccObject { name: "KeypadSettings" parentName: "KeyboardCommon" weight: 70 visible: dccData.keyboardEnabled pageType: DccObject.Item page: DccGroupView { height: implicitHeight + 20 } DccObject { name: "EnableNumLock" parentName: "KeypadSettings" displayName: qsTr("Numeric Keypad") weight: 80 visible: dccData.keyboardEnabled backgroundType: DccObject.Normal pageType: DccObject.Editor page: D.Switch { checked: dccData.numLock onCheckedChanged: { dccData.numLock = checked } } } DccObject { name: "CapsLockPrompt" parentName: "KeypadSettings" displayName: qsTr("Caps lock prompt") weight: 90 visible: dccData.keyboardEnabled backgroundType: DccObject.Normal pageType: DccObject.Editor page: D.Switch { checked: dccData.capsLock onCheckedChanged: { dccData.capsLock = checked } } } } } ================================================ FILE: src/plugin-keyboard/qml/KeySequenceDisplay.qml ================================================ // SPDX-FileCopyrightText: 2022 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dtk.private 1.0 as P import org.deepin.dcc 1.0 Control { id: control property string text property string placeholderText property list keys property D.Palette backgroundColor: DS.Style.keySequenceEdit.background property D.Palette placeholderTextColor: DS.Style.keySequenceEdit.placeholderText property bool showEditButtons: false property bool showWarnning: false property int textToKeySpacing: 20// 名称文字与快捷键按钮区域的间距 signal requestKeys signal requestEditKeys signal requestDeleteKeys background: Rectangle { implicitWidth: DS.Style.keySequenceEdit.width implicitHeight: DS.Style.keySequenceEdit.height radius: DS.Style.control.radius color: control.D.ColorSelector.backgroundColor } contentItem: RowLayout { spacing: control.textToKeySpacing Label { id: textLabel Layout.leftMargin: DS.Style.keySequenceEdit.margin font: D.DTK.fontManager.t6 textFormat: Text.PlainText text: control.text elide: Text.ElideRight horizontalAlignment: Qt.AlignLeft verticalAlignment: Qt.AlignVCenter Layout.fillWidth: true Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter } Loader { id: keyLoader Layout.rightMargin: DS.Style.keySequenceEdit.margin Layout.alignment: Qt.AlignVCenter Layout.fillWidth: false sourceComponent: (control.keys.length !== 0) ? keyComponent : inputComponent MouseArea { anchors.fill: parent onClicked: (mouse) => { if (control.showEditButtons && mouse.x >= editButton.x) { return } control.requestKeys() } } } } Component { id: inputComponent Label { text: control.placeholderText color: control.D.ColorSelector.placeholderTextColor font: D.DTK.fontManager.t7 horizontalAlignment: Qt.AlignRight verticalAlignment: Qt.AlignVCenter } } Component { id: keyComponent RowLayout { spacing: DS.Style.keySequenceEdit.margin D.IconButton { id: warnningBtn flat: true background: null visible: showWarnning icon.name: "icon_info" icon.width: 24 icon.height: 24 } Repeater { model: control.keys P.KeySequenceLabel { Layout.alignment: Qt.AlignRight text: modelData } } RowLayout { spacing: 0 Layout.alignment: Qt.AlignRight D.IconButton { id: editButton visible: control.showEditButtons focusPolicy: Qt.NoFocus hoverEnabled: true icon.name: "keyboard_edit" icon.width: 16 icon.height: 16 implicitWidth: 36 implicitHeight: 36 Layout.alignment: Qt.AlignVCenter background: Rectangle { anchors.fill: parent property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } onClicked: { control.requestEditKeys() } } D.IconButton { id: removeButton visible: control.showEditButtons focusPolicy: Qt.NoFocus hoverEnabled: true icon.name: "keyboard_delete" icon.width: 16 icon.height: 16 implicitWidth: 36 implicitHeight: 36 background: Rectangle { anchors.fill: parent property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } onClicked: { control.requestDeleteKeys() } } } } } } ================================================ FILE: src/plugin-keyboard/qml/Keyboard.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { id: keyboard name: "keyboard" parentName: "device" displayName: qsTr("Keyboard") description: qsTr("General Settings, input method, shortcuts") icon: "device_keyboard" weight: 40 visible: false DccDBusInterface { property var numLockState service: "org.deepin.dde.Keybinding1" path: "/org/deepin/dde/Keybinding1" inter: "org.deepin.dde.Keybinding1" connection: DccDBusInterface.SessionBus onNumLockStateChanged: keyboard.visible = true } } ================================================ FILE: src/plugin-keyboard/qml/KeyboardMain.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.3 import org.deepin.dcc 1.0 DccObject { DccObject { name: "KeyboardCommon" parentName: "keyboard" displayName: qsTr("Common") weight: 10 pageType: DccObject.Item page: DccGroupView { spacing: 5 isGroup: false height: implicitHeight + 20 } Common {} } // 101~299 for InputMethod Shortcuts { weight: 300 } } ================================================ FILE: src/plugin-keyboard/qml/ShortcutSettingDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls import QtQuick.Window import QtQuick.Dialogs import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 D.DialogWindow { id: ddialog width: 400 minimumWidth: 400 minimumHeight: 360 maximumWidth: minimumWidth visible: true icon: "preferences-system" modality: Qt.WindowModal property string keyId property alias keyName: nameEdit.text property alias cmdName: commandEdit.text property alias keySequence: edit.keys property alias accels: edit.accels property alias conflitedText: conflictText.text property string saveKeyName: "" property string saveCmdName: "" property string saveAccels: "" property var saveKeys: [qsTr("None")] property bool nameExists: false ColumnLayout { spacing: 10 width: parent.width Component.onCompleted: { // 初始化时检查名称是否存在 if (nameEdit.text.trim().length > 0) { ddialog.nameExists = dccData.isShortcutNameExists(nameEdit.text.trim(), ddialog.keyId); } } Label { Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter horizontalAlignment: Text.AlignHCenter wrapMode: Text.WordWrap font { family: D.DTK.fontManager.t5.family pixelSize: D.DTK.fontManager.t5.pixelSize weight: Font.Bold } text: ddialog.keyId.length > 0 ? qsTr("Change custom shortcut") : qsTr("Add custom shortcut") } Label { Layout.alignment: Qt.AlignLeft Layout.leftMargin: 4 font: D.DTK.fontManager.t6 text: qsTr("Name:") } D.LineEdit { id: nameEdit Layout.rightMargin: 20 Layout.preferredWidth: parent.width font: D.DTK.fontManager.t6 placeholderText: qsTr("Required") showAlert: ddialog.nameExists alertText: qsTr("The shortcut name is already in use. Choose a different name.") onTextChanged: { // 检查名称是否已存在(包括系统和自定义快捷键) if (text.trim().length > 0) { ddialog.nameExists = dccData.isShortcutNameExists(text.trim(), ddialog.keyId); } else { ddialog.nameExists = false; } } } Label { Layout.alignment: Qt.AlignLeft Layout.leftMargin: 4 font: D.DTK.fontManager.t6 text: qsTr("Command:") } D.LineEdit { id: commandEdit Layout.rightMargin: 20 Layout.preferredWidth: parent.width font: D.DTK.fontManager.t6 clearButton.visible: false placeholderText: qsTr("Required") D.ActionButton { anchors { right: commandEdit.right rightMargin: 10 verticalCenter: parent.verticalCenter } icon { name: "keyboard_add_file" height: 20 width: 20 } onClicked: { keyFileDialog.open(); } } FileDialog { id: keyFileDialog title: "Please choose a file" onAccepted: { var path = keyFileDialog.selectedFile.toString(); // remove prefixed "file:///" path = path.replace(/^(file:\/{3})/, "/"); commandEdit.text = path; } } } KeySequenceDisplay { id: edit property bool showAlertColor: false property string accels text: qsTr("Shortcut") keys: [qsTr("None")] Layout.topMargin: 10 Layout.rightMargin: 20 Layout.preferredWidth: parent.width placeholderText: qsTr("please enter a shortcut key") background.visible: edit.keys.length === 0 || conflictText.visible || showAlertColor backgroundColor: { if (edit.showAlertColor || conflictText.text.length > 0) return DS.Style.edit.alertBackground; else return DS.Style.keySequenceEdit.background; } onRequestKeys: { keys = []; dccData.updateKey(ddialog.keyId, 1); } } DccLabel { id: conflictText Layout.rightMargin: 20 Layout.fillWidth: true wrapMode: Text.WordWrap clip: true font: D.DTK.fontManager.t6 visible: text.length > 0 } RowLayout { Layout.alignment: Qt.AlignBottom | Qt.AlignHCenter Layout.topMargin: 0 spacing: 10 Button { Layout.bottomMargin: 14 Layout.fillWidth: true font: D.DTK.fontManager.t6 Layout.leftMargin: 4 text: qsTr("Cancel") onClicked: { if (ddialog.keyId.length > 0) { dccData.modifyCustomShortcut(ddialog.keyId, ddialog.saveKeyName, ddialog.saveCmdName, ddialog.saveAccels); } ddialog.close(); } } Button { Layout.bottomMargin: 14 Layout.fillWidth: true Layout.rightMargin: 24 font: D.DTK.fontManager.t6 text: ddialog.keyId.length > 0 ? qsTr("Save") : qsTr("Add") enabled: commandEdit.text.length > 0 && nameEdit.text.length > 0 && !ddialog.nameExists onClicked: { if (edit.keys[0] === qsTr("None")) { edit.showAlertColor = true; return; } if (ddialog.keyId.length > 0) dccData.modifyCustomShortcut(ddialog.keyId, nameEdit.text, commandEdit.text, edit.accels); else dccData.addCustomShortcut(nameEdit.text, commandEdit.text, edit.accels); ddialog.close(); } } } Connections { target: dccData function onRequestRestore() { edit.keys = ddialog.saveKeys; conflictText.text = ""; // 重置名称验证状态 if (nameEdit.text.trim().length > 0) { ddialog.nameExists = dccData.isShortcutNameExists(nameEdit.text.trim(), ddialog.keyId); } else { ddialog.nameExists = false; } } function onRequestClear() { onRequestRestore(); } function onKeyConflicted(oldAccels, newAccels) { edit.accels = newAccels; // 冲突也可以覆盖 var actionText = ddialog.keyId.length > 0 ? qsTr("click Save to make this shortcut key effective") : qsTr("click Add to make this shortcut key effective"); conflictText.text = dccData.conflictText + ", " + actionText; } function onKeyDone(accels) { edit.keys = dccData.formatKeys(accels); edit.accels = accels; conflictText.text = ""; } function onKeyEvent(accels) { edit.showAlertColor = false; edit.keys = dccData.formatKeys(accels); } } } } ================================================ FILE: src/plugin-keyboard/qml/Shortcuts.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls 2.3 import QtQuick.Layouts import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS DccObject { id: shortcutSettingsView name: "shortcutSettingsView" parentName: "keyboard" displayName: qsTr("Shortcuts") description: qsTr("System shortcut, custom shortcut") icon: "keyboard_fn" weight: parent.weight // 300 property int searchEditWidth: 600 property var viewScrollbar: ScrollBar { width: 10 } PropertyAnimation { id: scrollbarAnimation target: viewScrollbar property: "opacity" duration: 200 from: 0 to: 1 onFinished: viewScrollbar.increase() } page: DccSettingsView { ScrollBar.vertical: viewScrollbar } DccObject { id: shortcutSettingsBody property bool isEditing: false property string conflictAccels name: "shortcutSettingsBody" parentName: "shortcutSettingsView" weight: 30 pageType: DccObject.Item signal requestRestore page: ColumnLayout { spacing: 10 Timer { id: timer interval: 100 onTriggered: { shortcutView.model.setFilterFixedString(searchEdit.text); } } D.SearchEdit { id: searchEdit Layout.topMargin: 10 Layout.alignment: Qt.AlignHCenter Layout.fillWidth: true placeholder: qsTr("Search shortcuts") onTextChanged: { timer.start() } onEditingFinished: { timer.start() } Component.onCompleted: { // clear shortcutView.model.setFilterWildcard(""); shortcutSettingsView.searchEditWidth = Qt.binding(function() { return width; }); } } ListView { id: shortcutView property Item editItem property Item conflictText clip: true interactive: false // 外层有滚动了,listview 就别滚了 implicitHeight: contentHeight implicitWidth: 600 Layout.fillWidth: true model: dccData.shortcutSearchModel() section.property: "section" section.criteria: ViewSection.FullString section.delegate: RowLayout { width: ListView.view.width height: childrenRect.height required property string section Label { text: parent.section font.bold: true font.pointSize: 13 leftPadding: 20 bottomPadding: 10 topPadding: 16 } D.Button { id: button focusPolicy: Qt.NoFocus visible: parent.section === qsTranslate("dccV25::ShortcutModel", "Custom") checkable: true checked: shortcutSettingsBody.isEditing Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.rightMargin: 10 text: shortcutSettingsBody.isEditing ? qsTr("done") : qsTr("edit") font: D.DTK.fontManager.t8 background: null textColor: D.Palette { normal { common: D.DTK.makeColor(D.Color.Highlight) crystal: D.DTK.makeColor(D.Color.Highlight) } } onCheckedChanged: { shortcutSettingsBody.isEditing = button.checked if (!shortcutView.editItem) return shortcutView.editItem.keys = shortcutView.editItem.keySequence shortcutView.editItem.focus = false shortcutView.conflictText.visible = false shortcutView.editItem = null shortcutView.conflictText = null } } } delegate: ItemDelegate { id: editorDelegate checkable: false implicitWidth: ListView.view.width topInset: 0 bottomInset: 0 backgroundVisible: true Layout.fillWidth: true corners: model.corners background: DccItemBackground { id: background separatorVisible: true backgroundType: DccObject.Normal } contentItem: ColumnLayout { KeySequenceDisplay { id: edit text: model.display keys: model.keySequence placeholderText: qsTr("please enter a new shortcut key") background.visible: conflictText.visible backgroundColor: conflictText.visible ? DS.Style.edit.alertBackground : DS.Style.keySequenceEdit.background Layout.alignment: Qt.AlignRight Layout.bottomMargin: conflictText.visible ? 8 : 0 Layout.fillWidth: true showEditButtons: shortcutSettingsBody.isEditing && model.isCustom showWarnning: model.accels.length > 0 && shortcutSettingsBody.conflictAccels === model.accels Connections{ target: model function onKeySequenceChanged() { edit.keys= model.keySequence } } onRequestKeys: { if (shortcutView.editItem) { shortcutView.editItem.restore() // return } edit.keys = "" dccData.updateKey(model.id, model.type) shortcutView.editItem = edit shortcutView.conflictText = conflictText shortcutSettingsBody.isEditing = false } onRequestEditKeys: { dialogloader.active = true } onRequestDeleteKeys: { console.log("onRequestDeleteKeys", model.id) dccData.deleteCustomShortcut(model.id) } function modifyShortcut(accels) { console.log("modifyShortcut", model.id, accels, model.type) if (accels.length > 0) dccData.modifyShortcut(model.id, accels, model.type) } function clearShortcut() { dccData.clearShortcut(model.id, model.type) focus = false keys = dccData.formatKeys("") conflictText.visible = false shortcutSettingsBody.conflictAccels = "" shortcutView.editItem = null shortcutView.conflictText = null } function restore() { edit.keys = model.keySequence conflictText.visible = false shortcutSettingsBody.conflictAccels = "" shortcutView.editItem = null shortcutView.conflictText = null } Loader { id: dialogloader active: false sourceComponent: ShortcutSettingDialog { onClosing: { dialogloader.active = false conflictText.visible = false shortcutSettingsBody.conflictAccels = "" shortcutView.editItem = null shortcutView.conflictText = null } } onLoaded: { edit.restore() item.keyId = model.id item.keyName = model.display item.cmdName = model.command item.keySequence = model.keySequence if (model.keySequence.length > 0) { item.saveKeys = model.keySequence } item.accels = model.accels item.saveAccels = item.accels item.saveKeyName = item.keyName item.saveCmdName = item.cmdName item.show() } } } Item { id: conflictText visible: false implicitHeight: 20 implicitWidth: row.implicitWidth Layout.alignment: Qt.AlignRight Layout.rightMargin: 20 Layout.fillWidth: true onVisibleChanged : { if (visible && model.index === (shortcutView.count - 1)) { scrollbarAnimation.start() } } RowLayout { id: row width: parent.width spacing: 3 Label { id: conflictTextLabel text: dccData.conflictText + "," elide: Text.ElideLeft Layout.fillWidth: true horizontalAlignment: Text.AlignRight HoverHandler { id: conflictHandler } ToolTip.visible: conflictHandler.hovered ToolTip.text: conflictTextLabel.text + clickLabel.text + " " + cancelLabel.text + " " + orLabel.text + " " + replaceLabel.text ToolTip.delay: 500 ToolTip.timeout: 4000 } Label { id: clickLabel text: qsTr("Click") } Label { id: cancelLabel text: qsTr("Cancel") color: palette.highlight MouseArea { anchors.fill: parent onClicked: { edit.restore() } } } Label { id: orLabel text: qsTr("or") } Label { id: replaceLabel text: qsTr("Replace") color: palette.highlight MouseArea { anchors.fill: parent onClicked: { edit.modifyShortcut(shortcutSettingsBody.conflictAccels) shortcutSettingsBody.conflictAccels = "" } } } } } } } function restoreShortcutView() { if (!shortcutView.editItem) return shortcutView.editItem.restore() } Connections { target: shortcutSettingsBody function onRequestRestore() { shortcutView.restoreShortcutView() } } Connections { target: dccData function onRequestRestore() { shortcutView.restoreShortcutView() } function onRequestClear() { shortcutView.editItem.clearShortcut() } function onKeyConflicted(oldAccels, newAccels) { if (shortcutView.conflictText) shortcutView.conflictText.visible = true shortcutSettingsBody.conflictAccels = newAccels } function onKeyDone(accels) { if (!shortcutView.editItem) return shortcutView.editItem.focus = false shortcutView.editItem.keys = dccData.formatKeys(accels) shortcutView.conflictText.visible = false shortcutView.editItem.modifyShortcut(accels) shortcutView.editItem = null shortcutView.conflictText = null } function onKeyEvent(accels) { if (!shortcutView.editItem) return shortcutView.editItem.focus = false shortcutView.editItem.keys = dccData.formatKeys(accels) } } } } } DccObject { id: bottomAreaFoot name: "bottomAreaFoot" parentName: "shortcutSettingsView" weight: 40 pageType: DccObject.Item property int restoreButtonWidth: DS.Style.button.width DccObject { name: "bottomAreaRestoreButton" parentName: "bottomAreaFoot" pageType: DccObject.Item page: Button { id: restoreButton text: qsTr("Restore default") implicitWidth: { const totalPadding = leftPadding + rightPadding const contentWidth = implicitContentWidth + totalPadding const minWidth = DS.Style.button.width const maxWidth = shortcutSettingsView.searchEditWidth / 2 - totalPadding return Math.min(Math.max(contentWidth, minWidth), maxWidth) } Text { id: restoreHiddenText text: restoreButton.text font: restoreButton.font visible: false } ToolTip.visible: { const contentWidth = restoreHiddenText.width + leftPadding + rightPadding return width < contentWidth && hovered } ToolTip.text: text onClicked: { shortcutSettingsBody.isEditing = false shortcutSettingsBody.requestRestore() dccData.resetAllShortcuts() } Component.onCompleted: { bottomAreaFoot.restoreButtonWidth = Qt.binding(function() { return implicitWidth; }) } } } DccObject { name: "bottomAreaSpacer" parentName: "bottomAreaFoot" pageType: DccObject.Item page: Item { Layout.fillWidth: true } } DccObject { name: "bottomAreaAddButton" parentName: "bottomAreaFoot" pageType: DccObject.Item page: Button { id: addButton property bool needShowDialog: false text: qsTr("Add custom shortcut") implicitWidth: { const totalPadding = leftPadding + rightPadding const contentWidth = implicitContentWidth + totalPadding const minWidth = DS.Style.button.width const maxWidth = shortcutSettingsView.searchEditWidth - bottomAreaFoot.restoreButtonWidth - 2*totalPadding - DS.Style.control.spacing return Math.min(Math.max(contentWidth, minWidth), maxWidth) } Text { id: hiddenText text: addButton.text font: addButton.font visible: false } ToolTip.visible: { const contentWidth = hiddenText.width + leftPadding + rightPadding return width < contentWidth && hovered } ToolTip.text: text Loader { id: loader active: addButton.needShowDialog sourceComponent: ShortcutSettingDialog { id: shortcutSettingDialog onClosing: { addButton.needShowDialog = false shortcutSettingsBody.conflictAccels = "" } } onLoaded: { item.show() } } onClicked: { shortcutSettingsBody.isEditing = false shortcutSettingsBody.requestRestore() addButton.needShowDialog = true } } } } } ================================================ FILE: src/plugin-keyboard/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-mouse/CMakeLists.txt ================================================ if (BUILD_PLUGIN) set(Mouse_Name mouse) find_package(Qt6 REQUIRED COMPONENTS WaylandClient) if(Qt6_VERSION VERSION_GREATER_EQUAL 6.10) find_package(Qt6 COMPONENTS WaylandClientPrivate REQUIRED) endif() if (Enable_TreelandSupport) find_package(TreelandProtocols REQUIRED) endif() file(GLOB_RECURSE mouse_SRCS "operation/*.cpp" "operation/qrc/mouse.qrc" ) file(GLOB_RECURSE mouse_qml_SRCS "qml/*.qml" ) # pkg_check_modules(QGSettings REQUIRED IMPORTED_TARGET gsettings-qt) add_library(${Mouse_Name} MODULE ${mouse_SRCS} ) if (Enable_TreelandSupport) qt6_generate_wayland_protocol_client_sources(${Mouse_Name} FILES ${TREELAND_PROTOCOLS_DATA_DIR}/treeland-personalization-manager-v1.xml ) target_compile_definitions(${Mouse_Name} PRIVATE Enable_Treeland) endif() set(mouse_Includes src/plugin-mouse/operation ) set(mouse_Libraries ${DCC_FRAME_Library} ${DTK_NS}::Gui ${QT_NS}::DBus ${QT_NS}::Qml ${QT_NS}::WaylandClientPrivate # PkgConfig::QGSettings ) target_include_directories(${Mouse_Name} PUBLIC ${mouse_Includes} ) target_link_libraries(${Mouse_Name} PRIVATE ${mouse_Libraries} ) dcc_install_plugin(NAME ${Mouse_Name} TARGET ${Mouse_Name}) # dcc_handle_plugin_translation(NAME ${Mouse_Name} QML_FILES ${mouse_qml_SRCS} SOURCE_FILES ${mouse_SRCS}) endif() ================================================ FILE: src/plugin-mouse/operation/gesturedata.cpp ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "gesturedata.h" QString GestureData::actionType() const { return m_actionType; } void GestureData::setActionType(const QString &newActionType) { if (m_actionType == newActionType) return; m_actionType = newActionType; emit actionTypeChanged(); } QString GestureData::direction() const { return m_direction; } void GestureData::setDirection(const QString &newDirection) { if (m_direction == newDirection) return; m_direction = newDirection; emit directionChanged(); } int GestureData::fingersNum() const { return m_fingersNum; } void GestureData::setFingersNum(int newFingersNum) { if (m_fingersNum == newFingersNum) return; m_fingersNum = newFingersNum; emit fingersNumChanged(); } QString GestureData::actionName() const { return m_actionName; } void GestureData::setActionName(const QString &newActionName) { if (m_actionName == newActionName) return; m_actionName = newActionName; emit actionNameChanged(); } QStringList GestureData::actionNameList() const { return m_actionNameList; } void GestureData::setActionNameList(const QStringList &newActionNameList) { m_actionNameList = newActionNameList; } QStringList GestureData::actionDescriptionList() const { return m_actionDescriptionList; } void GestureData::setActionDescriptionList(const QStringList &newActionDescriptionList) { m_actionDescriptionList = newActionDescriptionList; } QList > GestureData::actionMaps() const { return m_actionMaps; } void GestureData::setActionMaps(const QList > &newActionMaps) { m_actionMaps = newActionMaps; } void GestureData::addActiosPair(const QPair &actionPair) { m_actionMaps.append(actionPair); } GestureData::GestureData(QObject *parent) : QObject(parent) { } ================================================ FILE: src/plugin-mouse/operation/gesturedata.h ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef GESTUREDATA_H #define GESTUREDATA_H #include class GestureData : public QObject { Q_OBJECT Q_PROPERTY(QString actionType READ actionType WRITE setActionType NOTIFY actionTypeChanged FINAL) Q_PROPERTY(QString direction READ direction WRITE setDirection NOTIFY directionChanged FINAL) Q_PROPERTY(int fingersNum READ fingersNum WRITE setFingersNum NOTIFY fingersNumChanged FINAL) Q_PROPERTY(QString actionName READ actionName WRITE setActionName NOTIFY actionNameChanged FINAL) public: explicit GestureData(QObject *parent = nullptr); QString actionType() const; void setActionType(const QString &newActionType); QString direction() const; void setDirection(const QString &newDirection); int fingersNum() const; void setFingersNum(int newFingersNum); QString actionName() const; void setActionName(const QString &newActionName); QStringList actionNameList() const; void setActionNameList(const QStringList &newActionNameList); QStringList actionDescriptionList() const; void setActionDescriptionList(const QStringList &newActionDescriptionList); QList > actionMaps() const; void setActionMaps(const QList > &newActionMaps); void addActiosPair(const QPair &actionPair); QString getActionFromActionDec(QString actionDec); signals: void actionTypeChanged(); void directionChanged(); void fingersNumChanged(); void actionNameChanged(); private: QString m_actionType; QString m_direction; int m_fingersNum; QString m_actionName; QList> m_actionMaps; QStringList m_actionNameList; QStringList m_actionDescriptionList; }; #endif // GESTUREDATA_H ================================================ FILE: src/plugin-mouse/operation/gesturemodel.cpp ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "gesturemodel.h" GestureModel::GestureModel(QObject *parent) : QAbstractListModel(parent) { } GestureModel::~GestureModel() { qDeleteAll(m_gestures); } bool GestureModel::containsGestures(QString direction, int fingersNum) { for (auto data : m_gestures) { if (data->direction() == direction && data->fingersNum() == fingersNum) { return true; } } return false; } void GestureModel::updateGestureData(const GestureData &data) { for (int i = 0; i < m_gestures.size(); i++) { if (data.direction() == m_gestures[i]->direction() && data.fingersNum() == m_gestures[i]->fingersNum()) { m_gestures[i]->setActionName(data.actionName()); QModelIndex modelIndex = createIndex(i, 0); emit dataChanged(modelIndex, modelIndex, {}); return; } } } int GestureModel::rowCount(const QModelIndex &parent) const { // For list models only the root node (an invalid parent) should return the list's size. For all // other (valid) parents, rowCount() should return 0 so that it does not become a tree model. if (parent.isValid()) return 0; // FIXME: Implement me! return m_gestures.count(); } QVariant GestureModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); if (index.row() < 0 || index.row() >= m_gestures.count()) return QVariant(); GestureData *data = m_gestures[index.row()]; switch (role) { case IconRole: return getGesturesIconPath(data); case DescriptionRole: return getGesturesDec(data); case ActionsIndexRole: return getGestureActionIndex(data); case ActionListRole: return getGestureActionNames(data); default: break; } // FIXME: Implement me! return QVariant(); } QString GestureModel::getGesturesDec(GestureData *data) const { QString description; if (data->fingersNum() == 3) { if (data->actionType() == "swipe") { if (data->direction() == "up") { description += tr("Three-finger up"); } else if (data->direction() == "down") { description += tr("Three-finger down"); } else if (data->direction() == "left") { description += tr("Three-finger left"); } else if (data->direction() == "right") { description += tr("Three-finger right"); } } else if (data->actionType() == "tap") { description += tr("Three-finger tap"); } } else if (data->fingersNum() == 4) { if (data->actionType() == "swipe") { if (data->direction() == "up") { description += tr("Four-finger up"); } else if (data->direction() == "down") { description += tr("Four-finger down"); } else if (data->direction() == "left") { description += tr("Four-finger left"); } else if (data->direction() == "right") { description += tr("Four-finger right"); } } else if (data->actionType() == "tap") { description += tr("Four-finger tap"); } } return description; } QString GestureModel::getGesturesIconPath(GestureData *data) const { QString direction = data->direction(); if (data->direction() == "none") { direction = "click"; } return QString("trackpad_gesture_%1_%2").arg(data->fingersNum()).arg(direction); } QVariantList GestureModel::getGestureActionNames(GestureData *data) const { QVariantList gestureActionNames; for (auto data : data->actionMaps()) { QVariantMap map; map["actionText"] = data.second; map["actionValue"] = data.first; gestureActionNames.append(map); } return gestureActionNames; } int GestureModel::getGestureActionIndex(GestureData *data) const { auto maps = data->actionMaps(); for (int i = 0; i < maps.size(); i++) { if (maps[i].first == data->actionName()) { return i; } } return 0; } bool GestureModel::insertRows(int row, int count, const QModelIndex &parent) { beginInsertRows(parent, row, row + count - 1); // FIXME: Implement me! endInsertRows(); return true; } bool GestureModel::removeRows(int row, int count, const QModelIndex &parent) { beginRemoveRows(parent, row, row + count - 1); // FIXME: Implement me! endRemoveRows(); return true; } void GestureModel::addGestureData(GestureData *data) { if (m_gestures.contains(data)) { delete data; return; } beginInsertRows(QModelIndex(), rowCount(), rowCount()); m_gestures.append(data); endInsertRows(); } void GestureModel::removeGestureData(GestureData *data) { if (!m_gestures.contains(data)) { return; } int index = m_gestures.indexOf(data); beginRemoveRows(QModelIndex(), index, index); m_gestures.remove(index); endRemoveRows(); delete data; } void GestureModel::updateGestureData(GestureData *data) { for (int index = 0; index < m_gestures.count(); index++) { if (m_gestures[index]->fingersNum() == data->fingersNum() && m_gestures[index]->direction() == data->direction()) { QModelIndex modelIndex = createIndex(index, 0); emit dataChanged(modelIndex, modelIndex, {}); break; } } } GestureData *GestureModel::getGestureData(int index) const { if (index < 0 || index >= m_gestures.count()) return nullptr; return m_gestures[index]; } ================================================ FILE: src/plugin-mouse/operation/gesturemodel.h ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef GESTUREMODEL_H #define GESTUREMODEL_H #include #include "gesturedata.h" class GestureModel : public QAbstractListModel { Q_OBJECT public: enum gestureRoles { IconRole = Qt::UserRole + 1, DescriptionRole, ActionsIndexRole, ActionListRole, }; explicit GestureModel(QObject *parent = nullptr); ~GestureModel() override; bool containsGestures(QString direction, int fingersNum); void updateGestureData(const GestureData &data); // Basic functionality: int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QString getGesturesDec(GestureData *data) const; QString getGesturesIconPath(GestureData *data) const; QVariantList getGestureActionNames(GestureData *data) const; int getGestureActionIndex(GestureData *data) const; // Add data: bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; // Remove data: bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; void addGestureData(GestureData *data); void removeGestureData(GestureData *data); void updateGestureData(GestureData *data); GestureData *getGestureData(int index) const; QHash roleNames() const override { QHash roles; roles[IconRole] = "iconRole"; roles[DescriptionRole] = "descriptionRole"; roles[ActionsIndexRole] = "actionsIndexRole"; roles[ActionListRole] = "actionListRole"; return roles; } private: QList< GestureData *> m_gestures; }; #endif // GESTUREMODEL_H ================================================ FILE: src/plugin-mouse/operation/mousedbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "mousedbusproxy.h" #include "gesturedata.h" #include #include #include #include #include #include #include #include #include using namespace DCC_NAMESPACE; const QString Service = "org.deepin.dde.InputDevices1"; const QString MousePath = "/org/deepin/dde/InputDevice1/Mouse"; const QString TouchpadPath = "/org/deepin/dde/InputDevice1/TouchPad"; const QString TrackpointPath = "/org/deepin/dde/InputDevice1/Mouse"; const QString InputDevicesPath = "/org/deepin/dde/InputDevices1"; const QString PropertiesInterface = "org.freedesktop.DBus.Properties"; const QString MouseInterface = "org.deepin.dde.InputDevice1.Mouse"; const QString TouchpadInterface = "org.deepin.dde.InputDevice1.TouchPad"; const QString TrackpointInterface = "org.deepin.dde.InputDevice1.TrackPoint"; const QString InputDevicesInterface = "org.deepin.dde.InputDevices1"; const QString GestureInterface = "org.deepin.dde.Gesture1"; const QString GesturePath = "/org/deepin/dde/Gesture1"; const QString GestureService = "org.deepin.dde.Gesture1"; const QString AppearanceService = "org.deepin.dde.Appearance1"; const QString AppearancePath = "/org/deepin/dde/Appearance1"; const QString AppearanceInterface = "org.deepin.dde.Appearance1"; const QString PowerService = QStringLiteral("org.deepin.dde.Power1"); const QString PowerPath = QStringLiteral("/org/deepin/dde/Power1"); const QString PowerInterface = QStringLiteral("org.deepin.dde.Power1"); MouseDBusProxy::MouseDBusProxy(MouseWorker *worker, QObject *parent) : QObject(parent) , m_worker(worker) { init(); } void MouseDBusProxy::active() { // initial mouse settingss bool exist = m_dbusMouseProperties->call("Get", MouseInterface, "Exist").arguments().at(0).value().variant().toBool(); bool leftHanded = m_dbusMouseProperties->call("Get", MouseInterface, "LeftHanded").arguments().at(0).value().variant().toBool(); bool naturalScroll = m_dbusMouseProperties->call("Get", MouseInterface, "NaturalScroll").arguments().at(0).value().variant().toBool(); int doubleClick = m_dbusMouseProperties->call("Get", MouseInterface, "DoubleClick").arguments().at(0).value().variant().toInt(); bool disableTpad = m_dbusMouseProperties->call("Get", MouseInterface, "DisableTpad").arguments().at(0).value().variant().toBool(); bool adaptiveAccelProfile = m_dbusMouseProperties->call("Get", MouseInterface, "AdaptiveAccelProfile").arguments().at(0).value().variant().toBool(); double motionAcceleration = m_dbusMouseProperties->call("Get", MouseInterface, "MotionAcceleration").arguments().at(0).value().variant().toDouble(); m_worker->setMouseExist(exist); m_worker->setLeftHandState(leftHanded); m_worker->setMouseNaturalScrollState(naturalScroll); m_worker->setDouClick(doubleClick); m_worker->setDisTouchPad(disableTpad); m_worker->setAccelProfile(adaptiveAccelProfile); m_worker->setMouseMotionAcceleration(motionAcceleration); // initial touchpad settings motionAcceleration = m_dbusTouchPadProperties->call("Get", TouchpadInterface, "MotionAcceleration").arguments().at(0).value().variant().toDouble(); bool tapClick = m_dbusTouchPadProperties->call("Get", TouchpadInterface, "TapClick").arguments().at(0).value().variant().toBool(); exist = m_dbusTouchPadProperties->call("Get", TouchpadInterface, "Exist").arguments().at(0).value().variant().toBool(); bool touchpadEnabled = m_dbusTouchPadProperties->call("Get", TouchpadInterface, "TPadEnable").arguments().at(0).value().variant().toBool(); naturalScroll = m_dbusTouchPadProperties->call("Get", TouchpadInterface, "NaturalScroll").arguments().at(0).value().variant().toBool(); bool disableIfTyping = m_dbusTouchPadProperties->call("Get", TouchpadInterface, "DisableIfTyping").arguments().at(0).value().variant().toBool(); bool palmDetect = m_dbusTouchPadProperties->call("Get", TouchpadInterface, "PalmDetect").arguments().at(0).value().variant().toInt(); int palmMinWidth = m_dbusTouchPadProperties->call("Get", TouchpadInterface, "PalmMinWidth").arguments().at(0).value().variant().toInt(); bool palmMinZ = m_dbusTouchPadProperties->call("Get", TouchpadInterface, "PalmMinZ").arguments().at(0).value().variant().toBool(); m_worker->setTouchpadMotionAcceleration(motionAcceleration); m_worker->setTpadEnabled(touchpadEnabled); m_worker->setTapClick(tapClick); m_worker->setTpadExist(exist); m_worker->setTouchNaturalScrollState(naturalScroll); m_worker->setDisTyping(disableIfTyping); m_worker->setPalmDetect(palmDetect); m_worker->setPalmMinWidth(palmMinWidth); m_worker->setPalmMinz(palmMinZ); // initial redpoint settings motionAcceleration = m_dbusTrackPointProperties->call("Get", TrackpointInterface, "MotionAcceleration").arguments().at(0).value().variant().toDouble(); exist = m_dbusTouchPadProperties->call("Get", TrackpointInterface, "Exist").arguments().at(0).value().variant().toBool(); m_worker->setTrackPointMotionAcceleration(motionAcceleration); m_worker->setRedPointExist(exist); // initial device properties uint wheelSpeed = m_dbusDevicesProperties->call("Get", InputDevicesInterface, "WheelSpeed").arguments().at(0).value().variant().toUInt(); m_worker->setScrollSpeed(wheelSpeed); // initial lid is present bool lidIsPresent = getLidIsPresent(); m_worker->setLidIsPresent(lidIsPresent); QVariant gestureInfos = m_dbusGestureProperties->call("Get", GestureInterface, "Infos").arguments().at(0).value().variant(); parseGesturesData(qvariant_cast(gestureInfos)); listCursor(); auto cursorSize = m_appearance->property("CursorSize").toInt(); m_worker->setCursorSize(cursorSize); } void MouseDBusProxy::deactive() { } void MouseDBusProxy::init() { // 监控dbus上的属性改变信号 QDBusConnection::sessionBus().connect(Service, MousePath, PropertiesInterface, "PropertiesChanged", "sa{sv}as", this, SLOT(onMousePathPropertiesChanged(QDBusMessage))); QDBusConnection::sessionBus().connect(Service, TouchpadPath, PropertiesInterface, "PropertiesChanged", "sa{sv}as", this, SLOT(onTouchpadPathPropertiesChanged(QDBusMessage))); QDBusConnection::sessionBus().connect(Service, TrackpointPath, PropertiesInterface, "PropertiesChanged", "sa{sv}as", this, SLOT(onTrackpointPathPropertiesChanged(QDBusMessage))); QDBusConnection::sessionBus().connect(Service, InputDevicesPath, PropertiesInterface, "PropertiesChanged", "sa{sv}as", this, SLOT(onInputDevicesPathPropertiesChanged(QDBusMessage))); QDBusConnection::sessionBus().connect(GestureService, GesturePath, PropertiesInterface, "PropertiesChanged", "sa{sv}as", this, SLOT(onGesturePropertiesChanged(QDBusMessage))); QDBusConnection::sessionBus().connect(AppearanceService, AppearancePath, PropertiesInterface, "PropertiesChanged", "sa{sv}as", this, SLOT(onAppearancePropertiesChanged(QDBusMessage))); // 初始化dbus接口 m_dbusMouseProperties = new QDBusInterface(Service, MousePath, PropertiesInterface, QDBusConnection::sessionBus()); m_dbusTouchPadProperties = new QDBusInterface(Service, TouchpadPath, PropertiesInterface, QDBusConnection::sessionBus()); m_dbusTrackPointProperties = new QDBusInterface(Service, TrackpointPath, PropertiesInterface, QDBusConnection::sessionBus()); m_dbusDevicesProperties = new QDBusInterface(Service, InputDevicesPath, PropertiesInterface, QDBusConnection::sessionBus()); m_dbusGestureProperties = new QDBusInterface(GestureService, GesturePath, PropertiesInterface, QDBusConnection::sessionBus()); m_appearance = new QDBusInterface(AppearanceService, AppearancePath, AppearanceInterface, QDBusConnection::sessionBus()); m_dbusMouse = new QDBusInterface(Service, MousePath, MouseInterface, QDBusConnection::sessionBus()); m_dbusTouchPad = new QDBusInterface(Service, TouchpadPath, TouchpadInterface, QDBusConnection::sessionBus()); m_dbusTrackPoint = new QDBusInterface(Service, TrackpointPath, TrackpointInterface, QDBusConnection::sessionBus()); m_dbusDevices = new QDBusInterface(Service, InputDevicesPath, InputDevicesInterface, QDBusConnection::sessionBus()); m_dbusGesture = new QDBusInterface(GestureService, GesturePath, GestureInterface, QDBusConnection::sessionBus()); // set Mouse settings from dde-control-center connect(m_worker, &MouseWorker::requestSetLeftHandState, this, &MouseDBusProxy::setLeftHandState); connect(m_worker, &MouseWorker::requestSetMouseNaturalScrollState, this, &MouseDBusProxy::setMouseNaturalScrollState); connect(m_worker, &MouseWorker::requestSetDouClick, this, &MouseDBusProxy::setDouClick); connect(m_worker, &MouseWorker::requestSetDisTouchPad, this, &MouseDBusProxy::setDisableTouchPadWhenMouseExist); connect(m_worker, &MouseWorker::requestSetAccelProfile, this, &MouseDBusProxy::setAccelProfile); connect(m_worker, &MouseWorker::requestSetMouseMotionAcceleration, this, &MouseDBusProxy::setMouseMotionAcceleration); // set Touchpad settings from dde-control-center connect(m_worker, &MouseWorker::requestSetTouchNaturalScrollState, this, &MouseDBusProxy::setTouchNaturalScrollState); connect(m_worker, &MouseWorker::requestSetDisTyping, this, &MouseDBusProxy::setDisTyping); connect(m_worker, &MouseWorker::requestSetTouchpadMotionAcceleration, this, &MouseDBusProxy::setTouchpadMotionAcceleration); connect(m_worker, &MouseWorker::requestSetTapClick, this, &MouseDBusProxy::setTapClick); connect(m_worker, &MouseWorker::requestSetPalmDetect, this, &MouseDBusProxy::setPalmDetect); connect(m_worker, &MouseWorker::requestSetPalmMinWidth, this, &MouseDBusProxy::setPalmMinWidth); connect(m_worker, &MouseWorker::requestSetPalmMinz, this, &MouseDBusProxy::setPalmMinz); // set Redpoint settings from dde-control-center connect(m_worker, &MouseWorker::requestSetTrackPointMotionAcceleration, this, &MouseDBusProxy::setTrackPointMotionAcceleration); // set Device properties from dde-control-center connect(m_worker, &MouseWorker::requestSetScrollSpeed, this, &MouseDBusProxy::setScrollSpeed); connect(m_worker, &MouseWorker::requestSetTouchpadEnabled, this, &MouseDBusProxy::setTouchpadEnabled); connect(m_worker, &MouseWorker::requestSetGesture, this, &MouseDBusProxy::setGesture); connect(m_worker, &MouseWorker::requestSetCursorSize, this, &MouseDBusProxy::setCursorSize); } void MouseDBusProxy::parseGesturesData(const QDBusArgument &argument) { // 开始解析数组 argument.beginArray(); while (!argument.atEnd()) { QString actionType, direction, actionName; qint32 fingerNum; // 开始解析 Struct of (String,String,Int32,String) argument.beginStructure(); argument >> actionType; argument >> direction; argument >> fingerNum; argument >> actionName; argument.endStructure(); QVariantMap data; data.insert("actionType", actionType); data.insert("direction", direction); data.insert("actionName", actionName); data.insert("fingerNum", fingerNum); QDBusPendingReply reply = m_dbusGesture->asyncCall("GetGestureAvaiableActions", actionType, fingerNum); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this); watcher->setProperty("data", QVariant::fromValue(data)); connect(watcher, &QDBusPendingCallWatcher::finished, this, &MouseDBusProxy::onGetGestureAvaiableActionsFinished); } argument.endArray(); } void MouseDBusProxy::onDefaultReset() { QDBusPendingCallWatcher *watcherMouse = new QDBusPendingCallWatcher(m_dbusMouse->asyncCall("Reset"), this); QObject::connect(watcherMouse, &QDBusPendingCallWatcher::finished, this, [=](){ watcherMouse->deleteLater(); }); QDBusPendingCallWatcher *watcherTouchPad = new QDBusPendingCallWatcher(m_dbusTouchPad->asyncCall("Reset"), this); QObject::connect(watcherTouchPad, &QDBusPendingCallWatcher::finished, this, [=](){ watcherTouchPad->deleteLater(); }); QDBusPendingCallWatcher *watcherTrackPoint = new QDBusPendingCallWatcher(m_dbusTrackPoint->asyncCall("Reset"), this); QObject::connect(watcherTrackPoint, &QDBusPendingCallWatcher::finished, this, [=](){ watcherTrackPoint->deleteLater(); }); QDBusPendingCallWatcher *watcherDevices = new QDBusPendingCallWatcher(m_dbusDevices->asyncCall("Reset"), this); QObject::connect(watcherDevices, &QDBusPendingCallWatcher::finished, this, [=](){ watcherDevices->deleteLater(); }); } void MouseDBusProxy::setLeftHandState(const bool state) { m_dbusMouseProperties->call("Set", MouseInterface, "LeftHanded", state); m_dbusTouchPadProperties->call("Set", TouchpadInterface, "LeftHanded", state); m_dbusTrackPointProperties->call("Set", TrackpointInterface, "LeftHanded", state); } void MouseDBusProxy::setDouClick(const int &value) { m_dbusMouseProperties->call("Set", MouseInterface, "DoubleClick", value); m_dbusTouchPadProperties->call("Set", TouchpadInterface, "DoubleClick", value); } void MouseDBusProxy::setMouseNaturalScrollState(const bool state) { m_dbusMouseProperties->call("Set", MouseInterface, "NaturalScroll", state); } void MouseDBusProxy::setDisableTouchPadWhenMouseExist(const bool state) { m_dbusMouseProperties->call("Set", MouseInterface, "DisableTpad", state); } void MouseDBusProxy::setAccelProfile(const bool state) { m_dbusMouseProperties->call("Set", MouseInterface, "AdaptiveAccelProfile", state); } void MouseDBusProxy::setMouseMotionAcceleration(const double &value) { m_dbusMouseProperties->call("Set", MouseInterface, "MotionAcceleration", value); } void MouseDBusProxy::setTouchNaturalScrollState(const bool state) { m_dbusTouchPadProperties->call("Set", TouchpadInterface, "NaturalScroll", state); } void MouseDBusProxy::setDisTyping(const bool state) { m_dbusTouchPadProperties->call("Set", TouchpadInterface, "DisableIfTyping", state); } void MouseDBusProxy::setTouchpadMotionAcceleration(const double &value) { m_dbusTouchPadProperties->call("Set", TouchpadInterface, "MotionAcceleration", value); } void MouseDBusProxy::setTapClick(const bool state) { m_dbusTouchPadProperties->call("Set", TouchpadInterface, "TapClick", state); } void MouseDBusProxy::setPalmDetect(bool palmDetect) { m_dbusTouchPadProperties->call("Set", TouchpadInterface, "PalmDetect", palmDetect); } void MouseDBusProxy::setPalmMinWidth(int palmMinWidth) { m_dbusTouchPadProperties->call("Set", TouchpadInterface, "PalmMinWidth", palmMinWidth); } void MouseDBusProxy::setPalmMinz(int palmMinz) { m_dbusTouchPadProperties->call("Set", TouchpadInterface, "PalmMinZ", palmMinz); } void MouseDBusProxy::setTouchpadEnabled(bool state) { m_dbusTouchPad->asyncCallWithArgumentList("Enable", { state }); } void MouseDBusProxy::setCursorSize(const int cursorSize) { m_appearance->setProperty("CursorSize", QVariant::fromValue(cursorSize)); } void MouseDBusProxy::setTrackPointMotionAcceleration(const double &value) { m_dbusTrackPointProperties->call("Set", TrackpointInterface, "MotionAcceleration", value); } void MouseDBusProxy::setScrollSpeed(uint speed) { m_dbusDevicesProperties->call("Set", InputDevicesInterface, "WheelSpeed", speed); } void MouseDBusProxy::setGesture(const QString& name, const QString& direction, int fingers, const QString& action) { m_dbusGesture->asyncCallWithArgumentList("SetGesture", { name, direction, fingers, action }); } void MouseDBusProxy::onMousePathPropertiesChanged(QDBusMessage msg) { QList arguments = msg.arguments(); if (3 != arguments.count()) { return; } QString interfaceName = msg.arguments().at(0).toString(); if (interfaceName == MouseInterface) { QVariantMap changedProps = qdbus_cast(arguments.at(1).value()); QStringList keys = changedProps.keys(); for (int i = 0; i < keys.size(); i++) { if (keys.at(i) == "Exist") { m_worker->setMouseExist(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "LeftHanded") { m_worker->setLeftHandState(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "NaturalScroll") { m_worker->setMouseNaturalScrollState(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "DoubleClick") { m_worker->setDouClick(changedProps.value(keys.at(i)).toInt()); } else if(keys.at(i) == "DisableTpad") { m_worker->setDisTouchPad(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "AdaptiveAccelProfile") { m_worker->setAccelProfile(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "MotionAcceleration") { m_worker->setMouseMotionAcceleration(changedProps.value(keys.at(i)).toDouble()); } } } } void MouseDBusProxy::onTouchpadPathPropertiesChanged(QDBusMessage msg) { QList arguments = msg.arguments(); if (3 != arguments.count()) { return; } QString interfaceName = msg.arguments().at(0).toString(); if (interfaceName == TouchpadInterface) { QVariantMap changedProps = qdbus_cast(arguments.at(1).value()); QStringList keys = changedProps.keys(); for (int i = 0; i < keys.size(); i++) { if (keys.at(i) == "Exist") { m_worker->setTpadExist(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "TPadEnable") { m_worker->setTpadEnabled(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "NaturalScroll") { m_worker->setTouchNaturalScrollState(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "DisableIfTyping") { m_worker->setDisTyping(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "DoubleClick") { m_worker->setDouClick(changedProps.value(keys.at(i)).toInt()); } else if(keys.at(i) == "MotionAcceleration") { m_worker->setTouchpadMotionAcceleration(changedProps.value(keys.at(i)).toDouble()); } else if(keys.at(i) == "TapClick") { m_worker->setTapClick(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "PalmDetect") { m_worker->setPalmDetect(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "PalmMinWidth") { m_worker->setPalmMinWidth(changedProps.value(keys.at(i)).toInt()); } else if(keys.at(i) == "PalmMinZ") { m_worker->setPalmMinz(changedProps.value(keys.at(i)).toInt()); } } } } void MouseDBusProxy::onTrackpointPathPropertiesChanged(QDBusMessage msg) { QList arguments = msg.arguments(); if (3 != arguments.count()) { return; } QString interfaceName = msg.arguments().at(0).toString(); if (interfaceName == TrackpointInterface) { QVariantMap changedProps = qdbus_cast(arguments.at(1).value()); QStringList keys = changedProps.keys(); for (int i = 0; i < keys.size(); i++) { if (keys.at(i) == "Exist") { m_worker->setRedPointExist(changedProps.value(keys.at(i)).toBool()); } else if(keys.at(i) == "MotionAcceleration") { m_worker->setTrackPointMotionAcceleration(changedProps.value(keys.at(i)).toDouble()); } } } } void MouseDBusProxy::onInputDevicesPathPropertiesChanged(QDBusMessage msg) { QList arguments = msg.arguments(); if (3 != arguments.count()) { return; } QString interfaceName = msg.arguments().at(0).toString(); if (interfaceName == InputDevicesInterface) { QVariantMap changedProps = qdbus_cast(arguments.at(1).value()); QStringList keys = changedProps.keys(); for (int i = 0; i < keys.size(); i++) { if (keys.at(i) == "WheelSpeed") { m_worker->setScrollSpeed(changedProps.value(keys.at(i)).toUInt()); } } } } void MouseDBusProxy::onGesturePropertiesChanged(QDBusMessage msg) { QList arguments = msg.arguments(); if (3 != arguments.count()) { return; } QString interfaceName = msg.arguments().at(0).toString(); if (interfaceName == GestureInterface) { QVariantMap changedProps = qdbus_cast(arguments.at(1).value()); QStringList keys = changedProps.keys(); for (int i = 0; i < keys.size(); i++) { if (keys.at(i) == "Infos") { parseGesturesData(qvariant_cast(changedProps.value(keys.at(i)))); } } } } void MouseDBusProxy::onAppearancePropertiesChanged(QDBusMessage msg) { QList arguments = msg.arguments(); if (3 != arguments.count()) { return; } QString interfaceName = msg.arguments().at(0).toString(); if (interfaceName == AppearanceInterface) { QVariantMap changedProps = qdbus_cast(arguments.at(1).value()); QStringList keys = changedProps.keys(); for (int i = 0; i < keys.size(); i++) { if (keys.at(i) == "CursorSize") { int cursorSize = changedProps.value(keys.at(i)).toInt(); m_worker->setCursorSize(cursorSize); } else if (keys.at(i) == "CursorTheme") { listCursor(); } } } } void MouseDBusProxy::onGetGestureAvaiableActionsFinished(QDBusPendingCallWatcher *w) { QVariantMap dbusData = w->property("data").toMap(); GestureData data; data.setActionType(dbusData.value("actionType").toString()); data.setDirection(dbusData.value("direction").toString()); data.setActionName(dbusData.value("actionName").toString()); data.setFingersNum(dbusData.value("fingerNum").toInt()); QDBusPendingReply reply = *w; if (!reply.isError()) { QString actions = reply.value(); QJsonDocument document = QJsonDocument::fromJson(actions.toUtf8()); if (document.isArray()) { QJsonArray array = document.array(); QStringList actionNameList; QStringList actionDescriptionList; for (int i = 0; i < array.size(); ++i) { QJsonValue value = array.at(i); if (value.isObject()) { QJsonObject object = value.toObject(); QPair actionPair; actionPair.first = object.value("Name").toString(); actionPair.second = object.value("Description").toString(); data.addActiosPair(actionPair); } } } } m_worker->setGestureData(data); m_worker->initFingerGestures(); w->deleteLater(); } void MouseDBusProxy::listCursor() { QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher( m_appearance->asyncCall("List", "cursor"), this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [=](){ QDBusPendingReply reply = *watcher; if (!reply.isError()) { QString cursorTheme = m_appearance->property("CursorTheme").toString(); QJsonDocument document = QJsonDocument::fromJson(reply.value().toUtf8()); auto array = document.array(); for (int i = 0; i < array.size(); ++i) { QJsonValue value = array.at(i); if (value.isObject()) { QJsonObject object = value.toObject(); QString name = object.value("Id").toString(); if (name == cursorTheme) { auto availableSizesValue = object.value("AvailableSize").toArray(); QList availableSizes; for (const auto &size : availableSizesValue) { availableSizes.append(size.toInt(-1)); } m_worker->setAvailableCursorSizes(availableSizes); break; } } } } else { qWarning() << "asyncCall list cursor failed:" << reply.error(); } watcher->deleteLater(); }); } bool MouseDBusProxy::getLidIsPresent() { // 通过Power1 DBus服务获取Lid状态 QDBusInterface powerInterface(PowerService, PowerPath, PowerInterface, QDBusConnection::sessionBus()); QVariant lidIsPresentVariant = powerInterface.property("LidIsPresent"); if (lidIsPresentVariant.isValid()) { return lidIsPresentVariant.toBool(); } return false; } ================================================ FILE: src/plugin-mouse/operation/mousedbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef MOUSEDBUSPROXY_H #define MOUSEDBUSPROXY_H #include "mouseworker.h" #include #include #include class QDBusInterface; namespace DCC_NAMESPACE { class MouseDBusProxy : public QObject { Q_OBJECT public: explicit MouseDBusProxy(MouseWorker *worker, QObject *parent = nullptr); void deactive(); void init(); void parseGesturesData(const QDBusArgument &argument); public Q_SLOTS: void active(); void onDefaultReset(); void setLeftHandState(const bool state); void setDouClick(const int &value); // mouse settings void setMouseNaturalScrollState(const bool state); void setDisableTouchPadWhenMouseExist(const bool state); void setAccelProfile(const bool state); void setMouseMotionAcceleration(const double &value); // touchpad settings void setTouchNaturalScrollState(const bool state); void setDisTyping(const bool state); void setTouchpadMotionAcceleration(const double &value); void setTapClick(const bool state); void setPalmDetect(bool palmDetect); void setPalmMinWidth(int palmMinWidth); void setPalmMinz(int palmMinz); void setTouchpadEnabled(bool state); // appearance void setCursorSize(const int cursorSize); void listCursor(); // redpoint settings void setTrackPointMotionAcceleration(const double &value); // device properties void setScrollSpeed(uint speed); bool getLidIsPresent(); void setGesture(const QString& name, const QString& direction, int fingers, const QString& action); void onMousePathPropertiesChanged(QDBusMessage msg); void onTouchpadPathPropertiesChanged(QDBusMessage msg); void onTrackpointPathPropertiesChanged(QDBusMessage msg); void onInputDevicesPathPropertiesChanged(QDBusMessage msg); void onGesturePropertiesChanged(QDBusMessage msg); void onAppearancePropertiesChanged(QDBusMessage msg); void onGetGestureAvaiableActionsFinished(QDBusPendingCallWatcher *w); private: MouseWorker *m_worker; QDBusInterface *m_dbusMouseProperties; QDBusInterface *m_dbusTouchPadProperties; QDBusInterface *m_dbusTrackPointProperties; QDBusInterface *m_dbusDevicesProperties; QDBusInterface *m_dbusGestureProperties; QDBusInterface *m_dbusMouse; QDBusInterface *m_dbusTouchPad; QDBusInterface *m_dbusTrackPoint; QDBusInterface *m_dbusDevices; QDBusInterface *m_dbusGesture; QDBusInterface *m_appearance; }; } #endif // MOUSEWORKER_H ================================================ FILE: src/plugin-mouse/operation/mousemodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "mousemodel.h" #include "dccfactory.h" #include "mouseworker.h" #include "mousedbusproxy.h" #include using namespace DCC_NAMESPACE; MouseModel::MouseModel(QObject *parent) : QObject(parent) , m_leftHandState(false) , m_disIfTyping(false) , m_tpadExist(false) , m_mouseExist(true) , m_redPointExist(false) , m_mouseNaturalScroll(false) , m_tpadNaturalScroll(false) , m_accelProfile(true) , m_disTpad(false) , m_palmDetect(false) , m_tapClick(false) , m_touchpadEnabled(true) , m_doubleSpeed(1) , m_mouseMoveSpeed(1) , m_tpadMoveSpeed(1) , m_redPointMoveSpeed(1) , m_palmMinWidth(1) , m_palmMinz(100) , m_scrollSpeed(1) , m_cursorSize(24) , m_lidIsPresent(false) , m_gestureFingerAniPath("") , m_gestureActionAniPath("") , m_themeType(Dtk::Gui::DGuiApplicationHelper::instance()->themeType()) , m_threeFingerGestureModel(new GestureModel(this)) , m_fourFigerGestureModel(new GestureModel(this)) , m_worker(new MouseWorker(this, this)) { connect(Dtk::Gui::DGuiApplicationHelper::instance(), &Dtk::Gui::DGuiApplicationHelper::themeTypeChanged, this, [ this ]() { auto themeColorType = Dtk::Gui::DGuiApplicationHelper::instance()->themeType(); updateFigerAniPath(themeColorType); setThemeType(themeColorType); }); } MouseModel::~MouseModel() { } void MouseModel::setLeftHandState(const bool state) { if (m_leftHandState == state) return; m_leftHandState = state; QMetaObject::invokeMethod(m_worker,"onLeftHandStateChanged", Qt::QueuedConnection, Q_ARG(bool, m_leftHandState)); Q_EMIT leftHandStateChanged(state); } void MouseModel::setDisIfTyping(const bool state) { if (m_disIfTyping == state) return; m_disIfTyping = state; QMetaObject::invokeMethod(m_worker,"onDisTypingChanged", Qt::QueuedConnection, Q_ARG(bool, m_disIfTyping)); Q_EMIT disIfTypingStateChanged(state); } void MouseModel::setTpadExist(bool tpadExist) { if (m_tpadExist == tpadExist) return; m_tpadExist = tpadExist; Q_EMIT tpadExistChanged(tpadExist); } void MouseModel::setMouseExist(bool mouseExist) { if (m_mouseExist == mouseExist) return; m_mouseExist = mouseExist; Q_EMIT mouseExistChanged(mouseExist); } void MouseModel::setRedPointExist(bool redPointExist) { if (m_redPointExist == redPointExist) return; m_redPointExist = redPointExist; Q_EMIT redPointExistChanged(redPointExist); } void MouseModel::setDoubleSpeed(int doubleSpeed) { if (m_doubleSpeed == doubleSpeed) return; m_doubleSpeed = doubleSpeed; QMetaObject::invokeMethod(m_worker,"onDouClickChanged", Qt::QueuedConnection, Q_ARG(int, m_doubleSpeed)); Q_EMIT doubleSpeedChanged(doubleSpeed); } void MouseModel::setMouseNaturalScroll(bool mouseNaturalScroll) { if (m_mouseNaturalScroll == mouseNaturalScroll) return; m_mouseNaturalScroll = mouseNaturalScroll; QMetaObject::invokeMethod(m_worker,"onMouseNaturalScrollStateChanged", Qt::QueuedConnection, Q_ARG(bool, m_mouseNaturalScroll)); Q_EMIT mouseNaturalScrollChanged(mouseNaturalScroll); } void MouseModel::setTpadNaturalScroll(bool tpadNaturalScroll) { if (m_tpadNaturalScroll == tpadNaturalScroll) return; m_tpadNaturalScroll = tpadNaturalScroll; QMetaObject::invokeMethod(m_worker,"onTouchNaturalScrollStateChanged", Qt::QueuedConnection, Q_ARG(bool, m_tpadNaturalScroll)); Q_EMIT tpadNaturalScrollChanged(tpadNaturalScroll); } void MouseModel::setMouseMoveSpeed(int mouseMoveSpeed) { if (m_mouseMoveSpeed == mouseMoveSpeed) return; m_mouseMoveSpeed = mouseMoveSpeed; QMetaObject::invokeMethod(m_worker,"onMouseMotionAccelerationChanged", Qt::QueuedConnection, Q_ARG(int, m_mouseMoveSpeed)); Q_EMIT mouseMoveSpeedChanged(mouseMoveSpeed); } void MouseModel::setTpadMoveSpeed(int tpadMoveSpeed) { if (m_tpadMoveSpeed == tpadMoveSpeed) return; m_tpadMoveSpeed = tpadMoveSpeed; QMetaObject::invokeMethod(m_worker,"onTouchpadMotionAccelerationChanged", Qt::QueuedConnection, Q_ARG(int, m_tpadMoveSpeed)); Q_EMIT tpadMoveSpeedChanged(tpadMoveSpeed); } void MouseModel::setAccelProfile(bool useAdaptiveProfile) { if (m_accelProfile == useAdaptiveProfile) return; m_accelProfile = useAdaptiveProfile; QMetaObject::invokeMethod(m_worker,"onAccelProfileChanged", Qt::QueuedConnection, Q_ARG(bool, m_accelProfile)); Q_EMIT accelProfileChanged(useAdaptiveProfile); } void MouseModel::setDisTpad(bool disTpad) { if (m_disTpad == disTpad) return; m_disTpad = disTpad; QMetaObject::invokeMethod(m_worker,"onDisTouchPadChanged", Qt::QueuedConnection, Q_ARG(bool, m_disTpad)); Q_EMIT disTpadChanged(disTpad); } void MouseModel::setRedPointMoveSpeed(int redPointMoveSpeed) { if (m_redPointMoveSpeed == redPointMoveSpeed) return; m_redPointMoveSpeed = redPointMoveSpeed; Q_EMIT redPointMoveSpeedChanged(redPointMoveSpeed); } void MouseModel::setPalmDetect(bool palmDetect) { if (m_palmDetect == palmDetect) return; m_palmDetect = palmDetect; Q_EMIT palmDetectChanged(palmDetect); } void MouseModel::setPalmMinWidth(int palmMinWidth) { if (m_palmMinWidth == palmMinWidth) return; m_palmMinWidth = palmMinWidth; Q_EMIT palmMinWidthChanged(palmMinWidth); } void MouseModel::setPalmMinz(int palmMinz) { if (m_palmMinz == palmMinz) return; m_palmMinz = palmMinz; Q_EMIT palmMinzChanged(palmMinz); } void MouseModel::setTapClick(bool tapClick) { if (m_tapClick == tapClick) return; m_tapClick = tapClick; QMetaObject::invokeMethod(m_worker,"onTapClick", Qt::QueuedConnection, Q_ARG(bool, m_tapClick)); Q_EMIT tapClickChanged(tapClick); } void MouseModel::setTapEnabled(bool tabEnabled) { if (m_touchpadEnabled == tabEnabled) return; m_touchpadEnabled = tabEnabled; QMetaObject::invokeMethod(m_worker,"onTouchpadEnabledChanged", Qt::QueuedConnection, Q_ARG(bool, m_touchpadEnabled)); Q_EMIT tapEnabledChanged(tabEnabled); } void MouseModel::setScrollSpeed(int speed) { if (m_scrollSpeed == speed) return; m_scrollSpeed = speed; QMetaObject::invokeMethod(m_worker, "onScrollSpeedChanged", Qt::QueuedConnection, Q_ARG(int, m_scrollSpeed)); Q_EMIT scrollSpeedChanged(speed); } void MouseModel::setCursorSize(int cursorSize) { if (m_cursorSize == cursorSize) return; m_cursorSize = cursorSize; QMetaObject::invokeMethod(m_worker, "onCursorSizeChanged", Qt::QueuedConnection, Q_ARG(int, m_cursorSize)); Q_EMIT cursorSizeChanged(cursorSize); } void MouseModel::updateGesturesData(const GestureData &gestureData) { GestureModel* gestureModel = NULL; if (gestureData.fingersNum() == 3) { gestureModel = m_threeFingerGestureModel; } else if (gestureData.fingersNum() == 4) { gestureModel = m_fourFigerGestureModel; } else { return; } if (gestureModel->containsGestures(gestureData.direction(), gestureData.fingersNum())) { gestureModel->updateGestureData(gestureData); } else { GestureData *data = new GestureData(this); data->setActionType(gestureData.actionType()); data->setDirection(gestureData.direction()); data->setActionName(gestureData.actionName()); data->setFingersNum(gestureData.fingersNum()); data->setActionMaps(gestureData.actionMaps()); gestureModel->addGestureData(data); } } GestureModel *MouseModel::threeFingerGestureModel() const { return m_threeFingerGestureModel; } GestureModel *MouseModel::fourFigerGestureModel() const { return m_fourFigerGestureModel; } void MouseModel::setGestures(int fingerNum, int index, QString actionName) { GestureModel *gestureModel = NULL; if (fingerNum == 4) { gestureModel = m_fourFigerGestureModel; } else if (fingerNum == 3) { gestureModel = m_threeFingerGestureModel; } else { return; } GestureData *data = gestureModel->getGestureData(index); if (data) { qDebug() << " setGestures action name : " << actionName << data->actionName(); if (actionName == data->actionName()) return; updateFigerAniPath(actionName, data); Q_EMIT m_worker->requestSetGesture(data->actionType(), data->direction(), data->fingersNum(), actionName); } } void MouseModel::updateFigerGestureAni(int fingerNum, int index, QString acitonDec) { GestureModel *gestureModel = NULL; if (fingerNum == 4) { gestureModel = m_fourFigerGestureModel; } else if (fingerNum == 3) { gestureModel = m_threeFingerGestureModel; } else { return; } updateFigerAniPath(acitonDec, gestureModel->getGestureData(index)); } QString MouseModel::getGestureFingerAniPath() const { return m_gestureFingerAniPath; } void MouseModel::setGestureFingerAniPath(const QString &newGestureFingerAniPath) { if (m_gestureFingerAniPath == newGestureFingerAniPath) return; qDebug() << "setGestureFingerAniPath : " << newGestureFingerAniPath; m_gestureFingerAniPath = newGestureFingerAniPath; emit gestureFingerAniPathChanged(); } QString MouseModel::getGestureActionAniPath() const { return m_gestureActionAniPath; } void MouseModel::setGestureActionAniPath(const QString &newGestureActionAniPath) { if (m_gestureActionAniPath == newGestureActionAniPath) return; qDebug() << "setGestureActionAniPath : " << newGestureActionAniPath; m_gestureActionAniPath = newGestureActionAniPath; emit gestureActionAniPathChanged(); } Dtk::Gui::DGuiApplicationHelper::ColorType MouseModel::themeType() const { return m_themeType; } void MouseModel::updateFigerAniPath(QString actionName, GestureData *data) { if (data == nullptr) { data = m_threeFingerGestureModel->getGestureData(0); } if (data == nullptr) { return; } if (actionName == "") { actionName = data->actionName(); } QString themeColor = ""; if (m_themeType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType) { themeColor = "dark"; } else if (m_themeType == Dtk::Gui::DGuiApplicationHelper::ColorType::LightType) { themeColor = "light"; } QString gestureDirection = data->actionType() == "tap" ? data->actionType() : data->direction(); QString fingerNum = ""; if (data->fingersNum() == 4) { fingerNum = "Four"; } else if (data->fingersNum() == 3) { fingerNum = "Three"; } setGestureFingerAniPath(QString("qrc:/icons/deepin/builtin/icons/%1/%2_finger_%3_ani.webp") .arg(themeColor) .arg(fingerNum) .arg(gestureDirection)); setGestureActionAniPath(QString("qrc:/icons/deepin/builtin/icons/%1/%2.webp").arg(themeColor).arg(actionName)); } void MouseModel::updateFigerAniPath(const Dtk::Gui::DGuiApplicationHelper::ColorType &newThemeType) { QString currentThemeColor = ""; QString changedThemeColor = ""; currentThemeColor = m_themeType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType ? "dark" : "light"; changedThemeColor = newThemeType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType ? "dark" : "light"; setGestureFingerAniPath(getGestureFingerAniPath().replace(currentThemeColor,changedThemeColor)); setGestureActionAniPath(getGestureActionAniPath().replace(currentThemeColor,changedThemeColor)); } void MouseModel::setThemeType(const Dtk::Gui::DGuiApplicationHelper::ColorType &newThemeType) { if (m_themeType == newThemeType) return; m_themeType = newThemeType; emit themeTypeChanged(); } void MouseModel::setLidIsPresent(bool lidIsPresent) { if (m_lidIsPresent == lidIsPresent) return; m_lidIsPresent = lidIsPresent; Q_EMIT lidIsPresentChanged(lidIsPresent); } DCC_FACTORY_CLASS(MouseModel) #include "mousemodel.moc" ================================================ FILE: src/plugin-mouse/operation/mousemodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef MOUSEMODEL_H #define MOUSEMODEL_H #include "gesturedata.h" #include "gesturemodel.h" #include #include #include #include #include namespace DCC_NAMESPACE { class MouseWorker; class MouseModel : public QObject { Q_OBJECT friend class MouseWorker; public: explicit MouseModel(QObject *parent = nullptr); ~MouseModel(); Q_PROPERTY(int scrollSpeed READ scrollSpeed WRITE setScrollSpeed NOTIFY scrollSpeedChanged FINAL) Q_PROPERTY(int doubleSpeed READ doubleSpeed WRITE setDoubleSpeed NOTIFY doubleSpeedChanged FINAL) Q_PROPERTY(bool leftHandState READ leftHandState WRITE setLeftHandState NOTIFY leftHandStateChanged FINAL) Q_PROPERTY(int mouseMoveSpeed READ mouseMoveSpeed WRITE setMouseMoveSpeed NOTIFY mouseMoveSpeedChanged FINAL) Q_PROPERTY(bool accelProfile READ accelProfile WRITE setAccelProfile NOTIFY accelProfileChanged FINAL) Q_PROPERTY(bool disTpad READ disTpad WRITE setDisTpad NOTIFY disTpadChanged FINAL) Q_PROPERTY(bool tpadExist READ tpadExist WRITE setTpadExist NOTIFY tpadExistChanged FINAL) Q_PROPERTY(bool mouseNaturalScroll READ mouseNaturalScroll WRITE setMouseNaturalScroll NOTIFY mouseNaturalScrollChanged FINAL) Q_PROPERTY(int tpadMoveSpeed READ tpadMoveSpeed WRITE setTpadMoveSpeed NOTIFY tpadMoveSpeedChanged FINAL) Q_PROPERTY(bool tapClick READ tapClick WRITE setTapClick NOTIFY tapClickChanged FINAL) Q_PROPERTY(bool tpadNaturalScroll READ tpadNaturalScroll WRITE setTpadNaturalScroll NOTIFY tpadNaturalScrollChanged FINAL) Q_PROPERTY(bool disIfTyping READ disIfTyping WRITE setDisIfTyping NOTIFY disIfTypingChanged FINAL) Q_PROPERTY(bool tapEnabled READ tapEnabled WRITE setTapEnabled NOTIFY tapEnabledChanged FINAL) Q_PROPERTY(QString gestureFingerAniPath READ getGestureFingerAniPath NOTIFY gestureFingerAniPathChanged FINAL) Q_PROPERTY(QString gestureActionAniPath READ getGestureActionAniPath NOTIFY gestureActionAniPathChanged FINAL) Q_PROPERTY(int cursorSize READ cursorSize WRITE setCursorSize NOTIFY cursorSizeChanged FINAL) Q_PROPERTY(QList availableCursorSizes READ availableCursorSizes WRITE setAvailableCursorSizes NOTIFY availableCursorSizesChanged FINAL) Q_PROPERTY(bool lidIsPresent READ lidIsPresent NOTIFY lidIsPresentChanged FINAL) inline bool leftHandState() const { return m_leftHandState; } void setLeftHandState(const bool state); void setDisIfTyping(const bool state); inline bool disIfTyping() const { return m_disIfTyping; } inline bool tpadExist() const { return m_tpadExist; } void setTpadExist(bool tpadExist); inline bool mouseExist() const { return m_mouseExist; } void setMouseExist(bool mouseExist); inline bool redPointExist() const { return m_redPointExist; } void setRedPointExist(bool redPointExist); inline int doubleSpeed() const { return m_doubleSpeed; } void setDoubleSpeed(int doubleSpeed); inline bool mouseNaturalScroll() const { return m_mouseNaturalScroll; } void setMouseNaturalScroll(bool mouseNaturalScroll); inline bool tpadNaturalScroll() const { return m_tpadNaturalScroll; } void setTpadNaturalScroll(bool tpadNaturalScroll); inline int mouseMoveSpeed() const { return m_mouseMoveSpeed; } void setMouseMoveSpeed(int mouseMoveSpeed); inline int tpadMoveSpeed() const { return m_tpadMoveSpeed; } void setTpadMoveSpeed(int tpadMoveSpeed); inline bool accelProfile() const { return m_accelProfile; } void setAccelProfile(bool useAdaptiveProfile); inline bool disTpad() const { return m_disTpad; } void setDisTpad(bool disTpad); inline int redPointMoveSpeed() const { return m_redPointMoveSpeed; } void setRedPointMoveSpeed(int redPointMoveSpeed); inline bool palmDetect() const { return m_palmDetect; } void setPalmDetect(bool palmDetect); inline int palmMinWidth() const { return m_palmMinWidth; } void setPalmMinWidth(int palmMinWidth); inline int palmMinz() const { return m_palmMinz; } void setPalmMinz(int palmMinz); bool tapClick() const { return m_tapClick; } void setTapClick(bool tapClick); bool tapEnabled() const { return m_touchpadEnabled; } void setTapEnabled(bool tapEnabled); int scrollSpeed() const { return m_scrollSpeed; } void setScrollSpeed(int speed); int cursorSize() const { return m_cursorSize; } void setCursorSize(int cursorSize); QList availableCursorSizes() const { return m_availableCursorSizes; } void setAvailableCursorSizes(const QList sizes) { m_availableCursorSizes = sizes; } bool lidIsPresent() const { return m_lidIsPresent; } void setLidIsPresent(bool lidIsPresent); void updateGesturesData(const GestureData &gestureData); Q_INVOKABLE GestureModel *threeFingerGestureModel() const; Q_INVOKABLE GestureModel *fourFigerGestureModel() const; Q_INVOKABLE void setGestures(int fingerNum, int index, QString actionName); Q_INVOKABLE void updateFigerGestureAni(int fingerNum, int index, QString acitonDec); QString getGestureFingerAniPath() const; void setGestureFingerAniPath(const QString &newGestureFingerAniPath); QString getGestureActionAniPath() const; void setGestureActionAniPath(const QString &newGestureActionAniPath); Dtk::Gui::DGuiApplicationHelper::ColorType themeType() const; void updateFigerAniPath(QString actionName = "", GestureData* data = nullptr); void updateFigerAniPath(const Dtk::Gui::DGuiApplicationHelper::ColorType &newThemeType); void setThemeType(const Dtk::Gui::DGuiApplicationHelper::ColorType &newThemeType); Q_SIGNALS: void leftHandStateChanged(bool state); void disIfTypingStateChanged(bool state); void tpadExistChanged(bool tpadExist); void mouseExistChanged(bool mouseExist); void redPointExistChanged(bool rPointExist); void doubleSpeedChanged(int speed); void mouseNaturalScrollChanged(bool natural); void tpadNaturalScrollChanged(bool natural); void mouseMoveSpeedChanged(int speed); void tpadMoveSpeedChanged(int speed); void accelProfileChanged(bool useAdaptiveProfile); void redPointMoveSpeedChanged(int speed); void disTpadChanged(bool disable); void palmDetectChanged(bool detect); void palmMinWidthChanged(int palmMinWidth); void palmMinzChanged(int palmMinz); void tapClickChanged(bool tapClick); void tapEnabledChanged(bool tapClick); void scrollSpeedChanged(int speed); void disIfTypingChanged(bool state); void cursorSizeChanged(int cursorSize); void availableCursorSizesChanged(QList sizes); void lidIsPresentChanged(bool lidIsPresent); void gestureFingerAniPathChanged(); void gestureActionAniPathChanged(); void themeTypeChanged(); private: bool m_leftHandState; bool m_disIfTyping; bool m_tpadExist; bool m_mouseExist; bool m_redPointExist; bool m_mouseNaturalScroll; bool m_tpadNaturalScroll; bool m_accelProfile; bool m_disTpad; bool m_palmDetect; bool m_tapClick; bool m_touchpadEnabled; int m_doubleSpeed; int m_mouseMoveSpeed; int m_tpadMoveSpeed; int m_redPointMoveSpeed; int m_palmMinWidth; int m_palmMinz; int m_scrollSpeed; int m_cursorSize; bool m_lidIsPresent; QList m_availableCursorSizes; QString m_gestureFingerAniPath; QString m_gestureActionAniPath; Dtk::Gui::DGuiApplicationHelper::ColorType m_themeType; // 手势ui数据 GestureModel* m_threeFingerGestureModel; GestureModel* m_fourFigerGestureModel; MouseWorker* m_worker; }; } #endif // MOUSEMODEL_H ================================================ FILE: src/plugin-mouse/operation/mouseworker.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "mouseworker.h" #include "mousedbusproxy.h" using namespace DCC_NAMESPACE; const QString Service = "org.deepin.dde.InputDevices1"; MouseWorker::MouseWorker(MouseModel *model, QObject *parent) : QObject(parent) , m_model(model) , m_treelandWorker(new TreeLandWorker(this)) { MouseDBusProxy *proxy = new MouseDBusProxy(this, this); QMetaObject::invokeMethod(proxy, "active", Qt::QueuedConnection); #ifdef Enable_Treeland m_treelandWorker->active(); #endif } void MouseWorker::initFingerGestures() { m_model->updateFigerAniPath(); } void MouseWorker::setMouseExist(bool exist) { m_model->setMouseExist(exist); } void MouseWorker::setTpadExist(bool exist) { m_model->setTpadExist(exist); } void MouseWorker::setTpadEnabled(bool enabled) { m_model->setTapEnabled(enabled); } void MouseWorker::setRedPointExist(bool exist) { m_model->setRedPointExist(exist); } void MouseWorker::setLeftHandState(const bool state) { m_model->setLeftHandState(state); } void MouseWorker::setMouseNaturalScrollState(const bool state) { m_model->setMouseNaturalScroll(state); } void MouseWorker::setTouchNaturalScrollState(const bool state) { m_model->setTpadNaturalScroll(state); } void MouseWorker::setDisTyping(const bool state) { m_model->setDisIfTyping(state); } void MouseWorker::setDisTouchPad(const bool state) { m_model->setDisTpad(state); } void MouseWorker::setTapClick(const bool state) { m_model->setTapClick(state); } void MouseWorker::setDouClick(const int &value) { m_model->setDoubleSpeed(converToDoubleModel(value)); } void MouseWorker::setMouseMotionAcceleration(const double &value) { m_model->setMouseMoveSpeed(converToModelMotionAcceleration(value)); } void MouseWorker::setAccelProfile(const bool state) { m_model->setAccelProfile(state); } void MouseWorker::setTouchpadMotionAcceleration(const double &value) { m_model->setTpadMoveSpeed(converToModelMotionAcceleration(value)); } void MouseWorker::setTrackPointMotionAcceleration(const double &value) { m_model->setRedPointMoveSpeed(converToModelMotionAcceleration(value)); } void MouseWorker::setPalmDetect(bool palmDetect) { m_model->setPalmDetect(palmDetect); } void MouseWorker::setPalmMinWidth(int palmMinWidth) { m_model->setPalmMinWidth(palmMinWidth); } void MouseWorker::setPalmMinz(int palmMinz) { m_model->setPalmMinz(palmMinz); } void MouseWorker::setScrollSpeed(uint speed) { m_model->setScrollSpeed(speed); } void MouseWorker::setGestureData(const GestureData &data) { m_model->updateGesturesData(data); } void MouseWorker::setCursorSize(const int cursorSize) { m_model->setCursorSize(cursorSize); } void MouseWorker::setAvailableCursorSizes(QList sizes) { m_model->setAvailableCursorSizes(sizes); } void MouseWorker::setLidIsPresent(bool lidIsPresent) { m_model->setLidIsPresent(lidIsPresent); } void MouseWorker::onPalmDetectChanged(bool palmDetect) { Q_EMIT requestSetPalmDetect(palmDetect); } void MouseWorker::onPalmMinWidthChanged(int palmMinWidth) { Q_EMIT requestSetPalmMinWidth(palmMinWidth); } void MouseWorker::onPalmMinzChanged(int palmMinz) { Q_EMIT requestSetPalmMinz(palmMinz); } void MouseWorker::onScrollSpeedChanged(int speed) { Q_EMIT requestSetScrollSpeed(static_cast(speed)); } void MouseWorker::onTouchpadEnabledChanged(const bool state) { Q_EMIT requestSetTouchpadEnabled(state); } void MouseWorker::onCursorSizeChanged(const int cursorSize) { Q_EMIT requestSetCursorSize(cursorSize); #ifdef Enable_Treeland if (Dtk::Gui::DGuiApplicationHelper::testAttribute( Dtk::Gui::DGuiApplicationHelper::IsWaylandPlatform)) { m_treelandWorker->setCursorSize(cursorSize); } #endif } void MouseWorker::onLeftHandStateChanged(const bool state) { Q_EMIT requestSetLeftHandState(state); } void MouseWorker::onMouseNaturalScrollStateChanged(const bool state) { Q_EMIT requestSetMouseNaturalScrollState(state); } void MouseWorker::onTouchNaturalScrollStateChanged(const bool state) { Q_EMIT requestSetTouchNaturalScrollState(state); } void MouseWorker::onDisTypingChanged(const bool state) { Q_EMIT requestSetDisTyping(state); } void MouseWorker::onDisTouchPadChanged(const bool state) { Q_EMIT requestSetDisTouchPad(state); } void MouseWorker::onTapClick(const bool state) { Q_EMIT requestSetTapClick(state); } void MouseWorker::onDouClickChanged(const int &value) { Q_EMIT requestSetDouClick(converToDouble(value)); } void MouseWorker::onMouseMotionAccelerationChanged(const int &value) { Q_EMIT requestSetMouseMotionAcceleration(converToMotionAcceleration(value)); } void MouseWorker::onAccelProfileChanged(const bool state) { Q_EMIT requestSetAccelProfile(state); } void MouseWorker::onTouchpadMotionAccelerationChanged(const int &value) { Q_EMIT requestSetTouchpadMotionAcceleration(converToMotionAcceleration(value)); } void MouseWorker::onTrackPointMotionAccelerationChanged(const int &value) { Q_EMIT requestSetTrackPointMotionAcceleration(converToMotionAcceleration(value)); } int MouseWorker::converToDouble(int value) { return 800 - value * 100; } int MouseWorker::converToDoubleModel(int value) { return (800 - value) / 100; } //conver slider value to real value double MouseWorker::converToMotionAcceleration(int value) { switch (value) { case 0: return 3.2; case 1: return 2.3; case 2: return 1.6; case 3: return 1.0; case 4: return 0.6; case 5: return 0.3; case 6: return 0.2; default: return 1.0; } } //conver real value to slider value int MouseWorker::converToModelMotionAcceleration(double value) { if (value <= 0.2) { return 6; } else if (value <= 0.3) { return 5; } else if (value <= 0.6) { return 4; } else if (value <= 1.0) { return 3; } else if (value <= 1.6) { return 2; } else if (value <= 2.3) { return 1; } else if (value <= 3.2) { return 0; } else { return 3; } } ================================================ FILE: src/plugin-mouse/operation/mouseworker.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef MOUSEWORKER_H #define MOUSEWORKER_H #include "mousemodel.h" #include "treelandworker.h" #include using namespace DCC_MOUSE; namespace DCC_NAMESPACE { class MouseWorker : public QObject { Q_OBJECT public: explicit MouseWorker(MouseModel *model, QObject *parent = nullptr); void active(); void deactive(); void init(); void initFingerGestures(); public Q_SLOTS: void setMouseExist(bool exist); void setTpadExist(bool exist); void setTpadEnabled(bool enabled); void setRedPointExist(bool exist); void setLeftHandState(const bool state); void setMouseNaturalScrollState(const bool state); void setTouchNaturalScrollState(const bool state); void setDisTyping(const bool state); void setDisTouchPad(const bool state); void setTapClick(const bool state); void setDouClick(const int &value); void setMouseMotionAcceleration(const double &value); void setAccelProfile(const bool state); void setTouchpadMotionAcceleration(const double &value); void setTrackPointMotionAcceleration(const double &value); void setPalmDetect(bool palmDetect); void setPalmMinWidth(int palmMinWidth); void setPalmMinz(int palmMinz); void setScrollSpeed(uint speed); void setGestureData(const GestureData &data); void setCursorSize(const int cursorSize); void setAvailableCursorSizes(QList sizes); void setLidIsPresent(bool lidIsPresent); void onLeftHandStateChanged(const bool state); void onMouseNaturalScrollStateChanged(const bool state); void onTouchNaturalScrollStateChanged(const bool state); void onDisTypingChanged(const bool state); void onDisTouchPadChanged(const bool state); void onTapClick(const bool state); void onDouClickChanged(const int &value); void onMouseMotionAccelerationChanged(const int &value); void onAccelProfileChanged(const bool state); void onTouchpadMotionAccelerationChanged(const int &value); void onTrackPointMotionAccelerationChanged(const int &value); void onPalmDetectChanged(bool palmDetect); void onPalmMinWidthChanged(int palmMinWidth); void onPalmMinzChanged(int palmMinz); void onScrollSpeedChanged(int speed); void onTouchpadEnabledChanged(const bool state); void onCursorSizeChanged(const int cursorSize); Q_SIGNALS: void requestSetPalmDetect(bool palmDetect); void requestSetPalmMinWidth(int palmMinWidth); void requestSetPalmMinz(int palmMinz); void requestSetScrollSpeed(uint speed); void requestSetLeftHandState(const bool state); void requestSetMouseNaturalScrollState(const bool state); void requestSetTouchNaturalScrollState(const bool state); void requestSetDisTyping(const bool state); void requestSetDisTouchPad(const bool state); void requestSetTapClick(const bool state); void requestSetDouClick(const int &value); void requestSetMouseMotionAcceleration(const double &value); void requestSetAccelProfile(const bool state); void requestSetTouchpadMotionAcceleration(const double &value); void requestSetTrackPointMotionAcceleration(const double &value); void requestSetTouchpadEnabled(const bool state); void requestSetGesture(const QString& name, const QString& direction, int fingers, const QString& action); void requestSetCursorSize(const int cursorSize); private: int converToDouble(int value); int converToDoubleModel(int value); double converToMotionAcceleration(int value); int converToModelMotionAcceleration(double value); private: MouseModel *m_model; TreeLandWorker *m_treelandWorker; }; } #endif // MOUSEWORKER_H ================================================ FILE: src/plugin-mouse/operation/qrc/mouse.qrc ================================================ icons/dark/Four_finger_tap_ani.webp icons/dark/Four_finger_down_ani.webp icons/dark/Four_finger_left_ani.webp icons/dark/Four_finger_right_ani.webp icons/dark/Four_finger_up_ani.webp icons/dark/HideDesktop.webp icons/dark/HideMultitask.webp icons/dark/MaximizeWindow.webp icons/dark/RestoreWindow.webp icons/dark/ShowDesktop.webp icons/dark/ShowMultiTask.webp icons/dark/SplitWindowLeft.webp icons/dark/SplitWindowRight.webp icons/dark/SwitchToNextDesktop.webp icons/dark/SwitchToPreDesktop.webp icons/dark/Three_finger_down_ani.webp icons/dark/Three_finger_left_ani.webp icons/dark/Three_finger_right_ani.webp icons/dark/ToggleClipboard.webp icons/dark/ToggleGrandSearch.webp icons/dark/ToggleLaunchPad.webp icons/dark/ToggleNotifications.webp icons/light/Four_finger_tap_ani.webp icons/light/Four_finger_down_ani.webp icons/light/Four_finger_left_ani.webp icons/light/Four_finger_right_ani.webp icons/light/Four_finger_up_ani.webp icons/light/HideDesktop.webp icons/light/HideMultitask.webp icons/light/MaximizeWindow.webp icons/light/RestoreWindow.webp icons/light/ShowDesktop.webp icons/light/ShowMultiTask.webp icons/light/SplitWindowLeft.webp icons/light/SplitWindowRight.webp icons/light/SwitchToNextDesktop.webp icons/light/SwitchToPreDesktop.webp icons/light/Three_finger_tap_ani.webp icons/light/Three_finger_down_ani.webp icons/light/Three_finger_left_ani.webp icons/light/Three_finger_right_ani.webp icons/light/Three_finger_up_ani.webp icons/light/ToggleClipboard.webp icons/light/ToggleGrandSearch.webp icons/light/ToggleLaunchPad.webp icons/light/ToggleNotifications.webp icons/dark/Three_finger_tap_ani.webp icons/dark/Three_finger_up_ani.webp icons/light/mouse_cursor_size_big.png icons/light/mouse_cursor_size_largest.png icons/light/mouse_cursor_size_medium.png icons/light/mouse_cursor_size_small.png icons/dark/mouse_cursor_size_big.png icons/dark/mouse_cursor_size_largest.png icons/dark/mouse_cursor_size_medium.png icons/dark/mouse_cursor_size_small.png double_test/bow_head/bow_head_00001.png double_test/bow_head/bow_head_00002.png double_test/bow_head/bow_head_00003.png double_test/bow_head/bow_head_00004.png double_test/bow_head/bow_head_00005.png double_test/bow_head/bow_head_00006.png double_test/bow_head/bow_head_00007.png double_test/bow_head/bow_head_00008.png double_test/bow_head/bow_head_00009.png double_test/bow_head/bow_head_00010.png double_test/bow_head/bow_head_00011.png double_test/bow_head/bow_head_00012.png double_test/bow_head/bow_head_00013.png double_test/bow_head/bow_head_00014.png double_test/bow_head/bow_head_00015.png double_test/bow_head/bow_head_00016.png double_test/bow_head/bow_head_00017.png double_test/bow_head_ears/bow_head_ears_00001.png double_test/bow_head_ears/bow_head_ears_00002.png double_test/bow_head_ears/bow_head_ears_00003.png double_test/bow_head_ears/bow_head_ears_00004.png double_test/bow_head_ears/bow_head_ears_00005.png double_test/bow_head_ears/bow_head_ears_00006.png double_test/bow_head_ears/bow_head_ears_00007.png double_test/bow_head_ears/bow_head_ears_00008.png double_test/bow_head_ears/bow_head_ears_00009.png double_test/raise_head/raise_head_00001.png double_test/raise_head/raise_head_00002.png double_test/raise_head/raise_head_00003.png double_test/raise_head/raise_head_00004.png double_test/raise_head/raise_head_00005.png double_test/raise_head/raise_head_00006.png double_test/raise_head/raise_head_00007.png double_test/raise_head/raise_head_00008.png double_test/raise_head/raise_head_00009.png double_test/raise_head/raise_head_00010.png double_test/raise_head/raise_head_00011.png double_test/raise_head/raise_head_00012.png double_test/raise_head/raise_head_00013.png double_test/raise_head/raise_head_00014.png double_test/raise_head/raise_head_00015.png double_test/raise_head/raise_head_00016.png double_test/raise_head/raise_head_00017.png double_test/raise_head/raise_head_00018.png double_test/raise_head/raise_head_00019.png double_test/raise_head/raise_head_00020.png double_test/raise_head/raise_head_00021.png double_test/raise_head/raise_head_00022.png double_test/raise_head/raise_head_00023.png double_test/raise_head/raise_head_00024.png double_test/raise_head/raise_head_00025.png double_test/raise_head/raise_head_00026.png double_test/raise_head/raise_head_00027.png double_test/raise_head/raise_head_00028.png double_test/raise_head/raise_head_00029.png double_test/raise_head/raise_head_00030.png double_test/raise_head/raise_head_00031.png double_test/raise_head/raise_head_00032.png double_test/raise_head/raise_head_00033.png double_test/raise_head/raise_head_00034.png double_test/raise_head/raise_head_00035.png double_test/raise_head/raise_head_00036.png double_test/raise_head/raise_head_00037.png double_test/raise_head_ears/raise_head_ears_00001.png double_test/raise_head_ears/raise_head_ears_00002.png double_test/raise_head_ears/raise_head_ears_00003.png double_test/raise_head_ears/raise_head_ears_00004.png double_test/raise_head_ears/raise_head_ears_00005.png double_test/raise_head_ears/raise_head_ears_00006.png double_test/raise_head_ears/raise_head_ears_00007.png double_test/raise_head_ears/raise_head_ears_00008.png double_test/raise_head_ears/raise_head_ears_00009.png double_test/bow_head/bow_head_00001@2x.png double_test/bow_head/bow_head_00002@2x.png double_test/bow_head/bow_head_00003@2x.png double_test/bow_head/bow_head_00004@2x.png double_test/bow_head/bow_head_00005@2x.png double_test/bow_head/bow_head_00006@2x.png double_test/bow_head/bow_head_00007@2x.png double_test/bow_head/bow_head_00008@2x.png double_test/bow_head/bow_head_00009@2x.png double_test/bow_head/bow_head_00010@2x.png double_test/bow_head/bow_head_00011@2x.png double_test/bow_head/bow_head_00012@2x.png double_test/bow_head/bow_head_00013@2x.png double_test/bow_head/bow_head_00014@2x.png double_test/bow_head/bow_head_00015@2x.png double_test/bow_head/bow_head_00016@2x.png double_test/bow_head/bow_head_00017@2x.png double_test/bow_head/bow_head_00018.png double_test/bow_head/bow_head_00018@2x.png double_test/bow_head/bow_head_00019.png double_test/bow_head/bow_head_00019@2x.png double_test/bow_head_ears/bow_head_ears_00001@2x.png double_test/bow_head_ears/bow_head_ears_00002@2x.png double_test/bow_head_ears/bow_head_ears_00003@2x.png double_test/bow_head_ears/bow_head_ears_00004@2x.png double_test/bow_head_ears/bow_head_ears_00005@2x.png double_test/bow_head_ears/bow_head_ears_00006@2x.png double_test/bow_head_ears/bow_head_ears_00007@2x.png double_test/bow_head_ears/bow_head_ears_00008@2x.png double_test/bow_head_ears/bow_head_ears_00009@2x.png double_test/raise_head/raise_head_00001@2x.png double_test/raise_head/raise_head_00002@2x.png double_test/raise_head/raise_head_00003@2x.png double_test/raise_head/raise_head_00004@2x.png double_test/raise_head/raise_head_00005@2x.png double_test/raise_head/raise_head_00006@2x.png double_test/raise_head/raise_head_00007@2x.png double_test/raise_head/raise_head_00008@2x.png double_test/raise_head/raise_head_00009@2x.png double_test/raise_head/raise_head_00010@2x.png double_test/raise_head/raise_head_00011@2x.png double_test/raise_head/raise_head_00012@2x.png double_test/raise_head/raise_head_00013@2x.png double_test/raise_head/raise_head_00014@2x.png double_test/raise_head/raise_head_00015@2x.png double_test/raise_head/raise_head_00016@2x.png double_test/raise_head/raise_head_00017@2x.png double_test/raise_head/raise_head_00018@2x.png double_test/raise_head/raise_head_00019@2x.png double_test/raise_head/raise_head_00020@2x.png double_test/raise_head/raise_head_00021@2x.png double_test/raise_head/raise_head_00022@2x.png double_test/raise_head/raise_head_00023@2x.png double_test/raise_head/raise_head_00024@2x.png double_test/raise_head/raise_head_00025@2x.png double_test/raise_head/raise_head_00026@2x.png double_test/raise_head/raise_head_00027@2x.png double_test/raise_head/raise_head_00028@2x.png double_test/raise_head/raise_head_00029@2x.png double_test/raise_head/raise_head_00030@2x.png double_test/raise_head/raise_head_00031@2x.png double_test/raise_head/raise_head_00032@2x.png double_test/raise_head/raise_head_00033@2x.png double_test/raise_head/raise_head_00034@2x.png double_test/raise_head/raise_head_00035@2x.png double_test/raise_head/raise_head_00036@2x.png double_test/raise_head/raise_head_00037@2x.png double_test/raise_head_ears/raise_head_ears_00001@2x.png double_test/raise_head_ears/raise_head_ears_00002@2x.png double_test/raise_head_ears/raise_head_ears_00003@2x.png double_test/raise_head_ears/raise_head_ears_00004@2x.png double_test/raise_head_ears/raise_head_ears_00005@2x.png double_test/raise_head_ears/raise_head_ears_00006@2x.png double_test/raise_head_ears/raise_head_ears_00007@2x.png double_test/raise_head_ears/raise_head_ears_00008@2x.png double_test/raise_head_ears/raise_head_ears_00009@2x.png ================================================ FILE: src/plugin-mouse/operation/treelandworker.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "treelandworker.h" #include #include #include #include #include using namespace DCC_MOUSE; TreeLandWorker::TreeLandWorker(QObject *parent) : QObject(parent) { } void TreeLandWorker::active() { #ifdef Enable_Treeland if (m_personalizationManager.isNull()) { m_personalizationManager.reset(new PersonalizationManager(this)); connect(m_personalizationManager.get(), &PersonalizationManager::activeChanged, this, [this]() { if (m_personalizationManager->isActive()) { init(); } else { // clear(); } }); } #endif } void TreeLandWorker::init() { #ifdef Enable_Treeland if (m_cursorContext.isNull()) { m_cursorContext.reset( new TreelandCursorContext(m_personalizationManager->get_cursor_context())); } #endif } void TreeLandWorker::setCursorSize(int size) { #ifdef Enable_Treeland if (m_cursorContext) { m_cursorContext->set_size(size); m_cursorContext->commit(); } #endif } #ifdef Enable_Treeland PersonalizationManager::PersonalizationManager(QObject *parent) : QWaylandClientExtensionTemplate(1) { if (QGuiApplication::platformName() == QLatin1String("wayland")) { QtWaylandClient::QWaylandIntegration *waylandIntegration = static_cast( QGuiApplicationPrivate::platformIntegration()); if (!waylandIntegration) { qWarning() << "waylandIntegration is nullptr!!!"; return; } m_waylandDisplay = waylandIntegration->display(); if (!m_waylandDisplay) { qWarning() << "waylandDisplay is nullptr!!!"; return; } addListener(); } setParent(parent); } void PersonalizationManager::addListener() { if (!m_waylandDisplay) { qWarning() << "waylandDisplay is nullptr!, skip addListener"; return; } m_waylandDisplay->addRegistryListener(&handleListenerGlobal, this); } void PersonalizationManager::removeListener() { if (!m_waylandDisplay) { qWarning() << "waylandDisplay is nullptr!, skip removeListener"; return; } m_waylandDisplay->removeListener(&handleListenerGlobal, this); } void PersonalizationManager::handleListenerGlobal( void *data, wl_registry *registry, uint32_t id, const QString &interface, uint32_t version) { if (interface == treeland_personalization_manager_v1_interface.name) { PersonalizationManager *integration = static_cast(data); if (!integration) { qWarning() << "integration is nullptr!!!"; return; } integration->init(registry, id, version); } } TreelandCursorContext::TreelandCursorContext( struct ::treeland_personalization_cursor_context_v1 *context) : QWaylandClientExtensionTemplate(1) , QtWayland::treeland_personalization_cursor_context_v1(context) { } #endif ================================================ FILE: src/plugin-mouse/operation/treelandworker.h ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef TREELANDWORKER_H #define TREELANDWORKER_H #include #include #include #include #ifdef Enable_Treeland #include "wayland-treeland-personalization-manager-v1-client-protocol.h" #include "qwayland-treeland-personalization-manager-v1.h" #endif namespace DCC_MOUSE { class PersonalizationManager; class TreelandCursorContext; class TreeLandWorker : public QObject { Q_OBJECT public: explicit TreeLandWorker(QObject *parent); void active(); void init(); void setCursorSize(int size); private: #ifdef Enable_Treeland QScopedPointer m_personalizationManager; QScopedPointer m_cursorContext; #endif }; #ifdef Enable_Treeland class PersonalizationManager: public QWaylandClientExtensionTemplate, public QtWayland::treeland_personalization_manager_v1 { Q_OBJECT public: explicit PersonalizationManager(QObject *parent = nullptr); private: void addListener(); void removeListener(); static void handleListenerGlobal(void *data, wl_registry *registry, uint32_t id, const QString &interface, uint32_t version); private: QtWaylandClient::QWaylandDisplay *m_waylandDisplay = nullptr; }; class TreelandCursorContext : public QWaylandClientExtensionTemplate, public QtWayland::treeland_personalization_cursor_context_v1 { Q_OBJECT public: explicit TreelandCursorContext(struct ::treeland_personalization_cursor_context_v1 *context); }; #endif } #endif ================================================ FILE: src/plugin-mouse/qml/ClickTest.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 Item { id: root property var outAni: [] property var inAni: [] property bool isOut: true property int range: 0 property int index: 0 Image { id: doubleClickAni source: "qrc:/mouse/double_test/raise_head/raise_head_00001.png" } Timer { id: timer interval: 50 repeat: true onTriggered: { if (isOut) { doubleClickAni.source = outAni[index] } else { doubleClickAni.source = inAni[index] } index = index + 1 if (index >= range) { index = 0 timer.stop() isOut = !isOut } } } MouseArea { id: mouseArea anchors.fill: parent onDoubleClicked: { if (timer.running) isOut = !isOut if (isOut) { range = 37 } else { range = 19 } index = 0 timer.restart() } } Component.onCompleted: { for (var i = 0; i < 38; i++) { outAni[i] = "qrc:/mouse/double_test/raise_head/raise_head_000" + (i + 1).toString().padStart(2, '0') + ".png" // console.log(outAni[i]) } for (var j = 0; j < 20; j++) { inAni[j] = "qrc:/mouse/double_test/bow_head/bow_head_000" + (j + 1).toString().padStart(2, '0') + ".png" // console.log(inAni[j]) } } } ================================================ FILE: src/plugin-mouse/qml/Common.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 DccObject { DccTitleObject { name: "Common" parentName: "MouseAndTouchpadCommon" displayName: qsTr("General") weight: 10 onParentItemChanged: { if (parentItem) { parentItem.bottomInset = 10 } } } DccObject { name: "ScrollSpeed" parentName: "MouseAndTouchpadCommon" displayName: qsTr("Scrolling Speed") backgroundType: DccObject.Normal weight: 20 pageType: DccObject.Item page: ColumnLayout { Layout.fillHeight: true Label { id: speedText Layout.topMargin: 10 font: D.DTK.fontManager.t6 text: dccObj.displayName Layout.leftMargin: 14 Layout.bottomMargin: 0 } D.TipsSlider { id: scrollSlider readonly property var tips: [("1"), ("2"), ("3"), ("4"), ("5"), ("6"), ("7"), ("8"), ("9"), ("10")] Layout.alignment: Qt.AlignCenter Layout.leftMargin: 10 Layout.rightMargin: 10 Layout.topMargin: 2 Layout.bottomMargin: 10 Layout.fillWidth: true slider.height: 30 tickDirection: D.TipsSlider.TickDirection.Back slider.handleType: Slider.HandleType.ArrowBottom slider.value: dccData.scrollSpeed slider.from: 1 slider.to: ticks.length slider.live: true slider.stepSize: 1 slider.snapMode: Slider.SnapAlways ticks: [ D.SliderTipItem { text: scrollSlider.tips[0] highlight: scrollSlider.slider.value === 1 }, D.SliderTipItem { text: scrollSlider.tips[1] highlight: scrollSlider.slider.value === 2 }, D.SliderTipItem { text: scrollSlider.tips[2] highlight: scrollSlider.slider.value === 3 }, D.SliderTipItem { text: scrollSlider.tips[3] highlight: scrollSlider.slider.value === 4 }, D.SliderTipItem { text: scrollSlider.tips[4] highlight: scrollSlider.slider.value === 5 }, D.SliderTipItem { text: scrollSlider.tips[5] highlight: scrollSlider.slider.value === 6 }, D.SliderTipItem { text: scrollSlider.tips[6] highlight: scrollSlider.slider.value === 7 }, D.SliderTipItem { text: scrollSlider.tips[7] highlight: scrollSlider.slider.value === 8 }, D.SliderTipItem { text: scrollSlider.tips[8] highlight: scrollSlider.slider.value === 9 }, D.SliderTipItem { text: scrollSlider.tips[9] highlight: scrollSlider.slider.value === 10 } ] slider.onValueChanged: { if (dccData.scrollSpeed !== slider.value) dccData.scrollSpeed = slider.value } } } } DccObject { name: "DoubleClickSpeed" parentName: "MouseAndTouchpadCommon" displayName: qsTr("Double Click Speed") weight: 30 backgroundType: DccObject.Normal pageType: DccObject.Item page: Rectangle { color: "transparent" implicitHeight: rowView.height RowLayout { id: rowView width: parent.width ColumnLayout { Layout.fillHeight: true Label { id: doubleClickText Layout.topMargin: 10 Layout.leftMargin: 14 font: D.DTK.fontManager.t6 text: dccObj.displayName } D.TipsSlider { id: doubleClickSlider readonly property var tips: [qsTr("Slow"), (""), (""), (""), (""), (""), qsTr("Fast")] Layout.alignment: Qt.AlignCenter Layout.leftMargin: 10 Layout.rightMargin: 10 Layout.topMargin: 2 Layout.bottomMargin: 10 Layout.fillWidth: true slider.height: 30 tickDirection: D.TipsSlider.TickDirection.Back slider.handleType: Slider.HandleType.ArrowBottom slider.value: dccData.doubleSpeed slider.from: 0 slider.to: 6 slider.live: true slider.stepSize: 1 slider.snapMode: Slider.SnapAlways ticks: [ D.SliderTipItem { text: doubleClickSlider.tips[0] // highlight: doubleClickSlider.slider.value === 1 }, D.SliderTipItem { text: doubleClickSlider.tips[1] }, D.SliderTipItem { text: doubleClickSlider.tips[2] }, D.SliderTipItem { text: doubleClickSlider.tips[3] }, D.SliderTipItem { text: doubleClickSlider.tips[4] }, D.SliderTipItem { text: doubleClickSlider.tips[5] }, D.SliderTipItem { text: doubleClickSlider.tips[6] } ] slider.onValueChanged: { if (dccData.doubleSpeed !== slider.value) dccData.doubleSpeed = slider.value } } } ColumnLayout { Layout.preferredWidth: 145 Label { id: scrollText Layout.alignment: Qt.AlignLeft font: D.DTK.fontManager.t7 text: qsTr("Double Click Test") } ClickTest { id: doubleClickAni Layout.alignment: Qt.AlignHCenter Layout.leftMargin: 8 Layout.bottomMargin: 10 Layout.preferredWidth: 150 Layout.preferredHeight: 60 } } } } } DccObject { name: "LeftHandMode" parentName: "MouseAndTouchpadCommon" displayName: qsTr("Left Hand Mode") weight: 40 backgroundType: DccObject.Normal pageType: DccObject.Editor page: D.Switch { checked: dccData.leftHandState onCheckedChanged: { dccData.leftHandState = checked } } onParentItemChanged: { if (parentItem) { parentItem.topInset = 6 parentItem.bottomInset = 15 } } } } ================================================ FILE: src/plugin-mouse/qml/GestureGroup.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 Rectangle { id: root property alias model: repeater.model property bool backgroundVisible: true property bool showPlayBtn: true signal clicked(int index, bool checked) signal comboIndexChanged(int index, var actionDec) signal hoveredChanged(int index, var actionDec, bool hovered) color: "transparent" implicitHeight: layoutView.height Layout.fillWidth: true ColumnLayout { id: layoutView width: parent.width clip: true spacing: 0 Repeater { id: repeater delegate: D.ItemDelegate { id: itemCtl Layout.fillWidth: true leftPadding: 10 rightPadding: 10 topPadding: 0 bottomPadding: 0 implicitHeight: 36 topInset: index === 0 ? 2 : 0 cascadeSelected: true backgroundVisible: root.backgroundVisible text: model.descriptionRole icon.name: model.iconRole hoverEnabled: true // 使用框架标准函数动态设置corners corners: getCornersForBackground(index, repeater.count) property var comboMoel: model.actionListRole property int comboIndex: model.actionsIndexRole property var comboItem: null property int delegateIndex: index // Save delegate's index to avoid being overridden by ComboBox's index parameter content: D.ComboBox { id: combo Layout.alignment: Qt.AlignRight | Qt.AlignVCenter model: comboMoel textRole: "actionText" valueRole: "actionValue" currentIndex: comboIndex editable: false flat: true onActivated: { root.comboIndexChanged(itemCtl.delegateIndex, combo.currentValue) } Component.onCompleted: comboItem = this } background: DccItemBackground { backgroundType: DccObject.Hover separatorVisible: index < (repeater.count - 1) // 动态条件:最后一行不显示分割线 } onHoveredChanged: { root.hoveredChanged(delegateIndex, comboItem.currentValue, hovered) } onClicked: { root.clicked(delegateIndex, !model.isChecked) } } } } } ================================================ FILE: src/plugin-mouse/qml/Mouse.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { id: mouse name:"MouseAndTouchpad" parentName:"device" displayName: qsTr("Mouse and Touchpad") description: qsTr("Common、Mouse、Touchpad") icon:"device_mouse" weight: 30 page: DccRightView { spacing: -4 } visible: !DccApp.isTreeland() } ================================================ FILE: src/plugin-mouse/qml/MouseMain.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { DccObject { name: "MouseAndTouchpadCommon" parentName: "MouseAndTouchpad" displayName: qsTr("Common") weight: 10 pageType: DccObject.Item page: DccGroupView { spacing: -5 isGroup: false } Common {} } DccObject { name: "MouseAndTouchpadMouse" parentName: "MouseAndTouchpad" displayName: qsTr("Mouse") icon: "mouse_trackpad_mouse" weight: 100 page: DccRightView { spacing: 5 } MousePage {} } DccObject { name: "Touchpad" parentName: "MouseAndTouchpad" displayName: qsTr("Touchpad") icon: "mouse_trackpad_trackpad" visible: dccData.tpadExist weight: 200 page: DccRightView { spacing: 0 } Touchpad {} } } ================================================ FILE: src/plugin-mouse/qml/MousePage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 DccObject { DccTitleObject { name: "Mouse" parentName: "MouseAndTouchpadMouse" displayName: qsTr("Mouse") weight: 10 } DccObject { name: "PointerSpeed" parentName: "MouseAndTouchpadMouse" displayName: qsTr("Pointer Speed") weight: 20 backgroundType: DccObject.Normal pageType: DccObject.Item page: ColumnLayout { Label { id: speedText Layout.topMargin: 10 font: D.DTK.fontManager.t6 text: dccObj.displayName Layout.leftMargin: 14 } D.TipsSlider { id: scrollSlider readonly property var tips: [qsTr("Slow"), (""), (""), (""), (""), (""), qsTr("Fast")] Layout.preferredHeight: 100 Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true tickDirection: D.TipsSlider.TickDirection.Back slider.handleType: Slider.HandleType.ArrowBottom slider.value: dccData.mouseMoveSpeed slider.from: 0 slider.to: ticks.length - 1 slider.live: true slider.stepSize: 1 slider.snapMode: Slider.SnapAlways ticks: [ D.SliderTipItem { text: scrollSlider.tips[0] highlight: scrollSlider.slider.value === 0 }, D.SliderTipItem { text: scrollSlider.tips[1] highlight: scrollSlider.slider.value === 1 }, D.SliderTipItem { text: scrollSlider.tips[2] highlight: scrollSlider.slider.value === 2 }, D.SliderTipItem { text: scrollSlider.tips[3] highlight: scrollSlider.slider.value === 3 }, D.SliderTipItem { text: scrollSlider.tips[4] highlight: scrollSlider.slider.value === 4 }, D.SliderTipItem { text: scrollSlider.tips[5] highlight: scrollSlider.slider.value === 5 }, D.SliderTipItem { text: scrollSlider.tips[6] highlight: scrollSlider.slider.value === 6 } ] slider.onValueChanged: { dccData.mouseMoveSpeed = slider.value } } } } DccObject { name: "PointerSize" parentName: "MouseAndTouchpadMouse" displayName: qsTr("Pointer Size") weight: 30 pageType: DccObject.Item backgroundType: DccObject.Normal page: ColumnLayout { anchors.fill: parent Label { Layout.topMargin: 10 text: dccObj.displayName Layout.leftMargin: 14 } Flow { id: listview Layout.fillWidth: true Layout.leftMargin: 10 opacity: enabled ? 1 : 0.4 property var tips: [qsTr("Small"), qsTr("Medium"), qsTr("Large")] property var icons: ["mouse_cursor_size_small.png", "mouse_cursor_size_medium.png", "mouse_cursor_size_big.png"] property var availables: [false, false, false] property var availableSizes: [24, 36, 48] property var availableSizesModel: dccData.availableCursorSizes onAvailableSizesModelChanged: { availables = [true, false, false] for (let i = 0; i < availableSizesModel.length; i++) { let size = availableSizesModel[i] if (size > 30 && !availables[1]) { availables[1] = true } else if (size > 42 && !availables[2]) { availables[2] = true } } } spacing: 8 Repeater { model: listview.tips.length ColumnLayout { id: layout visible: listview.availables[index] property bool checked: { let cutCursorSize = dccData.cursorSize if (index === 0 && cutCursorSize > 0 && cutCursorSize <= 30) { return true } else if (index === 1 && cutCursorSize > 30 && cutCursorSize <= 42) { return true } else if (index === 2 && cutCursorSize > 42) { return true } return false } width: 112 height: 104 Item { Layout.preferredHeight: 78 Layout.fillWidth: true Rectangle { anchors.fill: parent color: "transparent" border.width: 2 border.color: layout.checked ? D.DTK.platformTheme.activeColor : "transparent" radius: 7 Control { id: iconControl anchors.fill: parent anchors.margins: 4 contentItem: Image { sourceSize: Qt.size(width, height) source: "qrc:/icons/deepin/builtin/icons/" + (D.DTK.themeType === D.ApplicationHelper.LightType ? "light/" : "dark/") + listview.icons[index] } } } MouseArea { anchors.fill: parent onClicked: { if (dccData.cursorSize === listview.availableSizes[index]) { return } dccData.cursorSize = listview.availableSizes[index] pointerSizeTips.visible = true } } } Text { Layout.fillWidth: true Layout.fillHeight: true text: listview.tips[index] horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter color: layout.checked ? D.DTK.platformTheme.activeColor : this.palette.windowText } } } } Item { id: pointerSizeTips visible: false Layout.fillWidth: true Layout.preferredHeight: tipsRow.implicitHeight RowLayout { id: tipsRow anchors.horizontalCenter: parent.horizontalCenter D.DciIcon { name: "tip_warning" sourceSize: Qt.size(18, 18) Layout.leftMargin: 10 } Label { Layout.fillWidth: true font: D.DTK.fontManager.t7 text: qsTr("Some apps require logout or system restart to take effect") wrapMode: Text.Wrap } } } Item { Layout.fillWidth: true Layout.preferredHeight: 6 } } } DccObject { name: "MouseSettings" parentName: "MouseAndTouchpadMouse" weight: 50 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "MouseAcceleration" parentName: "MouseSettings" displayName: qsTr("Mouse Acceleration") weight: 10 pageType: DccObject.Editor page: D.Switch { checked: dccData.accelProfile onCheckedChanged: { dccData.accelProfile = checked } } } DccObject { name: "DisableTouchpad" parentName: "MouseSettings" displayName: qsTr("Disable touchpad when a mouse is connected") weight: 20 visible: dccData.tpadExist pageType: DccObject.Editor page: D.Switch { checked: dccData.disTpad onCheckedChanged: { dccData.disTpad = checked } } } DccObject { name: "NaturalScrolling" parentName: "MouseSettings" displayName: qsTr("Natural Scrolling") weight: 30 pageType: DccObject.Editor page: D.Switch { checked: dccData.mouseNaturalScroll onCheckedChanged: { dccData.mouseNaturalScroll = checked } } } } } ================================================ FILE: src/plugin-mouse/qml/Touchpad.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 DccObject { id: touchpad property bool enabled : dccData.tapEnabled property bool isHovering: false property bool animatedImagePlaying: false property var preActionDec: undefined // Animation priority control: ensure selection animation has priority over hover animation property bool isPlayingSelectionAnimation: false property int animationPriority: 0 // 0: no animation, 1: hover animation, 2: selection animation // Record current hover state details for switching after selection animation ends property int currentHoverIndex: -1 property var currentHoverActionDec: undefined property int currentFingerNum: 3 // Record current gesture finger count property bool resetAnimationTrigger: false // Trigger to reset animation frames DccObject { name: "BasicSettings" parentName: "MouseAndTouchpad/Touchpad" displayName: qsTr("Basic Settings") weight: 10 pageType: DccObject.Item page: ColumnLayout { Label { Layout.leftMargin: 10 font.pixelSize: D.DTK.fontManager.t5.pixelSize font.weight: 500 color: D.DTK.themeType === D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1) text: dccObj.displayName } } onParentItemChanged: item => { if (item) { item.bottomPadding = 4 } } } DccObject { name: "DisableTouchpadByMouse" parentName: "MouseAndTouchpad/Touchpad" displayName: qsTr("Touchpad") weight: 20 backgroundType: DccObject.Normal pageType: DccObject.Editor page: D.Switch { Layout.rightMargin: 10 Layout.alignment: Qt.AlignRight | Qt.AlignVCenter checked: dccData.tapEnabled onCheckedChanged: { if (checked !== dccData.tapEnabled) { dccData.tapEnabled = checked; } } } onParentItemChanged: item => { if (item) { item.topInset = 4 item.bottomInset = 3 } } } DccObject { name: "PointerSpeed" parentName: "MouseAndTouchpad/Touchpad" displayName: qsTr("Pointer Speed") weight: 30 visible: touchpad.enabled backgroundType: DccObject.Normal pageType: DccObject.Item page: ColumnLayout { Label { id: speedText Layout.topMargin: 10 Layout.leftMargin: 14 font: D.DTK.fontManager.t6 text: dccObj.displayName } D.TipsSlider { id: scrollSlider readonly property var tips: [qsTr("Slow"), (""), (""), (""), (""), (""), qsTr("Fast")] Layout.preferredHeight: 90 Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true tickDirection: D.TipsSlider.TickDirection.Back slider.handleType: Slider.HandleType.ArrowBottom slider.value: dccData.tpadMoveSpeed slider.from: 0 slider.to: ticks.length - 1 slider.live: true slider.stepSize: 1 slider.snapMode: Slider.SnapAlways slider.onValueChanged: { dccData.tpadMoveSpeed = slider.value; } ticks: [ D.SliderTipItem { text: scrollSlider.tips[0] highlight: scrollSlider.slider.value === 0 }, D.SliderTipItem { text: scrollSlider.tips[1] highlight: scrollSlider.slider.value === 1 }, D.SliderTipItem { text: scrollSlider.tips[2] highlight: scrollSlider.slider.value === 2 }, D.SliderTipItem { text: scrollSlider.tips[3] highlight: scrollSlider.slider.value === 3 }, D.SliderTipItem { text: scrollSlider.tips[4] highlight: scrollSlider.slider.value === 4 }, D.SliderTipItem { text: scrollSlider.tips[5] highlight: scrollSlider.slider.value === 5 }, D.SliderTipItem { text: scrollSlider.tips[6] highlight: scrollSlider.slider.value === 6 } ] } } onParentItemChanged: item => { if (item) { item.topPadding = 0 item.bottomPadding = 3 } } } DccObject { name: "TouchpadGroup" parentName: "MouseAndTouchpad/Touchpad" displayName: qsTr("Pointer Speed") weight: 40 visible: touchpad.enabled pageType: DccObject.Item DccObject { name: "DisableTouchpadByInput" parentName: "MouseAndTouchpad/Touchpad/TouchpadGroup" displayName: qsTr("Disable touchpad during input") weight: 10 visible: dccData.lidIsPresent pageType: DccObject.Editor page: D.Switch { Layout.rightMargin: 10 Layout.alignment: Qt.AlignRight | Qt.AlignVCenter checked: dccData.disIfTyping onCheckedChanged: { if (checked !== dccData.disIfTyping) { dccData.disIfTyping = checked; } } } } DccObject { name: "TapToClick" parentName: "MouseAndTouchpad/Touchpad/TouchpadGroup" displayName: qsTr("Tap to Click") weight: 20 pageType: DccObject.Editor page: D.Switch { Layout.rightMargin: 10 Layout.alignment: Qt.AlignRight | Qt.AlignVCenter checked: dccData.tapClick onCheckedChanged: { if (checked !== dccData.tapClick) { dccData.tapClick = checked; } } } } DccObject { name: "NaturalScrolling" parentName: "MouseAndTouchpad/Touchpad/TouchpadGroup" displayName: qsTr("Natural Scrolling") weight: 30 pageType: DccObject.Editor page: D.Switch { Layout.rightMargin: 10 Layout.alignment: Qt.AlignRight | Qt.AlignVCenter checked: dccData.tpadNaturalScroll onCheckedChanged: { if (checked !== dccData.tpadNaturalScroll) { dccData.tpadNaturalScroll = checked; } } } } page: DccGroupView { } onParentItemChanged: item => { if (item) { item.topPadding = 3 item.bottomPadding = 8 } } } DccObject { name: "Gesture" parentName: "MouseAndTouchpad/Touchpad" displayName: qsTr("Gestures") weight: 50 visible: touchpad.enabled pageType: DccObject.Item page: ColumnLayout { Label { Layout.leftMargin: 10 font.pixelSize: D.DTK.fontManager.t5.pixelSize font.weight: 500 color: D.DTK.themeType === D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 1) : Qt.rgba(1, 1, 1, 1) text: dccObj.displayName } } onParentItemChanged: item => { if (item) { item.topPadding = 8 item.bottomPadding = 4 } } } DccObject { name: "GestureGroup" parentName: "MouseAndTouchpad/Touchpad" weight: 60 visible: touchpad.enabled pageType: DccObject.Item DccObject { name: "animation" parentName: "MouseAndTouchpad/Touchpad/GestureGroup" weight: 10 pageType: DccObject.Item page: Rectangle { color: "transparent" implicitHeight: rowView.height + 20 RowLayout { id: rowView width: parent.width anchors.centerIn: parent AnimatedImage { id: gestureFingerAnimatedImage source: dccData.gestureFingerAniPath Layout.alignment: Qt.AlignCenter sourceSize.width: 204 sourceSize.height: 134 playing: touchpad.animatedImagePlaying // Reset animation frame when new selection is made Connections { target: touchpad function onResetAnimationTriggerChanged() { gestureFingerAnimatedImage.currentFrame = 0 } } onFrameChanged: { if (currentFrame >= (frameCount - 1)) { currentFrame = 0 if (touchpad.animationPriority === 2) { // Selection animation completed, reset priority touchpad.isPlayingSelectionAnimation = false touchpad.animationPriority = 0 // If currently hovering, immediately play hover animation if (touchpad.isHovering && touchpad.currentHoverIndex >= 0 && touchpad.currentHoverActionDec) { // Update animation path to the hovered action dccData.updateFigerGestureAni(touchpad.currentFingerNum, touchpad.currentHoverIndex, touchpad.currentHoverActionDec) touchpad.animationPriority = 1 touchpad.animatedImagePlaying = true return // Continue playing hover animation } } if (!touchpad.isHovering || touchpad.animationPriority === 2) { touchpad.animatedImagePlaying = false; } } } } AnimatedImage { id: gestureActionAnimatedImage source: dccData.gestureActionAniPath Layout.alignment: Qt.AlignCenter sourceSize.width: 204 sourceSize.height: 134 playing: touchpad.animatedImagePlaying // Reset animation frame when new selection is made Connections { target: touchpad function onResetAnimationTriggerChanged() { gestureActionAnimatedImage.currentFrame = 0 } } onFrameChanged: { if (currentFrame >= (frameCount - 1)) { currentFrame = 0 if (touchpad.animationPriority === 2) { // Selection animation completed, reset priority touchpad.isPlayingSelectionAnimation = false touchpad.animationPriority = 0 // If currently hovering, immediately play hover animation if (touchpad.isHovering && touchpad.currentHoverIndex >= 0 && touchpad.currentHoverActionDec) { // Update animation path to the hovered action dccData.updateFigerGestureAni(touchpad.currentFingerNum, touchpad.currentHoverIndex, touchpad.currentHoverActionDec) touchpad.animationPriority = 1 touchpad.animatedImagePlaying = true return // Continue playing hover animation } } if (!touchpad.isHovering || touchpad.animationPriority === 2) { touchpad.animatedImagePlaying = false; } } } } } } } page: DccGroupView { } onParentItemChanged: item => { if (item) { item.topPadding = 4 item.bottomPadding = 6 } } } DccObject { name: "ThreeFingerGesture" parentName: "MouseAndTouchpad/Touchpad" displayName: qsTr("Three-finger gestures") weight: 70 visible: touchpad.enabled backgroundType: DccObject.AutoBg pageType: DccObject.Item page: ColumnLayout { Label { Layout.leftMargin: 10 font: D.DTK.fontManager.t6 text: dccObj.displayName } } onParentItemChanged: item => { if (item) { item.topPadding = 6 item.bottomPadding = 3 } } } DccObject { name: "ThreeFingerGestureGroup" parentName: "MouseAndTouchpad/Touchpad" weight: 80 visible: touchpad.enabled backgroundType: DccObject.Normal pageType: DccObject.Item page: GestureGroup { model: dccData.threeFingerGestureModel() onComboIndexChanged: function (index, actionDec){ dccData.setGestures(3, index, actionDec) dccData.updateFigerGestureAni(3, index, actionDec) // Reset animation frames to ensure full playback from the beginning touchpad.resetAnimationTrigger = !touchpad.resetAnimationTrigger // Set high priority for selection animation touchpad.animationPriority = 2 touchpad.isPlayingSelectionAnimation = true touchpad.animatedImagePlaying = true } onHoveredChanged: function (index, actionDec, hovered) { if (hovered) { // Record hover state details touchpad.currentHoverIndex = index touchpad.currentHoverActionDec = actionDec touchpad.currentFingerNum = 3 // Three-finger gesture // Only play hover animation when no selection animation is playing if (!touchpad.isPlayingSelectionAnimation && touchpad.animationPriority < 2) { dccData.updateFigerGestureAni(3, index, actionDec) preActionDec = actionDec touchpad.isHovering = true touchpad.animationPriority = 1 touchpad.animatedImagePlaying = true } else { // Record hover state but don't play animation preActionDec = actionDec touchpad.isHovering = true } } else if (preActionDec === actionDec) { touchpad.isHovering = false preActionDec = undefined touchpad.currentHoverIndex = -1 touchpad.currentHoverActionDec = undefined if (touchpad.animationPriority === 1) { touchpad.animationPriority = 0 } } } } onParentItemChanged: item => { if (item) { item.topPadding = 3 item.bottomPadding = 6 } } } DccObject { name: "FourFingerGesture" parentName: "MouseAndTouchpad/Touchpad" displayName: qsTr("Four-finger gestures") weight: 90 visible: touchpad.enabled backgroundType: DccObject.AutoBg pageType: DccObject.Item page: ColumnLayout { Label { Layout.leftMargin: 10 font: D.DTK.fontManager.t6 text: dccObj.displayName } } onParentItemChanged: item => { if (item) { item.topPadding = 6 item.bottomPadding = 3 } } } DccObject { name: "FourFingerGestureGroup" parentName: "MouseAndTouchpad/Touchpad" weight: 100 visible: touchpad.enabled backgroundType: DccObject.Normal pageType: DccObject.Item page: GestureGroup { model: dccData.fourFigerGestureModel() onComboIndexChanged: function (index, actionDec){ dccData.setGestures(4, index, actionDec) dccData.updateFigerGestureAni(4, index, actionDec) // Reset animation frames to ensure full playback from the beginning touchpad.resetAnimationTrigger = !touchpad.resetAnimationTrigger // Set high priority for selection animation touchpad.animationPriority = 2 touchpad.isPlayingSelectionAnimation = true touchpad.animatedImagePlaying = true } onHoveredChanged: function (index, actionDec, hovered) { if (hovered) { // Record hover state details (four-finger gesture) touchpad.currentHoverIndex = index touchpad.currentHoverActionDec = actionDec touchpad.currentFingerNum = 4 // Four-finger gesture // Only play hover animation when no selection animation is playing if (!touchpad.isPlayingSelectionAnimation && touchpad.animationPriority < 2) { dccData.updateFigerGestureAni(4, index, actionDec) preActionDec = actionDec touchpad.isHovering = true touchpad.animationPriority = 1 touchpad.animatedImagePlaying = true } else { // Record hover state but don't play animation preActionDec = actionDec touchpad.isHovering = true } } else if (preActionDec === actionDec) { touchpad.isHovering = false preActionDec = undefined touchpad.currentHoverIndex = -1 touchpad.currentHoverActionDec = undefined if (touchpad.animationPriority === 1) { touchpad.animationPriority = 0 } } } } onParentItemChanged: item => { if (item) { item.topPadding = 3 } } } } ================================================ FILE: src/plugin-mouse/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-notification/CMakeLists.txt ================================================ set(QT_VERSION_MAJOR "6") find_package(Dtk6 REQUIRED COMPONENTS Tools) # for ${DTK_XML2CPP} which provides the path of `qdbusxml2cpp-fix` binary if (BUILD_PLUGIN) set(notification_Name notification) file(GLOB_RECURSE notification_SRCS "operation/*.cpp" "operation/*.h" "types/*.h" "operation/qrc/notification.qrc" ) file(GLOB_RECURSE notification_qml_SRCS "qml/*.qml" ) find_package(${QT_NS} COMPONENTS Concurrent REQUIRED COMPONENTS Qml) set_source_files_properties( ${CMAKE_CURRENT_SOURCE_DIR}/operation/xml/org.desktopspec.ApplicationManager1.Application.xml PROPERTIES INCLUDE types/am.h CLASSNAME AppManager1Application ) set_source_files_properties( ${CMAKE_CURRENT_SOURCE_DIR}/operation/xml/org.desktopspec.ObjectManager1.xml PROPERTIES INCLUDE types/am.h CLASSNAME AppManager1ApplicationObjectManager ) qt_add_dbus_interfaces( DBUS_INTERFACES ${CMAKE_CURRENT_SOURCE_DIR}/operation/xml/org.desktopspec.ApplicationManager1.Application.xml ) qt_add_dbus_interfaces( DBUS_INTERFACES ${CMAKE_CURRENT_SOURCE_DIR}/operation/xml/org.desktopspec.ObjectManager1.xml ) add_library(${notification_Name} MODULE ${notification_SRCS} ${DBUS_INTERFACES} ) set(notification_Includes src/plugin-notification/operation src/plugin-notification ${PROJECT_BINARY_DIR}/src/plugin-notification ) set(notification_Libraries ${DCC_FRAME_Library} ${DTK_NS}::Gui ${QT_NS}::DBus ${QT_NS}::Concurrent ) target_include_directories(${notification_Name} PUBLIC ${notification_Includes} ) target_link_libraries(${notification_Name} PRIVATE ${notification_Libraries} ) dcc_install_plugin(NAME ${notification_Name} TARGET ${notification_Name}) endif() ================================================ FILE: src/plugin-notification/operation/appmgr.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "appmgr.h" #include "applicationinterface.h" #include "objectmanager1interface.h" #include #include DCORE_USE_NAMESPACE using AppManager1Application = AppManager1Application; using AppManager1ApplicationObjectManager = AppManager1ApplicationObjectManager; static QString parseDisplayName(const QStringMap &source) { static QString key = QLocale::system().name(); return source.value(key, source.value(u8"default")); } static QString parseName(const QStringMap &source) { QString name = source.value(QLocale::system().name()); return !name.isEmpty() ? name : source.value(u8"default"); } static QString parseIcon(const QStringMap &source) { QString icon = source.value(u8"Desktop Entry"); // fallback to default icon if (icon.isEmpty()) { icon = "application-x-executable"; } return icon; } template static DExpected parseDBusField(const QVariantMap &map, const QString &key) { if (!map.contains(key)) return {}; const auto value = map.value(key); return DExpected{qdbus_cast(value)}; } static QString getDisplayName(const bool isDeepin, const QStringMap &name, const QStringMap &genericName) { if (isDeepin) { const auto tmp = parseDisplayName(genericName); if (!tmp.isEmpty()) return tmp; } return parseDisplayName(name); } static AppMgr::AppItem *parseDBus2AppItem(const ObjectInterfaceMap &source) { const QVariantMap appInfo = source.value("org.desktopspec.ApplicationManager1.Application"); if (appInfo.isEmpty()) return nullptr; const auto nodisplay = parseDBusField(appInfo, u8"NoDisplay"); if (!nodisplay || nodisplay.value()) { return nullptr; } AppMgr::AppItem *item = nullptr; if (auto value = parseDBusField(appInfo, u8"ID")) { item = new AppMgr::AppItem(); item->id = value.value() + ".desktop"; item->appId = value.value(); } if (!item) { return nullptr; } if (auto value = parseDBusField(appInfo, u8"Categories")) { item->categories = value.value(); } // fallback to Name if GenericName is empty, only for X_Deepin_Vendor equals to "deepin". const auto deepinVendor = parseDBusField(appInfo, u8"X_Deepin_Vendor"); item->displayName = getDisplayName(deepinVendor && deepinVendor.value() == QStringLiteral("deepin"), parseDBusField(appInfo, u8"Name").value(), parseDBusField(appInfo, u8"GenericName").value()); if (auto value = parseDBusField(appInfo, u8"Name")) { item->name = parseName(value.value()); } if (auto value = parseDBusField(appInfo, u8"Icons")) { item->iconName = parseIcon(value.value()); } if (auto value = parseDBusField(appInfo, u8"InstalledTime")) { item->installedTime = value.value(); } if (auto value = parseDBusField(appInfo, u8"LastLaunchedTime")) { item->lastLaunchedTime = value.value(); } if (auto value = parseDBusField(appInfo, u8"AutoStart")) { item->isAutoStart = value.value(); } return item; } AppMgr::AppMgr(QObject *parent) : QObject(parent) , m_objectManager(new AppManager1ApplicationObjectManager("org.desktopspec.ApplicationManager1", "/org/desktopspec/ApplicationManager1", QDBusConnection::sessionBus(), this)) { qDBusRegisterMetaType(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); qDBusRegisterMetaType(); initObjectManager(); } AppMgr::~AppMgr() { for (auto item : std::as_const(m_appItems)) { if (auto handler = item->handler) { handler->deleteLater(); } } qDeleteAll(m_appItems); } AppManager1Application * createAM1AppIfaceByPath(const QString &dbusPath) { AppManager1Application * amAppIface = new AppManager1Application(QLatin1String("org.desktopspec.ApplicationManager1"), dbusPath, QDBusConnection::sessionBus()); if (!amAppIface->isValid()) { qDebug() << "D-Bus interface not exist or failed to connect to" << dbusPath; return nullptr; } return amAppIface; } AppManager1Application * createAM1AppIface(const QString &desktopId) { auto appItem = AppMgr::instance()->appItem(desktopId); if (!appItem) { qWarning() << "Can't find appItem for the desktopId" << desktopId; return nullptr; } qDebug() << "Get app interface for the desktopId" << desktopId; return appItem->handler; } // if return false, it means the launch is not even started. // if return true, it means we attempted to launch it via AM, but not sure if it's succeed. bool AppMgr::launchApp(const QString &desktopId) { AppManager1Application * amAppIface = createAM1AppIface(desktopId); if (!amAppIface) return false; const auto path = amAppIface->path(); QProcess process; process.setProcessChannelMode(QProcess::MergedChannels); process.start("dde-am", {"--by-user", path}); if (!process.waitForFinished()) { qWarning() << "Failed to launch the desktopId:" << desktopId << process.errorString(); return false; } else if (process.exitCode() != 0) { qWarning() << "Failed to launch the desktopId:" << desktopId << process.readAll(); return false; } qDebug() << "Launch the desktopId" << desktopId; return true; } bool AppMgr::autoStart(const QString &desktopId) { AppManager1Application * amAppIface = createAM1AppIface(desktopId); if (!amAppIface) return false; return amAppIface->autoStart(); } void AppMgr::setAutoStart(const QString &desktopId, bool autoStart) { AppManager1Application * amAppIface = createAM1AppIface(desktopId); if (!amAppIface) return; amAppIface->setAutoStart(autoStart); } static const QStringList DisabledScaleEnvironments { "DEEPIN_WINE_SCALE=1", "QT_SCALE_FACTOR=1", "GDK_SCALE=1", "GDK_DPI_SCALE=1", "D_DXCB_DISABLE_OVERRIDE_HIDPI=1" }; bool AppMgr::disableScale(const QString &desktopId) { AppManager1Application * amAppIface = createAM1AppIface(desktopId); if (!amAppIface) return 0; const auto environ = amAppIface->environ(); const QStringList envs(environ.split(';')); // return true if envs contains any one of DisabledScaleEnvironments. auto iter = std::find_if(envs.begin(), envs.end(), [] (const QString &env) { return DisabledScaleEnvironments.contains(env); }); return iter != envs.end(); } void AppMgr::setDisableScale(const QString &desktopId, bool disableScale) { AppManager1Application * amAppIface = createAM1AppIface(desktopId); if (!amAppIface) return; QString environ = amAppIface->environ(); QStringList envs(environ.split(';', Qt::SkipEmptyParts)); if (disableScale) { // remove all ScaleEnvironments, avoid other caller has set it manually. envs.removeIf([] (const QString &env) { auto iter = std::find_if(DisabledScaleEnvironments.begin(), DisabledScaleEnvironments.end(), [env] (const QString &item) { const auto left = item.split('='); const auto right = env.split('='); return !right.isEmpty() && left.at(0) == right.at(0); }); return iter != DisabledScaleEnvironments.end(); }); envs << DisabledScaleEnvironments; } else { // remove all DisabledScaleEnvironments. envs.removeIf([] (const QString &env) { return DisabledScaleEnvironments.contains(env); }); } environ = envs.join(';'); qDebug() << "Update environ for the desktopId" << desktopId << ", env:" << environ; amAppIface->setEnviron(environ); } bool AppMgr::isOnDesktop(const QString &desktopId) { AppManager1Application * amAppIface = createAM1AppIface(desktopId); if (!amAppIface) return false; return amAppIface->isOnDesktop(); } bool AppMgr::sendToDesktop(const QString &desktopId) { AppManager1Application * amAppIface = createAM1AppIface(desktopId); if (!amAppIface) return false; QDBusPendingReply reply = amAppIface->SendToDesktop(); reply.waitForFinished(); if (reply.isError()) { qDebug() << reply.error(); return false; } return reply.value(); } bool AppMgr::removeFromDesktop(const QString &desktopId) { AppManager1Application * amAppIface = createAM1AppIface(desktopId); if (!amAppIface) return false; QDBusPendingReply reply = amAppIface->RemoveFromDesktop(); reply.waitForFinished(); if (reply.isError()) { qDebug() << reply.error(); return false; } return reply.value(); } bool AppMgr::isValid() const { return m_objectManager->isValid(); } QList AppMgr::allAppInfosShouldBeShown() const { return m_appItems.values(); } AppMgr::AppItem *AppMgr::appItem(const QString &id) const { const auto items = m_appItems.values(); auto iter = std::find_if(items.begin(), items.end(), [id](AppItem *item) { return item->id == id; }); return iter != items.end() ? *iter : nullptr; } void AppMgr::watchingAppItemPropertyChanged(const QString &key, AppMgr::AppItem *appItem) { AppManager1Application * amAppIface = createAM1AppIfaceByPath(key); if (!amAppIface) return; Q_ASSERT(appItem->handler == nullptr); appItem->handler = amAppIface; } void AppMgr::updateAppsLaunchedTimes(const QVariantMap &appsLaunchedTimes) { // need to update times for removed and updated. const auto &appItems = m_appItems.values(); for (const auto item : std::as_const(appItems)) { auto iter = appsLaunchedTimes.find(item->appId); qint64 times = 0; if (iter != appsLaunchedTimes.cend()) times = iter->toLongLong(); // including reset and increase times. if (item->launchedTimes != times) { qDebug() << "LaunchedTimesChanged by DConfig, desktopId" << item->id; item->launchedTimes = times; Q_EMIT itemDataChanged(item->id); } } } void AppMgr::initObjectManager() { if (!isValid()) return; connect(m_objectManager, &AppManager1ApplicationObjectManager::InterfacesAdded, this, [this](const QDBusObjectPath &objPath, ObjectInterfaceMap interfacesAndProperties) { const QString key(objPath.path()); qDebug() << "InterfacesAdded by AM, path:" << key; if (m_appItems.contains(objPath.path())) { qWarning() << "App already exists for the path:" << key; return; } if (auto appItem = parseDBus2AppItem(interfacesAndProperties)) { qDebug() << "App item added, desktopId" << appItem->id; watchingAppItemAdded(key, appItem); } }); connect(m_objectManager, &AppManager1ApplicationObjectManager::InterfacesRemoved, this, [this](const QDBusObjectPath &objPath, const QStringList &interfaces) { Q_UNUSED(interfaces) const QString key(objPath.path()); qDebug() << "InterfacesRemoved by AM, path:" << key; watchingAppItemRemoved(key); }); fetchAppItems(); DConfig *config = DConfig::create("org.deepin.dde.application-manager", "org.deepin.dde.am", "", this); if (!config->isValid()) { qWarning() << "DConfig is invalid when getting launched times."; } else { static const QString AppsLaunchedTimes(u8"appsLaunchedTimes"); const auto &value = config->value(AppsLaunchedTimes).toMap(); updateAppsLaunchedTimes(value); QObject::connect(config, &DConfig::valueChanged, this, [this, config](const QString &key) { if (key != AppsLaunchedTimes) return; qDebug() << "appsLaunchedTimes of DConfig Changed."; const auto &value = config->value(AppsLaunchedTimes).toMap(); updateAppsLaunchedTimes(value); }); } } void AppMgr::fetchAppItems() { qDebug() << "Begin to fetch apps."; const auto reply = m_objectManager->GetManagedObjects(); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(reply, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [this](QDBusPendingCallWatcher *call){ QDBusPendingReply reply = *call; if (reply.isError()) { qWarning() << "Failed to get apps from AM, " << reply.error(); call->deleteLater(); return; } qDebug() << "Fetched all AppItem, and start parsing data."; QMap items; const auto objects = reply.value(); for (auto iter = objects.cbegin(); iter != objects.cend(); ++iter) { const auto &objPath = iter.key(); const ObjectInterfaceMap &objs = iter.value(); auto appItem = parseDBus2AppItem(objs); if (!appItem) { continue; } items[objPath.path()] = appItem; watchingAppItemPropertyChanged(objPath.path(), appItem); } call->deleteLater(); qDebug() << "Fetched all AppItem, and end up parsing data."; m_appItems = items; Q_EMIT changed(); }); // TODO async to fetch apps. watcher->waitForFinished(); } void AppMgr::watchingAppItemAdded(const QString &key, AppItem *appItem) { m_appItems[key] = appItem; watchingAppItemPropertyChanged(key, appItem); Q_EMIT changed(); Q_EMIT appItemAdd(key); } void AppMgr::watchingAppItemRemoved(const QString &key) { auto appItem = m_appItems.value(key); if (!appItem) return; qDebug() << "App item removed, desktopId" << appItem->id; if (auto handler = appItem->handler) { handler->deleteLater(); } m_appItems.remove(key); delete appItem; Q_EMIT changed(); Q_EMIT appItemRemove(key); } AppMgr *AppMgr::instance() { static AppMgr *gInstance = nullptr; if (!gInstance) { gInstance = new AppMgr(); gInstance->moveToThread(qApp->thread()); } return gInstance; } ================================================ FILE: src/plugin-notification/operation/appmgr.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include DCORE_BEGIN_NAMESPACE class DConfig; DCORE_END_NAMESPACE class AppManager1Application; class AppManager1ApplicationObjectManager; class AppMgr : public QObject { Q_OBJECT public: explicit AppMgr(QObject *parent = nullptr); ~AppMgr(); struct AppItem { QPointer handler; QString id; QString name; QString displayName; QString iconName; QStringList categories; qint64 installedTime = 0; qint64 lastLaunchedTime = 0; qint64 launchedTimes = 0; bool isAutoStart = false; QString appId; }; static AppMgr *instance(); static bool launchApp(const QString & desktopId); static bool autoStart(const QString & desktopId); static void setAutoStart(const QString & desktopId, bool autoStart); static bool disableScale(const QString & desktopId); static void setDisableScale(const QString & desktopId, bool disableScale); static bool isOnDesktop(const QString & desktopId); static bool sendToDesktop(const QString & desktopId); static bool removeFromDesktop(const QString & desktopId); bool isValid() const; QList allAppInfosShouldBeShown() const; AppMgr::AppItem * appItem(const QString &id) const; Q_SIGNALS: void changed(); void itemDataChanged(const QString &id); void appItemAdd(const QString &id); void appItemRemove(const QString &id); private: void initObjectManager(); void fetchAppItems(); void watchingAppItemAdded(const QString &key, AppMgr::AppItem *appItem); void watchingAppItemRemoved(const QString &key); void watchingAppItemPropertyChanged(const QString &key, AppMgr::AppItem *appItem); void updateAppsLaunchedTimes(const QVariantMap &appsLaunchedTimes); private: AppManager1ApplicationObjectManager *m_objectManager; QMap m_appItems; }; ================================================ FILE: src/plugin-notification/operation/appslistmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "appslistmodel.h" #include "appssourcemodel.h" using namespace DCC_NAMESPACE; AppsListModel::AppsListModel(QObject *parent) : QSortFilterProxyModel{ parent } { setFilterCaseSensitivity(Qt::CaseInsensitive); } bool AppsListModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const { QString l_transliterated = sourceModel()->data(source_left, TransliteratedRole).toString(); QString r_transliterated = sourceModel()->data(source_right, TransliteratedRole).toString(); QChar l_start = l_transliterated.isEmpty() ? QChar() : l_transliterated.constData()[0].toUpper(); QChar r_start = r_transliterated.isEmpty() ? QChar() : r_transliterated.constData()[0].toUpper(); if (l_start != r_start) { return l_start < r_start; } else { QString l_display = source_left.model()->data(source_left, Qt::DisplayRole).toString(); QString r_display = source_right.model()->data(source_right, Qt::DisplayRole).toString(); QChar ld_start = l_display.isEmpty() ? QChar() : l_display.constData()[0].toUpper(); QChar rd_start = r_display.isEmpty() ? QChar() : r_display.constData()[0].toUpper(); if ((l_start == ld_start && ld_start == rd_start) || (l_start != ld_start && l_start != rd_start)) { // display name both start with ascii letter, or both NOT start with ascii letter // use their transliterated form for sorting if (!l_start.isNull() && l_transliterated.constData()[0] != r_transliterated.constData()[0]) { // Since in ascii table, `A` is lower than `a`, we specially check to ensure `a` is lower here. return l_transliterated.constData()[0].isLower(); } return l_transliterated < r_transliterated; } else { // one of them are ascii letter and another of them is non-ascii letter. // the ascii one should be display on the front return l_start == ld_start; } } } bool AppsListModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { if (!sourceModel()) return true; if (filterRegularExpression().pattern().isEmpty()) return true; QModelIndex appNameIndex = sourceModel()->index(source_row, 0, source_parent); QString appName = sourceModel()->data(appNameIndex, AppNameRole).toString(); QString transliterated = sourceModel()->data(appNameIndex, TransliteratedRole).toString(); return appName.contains(filterRegularExpression()) || transliterated.contains(filterRegularExpression()); } ================================================ FILE: src/plugin-notification/operation/appslistmodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef APPSLISTMODEL_H #define APPSLISTMODEL_H #include #include namespace DCC_NAMESPACE{ class AppsListModel : public QSortFilterProxyModel { Q_OBJECT public: explicit AppsListModel(QObject *parent = nullptr); protected: bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override; bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override; }; } #endif // APPSLISTMODEL_H ================================================ FILE: src/plugin-notification/operation/appssourcemodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "appssourcemodel.h" #include "model/appitemmodel.h" #include #include using namespace DCC_NAMESPACE; AppsSourceModel::AppsSourceModel(QObject *parent) : QAbstractItemModel(parent) { } QHash AppsSourceModel::roleNames() const { QHash names= QAbstractItemModel::roleNames(); names[AppIdRole] = "AppId"; names[AppNameRole] = "AppName"; names[AppIconRole] = "AppIcon"; names[EnableNotificationRole] = "EnableNotification"; names[EnablePreviewRole] = "EnablePreview"; names[EnableSoundRole] = "EnableSound"; names[ShowNotificationDesktopRole] = "ShowNotificationDesktop"; names[ShowNotificationCenterRole] = "ShowNotificationCenter"; names[LockScreenShowNotificationRole] = "LockScreenShowNotification"; names[TransliteratedRole] = "Transliterated"; return names; } QModelIndex AppsSourceModel::index(int row, int column, const QModelIndex &) const { if (row < 0 || row >= m_appItemModels.size()) { return QModelIndex(); } return createIndex(row, column); } QModelIndex AppsSourceModel::parent(const QModelIndex &) const { return QModelIndex(); } int AppsSourceModel::rowCount(const QModelIndex &) const { return m_appItemModels.size(); } int AppsSourceModel::columnCount(const QModelIndex &) const { return 1; } QVariant AppsSourceModel::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() >= m_appItemModels.size()) { return QVariant(); } switch (role) { case Qt::DisplayRole: return QVariant::fromValue(m_appItemModels.at(index.row())); case AppIdRole: return m_appItemModels.at(index.row())->getActName(); case AppNameRole: return m_appItemModels.at(index.row())->softName(); case AppIconRole: return m_appItemModels.at(index.row())->icon(); case EnableNotificationRole: return m_appItemModels.at(index.row())->isAllowNotify(); case EnablePreviewRole: return m_appItemModels.at(index.row())->isShowNotifyPreview(); case EnableSoundRole: return m_appItemModels.at(index.row())->isNotifySound(); case ShowNotificationDesktopRole: return m_appItemModels.at(index.row())->isShowDesktop(); case ShowNotificationCenterRole: return m_appItemModels.at(index.row())->isShowInNotifyCenter(); case LockScreenShowNotificationRole: return m_appItemModels.at(index.row())->isLockShowNotify(); case TransliteratedRole: { const auto decodedDisplay = Dtk::Core::pinyin(index.data(AppNameRole).toString(), Dtk::Core::TS_NoneTone); if (decodedDisplay.isEmpty()) return QString(); const QString transliterated = decodedDisplay.constFirst(); if (transliterated.isEmpty()) return transliterated; const QChar & firstChar = transliterated.constData()[0]; if (firstChar.isDigit()) return QString("#%1").arg(transliterated); else if (!firstChar.isLetter()) return QString("&%1").arg(transliterated); return transliterated; } default: break; } return QVariant(); } bool AppsSourceModel::setData(const QModelIndex &index, const QVariant &value, int role) { int i = index.row(); if (i < 0 || i >= m_appItemModels.size()) { return false; } switch (role) { case EnableNotificationRole: { m_appItemModels.at(index.row())->setAllowNotify(value.toBool()); return true; } case EnablePreviewRole: { m_appItemModels.at(index.row())->setShowNotifyPreview(value.toBool()); return true; } case EnableSoundRole: { m_appItemModels.at(index.row())->setNotifySound(value.toBool()); return true; } case ShowNotificationDesktopRole: { m_appItemModels.at(index.row())->setShowDesktop(value.toBool()); return true; } case ShowNotificationCenterRole: { m_appItemModels.at(index.row())->setShowInNotifyCenter(value.toBool()); return true; } case LockScreenShowNotificationRole: { m_appItemModels.at(index.row())->setLockShowNotify(value.toBool()); return true; } default: break; } return false; } void AppsSourceModel::appAdded(AppItemModel *item) { beginInsertRows(QModelIndex(), m_appItemModels.size(), m_appItemModels.size()); m_appItemModels.append(item); connect(item, &AppItemModel::allowNotifyChanged, this, [this, item]() { Q_EMIT dataChanged(createIndex(m_appItemModels.indexOf(item), 0), createIndex(m_appItemModels.indexOf(item), 0)); }); connect(item, &AppItemModel::notifySoundChanged, this, [this, item]() { Q_EMIT dataChanged(createIndex(m_appItemModels.indexOf(item), 0), createIndex(m_appItemModels.indexOf(item), 0)); }); connect(item, &AppItemModel::lockShowNotifyChanged, this,[this, item]() { Q_EMIT dataChanged(createIndex(m_appItemModels.indexOf(item), 0), createIndex(m_appItemModels.indexOf(item), 0)); }); connect(item, &AppItemModel::showInNotifyCenterChanged, this, [this, item]() { Q_EMIT dataChanged(createIndex(m_appItemModels.indexOf(item), 0), createIndex(m_appItemModels.indexOf(item), 0)); }); connect(item, &AppItemModel::showNotifyPreviewChanged, this, [this, item]() { Q_EMIT dataChanged(createIndex(m_appItemModels.indexOf(item), 0), createIndex(m_appItemModels.indexOf(item), 0)); }); connect(item, &AppItemModel::showOnDesktop, this, [this, item]() { Q_EMIT dataChanged(createIndex(m_appItemModels.indexOf(item), 0), createIndex(m_appItemModels.indexOf(item), 0)); }); endInsertRows(); } void AppsSourceModel::appRemoved(const QString &appName) { for (int i = 0; i < m_appItemModels.size(); i++) { if (m_appItemModels[i]->getActName() == appName) { // Q_EMIT appListRemoved(m_appItemModels[i]); beginRemoveRows(QModelIndex(), i, i); m_appItemModels[i]->deleteLater(); m_appItemModels[i] = nullptr; m_appItemModels.removeAt(i); endRemoveRows(); break; } } } ================================================ FILE: src/plugin-notification/operation/appssourcemodel.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef APPSSOURCEMODEL_H #define APPSSOURCEMODEL_H #include namespace DCC_NAMESPACE{ class AppItemModel; enum AppsSourceModelRole { AppIdRole = Qt::UserRole + 1, AppNameRole, AppIconRole, EnableNotificationRole, EnablePreviewRole, EnableSoundRole, ShowNotificationDesktopRole, ShowNotificationCenterRole, LockScreenShowNotificationRole, TransliteratedRole }; class AppsSourceModel : public QAbstractItemModel { Q_OBJECT public: explicit AppsSourceModel(QObject *parent = nullptr); // Basic functionality: QHash roleNames() const override; QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; void appAdded(AppItemModel* item); void appRemoved(const QString &appName); private: QList m_appItemModels; }; } #endif // APPSSOURCEMODEL_H ================================================ FILE: src/plugin-notification/operation/model/appitemmodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "appitemmodel.h" #include "../notificationsetting.h" #include using namespace DCC_NAMESPACE; AppItemModel::AppItemModel(NotificationSetting *setting, QObject *parent) : QObject(parent) , m_setting(setting) , m_softName(QString()) , m_isAllowNotify(false) , m_isNotifySound(false) , m_isLockShowNotify(false) , m_isShowInNotifyCenter(false) , m_isShowNotifyPreview(false) { } void AppItemModel::setActName(const QString &name) { if (m_actName != name) { m_actName = name; } } void AppItemModel::initValues(const QString &actName, const QString &softName, const QString &icon, bool allowNotify, bool notifySound, bool lockShowNotify, bool showDesktop, bool showInNotifyCenter, bool showNotifyPreview) { m_actName = actName; m_softName = softName; m_icon = icon; m_isAllowNotify = allowNotify; m_isNotifySound = notifySound; m_isLockShowNotify = lockShowNotify; m_isShowDesktop = showDesktop; m_isShowInNotifyCenter = showInNotifyCenter; m_isShowNotifyPreview = showNotifyPreview; } void AppItemModel::onSettingChanged(const QString &id, const uint &item, QDBusVariant var) { if (id != m_actName) return; switch (item) { case APPNAME: setSoftName(var.variant().toString()); break; case APPICON: setIcon(var.variant().toString()); break; case ENABELNOTIFICATION: setAllowNotify(var.variant().toBool()); break; case ENABELPREVIEW: setShowNotifyPreview(var.variant().toBool()); break; case ENABELSOUND: setNotifySound(var.variant().toBool()); break; case SHOWINNOTIFICATIONCENTER: setShowInNotifyCenter(var.variant().toBool()); break; case LOCKSCREENSHOWNOTIFICATION: setLockShowNotify(var.variant().toBool()); break; } } void AppItemModel::setSoftName(const QString &name) { if (m_softName == name) return; m_softName = name; Q_EMIT softNameChanged(name); } void AppItemModel::setIcon(const QString &icon) { if (m_icon == icon) return; m_icon = icon; Q_EMIT iconChanged(icon); } void AppItemModel::setAllowNotify(const bool &state) { if (m_isAllowNotify == state) return; m_isAllowNotify = state; m_setting->setAppValue(m_actName, NotificationSetting::EnableNotification, state); Q_EMIT allowNotifyChanged(state); } void AppItemModel::setNotifySound(const bool &state) { if (m_isNotifySound == state) return; m_isNotifySound = state; m_setting->setAppValue(m_actName, NotificationSetting::EnableSound, state); Q_EMIT notifySoundChanged(state); } void AppItemModel::setLockShowNotify(const bool &state) { if (m_isLockShowNotify == state) return; m_isLockShowNotify = state; m_setting->setAppValue(m_actName, NotificationSetting::ShowOnLockScreen, state); Q_EMIT lockShowNotifyChanged(state); } void AppItemModel::setShowDesktop(const bool &state) { if (m_isShowDesktop == state) return; m_isShowDesktop = state; m_setting->setAppValue(m_actName, NotificationSetting::ShowOnDesktop, state); Q_EMIT showOnDesktop(state); } void AppItemModel::setShowInNotifyCenter(const bool &state) { if (m_isShowInNotifyCenter == state) return; m_isShowInNotifyCenter = state; m_setting->setAppValue(m_actName, NotificationSetting::ShowInCenter, state); Q_EMIT showInNotifyCenterChanged(state); } void AppItemModel::setShowNotifyPreview(const bool &state) { if (m_isShowNotifyPreview == state) return; m_isShowNotifyPreview = state; m_setting->setAppValue(m_actName, NotificationSetting::EnablePreview, state); Q_EMIT showNotifyPreviewChanged(state); } ================================================ FILE: src/plugin-notification/operation/model/appitemmodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include QT_BEGIN_NAMESPACE class QJsonObject; QT_END_NAMESPACE namespace DCC_NAMESPACE{ class NotificationSetting; class AppItemModel : public QObject { Q_OBJECT public: typedef enum { APPNAME, APPICON, ENABELNOTIFICATION, ENABELPREVIEW, ENABELSOUND, SHOWINNOTIFICATIONDESKTOP, SHOWINNOTIFICATIONCENTER, LOCKSCREENSHOWNOTIFICATION } AppConfigurationItem; explicit AppItemModel(NotificationSetting *setting, QObject *parent = nullptr); Q_PROPERTY(QString softName READ softName WRITE setSoftName NOTIFY softNameChanged FINAL) Q_PROPERTY(QString icon READ icon WRITE setIcon NOTIFY iconChanged FINAL) inline QString softName()const {return m_softName;} void setSoftName(const QString &name); inline QString icon()const {return m_icon;} void setIcon(const QString &icon); inline bool isAllowNotify()const {return m_isAllowNotify;} void setAllowNotify(const bool &state); inline bool isNotifySound()const {return m_isNotifySound;} void setNotifySound(const bool &state); inline bool isLockShowNotify()const {return m_isLockShowNotify;} void setLockShowNotify(const bool &state); inline bool isShowDesktop()const {return m_isShowDesktop;} void setShowDesktop(const bool &state); inline bool isShowInNotifyCenter()const {return m_isShowInNotifyCenter;} void setShowInNotifyCenter(const bool &state); inline bool isShowNotifyPreview()const {return m_isShowNotifyPreview;} void setShowNotifyPreview(const bool &state); inline QString getActName()const {return m_actName;} void setActName(const QString &name); // Initialize member values directly without triggering setAppValue/D-Bus writes. // Use this in constructors to avoid synchronous D-Bus calls during plugin loading. void initValues(const QString &actName, const QString &softName, const QString &icon, bool allowNotify, bool notifySound, bool lockShowNotify, bool showDesktop, bool showInNotifyCenter, bool showNotifyPreview); public Q_SLOTS: void onSettingChanged(const QString &id, const uint &item, QDBusVariant var); Q_SIGNALS: void softNameChanged(QString name); void iconChanged(QString icon); void allowNotifyChanged(bool state); void notifySoundChanged(bool state); void lockShowNotifyChanged(bool state); void showInNotifyCenterChanged(bool state); void showNotifyPreviewChanged(bool state); void showOnDesktop(bool state); private: NotificationSetting *m_setting; QString m_softName;//应用程序名 QString m_icon;//应用系统图表 QString m_actName;//传入后端应用名 bool m_isAllowNotify;//允许应用通知 bool m_isNotifySound;//是否有通知声音 bool m_isLockShowNotify;//锁屏显示通知 bool m_isShowDesktop;//show desktop notification bool m_isShowInNotifyCenter;//通知仅在通知中心显示 bool m_isShowNotifyPreview;//显示消息预览 }; } ================================================ FILE: src/plugin-notification/operation/model/sysitemmodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "sysitemmodel.h" #include "../notificationsetting.h" using namespace DCC_NAMESPACE; SysItemModel::SysItemModel(NotificationSetting *setting, QObject *parent) : QObject(parent) , m_setting(setting) { connect(m_setting, SIGNAL(systemValueChanged(const QString&)), this, SLOT(onSettingChanged(const QString&))); } void SysItemModel::setDisturbMode(const bool disturbMode) { m_setting->setSystemValue(NotificationSetting::DNDMode, disturbMode); Q_EMIT disturbModeChanged(disturbMode); } bool SysItemModel::timeSlot() const { return m_setting->systemValue(NotificationSetting::OpenByTimeInterval).toBool(); } void SysItemModel::setTimeSlot(const bool timeSlot) { m_setting->setSystemValue(NotificationSetting::OpenByTimeInterval, timeSlot); Q_EMIT timeSlotChanged(timeSlot); } bool SysItemModel::lockScreen() const { return m_setting->systemValue(NotificationSetting::LockScreenOpenDNDMode).toBool(); } void SysItemModel::setLockScreen(const bool lockScreen) { m_setting->setSystemValue(NotificationSetting::LockScreenOpenDNDMode, lockScreen); Q_EMIT lockScreenChanged(lockScreen); } QString SysItemModel::timeStart() const { return m_setting->systemValue(NotificationSetting::StartTime).toString(); } void SysItemModel::setTimeStart(const QString &timeStart) { m_setting->setSystemValue(NotificationSetting::StartTime, timeStart); Q_EMIT timeStartChanged(timeStart); } QString SysItemModel::timeEnd() const { return m_setting->systemValue(NotificationSetting::EndTime).toString(); } void SysItemModel::setTimeEnd(const QString &timeEnd) { m_setting->setSystemValue(NotificationSetting::EndTime, timeEnd); Q_EMIT timeEndChanged(timeEnd); } void SysItemModel::onSettingChanged(const QString &key) { if ("dndMode" == key) { Q_EMIT disturbModeChanged(m_setting->systemValue(NotificationSetting::DNDMode).toBool()); } else if ("lockScreenOpenDndMode" == key) { Q_EMIT lockScreenChanged(m_setting->systemValue(NotificationSetting::LockScreenOpenDNDMode).toBool()); } else if ("openByTimeInterval" == key) { Q_EMIT timeSlotChanged(m_setting->systemValue(NotificationSetting::OpenByTimeInterval).toBool()); } else if ("startTime" == key) { Q_EMIT timeStartChanged(m_setting->systemValue(NotificationSetting::StartTime).toString()); } else if ("endTime" == key) { Q_EMIT timeEndChanged(m_setting->systemValue(NotificationSetting::EndTime).toString()); } else if ("bubbleCount" == key) { Q_EMIT bubbleCountChanged(m_setting->systemValue(NotificationSetting::BubbleCount).toInt()); } } bool DCC_NAMESPACE::SysItemModel::disturbMode() const { return m_setting->systemValue(NotificationSetting::DNDMode).toBool(); } int SysItemModel::bubbleCount() const { return m_setting->systemValue(NotificationSetting::BubbleCount).toInt(); } void SysItemModel::setBubbleCount(int newBubbleCount) { m_setting->setSystemValue(NotificationSetting::BubbleCount, newBubbleCount); Q_EMIT bubbleCountChanged(newBubbleCount); } ================================================ FILE: src/plugin-notification/operation/model/sysitemmodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include QT_BEGIN_NAMESPACE class QJsonObject; QT_END_NAMESPACE namespace DCC_NAMESPACE { class NotificationSetting; class NotificationWorker; class SysItemModel : public QObject { Q_OBJECT public: typedef enum { DNDMODE, LOCKSCREENOPENDNDMODE, OPENBYTIMEINTERVAL, STARTTIME, ENDTIME, SHOWICON } SystemConfigurationItem; explicit SysItemModel(NotificationSetting *setting, QObject *parent = nullptr); Q_PROPERTY(bool disturbMode READ disturbMode WRITE setDisturbMode NOTIFY disturbModeChanged FINAL) Q_PROPERTY(bool lockScreen READ lockScreen WRITE setLockScreen NOTIFY lockScreenChanged FINAL) Q_PROPERTY(bool timeSlot READ timeSlot WRITE setTimeSlot NOTIFY timeSlotChanged FINAL) Q_PROPERTY(int bubbleCount READ bubbleCount WRITE setBubbleCount NOTIFY bubbleCountChanged FINAL) Q_PROPERTY(QString timeStart READ timeStart WRITE setTimeStart NOTIFY timeStartChanged FINAL) Q_PROPERTY(QString timeEnd READ timeEnd WRITE setTimeEnd NOTIFY timeEndChanged FINAL) bool disturbMode() const; void setDisturbMode(const bool disturbMode); bool timeSlot()const; void setTimeSlot(const bool timeSlot); bool lockScreen()const; void setLockScreen(const bool lockScreen); QString timeStart()const; void setTimeStart(const QString &timeStart); QString timeEnd()const; void setTimeEnd(const QString &timeEnd); int bubbleCount() const; void setBubbleCount(int newBubbleCount); public Q_SLOTS: void onSettingChanged(const QString &key); Q_SIGNALS: void disturbModeChanged(bool disturbMode); void timeSlotChanged(bool timeSlot); void lockScreenChanged(bool lockScreen); void timeStartChanged(const QString &timeStart); void timeEndChanged(const QString &timeEnd); void maxCountChanged(const int maxCount); void bubbleCountChanged(const int bubbleCount); private: NotificationSetting *m_setting; }; } ================================================ FILE: src/plugin-notification/operation/notificationmodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "notificationmodel.h" #include "model/sysitemmodel.h" #include "model/appitemmodel.h" #include "dccfactory.h" #include "appssourcemodel.h" #include "appslistmodel.h" #include "operation/notificationsetting.h" #include "appmgr.h" using namespace DCC_NAMESPACE; #define SYSTEMNOTIFY_NAME "SystemNotify" NotificationModel::NotificationModel(QObject *parent) : QObject(parent) , m_setting(new NotificationSetting(this)) , m_sysItemModel(new SysItemModel(m_setting, this)) , m_appsSourceModel(new AppsSourceModel(this)) , m_appsListModel(new AppsListModel(this)) { m_appsListModel->setSourceModel(m_appsSourceModel); m_appsListModel->sort(0); auto addAppItem = [=] (const QString &appId) { const QString actName = m_setting->appValue(appId, NotificationSetting::AppId).toString(); const QString softName = m_setting->appValue(appId, NotificationSetting::AppName).toString(); const QString icon = m_setting->appValue(appId, NotificationSetting::AppIcon).toString(); const bool allowNotify = m_setting->appValue(appId, NotificationSetting::EnableNotification).toBool(); const bool notifySound = m_setting->appValue(appId, NotificationSetting::EnableSound).toBool(); const bool lockShowNotify = m_setting->appValue(appId, NotificationSetting::ShowOnLockScreen).toBool(); const bool showDesktop = m_setting->appValue(appId, NotificationSetting::ShowOnDesktop).toBool(); const bool showInCenter = m_setting->appValue(appId, NotificationSetting::ShowInCenter).toBool(); const bool showPreview = m_setting->appValue(appId, NotificationSetting::EnablePreview).toBool(); AppItemModel *item = new AppItemModel(m_setting, this); item->initValues(actName, softName, icon, allowNotify, notifySound, lockShowNotify, showDesktop, showInCenter, showPreview); m_appsSourceModel->appAdded(item); }; for (const auto &app : m_setting->apps()) { addAppItem(app); } connect(m_setting, &NotificationSetting::appAdded, this, [=] (const QString &appId) { addAppItem(appId); }); connect(m_setting, &NotificationSetting::appRemoved, this, &NotificationModel::appRemoved); } NotificationModel::~NotificationModel() { } void NotificationModel::setSysSetting(SysItemModel *item) { m_sysItemModel = item; } void NotificationModel::clearModel() { m_sysItemModel->deleteLater(); m_sysItemModel = nullptr; qDeleteAll(m_appItemModels); m_appItemModels.clear(); } void NotificationModel::appAdded(AppItemModel *item) { m_appsSourceModel->appAdded(item); } void NotificationModel::appRemoved(const QString &appName) { m_appsSourceModel->appRemoved(appName); } DCC_FACTORY_CLASS(NotificationModel) #include "notificationmodel.moc" ================================================ FILE: src/plugin-notification/operation/notificationmodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include QT_BEGIN_NAMESPACE class QJsonArray; QT_END_NAMESPACE namespace DCC_NAMESPACE { class NotificationSetting; class SysItemModel; class AppItemModel; class NotificationWorker; class AppsSourceModel; class AppsListModel; class NotificationModel : public QObject { Q_OBJECT public: explicit NotificationModel(QObject *parent = nullptr); ~NotificationModel(); Q_PROPERTY(SysItemModel *sysItemModel READ sysItemModel CONSTANT) Q_PROPERTY(QList appItemModels READ appItemModels NOTIFY appItemModelsChanged FINAL) Q_INVOKABLE AppsListModel *appListModel() {return m_appsListModel;} void setSysSetting(SysItemModel* item); inline int getAppSize()const {return m_appItemModels.size();} inline SysItemModel *getSystemModel()const {return m_sysItemModel;} inline AppItemModel *getAppModel(const int &index) {return m_appItemModels[index];} void clearModel(); inline SysItemModel *sysItemModel() const {return m_sysItemModel;} QList appItemModels() const {return m_appItemModels;} public Q_SLOTS: void appAdded(AppItemModel* item); void appRemoved(const QString &appName); Q_SIGNALS: void appListAdded(AppItemModel* item); void appListRemoved(AppItemModel* item); void appItemModelsChanged(); private: NotificationSetting *m_setting; SysItemModel *m_sysItemModel; QList m_appItemModels; AppsSourceModel *m_appsSourceModel; AppsListModel *m_appsListModel; }; } ================================================ FILE: src/plugin-notification/operation/notificationsetting.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "notificationsetting.h" #include "notificationmodel.h" #include "appmgr.h" #include #include #include #include namespace DCC_NAMESPACE { static const QString InvalidApp {"DS-Invalid-Apps"}; namespace { enum Roles { DesktopIdRole = 0x1000, NameRole, IconNameRole, StartUpWMClassRole, NoDisplayRole, ActionsRole, DDECategoryRole, InstalledTimeRole, LastLaunchedTimeRole, LaunchedTimesRole, DockedRole, OnDesktopRole, AutoStartRole, GroupRole, }; } NotificationSetting::NotificationSetting(QObject *parent) : QObject(parent) , m_impl(Dtk::Core::DConfig::create("org.deepin.dde.shell", "org.deepin.dde.shell.notification", QString(), this)) { invalidAppItemCached(); connect(m_impl, &Dtk::Core::DConfig::valueChanged, this, [this] (const QString &key) { if (key == "appsInfo") { invalidAppItemCached(); } else { static const QStringList keys{"dndMode", "openByTimeInterval", "lockScreenOpenDndMode", "startTime", "endTime", "notificationClosed", "maxCount", "bubbleCount"}; if (keys.contains(key)) { m_systemInfo = {}; Q_EMIT systemValueChanged(key); } } }); connect(AppMgr::instance(), &AppMgr::appItemAdd, this, [=] () {onAppsChanged();}); connect(AppMgr::instance(), &AppMgr::appItemRemove, this, [=] () {onAppsChanged();}); } void NotificationSetting::setAppValue(const QString &id, AppConfigItem item, const QVariant &value) { auto info = appInfo(id); switch (item) { case EnableNotification: { info["enabled"] = value.toBool(); break; } case EnablePreview: { info["enablePreview"] = value.toBool(); break; } case EnableSound: { info["enableSound"] = value.toBool(); break; } case ShowInCenter: { info["showInCenter"] = value.toBool(); break; } case ShowOnLockScreen: { info["showOnLockScreen"] = value.toBool(); break; } case ShowOnDesktop: { info["showOnDesktop"] = value.toBool(); break; } default: break; } { QMutexLocker locker(&m_appsInfoMutex); m_appsInfo[id] = info; m_impl->setValue("appsInfo", m_appsInfo); } Q_EMIT appValueChanged(id, item, value); } QVariant NotificationSetting::appValue(const QString &id, AppConfigItem item) { if (item == AppId) { return id; } const auto app = appItem(id); switch (item) { case AppId: { return id; } case AppName: { return app.appName; } case AppIcon: { return app.appIcon; default: break; } } const auto info = appInfo(id); switch (item) { case EnableNotification: { return info.value("enabled", true); } case EnablePreview: { return info.value("enablePreview", true); } case EnableSound: { return info.value("enableSound", true); } case ShowInCenter: { return info.value("showInCenter", true); } case ShowOnLockScreen: { return info.value("showOnLockScreen", true); } case ShowOnDesktop: { return info.value("showOnDesktop", true); } default: break; } return QVariant(); } void NotificationSetting::setSystemValue(NotificationSetting::SystemConfigItem item, const QVariant &value) { switch (item) { case DNDMode: m_impl->setValue("dndMode", value); break; case OpenByTimeInterval: m_impl->setValue("openByTimeInterval", value); break; case LockScreenOpenDNDMode: m_impl->setValue("lockScreenOpenDndMode", value); break; case StartTime: m_impl->setValue("startTime", value); break; case EndTime: m_impl->setValue("endTime", value); break; case CloseNotification: m_impl->setValue("notificationClosed", value); break; case MaxCount: m_impl->setValue("maxCount", value); break; case BubbleCount: m_impl->setValue("bubbleCount", value); break; default: return; } m_systemInfo = {}; Q_EMIT systemValueChanged(item, value); } QVariant NotificationSetting::systemValue(NotificationSetting::SystemConfigItem item) { switch (item) { case DNDMode: return systemValue("dndMode", true); case LockScreenOpenDNDMode: return systemValue("lockScreenOpenDndMode", false); case OpenByTimeInterval: return systemValue("openByTimeInterval", true); case StartTime: return systemValue("startTime", "07:00"); case EndTime: return systemValue("endTime", "22:00"); case CloseNotification: return systemValue("notificationClosed", false); case MaxCount: return systemValue("maxCount", 2000); case BubbleCount: return systemValue("bubbleCount", 3); } return {}; } QStringList NotificationSetting::apps() const { QStringList ret; for (const auto &item : appItems()) { ret << item.id; } return ret; } NotificationSetting::AppItem NotificationSetting::appItem(const QString &id) const { const auto infos = appItems(); auto iter = std::find_if(infos.begin(), infos.end(), [id] (const AppItem &item) { return id == item.id; }); if (iter != infos.end()) { return *iter; } return {}; } QList NotificationSetting::appItems() const { QMutexLocker locker(&(const_cast(this)->m_appItemsMutex)); if (!m_appItems.isEmpty()) return m_appItems; QList apps = appItemsImpl(); const_cast(this)->m_appItems = apps; return m_appItems; } QList NotificationSetting::appItemsImpl() const { QList appSettings; QList apps = AppMgr::instance()->allAppInfosShouldBeShown(); for (int i = 0; i < apps.count(); i++) { const auto desktopId = apps[i]->appId; const auto icon = apps[i]->iconName; const auto name = apps[i]->displayName; NotificationSetting::AppItem item; item.id = desktopId; item.appIcon = icon; item.appName = name; appSettings << item; } return appSettings; } QVariantMap NotificationSetting::appInfo(const QString &id) const { QMutexLocker locker(&(const_cast(this)->m_appsInfoMutex)); if (m_appsInfo.contains(InvalidApp)) { const_cast(this)->m_appsInfo = m_impl->value("appsInfo").toMap(); } if (auto iter = m_appsInfo.find(id); iter != m_appsInfo.end()) { return iter.value().toMap(); } return {}; } void NotificationSetting::onAppsChanged() { const auto old = appItems(); const auto current = appItemsImpl(); { QMutexLocker locker(&m_appItemsMutex); m_appItems = current; } QList added; for (const auto &item : current) { const auto id = item.id; auto iter = std::find_if(old.begin(), old.end(), [id] (const NotificationSetting::AppItem &app) { return id == app.id; }); if (iter == old.end()) { added << item; } } for (const auto &item : added) { Q_EMIT appAdded(item.id); } QList removed; for (const auto &item : old) { const auto id = item.id; auto iter = std::find_if(current.begin(), current.end(), [id] (const NotificationSetting::AppItem &app) { return id == app.id; }); if (iter == current.end()) { removed << item; } } for (const auto &item : removed) { Q_EMIT appRemoved(item.id); } } void NotificationSetting::invalidAppItemCached() { QMutexLocker locker(&m_appsInfoMutex); m_appsInfo.clear(); m_appsInfo[InvalidApp] = QVariant(); } QVariant NotificationSetting::systemValue(const QString &key, const QVariant &fallback) { if (!m_systemInfo.contains(key)) m_systemInfo[key] = m_impl->value(key, fallback); return m_systemInfo[key]; } } // notification ================================================ FILE: src/plugin-notification/operation/notificationsetting.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include namespace Dtk { namespace Core { class DConfig; } } class QAbstractItemModel; namespace DCC_NAMESPACE { class NotificationSetting : public QObject { Q_OBJECT public: // clang-format off enum AppConfigItem { AppId, AppName, AppIcon, EnableNotification, EnablePreview, EnableSound, ShowInCenter, ShowOnLockScreen, ShowOnDesktop }; enum SystemConfigItem { DNDMode, LockScreenOpenDNDMode, OpenByTimeInterval, StartTime, EndTime, CloseNotification, MaxCount, BubbleCount }; struct AppItem { QString id; QString appName; QString appIcon; }; // clang-format on public: explicit NotificationSetting(QObject *parent = nullptr); void setAppValue(const QString &id, AppConfigItem item, const QVariant &value); QVariant appValue(const QString &id, AppConfigItem item); void setSystemValue(SystemConfigItem item, const QVariant &value); QVariant systemValue(SystemConfigItem item); QStringList apps() const; AppItem appItem(const QString &id) const; QList appItems() const; QList appItemsImpl() const; QVariantMap appInfo(const QString &id) const; signals: void appAdded(const QString &appId); void appRemoved(const QString &id); void appValueChanged(const QString &appId, uint configItem, const QVariant &value); void systemValueChanged(uint configItem, const QVariant &value); void systemValueChanged(const QString &key); public slots: void onAppsChanged(); private: void updateAppItemValue(const QVariantMap &info, AppItem &app) const; void invalidAppItemCached(); QVariant systemValue(const QString &key, const QVariant &fallback); private: Dtk::Core::DConfig *m_impl = nullptr; QList m_appItems; QMutex m_appItemsMutex; QVariantMap m_appsInfo; QMutex m_appsInfoMutex; QVariantMap m_systemInfo; }; } // notification ================================================ FILE: src/plugin-notification/operation/qrc/notification.qrc ================================================ icons/dcc_nav_notification_42px.svg icons/dcc_nav_notification_84px.svg dark/icons/notify_center_84px.png dark/icons/notify_desktop_84px.png dark/icons/notify_lock_84px.png light/icons/notify_center_84px.png light/icons/notify_desktop_84px.png light/icons/notify_lock_84px.png ================================================ FILE: src/plugin-notification/operation/xml/org.desktopspec.ApplicationManager1.Application.xml ================================================ ================================================ FILE: src/plugin-notification/operation/xml/org.desktopspec.ObjectManager1.xml ================================================ ================================================ FILE: src/plugin-notification/qml/ImageCheckBox.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.11 import QtQuick.Layouts 1.15 import QtQuick.Templates as T import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 T.Control { id: control property string text: "ImageCheckBox" property bool checked: true property string imageName: "" implicitWidth: contentItem.implicitWidth implicitHeight: contentItem.implicitHeight Keys.onPressed: function(event) { if (event.key === Qt.Key_Space || event.key === Qt.Key_Return) { checked = !checked } } MouseArea { anchors.fill: parent onClicked: { checked = !checked } } ColumnLayout { id: contentItem anchors.fill: parent Item { Layout.alignment: Qt.AlignCenter implicitWidth: 96 implicitHeight: 65 focus: true activeFocusOnTab: true Rectangle { anchors.fill: parent visible: parent.activeFocus color: "transparent" border.width: 2 border.color: control.palette.highlight radius: DS.Style.control.radius z: 1 } Image { anchors.centerIn: parent sourceSize: Qt.size(96, 65) mipmap: true source: D.DTK.themeType === D.ApplicationHelper.LightType ? "qrc:/icons/deepin/builtin/light/icons/" + imageName +"_84px.png" : "qrc:/icons/deepin/builtin/dark/icons/" + imageName +"_84px.png" } } RowLayout { Layout.alignment: Qt.AlignCenter Item { Layout.alignment: Qt.AlignCenter implicitWidth: 24 implicitHeight: 24 focus: true activeFocusOnTab: true Rectangle { anchors.fill: parent visible: parent.activeFocus color: "transparent" border.width: 2 border.color: control.palette.highlight radius: DS.Style.control.radius z: 1 } DccCheckIcon { anchors.centerIn: parent checked: control.checked activeFocusOnTab: false onClicked: { control.checked = !control.checked } } } Text { Layout.alignment: Qt.AlignCenter text: control.text font: control.font elide: Text.ElideRight verticalAlignment: Text.AlignVCenter color: control.palette.windowText } } } } ================================================ FILE: src/plugin-notification/qml/Notification.qml ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { name: "notification" parentName: "system" displayName: qsTr("Notification") description: qsTr("DND mode, app notifications") icon: "dcc_notification" weight: 30 } ================================================ FILE: src/plugin-notification/qml/NotificationMain.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 DccObject { id: root property var appList: dccData.appItemModels DccTitleObject { name: "doNotDisturbNotification" parentName: "notification" displayName: qsTr("Do Not Disturb Settings") weight: 10 } DccObject { name: "enableDoNotDisturb" parentName: "notification" weight: 20 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "enableDoNotDisturbSwitch" parentName: "enableDoNotDisturb" description: qsTr("App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center.") displayName: qsTr("Enable Do Not Disturb") weight: 10 pageType: DccObject.Editor page: D.Switch { anchors { left: parent.left leftMargin: 10 } checked: dccData.sysItemModel.disturbMode onCheckedChanged: { if (dccData.sysItemModel.disturbMode !== checked) { dccData.sysItemModel.disturbMode = checked } } } } DccObject { name: "enableDoNotDisturbTime" parentName: "enableDoNotDisturb" displayName: qsTr("Enable Do Not Disturb") icon: "notification" weight: 20 pageType: DccObject.Item visible: dccData.sysItemModel.disturbMode page: TimeRange { anchors { left: parent.left leftMargin: 10 } } } DccObject { name: "enableDoNotDisturbLock" parentName: "enableDoNotDisturb" displayName: qsTr("Enable Do Not Disturb") icon: "notification" weight: 30 pageType: DccObject.Item visible: dccData.sysItemModel.disturbMode page: RowLayout { anchors { left: parent.left leftMargin: 10 } D.CheckBox { id: lockScreenCheckBox implicitHeight: implicitContentHeight + 30 checked: dccData.sysItemModel.lockScreen onCheckedChanged: { if (dccData.sysItemModel.lockScreen !== checked) { dccData.sysItemModel.lockScreen = checked } } } D.Label { text: qsTr("When the screen is locked") MouseArea { anchors.fill: parent acceptedButtons: Qt.LeftButton onClicked: { lockScreenCheckBox.checked = !lockScreenCheckBox.checked } } } Item { Layout.fillWidth: true } } } } DccObject { name: "enableDoNotDisturb" parentName: "notification" displayName: qsTr("Number of notifications shown on the desktop") weight: 30 backgroundType: DccObject.Normal pageType: DccObject.Editor page: D.ComboBox { model: ["1", "2", "3"] flat: true currentIndex: dccData.sysItemModel.bubbleCount - 1 onCurrentIndexChanged: { if (dccData.sysItemModel.bubbleCount - 1 !== currentIndex) { dccData.sysItemModel.bubbleCount = currentIndex + 1 } } } } DccObject { id: appNotifyTitle name: "appNotify" parentName: "notification" displayName: qsTr("App Notifications") weight: 40 pageType: DccObject.Item property bool searchVisible: false page: RowLayout { Timer { id: searchTimer interval: 100 onTriggered: { if (searchEdit.text.length > 0) { dccData.appListModel().setFilterFixedString(searchEdit.text); } else { dccData.appListModel().setFilterWildcard(""); } } } spacing: 6 D.Label { property D.Palette textColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.9) normalDark: Qt.rgba(1, 1, 1, 0.9) } Layout.alignment: Qt.AlignLeft | Qt.AlignVCenter Layout.leftMargin: 12 text: dccObj.displayName font: DccUtils.copyFont(D.DTK.fontManager.t5, { "weight": 500 }) color: D.ColorSelector.textColor } Item { Layout.fillWidth: true } D.SearchEdit { id: searchEdit visible: appNotifyTitle.searchVisible Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.rightMargin: 0 implicitWidth: 200 implicitHeight: 32 onTextChanged: { searchTimer.start() } onActiveFocusChanged: { if (!activeFocus && text.length === 0) { appNotifyTitle.searchVisible = false } } Component.onCompleted: { dccData.appListModel().setFilterWildcard(""); } } D.IconButton { id: searchButton visible: !appNotifyTitle.searchVisible Layout.alignment: Qt.AlignRight | Qt.AlignVCenter Layout.rightMargin: 0 icon.name: "dcc-search" icon.width: 16 icon.height: 16 implicitWidth: 32 implicitHeight: 32 background: Rectangle { property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } onClicked: { appNotifyTitle.searchVisible = true searchEdit.forceActiveFocus() } } } onParentItemChanged: item => { if (item) { item.bottomPadding = 2 item.topPadding = 6 item.rightPadding = 0 } } } DccObject { id: applicationList name: "list" parentName: "notification" weight: 50 pageType: DccObject.Item page: DccGroupView {} DccRepeater { model: dccData.appListModel() delegate: DccObject { name: model.AppId parentName: "notification/list" pageType: DccObject.MenuEditor weight: 10 + index icon: model.AppIcon displayName: model.AppName backgroundType: DccObject.Normal page: D.Switch { checked: model.EnableNotification onCheckedChanged: { if (model.EnableNotification !== checked) { model.EnableNotification = checked } } } DccObject { name: "notificationItemDetails" parentName: "notification/list/" + model.AppId DccObject { backgroundType: DccObject.Normal name: "allowNotifications" parentName: "notification/list/" + model.AppId + "/notificationItemDetails" displayName: qsTr("Allow Notifications") description: qsTr("Display notification on desktop or show unread messages in the notification center") icon: model.AppIcon weight: 10 pageType: DccObject.Editor page: D.Switch { Layout.rightMargin: 10 Layout.alignment: Qt.AlignRight | Qt.AlignVCenter checked: model.EnableNotification onCheckedChanged: { if (model.EnableNotification !== checked) { model.EnableNotification = checked } } } } DccObject { name: "notificationItemDetailsType" parentName: "notification/list/" + model.AppId + "/notificationItemDetails" backgroundType: DccObject.Normal visible: model.EnableNotification weight: 20 pageType: DccObject.Item page: Rectangle { color: "transparent" implicitHeight: rowView.height + 20 RowLayout { id: rowView width: parent.width anchors.centerIn: parent ImageCheckBox { Layout.alignment: Qt.AlignCenter text: qsTr("Desktop") imageName: "notify_desktop" checked: model.ShowNotificationDesktop onCheckedChanged: { if (checked !== model.ShowNotificationDesktop) { model.ShowNotificationDesktop = checked } } } ImageCheckBox { Layout.alignment: Qt.AlignCenter text: qsTr("Lock Screen") imageName: "notify_lock" visible: false checked: model.LockScreenShowNotification onCheckedChanged: { if (checked !== model.LockScreenShowNotification) { model.LockScreenShowNotification = checked } } } ImageCheckBox { Layout.alignment: Qt.AlignCenter text: qsTr("Notification Center") imageName: "notify_center" checked: model.ShowNotificationCenter onCheckedChanged: { if (checked !== model.ShowNotificationCenter) { model.ShowNotificationCenter = checked } } } } } } DccObject { name: "notificationSettingsGroup" parentName: "notification/list/" + model.AppId + "/notificationItemDetails" pageType: DccObject.Item backgroundType: DccObject.Normal visible: model.EnableNotification weight: 30 page: DccGroupView {} DccObject { name: "notificationPreview" parentName: "notification/list/" + model.AppId + "/notificationItemDetails/notificationSettingsGroup" displayName: qsTr("Show message preview") pageType: DccObject.Item weight: 10 page: RowLayout { D.CheckBox { implicitHeight: 40 Layout.leftMargin: 14 text: dccObj.displayName checked: model.EnablePreview onCheckedChanged: { if (model.EnablePreview !== checked) { model.EnablePreview = checked } } } } } DccObject { name: "notificationSound" parentName: "notification/list/" + model.AppId + "/notificationItemDetails/notificationSettingsGroup" displayName: qsTr("Play a sound") pageType: DccObject.Item weight: 20 page: RowLayout { D.CheckBox { implicitHeight: 40 Layout.leftMargin: 14 text: dccObj.displayName checked: model.EnableSound onCheckedChanged: { if (model.EnableSound !== checked) { model.EnableSound = checked } } } } } } } } } } } ================================================ FILE: src/plugin-notification/qml/TimeRange.qml ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 RowLayout { property var sysItemModel: dccData.sysItemModel spacing: 5 D.CheckBox { id: timeSlotCheckBox implicitHeight: implicitContentHeight + 30 checked: dccData.sysItemModel.timeSlot onCheckedChanged: { if (dccData.sysItemModel.timeSlot !== checked) { dccData.sysItemModel.timeSlot = checked } } } D.Label { text: qsTr("from") MouseArea { anchors.fill: parent acceptedButtons: Qt.LeftButton onClicked: { timeSlotCheckBox.checked = !timeSlotCheckBox.checked } } } DccTimeRange { id: hourTime hour: sysItemModel.timeStart.split(":")[0] minute: sysItemModel.timeStart.split(":")[1] onTimeChanged: sysItemModel.timeStart = timeString } D.Label { text: qsTr("to") } DccTimeRange { hour: sysItemModel.timeEnd.split(":")[0] minute: sysItemModel.timeEnd.split(":")[1] onTimeChanged: sysItemModel.timeEnd = timeString } Item { Layout.fillWidth: true } } ================================================ FILE: src/plugin-notification/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-notification/types/am.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once // from am global.h #include #include #include using ObjectInterfaceMap = QMap; using ObjectMap = QMap; using QStringMap = QMap; using PropMap = QMap; Q_DECLARE_METATYPE(ObjectInterfaceMap) Q_DECLARE_METATYPE(ObjectMap) Q_DECLARE_METATYPE(QStringMap) Q_DECLARE_METATYPE(PropMap) ================================================ FILE: src/plugin-personalization/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(LIB_NAME personalization) find_package(Qt6 REQUIRED COMPONENTS WaylandClient) if(Qt6_VERSION VERSION_GREATER_EQUAL 6.10) find_package(Qt6 COMPONENTS WaylandClientPrivate REQUIRED) endif() if (Enable_TreelandSupport) find_package(TreelandProtocols REQUIRED) endif() file(GLOB_RECURSE Personalization_SRCS "operation/*.cpp" "operation/*.hpp" "operation/*.h" "operation/qrc/personalization.qrc" ) set(personalization_Includes src/plugin-personalization/operation ) add_library(${LIB_NAME} MODULE ${Personalization_SRCS} ) if (Enable_TreelandSupport) qt6_generate_wayland_protocol_client_sources(${LIB_NAME} FILES ${TREELAND_PROTOCOLS_DATA_DIR}/treeland-personalization-manager-v1.xml ) target_compile_definitions(${LIB_NAME} PRIVATE Enable_Treeland) endif() set(Personalization_Libraries ${DCC_FRAME_Library} ${DTK_NS}::Gui ${QT_NS}::DBus ${QT_NS}::Qml ${QT_NS}::WaylandClientPrivate ) target_include_directories(${LIB_NAME} PUBLIC ${personalization_Includes} ) target_link_libraries(${LIB_NAME} PRIVATE ${Personalization_Libraries} ) dcc_install_plugin(NAME ${LIB_NAME} TARGET ${LIB_NAME}) ================================================ FILE: src/plugin-personalization/operation/imagehelper.cpp ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include #include #include "imagehelper.h" ImageHelper::ImageHelper(QObject *parent) : QObject{ parent } { } bool ImageHelper::isDarkType(const QImage &img) { int r = 0, g = 0, b = 0; for (int i = 0; i < img.width(); i++) for (int j = 0; j < img.height(); j++) { r += qRed(img.pixel(i, j)); g += qGreen(img.pixel(i, j)); b += qBlue(img.pixel(i, j)); } auto size = img.width() * img.height(); float luminance = 0.299 * r / size + 0.587 * g / size + 0.114 * b / size; return qRound(luminance) <= 170; } ================================================ FILE: src/plugin-personalization/operation/imagehelper.h ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include class ImageHelper : public QObject { Q_OBJECT public: explicit ImageHelper(QObject *parent = nullptr); Q_INVOKABLE bool isDarkType(const QImage &img); }; ================================================ FILE: src/plugin-personalization/operation/keyfile.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "keyfile.h" #include KeyFile::KeyFile(char separtor) : modified(false) , listSeparator(separtor) { } KeyFile::~KeyFile() { if (fp.isOpen()) { fp.close(); } } bool KeyFile::getBool(const QString §ion, const QString &key, bool defaultValue) { if (mainKeyMap.find(section) == mainKeyMap.end()) return false; QString valueStr = mainKeyMap[section][key]; bool value = defaultValue; if (valueStr == "true") value = true; else if (valueStr == "false") value = false; return value; } QString KeyFile::getStr(const QString §ion, const QString &key, QString defaultValue) { if (mainKeyMap.find(section) == mainKeyMap.end()) return defaultValue; QString valueStr = mainKeyMap[section][key]; if (valueStr.isEmpty()) valueStr = defaultValue; return valueStr; } bool KeyFile::containKey(const QString §ion, const QString &key) { if (mainKeyMap.find(section) == mainKeyMap.end()) return false; return mainKeyMap[section].find(key) != mainKeyMap[section].end(); } QStringList KeyFile::getStrList(const QString §ion, const QString &key) { QString value = getStr(section, key); return value.split(listSeparator); } // 修改keyfile内容 void KeyFile::setKey(const QString §ion, const QString &key, const QString &value) { if (mainKeyMap.find(section) == mainKeyMap.end()) { mainKeyMap.insert(section, KeyMap()); } mainKeyMap[section].insert(key, value); } // 写入文件 bool KeyFile::saveToFile(const QString &filePath) { QFile file(filePath); if(!file.open(QIODevice::WriteOnly | QIODevice::Text)) { return false; } for (const auto &im : mainKeyMap.toStdMap()) { const auto &keyMap = im.second; QString section = "[" + im.first + "]\n"; file.write(section.toLatin1()); for (const auto &ik : keyMap.toStdMap()) { QString kv = ik.first + "=" + ik.second + "\n"; file.write(kv.toLatin1()); } } file.close(); return true; } bool KeyFile::loadFile(const QString &filePath) { mainKeyMap.clear(); if (fp.isOpen()) { fp.close(); } QString lastSection; fp.setFileName(filePath); if(!fp.open(QIODevice::ReadOnly)) { return false; } QString line; while (!fp.atEnd()) { line=fp.readLine(); // 移除行首空行 line.replace(QRegularExpression("^ +"),""); if(line.front()=='#') { continue; } line.replace(QRegularExpression("\\t$"),""); line.replace(QRegularExpression("\\r$"),""); line.replace(QRegularExpression("\\n$"),""); int lPos = line.indexOf('['); int rPos = line.indexOf(']'); if (lPos !=-1 && rPos !=-1 && rPos > lPos && lPos == 0 && rPos+1 == line.size()) { // 主键 QString section = line.mid(lPos+1,line.size()-2); mainKeyMap.insert(section, KeyMap()); lastSection = section; } else { int index = line.indexOf('='); if (index ==-1) { continue; } // 文件格式错误 if (lastSection.isEmpty()){ return false; } // 子键 QString key = line.mid(0, index); QString value = line.mid(index + 1, line.length()-index-1); if(mainKeyMap.count(lastSection) == 1) { mainKeyMap[lastSection][key]=value; } } } fp.close(); return true; } QStringList KeyFile::getMainKeys() { QStringList mainKeys; for (const auto &iter : mainKeyMap.toStdMap()) mainKeys.push_back(iter.first); return mainKeys; } void KeyFile::removeSection(const QString §ion) { mainKeyMap.remove(section); } void KeyFile::removeKey(const QString §ion, const QString &key) { if (mainKeyMap.contains(section)) { mainKeyMap[section].remove(key); } } ================================================ FILE: src/plugin-personalization/operation/keyfile.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef KEYFILE_H #define KEYFILE_H #include #include #include typedef QMap KeyMap; typedef QMap MainKeyMap; // 解析ini、desktop文件类 class KeyFile { public: explicit KeyFile(char separtor = ';'); ~KeyFile(); bool getBool(const QString §ion, const QString &key, bool defaultValue = false); QString getStr(const QString §ion, const QString &key, QString defaultValue = ""); bool containKey(const QString §ion, const QString &key); QStringList getStrList(const QString §ion, const QString &key); void setKey(const QString §ion, const QString &key, const QString &value); bool saveToFile(const QString &filePath); bool loadFile(const QString &filePath); QStringList getMainKeys(); void removeSection(const QString §ion); void removeKey(const QString §ion, const QString &key); private: MainKeyMap mainKeyMap; // section -> key : value QString filePath; QFile fp; bool modified; char listSeparator; }; #endif // KEYFILE_H ================================================ FILE: src/plugin-personalization/operation/model/fontmodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "fontmodel.h" FontModel::FontModel(QObject *parent) : QObject(parent) { } void FontModel::setFontList(const QList &list) { if (m_list != list) { m_list = list; Q_EMIT listChanged(list); } } void FontModel::setFontName(const QString &name) { if (m_fontName != name) { m_fontName = name; Q_EMIT defaultFontChanged(name); } } ================================================ FILE: src/plugin-personalization/operation/model/fontmodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef FONTMODEL_H #define FONTMODEL_H #include #include #include class FontModel : public QObject { Q_OBJECT Q_PROPERTY(QString fontName READ getFontName WRITE setFontName NOTIFY defaultFontChanged) Q_PROPERTY(QList fontList READ getFontList WRITE setFontList NOTIFY listChanged) public: explicit FontModel(QObject *parent = 0); void setFontList(const QList &list); void setFontName(const QString &name); inline const QList getFontList() const { return m_list; } inline const QString getFontName() const {return m_fontName;} Q_SIGNALS: void listChanged(const QList &list); void defaultFontChanged(const QString &name); private: QList m_list; QString m_fontName; }; Q_DECLARE_METATYPE(FontModel*) #endif // FONTMODEL_H ================================================ FILE: src/plugin-personalization/operation/model/fontsizemodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "fontsizemodel.h" FontSizeModel::FontSizeModel(QObject *parent) : QObject(parent) , m_size(0) { } void FontSizeModel::setFontSize(const int size) { if (m_size!=size) { m_size = size; Q_EMIT sizeChanged(size); } } ================================================ FILE: src/plugin-personalization/operation/model/fontsizemodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef FONTSIZEMODEL_H #define FONTSIZEMODEL_H #include class FontSizeModel : public QObject { Q_OBJECT Q_PROPERTY(int size READ getFontSize WRITE setFontSize NOTIFY sizeChanged) public: explicit FontSizeModel(QObject *parent = 0); public Q_SLOTS: void setFontSize(const int size); Q_INVOKABLE inline int getFontSize() const { return m_size;} Q_SIGNALS: void sizeChanged(int size); private: int m_size; }; #endif // FONTSIZEMODEL_H ================================================ FILE: src/plugin-personalization/operation/model/thememodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "thememodel.h" ThemeModel::ThemeModel(QObject *parent) : QObject(parent) { } QStringList ThemeModel::keys() { return m_keys; } void ThemeModel::addItem(const QString &id, const QJsonObject &json) { if (m_list.contains(id)) { m_keys.removeOne(id); m_keys.append(id); return; } m_keys.append(id); m_list.insert(id, json); Q_EMIT itemAdded(json); } void ThemeModel::setDefault(const QString &value) { m_default = value; Q_EMIT defaultChanged(value); for (const auto &themeItem : m_list) { if (themeItem.value("Id") == value) { const QString &themeName = themeItem.value("Name").toString(); m_currentThemeName = themeName; Q_EMIT currentThemeNameChanged(themeName); break; } } } QMap ThemeModel::getPicList() const { return m_picList; } void ThemeModel::addPic(const QString &id, const QString &picPath) { m_picList.insert(id, picPath); Q_EMIT picAdded(id, picPath); } void ThemeModel::removeItem(const QString &id) { m_list.remove(id); m_keys.removeOne(id); Q_EMIT itemRemoved(id); } ================================================ FILE: src/plugin-personalization/operation/model/thememodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef THEMEMODEL_H #define THEMEMODEL_H #include #include #include #include class ThemeModel : public QObject { Q_OBJECT Q_PROPERTY(QString currentTheme READ getDefault WRITE setDefault NOTIFY defaultChanged) Q_PROPERTY(QString currentThemeName MEMBER m_currentThemeName NOTIFY currentThemeNameChanged) public: explicit ThemeModel(QObject *parent = 0); QStringList keys(); void addItem(const QString &id, const QJsonObject &json); QMap getList() { return m_list; } void setDefault(const QString &value); inline QString getDefault() { return m_default; } QMap getPicList() const; void addPic(const QString &id, const QString &picPath); void removeItem(const QString &id); Q_SIGNALS: void itemAdded(const QJsonObject &json); void defaultChanged(const QString &value); void currentThemeNameChanged(const QString &value); void picAdded(const QString &id, const QString &picPath); void itemRemoved(const QString &id); private: QMap m_list; QString m_default; QMap m_picList; QStringList m_keys; QString m_currentThemeName; }; #endif // THEMEMODEL_H ================================================ FILE: src/plugin-personalization/operation/model/wallpapermodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later #include "wallpapermodel.h" #include #include WallpaperModel::WallpaperModel(QObject *parent) : QAbstractItemModel(parent) { } QModelIndex WallpaperModel::index(int row, int column, const QModelIndex &parent) const { if (row < 0 || row >= rowCount() || parent.isValid() || column != 0) return QModelIndex(); return createIndex(row, 0); } QModelIndex WallpaperModel::parent(const QModelIndex &child) const { Q_UNUSED(child) return QModelIndex(); } int WallpaperModel::rowCount(const QModelIndex &parent) const { if (parent.isValid()) return 0; return items.size(); } int WallpaperModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent) return 1; } QVariant WallpaperModel::data(const QModelIndex &index, int role) const { auto node = itemNode(index); QVariant ret; if (!node) return ret; switch (role) { case Item_Url_Role: ret = node->url; break; case Item_PicPath_Role: ret = node->picPath; break; case Item_Thumbnail_Role: ret = node->thumbnail; break; case Item_deleteAble_Role: ret = node->deleteAble; break; case Item_lastModifiedTime_Role: ret = node->lastModifiedTime; break; case Item_configurable_Role: ret = node->configurable; break; case Item_Selected_Role: ret = node->selected; break; default: break; } return ret; } bool WallpaperModel::setData(const QModelIndex &index, const QVariant &value, int role) { if (index.row() >= items.size() || index.row() < 0) { return false; } if (role == Item_Selected_Role) { if (items[index.row()]->selected != value.toBool()) { items[index.row()]->selected = value.toBool(); Q_EMIT dataChanged(index, index, {role}); } } return QAbstractItemModel::setData(index, value, role); } Qt::ItemFlags WallpaperModel::flags(const QModelIndex &index) const { Qt::ItemFlags flg = Qt::NoItemFlags; if (auto node = itemNode(index)) { flg |= Qt::ItemIsEnabled; } return flg; } void WallpaperModel::insertItem(int pos, WallpaperItemPtr it) { if (pos < 0 || pos > rowCount() || it.isNull()) pos = rowCount(); beginInsertRows(QModelIndex(), pos, pos); items.insert(pos, it); endInsertRows(); } void WallpaperModel::appendItem(WallpaperItemPtr it) { if (it.isNull()) return; insertItem(rowCount(), it); } void WallpaperModel::removeItem(const QString &item) { auto idx = itemIndex(item); if (!idx.isValid()) return; beginRemoveRows(QModelIndex(), idx.row(), idx.row()); items.removeAt(idx.row()); endRemoveRows(); } void WallpaperModel::removeItem(WallpaperItemPtr item) { beginRemoveRows(QModelIndex(), itemIndex(item).row(), itemIndex(item).row()); items.removeOne(item); endRemoveRows(); } WallpaperItemPtr WallpaperModel::itemNode(const QModelIndex &idx) const { auto row = idx.row(); if (row < 0 || row > rowCount()) return {}; return items.at(row); } QModelIndex WallpaperModel::itemIndex(const QString &item) const { auto it = std::find_if(items.begin(), items.end(), [item](const WallpaperItemPtr &ptr) { return ptr->url == item; }); if (it == items.end()) return QModelIndex(); auto row = items.indexOf(*it); return index(row, 0); } QModelIndex WallpaperModel::itemIndex(WallpaperItemPtr item) const { return index(items.indexOf(item), 0); } void WallpaperModel::resetData(const QList &list) { beginResetModel(); items = list; endResetModel(); } void WallpaperModel::updateSelected(const QStringList &selectedLists) { for(int i = 0; i < rowCount(); i++) { auto cutIndex = index(i, 0); setData(cutIndex, selectedLists.contains(data(cutIndex, Item_Url_Role).toString()), Item_Selected_Role); } } QString WallpaperSortModel::getPicPathByUrl(const QString &url) const { for(int i = 0; i < sourceModel()->rowCount(); i++) { auto cutIndex = sourceModel()->index(i, 0); if (url == sourceModel()->data(cutIndex, Item_Url_Role).toString()) { const QString picPath = sourceModel()->data(cutIndex, Item_PicPath_Role).toString(); if (QFile::exists(picPath)) { return QUrl::fromLocalFile(picPath).toString(); } return picPath; } } return {}; } bool WallpaperSortModel::getConfigAbleByUrl(const QString &url) const { for(int i = 0; i < sourceModel()->rowCount(); i++) { auto cutIndex = sourceModel()->index(i, 0); if (url == sourceModel()->data(cutIndex, Item_Url_Role).toString()) { return sourceModel()->data(cutIndex, Item_configurable_Role).toBool(); } } return false; } QHash WallpaperModel::roleNames() const { QHash roles = QAbstractItemModel::roleNames();; roles[Item_Url_Role] = "url"; roles[Item_Thumbnail_Role] = "picPath"; roles[Item_Thumbnail_Role] = "thumbnail"; roles[Item_deleteAble_Role] = "deleteAble"; roles[Item_lastModifiedTime_Role] = "lastModifiedTime"; roles[Item_configurable_Role] = "configurable"; roles[Item_Selected_Role] = "selected"; return roles; } ================================================ FILE: src/plugin-personalization/operation/model/wallpapermodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later #ifndef WALLPAPERMODEL_H #define WALLPAPERMODEL_H #include #include #include struct WallpaperItem { QString url; QString picPath; QString thumbnail; bool deleteAble; qint64 lastModifiedTime; bool configurable; bool selected; }; enum ItemTypeRole { Item_Url_Role = Qt::UserRole + 1, Item_PicPath_Role, Item_Thumbnail_Role, Item_deleteAble_Role, Item_lastModifiedTime_Role, Item_configurable_Role, Item_Selected_Role, }; typedef QSharedPointer WallpaperItemPtr; class WallpaperSortModel : public QSortFilterProxyModel { Q_OBJECT Q_PROPERTY(int count READ rowCount NOTIFY countChanged) public: explicit WallpaperSortModel(QObject *parent = nullptr) : QSortFilterProxyModel(parent) { sort(0); } void setSourceModel(QAbstractItemModel *sourceModel) override { if (this->sourceModel()) { // 断开旧源模型的信号 disconnect(this->sourceModel(), &QAbstractItemModel::rowsInserted, this, &WallpaperSortModel::countChanged); disconnect(this->sourceModel(), &QAbstractItemModel::rowsRemoved, this, &WallpaperSortModel::countChanged); disconnect(this->sourceModel(), &QAbstractItemModel::modelReset, this, &WallpaperSortModel::countChanged); } QSortFilterProxyModel::setSourceModel(sourceModel); if (sourceModel) { // 连接新源模型的信号 connect(sourceModel, &QAbstractItemModel::rowsInserted, this, &WallpaperSortModel::countChanged); connect(sourceModel, &QAbstractItemModel::rowsRemoved, this, &WallpaperSortModel::countChanged); connect(sourceModel, &QAbstractItemModel::modelReset, this, &WallpaperSortModel::countChanged); } } Q_INVOKABLE bool hasWallpaper(const QString &url) const { for (int i = 0; i < sourceModel()->rowCount(); i++) { if (url == sourceModel()->data(sourceModel()->index(i, 0), Item_Url_Role).toString()) { return true; } } return false; } Q_INVOKABLE QString getPicPathByUrl(const QString &url) const; Q_INVOKABLE bool getConfigAbleByUrl(const QString &url) const; int rowCount(const QModelIndex &parent = QModelIndex()) const override { return sourceModel() ? sourceModel()->rowCount(parent) : 0; } signals: void countChanged(); protected: bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override { return sourceModel()->data(source_left, Item_lastModifiedTime_Role).value() > sourceModel()->data(source_right, Item_lastModifiedTime_Role).value(); } }; class WallpaperModel : public QAbstractItemModel { Q_OBJECT public: explicit WallpaperModel(QObject *parent = nullptr); QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &child) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; Qt::ItemFlags flags(const QModelIndex &index) const override; void insertItem(int pos, WallpaperItemPtr it); void appendItem(WallpaperItemPtr it); void removeItem(const QString &item); void removeItem(WallpaperItemPtr item); WallpaperItemPtr itemNode(const QModelIndex &idx) const; QModelIndex itemIndex(const QString &item) const; QModelIndex itemIndex(WallpaperItemPtr item) const; void resetData(const QList &list); void updateSelected(const QStringList &selectedLists); protected: QHash roleNames() const override; private: QList items; }; #endif // WALLPAPERMODEL_H ================================================ FILE: src/plugin-personalization/operation/personalizationdbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "personalizationdbusproxy.h" #include #include #include #include DCORE_USE_NAMESPACE const QString AppearanceService = QStringLiteral("org.deepin.dde.Appearance1"); const QString AppearancePath = QStringLiteral("/org/deepin/dde/Appearance1"); const QString AppearanceInterface = QStringLiteral("org.deepin.dde.Appearance1"); const QString WMService = QStringLiteral("com.deepin.wm"); const QString WMPath = QStringLiteral("/com/deepin/wm"); const QString WMInterface = QStringLiteral("com.deepin.wm"); const QString EffectsService = QStringLiteral("org.kde.KWin"); const QString EffectsPath = QStringLiteral("/Effects"); const QString EffectsInterface = QStringLiteral("org.kde.kwin.Effects"); const QString DaemonService = QStringLiteral("org.deepin.dde.Daemon1"); const QString DaemonPath = QStringLiteral("/org/deepin/dde/Daemon1"); const QString DaemonInterface = QStringLiteral("org.deepin.dde.Daemon1"); const QString ScreenSaverServive = QStringLiteral("com.deepin.ScreenSaver"); const QString ScreenSaverPath = QStringLiteral("/com/deepin/ScreenSaver"); const QString ScreenSaverInterface = QStringLiteral("com.deepin.ScreenSaver"); const QString WallpaperSlideshowService = QStringLiteral("org.deepin.dde.WallpaperSlideshow"); const QString WallpaperSlideshowPath = QStringLiteral("/org/deepin/dde/WallpaperSlideshow"); const QString WallpaperSlideshowInterface = QStringLiteral("org.deepin.dde.WallpaperSlideshow"); const QString PowerService = QStringLiteral("org.deepin.dde.Power1"); const QString PowerPath = QStringLiteral("/org/deepin/dde/Power1"); const QString PowerInterface = QStringLiteral("org.deepin.dde.Power1"); const QString PropertiesInterface = QStringLiteral("org.freedesktop.DBus.Properties"); const QString PropertiesChanged = QStringLiteral("PropertiesChanged"); DGUI_USE_NAMESPACE PersonalizationDBusProxy::PersonalizationDBusProxy(QObject *parent) : QObject(parent) { m_AppearanceInter = new DDBusInterface(AppearanceService, AppearancePath, AppearanceInterface, QDBusConnection::sessionBus(), this); m_DaemonInter = new DDBusInterface(DaemonService, DaemonPath, DaemonInterface, QDBusConnection::systemBus(), this); m_wallpaperSlideshowInter = new DDBusInterface(WallpaperSlideshowService, WallpaperSlideshowPath, WallpaperSlideshowInterface, QDBusConnection::sessionBus(), this); m_powerInter = new DDBusInterface(PowerService, PowerPath, PowerInterface, QDBusConnection::sessionBus(), this); if (!DGuiApplicationHelper::testAttribute(DGuiApplicationHelper::IsWaylandPlatform)) { m_WMInter = new DDBusInterface(WMService, WMPath, WMInterface, QDBusConnection::sessionBus(), this); m_EffectsInter = new DDBusInterface(EffectsService, EffectsPath, EffectsInterface, QDBusConnection::sessionBus(), this); m_screenSaverInter = new DDBusInterface(ScreenSaverServive, ScreenSaverPath, ScreenSaverInterface, QDBusConnection::sessionBus(), this); } connect(m_AppearanceInter, SIGNAL(Changed(const QString &, const QString &)), this, SIGNAL(Changed(const QString &, const QString &))); connect(m_AppearanceInter, SIGNAL(Refreshed(const QString &)), this, SIGNAL(Refreshed(const QString &))); connect(m_DaemonInter, SIGNAL(WallpaperChanged(const QString &, uint, const QStringList &)), this, SIGNAL(WallpaperChanged(const QString &, uint, const QStringList &))); } // Appearance QString PersonalizationDBusProxy::background() { return qvariant_cast(m_AppearanceInter->property("Background")); } void PersonalizationDBusProxy::setBackground(const QString &value) { m_AppearanceInter->setProperty("Background", QVariant::fromValue(value)); } QString PersonalizationDBusProxy::cursorTheme() { return qvariant_cast(m_AppearanceInter->property("CursorTheme")); } void PersonalizationDBusProxy::setCursorTheme(const QString &value) { m_AppearanceInter->setProperty("CursorTheme", QVariant::fromValue(value)); } QString PersonalizationDBusProxy::globalTheme() { return qvariant_cast(m_AppearanceInter->property("GlobalTheme")); } void PersonalizationDBusProxy::setGlobalTheme(const QString &value) { m_AppearanceInter->setProperty("GlobalTheme", QVariant::fromValue(value)); } double PersonalizationDBusProxy::fontSize() { return qvariant_cast(m_AppearanceInter->property("FontSize")); } void PersonalizationDBusProxy::setFontSize(double value) { m_AppearanceInter->setProperty("FontSize", QVariant::fromValue(value)); } QString PersonalizationDBusProxy::gtkTheme() { return qvariant_cast(m_AppearanceInter->property("GtkTheme")); } void PersonalizationDBusProxy::setGtkTheme(const QString &value) { m_AppearanceInter->setProperty("GtkTheme", QVariant::fromValue(value)); } QString PersonalizationDBusProxy::iconTheme() { return qvariant_cast(m_AppearanceInter->property("IconTheme")); } void PersonalizationDBusProxy::setIconTheme(const QString &value) { m_AppearanceInter->setProperty("IconTheme", QVariant::fromValue(value)); } QString PersonalizationDBusProxy::monospaceFont() { return qvariant_cast(m_AppearanceInter->property("MonospaceFont")); } void PersonalizationDBusProxy::setMonospaceFont(const QString &value) { m_AppearanceInter->setProperty("MonospaceFont", QVariant::fromValue(value)); } double PersonalizationDBusProxy::opacity() { return qvariant_cast(m_AppearanceInter->property("Opacity")); } void PersonalizationDBusProxy::setOpacity(double value) { m_AppearanceInter->setProperty("Opacity", QVariant::fromValue(value)); } QString PersonalizationDBusProxy::qtActiveColor() { return qvariant_cast(m_AppearanceInter->property("QtActiveColor")); } void PersonalizationDBusProxy::setQtActiveColor(const QString &value) { m_AppearanceInter->setProperty("QtActiveColor", QVariant::fromValue(value)); } QString PersonalizationDBusProxy::standardFont() { return qvariant_cast(m_AppearanceInter->property("StandardFont")); } void PersonalizationDBusProxy::setStandardFont(const QString &value) { m_AppearanceInter->setProperty("StandardFont", QVariant::fromValue(value)); } QString PersonalizationDBusProxy::wallpaperSlideShow() { return qvariant_cast(m_wallpaperSlideshowInter->property("WallpaperSlideShow")); } QString PersonalizationDBusProxy::wallpaperSlideShow(const QString &monitorName) { return QDBusPendingReply(m_wallpaperSlideshowInter->asyncCall(QStringLiteral("GetWallpaperSlideShow"), QVariant::fromValue(monitorName))); } void PersonalizationDBusProxy::setWallpaperSlideShow(const QString &monitorName, const QString &slideShow) { m_wallpaperSlideshowInter->asyncCall("SetWallpaperSlideShow", QVariant::fromValue(monitorName), QVariant::fromValue(slideShow)); } void PersonalizationDBusProxy::setWallpaperSlideShow(const QString &wallpaperSlideShow) { m_wallpaperSlideshowInter->setProperty("WallpaperSlideShow", QVariant::fromValue(wallpaperSlideShow)); } int PersonalizationDBusProxy::windowRadius() { return qvariant_cast(m_AppearanceInter->property("WindowRadius")); } void PersonalizationDBusProxy::setWindowRadius(int value) { m_AppearanceInter->setProperty("WindowRadius", QVariant::fromValue(value)); } // Appearance slot QString PersonalizationDBusProxy::List(const QString &ty) { return QDBusPendingReply(m_AppearanceInter->asyncCall(QStringLiteral("List"), QVariant::fromValue(ty))); } bool PersonalizationDBusProxy::List(const QString &ty, QObject *receiver, const char *member, const char *errorSlot) { QList args; args << QVariant::fromValue(ty); return m_AppearanceInter->callWithCallback(QStringLiteral("List"), args, receiver, member, errorSlot); } void PersonalizationDBusProxy::Set(const QString &ty, const QString &value) { m_AppearanceInter->asyncCall(QStringLiteral("Set"), QVariant::fromValue(ty), QVariant::fromValue(value)); } QString PersonalizationDBusProxy::Show(const QString &ty, const QStringList &names) { return QDBusPendingReply(m_AppearanceInter->asyncCall(QStringLiteral("Show"), QVariant::fromValue(ty), QVariant::fromValue(names))); } bool PersonalizationDBusProxy::Show(const QString &ty, const QStringList &names, QObject *receiver, const char *member) { QList args; args << QVariant::fromValue(ty) << QVariant::fromValue(names); return m_AppearanceInter->callWithCallback(QStringLiteral("Show"), args, receiver, member); } QString PersonalizationDBusProxy::Thumbnail(const QString &ty, const QString &name) { return QDBusPendingReply(m_AppearanceInter->asyncCall(QStringLiteral("Thumbnail"), QVariant::fromValue(ty), QVariant::fromValue(name))); } bool PersonalizationDBusProxy::Thumbnail(const QString &ty, const QString &name, QObject *receiver, const char *member, const char *errorSlot) { QList args; args << QVariant::fromValue(ty) << QVariant::fromValue(name); return m_AppearanceInter->callWithCallback(QStringLiteral("Thumbnail"), args, receiver, member, errorSlot); } int PersonalizationDBusProxy::getDTKSizeMode() { return qvariant_cast(m_AppearanceInter->property("DTKSizeMode")); } void PersonalizationDBusProxy::setDTKSizeMode(int value) { m_AppearanceInter->setProperty("DTKSizeMode", QVariant::fromValue(value)); } int PersonalizationDBusProxy::getScrollBarPolicy() { return qvariant_cast(m_AppearanceInter->property("QtScrollBarPolicy")); } void PersonalizationDBusProxy::setScrollBarPolicy(int value) { m_AppearanceInter->setProperty("QtScrollBarPolicy", QVariant::fromValue(value)); } void PersonalizationDBusProxy::SetCurrentWorkspaceBackgroundForMonitor(const QString &url, const QString &screenName) { m_AppearanceInter->asyncCall(QStringLiteral("SetCurrentWorkspaceBackgroundForMonitor"), url, screenName); } void PersonalizationDBusProxy::SetGreeterBackground(const QString &url) { m_AppearanceInter->asyncCall(QStringLiteral("Set"), QStringLiteral("greeterbackground"), QVariant::fromValue(url)); } QString PersonalizationDBusProxy::getCurrentWorkSpaceBackgroundForMonitor(const QString &screenName) { return QDBusPendingReply(m_AppearanceInter->asyncCall(QStringLiteral("GetCurrentWorkspaceBackgroundForMonitor"), screenName)); } // Daemon void PersonalizationDBusProxy::deleteCustomWallpaper(const QString &userName, const QString &url) { m_DaemonInter->asyncCall(QStringLiteral("DeleteCustomWallPaper"), QVariant::fromValue(userName), QVariant::fromValue(url)); } QString PersonalizationDBusProxy::saveCustomWallpaper(const QString &userName, const QString &url) { return QDBusPendingReply(m_DaemonInter->asyncCall(QStringLiteral("SaveCustomWallPaper"), QVariant::fromValue(userName), QVariant::fromValue(url))); } QStringList PersonalizationDBusProxy::getCustomWallpaper(const QString &userName) { return QDBusPendingReply(m_DaemonInter->asyncCall(QStringLiteral("GetCustomWallPapers"), QVariant::fromValue(userName))); } // screenSaver QStringList PersonalizationDBusProxy::getAllscreensaver() { if (!m_screenSaverInter) return {}; return qvariant_cast(m_screenSaverInter->property("allScreenSaver")); } QString PersonalizationDBusProxy::GetScreenSaverCover(const QString &name) { if (!m_screenSaverInter) return {}; return QDBusPendingReply(m_screenSaverInter->asyncCall(QStringLiteral("GetScreenSaverCover"), QVariant::fromValue(name))); } QStringList PersonalizationDBusProxy::ConfigurableItems() { if (!m_screenSaverInter) return {}; return QDBusPendingReply(m_screenSaverInter->asyncCall(QStringLiteral("ConfigurableItems"))); } void PersonalizationDBusProxy::setCurrentScreenSaver(const QString &value) { if (!m_screenSaverInter) return; m_screenSaverInter->setProperty("currentScreenSaver", QVariant::fromValue(value)); } QString PersonalizationDBusProxy::getCurrentScreenSaver() { if (!m_screenSaverInter) return {}; return qvariant_cast(m_screenSaverInter->property("currentScreenSaver")); } void PersonalizationDBusProxy::preview(const QString &name, bool stayOn) { if (!m_screenSaverInter) return; m_screenSaverInter->asyncCall(QStringLiteral("Preview"), name, int32_t(stayOn)); } void PersonalizationDBusProxy::setLinePowerScreenSaverTimeout(int value) { if (!m_screenSaverInter) return; m_screenSaverInter->setProperty("linePowerScreenSaverTimeout", QVariant::fromValue(value)); } void PersonalizationDBusProxy::setBatteryScreenSaverTimeout(int value) { if (!m_screenSaverInter) return; m_screenSaverInter->setProperty("batteryScreenSaverTimeout", QVariant::fromValue(value)); } int PersonalizationDBusProxy::getLinePowerScreenSaverTimeout() { if (!m_screenSaverInter) return {}; return qvariant_cast(m_screenSaverInter->property("linePowerScreenSaverTimeout")); } int PersonalizationDBusProxy::getBatteryScreenSaverTimeout() { if (!m_screenSaverInter) return {}; return qvariant_cast(m_screenSaverInter->property("batteryScreenSaverTimeout")); } void PersonalizationDBusProxy::requestScreenSaverConfig(const QString& name) { if (!m_screenSaverInter) return; m_screenSaverInter->asyncCall(QStringLiteral("StartCustomConfig"), QVariant::fromValue(name)); } bool PersonalizationDBusProxy::getLockScreenAtAwake() { if (!m_screenSaverInter) return false; return qvariant_cast(m_screenSaverInter->property("lockScreenAtAwake")); } void PersonalizationDBusProxy::setLockScreenAtAwake(bool value) { if (!m_screenSaverInter) return; m_screenSaverInter->setProperty("lockScreenAtAwake", QVariant::fromValue(value)); } // WM bool PersonalizationDBusProxy::compositingAllowSwitch() { if (!m_WMInter) { return false; } return qvariant_cast(m_WMInter->property("compositingAllowSwitch")); } bool PersonalizationDBusProxy::compositingEnabled() { if (!m_WMInter) { return false; } return qvariant_cast(m_WMInter->property("compositingEnabled")); } void PersonalizationDBusProxy::setCompositingEnabled(bool value) { if (!m_WMInter) { return; } m_WMInter->setProperty("compositingEnabled", QVariant::fromValue(value)); } bool PersonalizationDBusProxy::compositingPossible() { if (!m_WMInter) { return false; } return qvariant_cast(m_WMInter->property("compositingPossible")); } int PersonalizationDBusProxy::cursorSize() { if (!m_WMInter) { return 0; } return qvariant_cast(m_WMInter->property("cursorSize")); } void PersonalizationDBusProxy::setCursorSize(int value) { if (!m_WMInter) { return; } m_WMInter->setProperty("cursorSize", QVariant::fromValue(value)); } bool PersonalizationDBusProxy::zoneEnabled() { if (!m_WMInter) { return false; } return qvariant_cast(m_WMInter->property("zoneEnabled")); } void PersonalizationDBusProxy::setZoneEnabled(bool value) { if (!m_WMInter) { return; } m_WMInter->setProperty("zoneEnabled", QVariant::fromValue(value)); } // Effects bool PersonalizationDBusProxy::loadEffect(const QString &name) { if (!m_EffectsInter) { return false; } return QDBusPendingReply(m_EffectsInter->asyncCall(QStringLiteral("loadEffect"), QVariant::fromValue(name))); } void PersonalizationDBusProxy::unloadEffect(const QString &name) { if (!m_EffectsInter) { return; } m_EffectsInter->asyncCall(QStringLiteral("unloadEffect"), QVariant::fromValue(name)); } bool PersonalizationDBusProxy::isEffectLoaded(const QString &name) { if (!m_EffectsInter) { return false; } return QDBusPendingReply(m_EffectsInter->asyncCall(QStringLiteral("isEffectLoaded"), QVariant::fromValue(name))); } bool PersonalizationDBusProxy::isEffectLoaded(const QString &name, QObject *receiver, const char *member) { if (!m_EffectsInter) { return false; } QList args; args << QVariant::fromValue(name); return m_EffectsInter->callWithCallback(QStringLiteral("isEffectLoaded"), args, receiver, member); } bool PersonalizationDBusProxy::isEffectSupported(const QString &name) { if (!m_EffectsInter) { return false; } return QDBusPendingReply(m_EffectsInter->asyncCall(QStringLiteral("isEffectSupported"), QVariant::fromValue(name))); } QString PersonalizationDBusProxy::activeColors() { return QDBusPendingReply(m_AppearanceInter->asyncCall(QStringLiteral("GetActiveColors"))); } void PersonalizationDBusProxy::setActiveColors(const QString &activeColors) { m_AppearanceInter->asyncCall(QStringLiteral("SetActiveColors"), QVariant::fromValue(activeColors)); } // power bool PersonalizationDBusProxy::OnBattery() { return qvariant_cast(m_powerInter->property("OnBattery")); } ================================================ FILE: src/plugin-personalization/operation/personalizationdbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef PERSONALIZATIONDBUSPROXY_H #define PERSONALIZATIONDBUSPROXY_H #include #include #include class QDBusMessage; class PersonalizationDBusProxy : public QObject { Q_OBJECT public: explicit PersonalizationDBusProxy(QObject *parent = nullptr); // Appearance Q_PROPERTY(QString Background READ background WRITE setBackground NOTIFY BackgroundChanged) QString background(); void setBackground(const QString &value); Q_PROPERTY(QString CursorTheme READ cursorTheme WRITE setCursorTheme NOTIFY CursorThemeChanged) QString cursorTheme(); void setCursorTheme(const QString &value); Q_PROPERTY(QString GlobalTheme READ globalTheme WRITE setGlobalTheme NOTIFY GlobalThemeChanged) QString globalTheme(); void setGlobalTheme(const QString &value); Q_PROPERTY(double FontSize READ fontSize WRITE setFontSize NOTIFY FontSizeChanged) double fontSize(); void setFontSize(double value); Q_PROPERTY(QString GtkTheme READ gtkTheme WRITE setGtkTheme NOTIFY GtkThemeChanged) QString gtkTheme(); void setGtkTheme(const QString &value); Q_PROPERTY(QString IconTheme READ iconTheme WRITE setIconTheme NOTIFY IconThemeChanged) QString iconTheme(); void setIconTheme(const QString &value); Q_PROPERTY(QString MonospaceFont READ monospaceFont WRITE setMonospaceFont NOTIFY MonospaceFontChanged) QString monospaceFont(); void setMonospaceFont(const QString &value); Q_PROPERTY(double Opacity READ opacity WRITE setOpacity NOTIFY OpacityChanged) double opacity(); void setOpacity(double value); Q_PROPERTY(QString QtActiveColor READ qtActiveColor WRITE setQtActiveColor NOTIFY QtActiveColorChanged) QString qtActiveColor(); void setQtActiveColor(const QString &value); Q_PROPERTY(QString StandardFont READ standardFont WRITE setStandardFont NOTIFY StandardFontChanged) QString standardFont(); void setStandardFont(const QString &value); // wallpaperSlideshow Q_PROPERTY(QString WallpaperSlideShow WRITE setWallpaperSlideShow READ wallpaperSlideShow NOTIFY WallpaperSlideShowChanged) QString wallpaperSlideShow(); QString wallpaperSlideShow(const QString &monitorName); void setWallpaperSlideShow(const QString &monitorName, const QString &sliderShow); void setWallpaperSlideShow(const QString &wallpaperSlideShow); Q_PROPERTY(int WindowRadius READ windowRadius WRITE setWindowRadius NOTIFY WindowRadiusChanged) int windowRadius(); void setWindowRadius(int value); // SystemPersonalization // WM Q_PROPERTY(bool compositingAllowSwitch READ compositingAllowSwitch NOTIFY compositingAllowSwitchChanged) bool compositingAllowSwitch(); Q_PROPERTY(bool compositingEnabled READ compositingEnabled WRITE setCompositingEnabled NOTIFY compositingEnabledChanged) bool compositingEnabled(); void setCompositingEnabled(bool value); Q_PROPERTY(bool compositingPossible READ compositingPossible NOTIFY compositingPossibleChanged) bool compositingPossible(); Q_PROPERTY(int cursorSize READ cursorSize WRITE setCursorSize NOTIFY cursorSizeChanged) int cursorSize(); void setCursorSize(int value); // Q_PROPERTY(QString cursorTheme READ cursorTheme WRITE setCursorTheme NOTIFY CursorThemeChanged) // QString cursorTheme(); // void setCursorTheme(const QString &value); Q_PROPERTY(bool zoneEnabled READ zoneEnabled WRITE setZoneEnabled NOTIFY ZoneEnabledChanged) bool zoneEnabled(); void setZoneEnabled(bool value); Q_PROPERTY(int DTKSizeMode READ getDTKSizeMode WRITE setDTKSizeMode NOTIFY DTKSizeModeChanged) int getDTKSizeMode(); void setDTKSizeMode(int value); Q_PROPERTY(int scrollBarPolicy READ getScrollBarPolicy WRITE setScrollBarPolicy NOTIFY scrollBarPolicyChanged) int getScrollBarPolicy(); void setScrollBarPolicy(int value); void SetCurrentWorkspaceBackgroundForMonitor(const QString &url, const QString &screenName); QString getCurrentWorkSpaceBackgroundForMonitor(const QString &screenName); void SetGreeterBackground(const QString &url); // daemon QString saveCustomWallpaper(const QString &userName, const QString &url); void deleteCustomWallpaper(const QString &userName, const QString &url); QStringList getCustomWallpaper(const QString &userName); // screenSaver QStringList getAllscreensaver(); void setCurrentScreenSaver(const QString &value); QString getCurrentScreenSaver(); void setLockScreenAtAwake(bool value); bool getLockScreenAtAwake(); void preview(const QString &name, bool stayOn = true); void setLinePowerScreenSaverTimeout(int value); void setBatteryScreenSaverTimeout(int value); int getLinePowerScreenSaverTimeout(); int getBatteryScreenSaverTimeout(); void requestScreenSaverConfig(const QString& name); QStringList ConfigurableItems(); QString GetScreenSaverCover(const QString &name); // power bool OnBattery(); signals: // Appearance void Changed(const QString &in0, const QString &in1); void Refreshed(const QString &in0); // begin property changed signals void BackgroundChanged(const QString &value) const; void CursorThemeChanged(const QString &value) const; void FontSizeChanged(double value) const; void GtkThemeChanged(const QString &value) const; void IconThemeChanged(const QString &value) const; void GlobalThemeChanged(const QString &value) const; void MonospaceFontChanged(const QString &value) const; void OpacityChanged(double value) const; void QtActiveColorChanged(const QString &value) const; void StandardFontChanged(const QString &value) const; void WallpaperSlideShowChanged(const QString &value) const; void WindowRadiusChanged(int value) const; // WMSwitcher void WMChanged(const QString &wm); // WM // begin property changed signals void compositingAllowSwitchChanged(bool value) const; void compositingEnabledChanged(bool value) const; void compositingPossibleChanged(bool value) const; void cursorSizeChanged(int value) const; // void CursorThemeChanged(const QString & value) const; void ZoneEnabledChanged(bool value) const; void DTKSizeModeChanged(int value) const; void scrollBarPolicyChanged(int value) const; void WallpaperURlsChanged(QString) const; // screenSaver void allscreensaverChanged(const QStringList &value); void currentScreenSaverChanged(const QString &value); void lockScreenAtAwakeChanged(bool value); void linePowerScreenSaverTimeoutChanged(int value); void batteryScreenSaverTimeoutChanged(int value); // daemon void WallpaperChanged(const QString &value, uint mode, const QStringList &urls); // power void OnBatteryChanged(bool value); public slots: // Appearance QString List(const QString &ty); bool List(const QString &ty, QObject *receiver, const char *member, const char *errorSlot); void Set(const QString &ty, const QString &value); QString Show(const QString &ty, const QStringList &names); bool Show(const QString &ty, const QStringList &names, QObject *receiver, const char *member); QString Thumbnail(const QString &ty, const QString &name); bool Thumbnail(const QString &ty, const QString &name, QObject *receiver, const char *member, const char *errorSlot); QString activeColors(); void setActiveColors(const QString &activeColors); // Effects bool loadEffect(const QString &name); void unloadEffect(const QString &name); bool isEffectLoaded(const QString &name); bool isEffectLoaded(const QString &name, QObject *receiver, const char *member); bool isEffectSupported(const QString &name); private: Dtk::Core::DDBusInterface *m_AppearanceInter = nullptr; Dtk::Core::DDBusInterface *m_WMInter = nullptr; Dtk::Core::DDBusInterface *m_EffectsInter = nullptr; Dtk::Core::DDBusInterface *m_DaemonInter = nullptr; Dtk::Core::DDBusInterface *m_screenSaverInter = nullptr; Dtk::Core::DDBusInterface *m_wallpaperSlideshowInter = nullptr; Dtk::Core::DDBusInterface *m_powerInter = nullptr; }; #endif // PERSONALIZATIONDBUSPROXY_H ================================================ FILE: src/plugin-personalization/operation/personalizationexport.hpp ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include class PersonalizationExport : public QObject { Q_OBJECT public: PersonalizationExport(QObject *parent = nullptr) : QObject(parent) { } enum WallpaperSetOption { Option_Desktop = 0, Option_Lock, Option_Other, Option_All, }; Q_ENUM(WallpaperSetOption) enum ModuleType { Root = 0, Theme, Wallpaper, ScreenSaver }; Q_ENUM(ModuleType) }; ================================================ FILE: src/plugin-personalization/operation/personalizationinterface.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "personalizationinterface.h" #include "operation/imagehelper.h" #include "operation/personalizationexport.hpp" #include "operation/treelandworker.h" #include "operation/x11worker.h" #include "dccfactory.h" #include "model/thememodel.h" #include "utils.hpp" #include #include #include #include #include #include #include #include #include #define PICKER_SERVICE "com.deepin.Picker" #define PICKER_PATH "/com/deepin/Picker" ThemeVieweModel::ThemeVieweModel(QObject *parent) : QAbstractItemModel(parent) , m_themeModel(nullptr) { } void ThemeVieweModel::setThemeModel(ThemeModel *model) { m_themeModel = model; connect(m_themeModel, &ThemeModel::defaultChanged, this, &ThemeVieweModel::updateData); connect(m_themeModel, &ThemeModel::picAdded, this, &ThemeVieweModel::updateData); connect(m_themeModel, &ThemeModel::itemAdded, this, &ThemeVieweModel::updateData); connect(m_themeModel, &ThemeModel::itemRemoved, this, &ThemeVieweModel::updateData); updateData(); } QModelIndex ThemeVieweModel::index(int row, int column, const QModelIndex &parent) const { Q_UNUSED(parent); if (row < 0 || row >= m_keys.size()) return QModelIndex(); return createIndex(row, column); } QModelIndex ThemeVieweModel::parent(const QModelIndex &index) const { Q_UNUSED(index); return QModelIndex(); } int ThemeVieweModel::rowCount(const QModelIndex &parent) const { if (!parent.isValid()) return m_keys.size(); return 0; } int ThemeVieweModel::columnCount(const QModelIndex &parent) const { Q_UNUSED(parent); return 1; } QVariant ThemeVieweModel::data(const QModelIndex &index, int role) const { if (m_keys.isEmpty() || !index.isValid()) return QVariant(); int row = index.row(); switch (role) { case ThemeVieweModel::NameRole: return m_themeModel->getList().value(m_keys.at(row))["Name"].toString(); case Qt::ToolTipRole: return m_themeModel->getList().value(m_keys.at(row))["Comment"].toString(); case Qt::DecorationRole: return QIcon(m_themeModel->getPicList().value(m_keys.at(row))); case Qt::CheckStateRole: { QString id = m_themeModel->getDefault(); if (id.endsWith(".light")) { id.chop(6); } else if (id.endsWith(".dark")) { id.chop(5); } return m_keys.at(row) == id ? Qt::Checked : Qt::Unchecked; } case ThemeVieweModel::IdRole: return m_keys.at(row); case ThemeVieweModel::PicRole: { QString pic = m_themeModel->getPicList().value(m_keys.at(row)); return pic.startsWith("/") ? QUrl::fromLocalFile(pic).toString() : pic; } default: break; } return QVariant(); } void ThemeVieweModel::updateData() { QStringList keys = m_themeModel->keys(); if (keys.contains("custom")) { keys.removeAll("custom"); } // 按字母排序(不区分大小写) std::sort(keys.begin(), keys.end(), [this](const QString &a, const QString &b) { return m_themeModel->getList().value(a)["Name"].toString().toLower() < m_themeModel->getList().value(b)["Name"].toString().toLower(); }); // custom主题始终放在最前面 if (m_themeModel->keys().contains("custom")) { keys.push_front("custom"); } beginResetModel(); m_keys = keys; endResetModel(); } QHash ThemeVieweModel::roleNames() const { QHash roles = QAbstractItemModel::roleNames(); roles[IdRole] = "id"; roles[NameRole] = "name"; roles[PicRole] = "pic"; roles[Qt::CheckStateRole] = "checked"; return roles; } PersonalizationInterface::PersonalizationInterface(QObject *parent) : QObject(parent) , m_model(new PersonalizationModel(this)) , m_imageHelper(new ImageHelper(this)) , m_globalThemeViewModel(new ThemeVieweModel(this)) , m_iconThemeViewModel(new ThemeVieweModel(this)) , m_cursorThemeViewModel(new ThemeVieweModel(this)) , m_pickerId(QUuid::createUuid().toString()) , m_pickerAvailable(false) { qmlRegisterType("org.deepin.dcc.personalization", 1, 0, "PersonalizationData"); if (Dtk::Gui::DGuiApplicationHelper::testAttribute(Dtk::Gui::DGuiApplicationHelper::IsWaylandPlatform)) { m_work = new TreeLandWorker(m_model, this); } else { m_work = new X11Worker(m_model, this); } qmlRegisterType("org.deepin.dcc.personalization", 1, 0, "PersonalizationExport"); m_globalThemeViewModel->setThemeModel(m_model->getGlobalThemeModel()); m_iconThemeViewModel->setThemeModel(m_model->getIconModel()); m_cursorThemeViewModel->setThemeModel(m_model->getMouseModel()); // after do m_work->active(); // refresh data m_work->refreshTheme(); m_work->refreshFont(); initAppearanceSwitchModel(); m_pickerAvailable = checkPickerService(); if (m_pickerAvailable) { QDBusConnection::sessionBus().connect(PICKER_SERVICE, PICKER_PATH, PICKER_SERVICE, "colorPicked", this, SLOT(onPickerColorPicked(QString,QString))); qDebug() << "Picker service is available, using DBus picker"; } else { qDebug() << "Picker service is not available, will use Qt's built-in color picker"; } } void PersonalizationInterface::initAppearanceSwitchModel() { ThemeModel *globalTheme = m_model->getGlobalThemeModel(); auto updateDefault = [this]() { ThemeModel *globalTheme = m_model->getGlobalThemeModel(); QString mode; QString themeId = getGlobalThemeId(globalTheme->getDefault(), mode); m_appearanceSwitchModel.clear(); m_appearanceSwitchModel.append(QVariantMap{{"text", tr("Light")}, {"value", ".light"}}); const QJsonObject &json = globalTheme->getList().value(themeId); if (json.isEmpty()) return; if (json["hasDark"].toBool()) { m_appearanceSwitchModel.append(QVariantMap{{"text", tr("Auto")}, {"value", ""}}); m_appearanceSwitchModel.append(QVariantMap{{"text", tr("Dark")}, {"value", ".dark"}}); } Q_EMIT appearanceSwitchModelChanged(m_appearanceSwitchModel); if (mode != m_currentAppearance) { m_currentAppearance = mode; Q_EMIT currentAppearanceChanged(m_currentAppearance); } }; updateDefault(); connect(globalTheme, &ThemeModel::defaultChanged, updateDefault); connect(globalTheme, &ThemeModel::itemAdded, updateDefault); connect(globalTheme, &ThemeModel::itemRemoved, updateDefault); } QString PersonalizationInterface::platformName() { return qApp->platformName(); } void PersonalizationInterface::handleCmdParam(PersonalizationExport::ModuleType type, const QString &cmdParam) { // parse cmd param QMap paramMap; QStringList paramPairs = cmdParam.split('&'); for (const auto ¶mPair : paramPairs) { QStringList keyValue = paramPair.split('='); if (keyValue.size() == 2) { QString key = keyValue[0].trimmed(); QString value = keyValue[1].trimmed(); paramMap.insert(key, value); } } // handle cmd param if (type == PersonalizationExport::Theme) { QString operatorType; QString value; operatorType = paramMap.value("type"); value = paramMap.value("value"); if (operatorType == "themeType") { bool keepAuto = paramMap.value("keepAuto") == "true"; if (value == "light") { m_work->setAppearanceTheme(".light", keepAuto); } else if (value == "dark") { m_work->setAppearanceTheme(".dark", keepAuto); } else if (value == "auto") { m_work->setAppearanceTheme("", keepAuto); } } } else if (type == PersonalizationExport::Wallpaper) { QString url; QString type; QString monitor; url = paramMap.value("url"); if (!isURI(url) && QFile::exists(url)) { url = QUrl::fromLocalFile(url).toString(); } type = paramMap.value("type"); monitor = paramMap.value("monitor"); if (monitor.isEmpty()) { monitor = m_model->getCurrentSelectScreen(); } if (url.isEmpty()) { return; } if (type == "lock") { m_work->setLockBackForMonitor(monitor, url, true); } else if (type == "desktop") { m_work->setBackgroundForMonitor(monitor, url, true); } else if (type.isEmpty()) { m_work->setLockBackForMonitor(monitor, url, true); m_work->setBackgroundForMonitor(monitor, url, true); } } } bool PersonalizationInterface::checkPickerService() { QDBusConnectionInterface *interface = QDBusConnection::sessionBus().interface(); if (!interface) { return false; } if (interface->isServiceRegistered(PICKER_SERVICE)) { return true; } QStringList activatableServices = interface->activatableServiceNames(); return activatableServices.contains(PICKER_SERVICE); } void PersonalizationInterface::startPicker() { if (!m_pickerAvailable) { qWarning() << "Picker service is not available"; Q_EMIT pickerError(tr("Picker service is not available")); return; } QDBusMessage msg = QDBusMessage::createMethodCall(PICKER_SERVICE, PICKER_PATH, PICKER_SERVICE, "StartPick"); msg.setArguments({QVariant::fromValue(m_pickerId)}); QDBusConnection::sessionBus().asyncCall(msg, 5); qDebug() << "Picker service called with ID:" << m_pickerId; } void PersonalizationInterface::onPickerColorPicked(const QString &uuid, const QString &colorName) { if (uuid != m_pickerId) return; qDebug() << "Picked color:" << colorName << "for session:" << uuid; QColor color(colorName); if (color.isValid()) { Q_EMIT colorPicked(color.name()); } else { Q_EMIT pickerError(tr("Invalid color format: %1").arg(colorName)); } } DCC_FACTORY_CLASS(PersonalizationInterface) #include "personalizationinterface.moc" ================================================ FILE: src/plugin-personalization/operation/personalizationinterface.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef PERSIONALIZATIONINTERFACE_H #define PERSIONALIZATIONINTERFACE_H #include #include "personalizationworker.h" #include "personalizationmodel.h" #include "imagehelper.h" class ThemeVieweModel : public QAbstractItemModel { public: enum UserDataRole { IdRole = Qt::UserRole + 0x101, NameRole, PicRole }; explicit ThemeVieweModel(QObject *parent = nullptr); ~ThemeVieweModel() { } void setThemeModel(ThemeModel *model); // Basic functionality: QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; protected: QHash roleNames() const override; private: void updateData(); private: ThemeModel *m_themeModel; QStringList m_keys; }; class PersonalizationInterface : public QObject { Q_OBJECT Q_PROPERTY(ThemeVieweModel *globalThemeModel MEMBER m_globalThemeViewModel CONSTANT) Q_PROPERTY(ThemeVieweModel *iconThemeViewModel MEMBER m_iconThemeViewModel CONSTANT) Q_PROPERTY(ThemeVieweModel *cursorThemeViewModel MEMBER m_cursorThemeViewModel CONSTANT) Q_PROPERTY(PersonalizationModel *model MEMBER m_model CONSTANT) Q_PROPERTY(PersonalizationWorker *worker MEMBER m_work CONSTANT) Q_PROPERTY(ImageHelper *imageHelper MEMBER m_imageHelper CONSTANT) Q_PROPERTY(QVariantList appearanceSwitchModel MEMBER m_appearanceSwitchModel NOTIFY appearanceSwitchModelChanged) Q_PROPERTY(QString currentAppearance MEMBER m_currentAppearance NOTIFY currentAppearanceChanged) Q_PROPERTY(bool pickerAvailable READ isPickerAvailable CONSTANT) public: explicit PersonalizationInterface(QObject *parent = nullptr); QString getCurrentAppearance() const { return m_currentAppearance; }; bool isPickerAvailable() const { return m_pickerAvailable; } Q_INVOKABLE QString platformName(); Q_INVOKABLE void handleCmdParam(PersonalizationExport::ModuleType type, const QString &cmdParam); Q_INVOKABLE void startPicker(); private: void initAppearanceSwitchModel(); bool checkPickerService(); private Q_SLOTS: void onPickerColorPicked(const QString &uuid, const QString &colorName); signals: void currentAppearanceChanged(const QString &appearance); void appearanceSwitchModelChanged(const QVariantList &model); void colorPicked(const QString &color); void pickerError(const QString &error); private: PersonalizationModel *m_model; PersonalizationWorker *m_work; ImageHelper *m_imageHelper; ThemeVieweModel *m_globalThemeViewModel; ThemeVieweModel *m_iconThemeViewModel; ThemeVieweModel *m_cursorThemeViewModel; QVariantList m_appearanceSwitchModel; QString m_currentAppearance; QString m_pickerId; bool m_pickerAvailable; }; #endif // PERSIONALIZATIONINTERFACE_H ================================================ FILE: src/plugin-personalization/operation/personalizationmodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "personalizationmodel.h" #include "model/thememodel.h" #include "model/fontmodel.h" #include "model/fontsizemodel.h" #include "model/wallpapermodel.h" PersonalizationModel::PersonalizationModel(QObject *parent) : QObject(parent) { m_windowModel = new ThemeModel(this); m_iconModel = new ThemeModel(this); m_mouseModel = new ThemeModel(this); m_globalThemeModel = new ThemeModel(this); m_standFontModel = new FontModel(this); m_monoFontModel = new FontModel(this); m_fontSizeModel = new FontSizeModel(this); m_customWallpaperSortModel = new WallpaperSortModel(this); m_sysWallpaperSortModel = new WallpaperSortModel(this); m_solidWallpaperSortModel = new WallpaperSortModel(this); m_screenSaverSortModel = new WallpaperSortModel(this); m_picScreenSaverSortModel = new WallpaperSortModel(this); m_customWallpaperModel = new WallpaperModel(this); m_sysWallpaperModel = new WallpaperModel(this); m_solidWallpaperModel = new WallpaperModel(this); m_screenSaverModel = new WallpaperModel(this); m_picScreenSaverModel = new WallpaperModel(this); m_customWallpaperSortModel->setSourceModel(m_customWallpaperModel); m_sysWallpaperSortModel->setSourceModel(m_sysWallpaperModel); m_solidWallpaperSortModel->setSourceModel(m_solidWallpaperModel); m_screenSaverSortModel->setSourceModel(m_screenSaverModel); m_picScreenSaverSortModel->setSourceModel(m_picScreenSaverModel); m_miniEffect = 0; m_currentScreenSaverPicMode = "default"; } PersonalizationModel::~PersonalizationModel() { } void PersonalizationModel::setWindowRadius(int radius) { if (m_windowRadius != radius) m_windowRadius = radius; Q_EMIT windowRadiusChanged(radius); } int PersonalizationModel::windowRadius() { return m_windowRadius; } void PersonalizationModel::setOpacity(double opacity) { if (m_opacity == opacity) return; m_opacity = opacity; Q_EMIT opacityChanged(opacity); } void PersonalizationModel::setMiniEffect(const int &effect) { if(m_miniEffect == effect) return; m_miniEffect=effect; Q_EMIT miniEffectChanged(effect); } void PersonalizationModel::setActiveColor(const QString &color) { if (m_activeColor == color) return; m_activeColor = color; Q_EMIT onActiveColorChanged(color); } void PersonalizationModel::setCompactDisplay(bool value) { if (m_compactDisplay == value) return; m_compactDisplay = value; Q_EMIT compactDisplayChanged(value); } void PersonalizationModel::setScrollBarPolicy(int policy) { if (m_scrollBarPolicy != policy) { m_scrollBarPolicy = policy; Q_EMIT scrollBarPolicyChanged(m_scrollBarPolicy); } } void PersonalizationModel::setTitleBarHeight(int titleBarHeight) { if (m_titleBarHeight == titleBarHeight) return; m_titleBarHeight = titleBarHeight; Q_EMIT titleBarHeightChanged(titleBarHeight); } void PersonalizationModel::setIsMoveWindow(bool value) { if (m_isMoveWindow != value) { m_isMoveWindow = value; Q_EMIT moveWindowChanged(value); } } void PersonalizationModel::setWindowEffectType(int windowEffectType) { if (m_windowEffectType == windowEffectType) return; m_windowEffectType = windowEffectType; Q_EMIT windowEffectTypeChanged(windowEffectType); } void PersonalizationModel::setScrollBarPolicyConfig(const QString &value) { if (m_scrollBarPolicyConfig == value) return; m_scrollBarPolicyConfig = value; Q_EMIT scrollBarPolicyConfigChanged(value); } void PersonalizationModel::setCompactDisplayConfig(const QString &value) { if (m_compactDisplayConfig == value) return; m_compactDisplayConfig = value; Q_EMIT compactDisplayConfigChanged(value); } void PersonalizationModel::setWallpaperMap(const QVariantMap &map) { if (m_wallpaperMap == map) return; m_wallpaperMap = map; } void PersonalizationModel::setWallpaperSlideShowMap(const QVariantMap &map) { if (m_wallpaperSlideShowMap == map) return; m_wallpaperSlideShowMap = map; Q_EMIT wallpaperSlideShowMapChanged(map); } void PersonalizationModel::setCurrentSelectScreen(const QString &screenName) { if (m_currentSelectScreen == screenName) return; m_currentSelectScreen = screenName; Q_EMIT currentSelectScreenChanged(screenName); } void PersonalizationModel::setCurrentScreenSaver(const QString ¤tScreenSaver) { if (m_currentScreenSaver == currentScreenSaver) return; m_currentScreenSaver = currentScreenSaver; Q_EMIT currentScreenSaverChanged(currentScreenSaver); } void PersonalizationModel::setScreens(const QStringList &screens) { if (m_screens == screens) return; m_screens = screens; if (m_currentSelectScreen.isEmpty() && !m_screens.isEmpty()) setCurrentSelectScreen(m_screens.first()); Q_EMIT screensChanged(screens); } void PersonalizationModel::setLockScreenAtAwake(bool value) { if (m_lockScreenAtAwake == value) return; m_lockScreenAtAwake = value; Q_EMIT lockScreenAtAwakeChanged(value); } void PersonalizationModel::setLinePowerScreenSaverIdleTime(int value) { if (m_linePowerScreenSaverIdleTime == value) return; m_linePowerScreenSaverIdleTime = value; qWarning() << "model: setLinePowerScreenSaverIdleTime" << value << m_linePowerScreenSaverIdleTime; Q_EMIT linePowerScreenSaverIdleTimeChanged(value); } void PersonalizationModel::setBatteryScreenSaverIdleTime(int value) { if (m_batteryScreenSaverIdleTime == value) return; m_batteryScreenSaverIdleTime = value; Q_EMIT batteryScreenSaverIdleTimeChanged(value); } void PersonalizationModel::setCurrentScreenSaverPicMode(const QString &value) { if (m_currentScreenSaverPicMode == value) return; m_currentScreenSaverPicMode = value; Q_EMIT currentScreenSaverPicModeChanged(value); } void PersonalizationModel::setOnBattery(bool value) { if (m_onBattery == value) return; m_onBattery = value; Q_EMIT onBatteryChanged(value); } void PersonalizationModel::setSupportEffects(const QStringList &value) { if (m_supportEffects == value) return; m_supportEffects = value; Q_EMIT supportEffectsChanged(value); } ================================================ FILE: src/plugin-personalization/operation/personalizationmodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef PERSONALIZATIONMODEL_H #define PERSONALIZATIONMODEL_H #include #include class ThemeModel; class FontModel; class FontSizeModel; class WallpaperModel; class WallpaperSortModel; class PersonalizationModel : public QObject { Q_OBJECT friend class MouseWorker; Q_PROPERTY(int miniEffect READ miniEffect WRITE setMiniEffect NOTIFY miniEffectChanged) Q_PROPERTY(double opacity READ opacity WRITE setOpacity NOTIFY opacityChanged) Q_PROPERTY(int windowRadius READ windowRadius WRITE setWindowRadius NOTIFY windowRadiusChanged) Q_PROPERTY(bool compactDisplay READ getCompactDisplay WRITE setCompactDisplay NOTIFY compactDisplayChanged) Q_PROPERTY(int scrollBarPolicy READ getScrollBarPolicy WRITE setScrollBarPolicy NOTIFY scrollBarPolicyChanged) Q_PROPERTY(int titleBarHeight READ getTitleBarHeight WRITE setTitleBarHeight NOTIFY titleBarHeightChanged) Q_PROPERTY(bool isMoveWindow READ getIsMoveWindow WRITE setIsMoveWindow NOTIFY moveWindowChanged) Q_PROPERTY(int windowEffectType READ windowEffectType WRITE setWindowEffectType NOTIFY windowEffectTypeChanged) Q_PROPERTY(QString activeColor READ getActiveColor WRITE setActiveColor NOTIFY onActiveColorChanged) Q_PROPERTY(QString scrollBarPolicyConfig READ getScrollBarPolicyConfig WRITE setScrollBarPolicyConfig NOTIFY scrollBarPolicyConfigChanged) Q_PROPERTY(QString compactDisplayConfig READ getCompactDisplayConfig WRITE setCompactDisplayConfig NOTIFY compactDisplayConfigChanged) Q_PROPERTY(QVariantMap wallpaperMap READ getWallpaperMap WRITE setWallpaperMap NOTIFY wallpaperMapChanged) Q_PROPERTY(QString currentScreenSaver READ getCurrentScreenSaver WRITE setCurrentScreenSaver NOTIFY currentScreenSaverChanged) Q_PROPERTY(QString currentSelectScreen READ getCurrentSelectScreen WRITE setCurrentSelectScreen NOTIFY currentSelectScreenChanged) Q_PROPERTY(QStringList screens READ getScreens WRITE setScreens NOTIFY screensChanged) Q_PROPERTY(bool lockScreenAtAwake WRITE setLockScreenAtAwake READ getLockScreenAtAwake NOTIFY lockScreenAtAwakeChanged) Q_PROPERTY(int linePowerScreenSaverIdleTime WRITE setLinePowerScreenSaverIdleTime READ getLinePowerScreenSaverIdleTime NOTIFY linePowerScreenSaverIdleTimeChanged) Q_PROPERTY(int batteryScreenSaverIdleTime WRITE setBatteryScreenSaverIdleTime READ getBatteryScreenSaverIdleTime NOTIFY batteryScreenSaverIdleTimeChanged) Q_PROPERTY(QString currentScreenSaverPicMode WRITE setCurrentScreenSaverPicMode READ getCurrentScreenSaverPicMode NOTIFY currentScreenSaverPicModeChanged) Q_PROPERTY(QVariantMap wallpaperSlideShowMap WRITE setWallpaperSlideShowMap READ getWallpaperSlideShowMap NOTIFY wallpaperSlideShowMapChanged) Q_PROPERTY(bool onBattery READ getOnBattery WRITE setOnBattery NOTIFY onBatteryChanged) Q_PROPERTY(QStringList supportEffects READ supportEffects WRITE setSupportEffects NOTIFY supportEffectsChanged) Q_PROPERTY(FontSizeModel *fontSizeModel MEMBER m_fontSizeModel CONSTANT) Q_PROPERTY(FontModel *standardFontModel MEMBER m_standFontModel CONSTANT) Q_PROPERTY(FontModel *monoFontModel MEMBER m_monoFontModel CONSTANT) Q_PROPERTY(ThemeModel *iconModel MEMBER m_iconModel CONSTANT) Q_PROPERTY(ThemeModel *cursorModel MEMBER m_mouseModel CONSTANT) Q_PROPERTY(WallpaperSortModel *customWallpaperModel MEMBER m_customWallpaperSortModel CONSTANT) Q_PROPERTY(WallpaperSortModel *sysWallpaperModel MEMBER m_sysWallpaperSortModel CONSTANT) Q_PROPERTY(WallpaperSortModel *solidWallpaperModel MEMBER m_solidWallpaperSortModel CONSTANT) Q_PROPERTY(WallpaperSortModel *screenSaverModel MEMBER m_screenSaverSortModel CONSTANT) Q_PROPERTY(WallpaperSortModel *picScreenSaverModel MEMBER m_picScreenSaverSortModel CONSTANT) public: explicit PersonalizationModel(QObject *parent = nullptr); ~PersonalizationModel(); inline ThemeModel *getWindowModel() const { return m_windowModel; } inline ThemeModel *getIconModel() const { return m_iconModel; } inline ThemeModel *getMouseModel() const { return m_mouseModel; } inline ThemeModel *getGlobalThemeModel() const { return m_globalThemeModel; } inline FontModel *getStandFontModel() const { return m_standFontModel; } inline FontModel *getMonoFontModel() const { return m_monoFontModel; } inline FontSizeModel *getFontSizeModel() const { return m_fontSizeModel; } inline WallpaperModel *getCustomWallpaperModel() const { return m_customWallpaperModel; } inline WallpaperModel *getSysWallpaperModel() const { return m_sysWallpaperModel; } inline WallpaperModel *getSolidWallpaperModel() const { return m_solidWallpaperModel; } inline WallpaperModel *getScreenSaverModel() const { return m_screenSaverModel; } inline WallpaperModel *getPicScreenSaverModel() const { return m_picScreenSaverModel; } void setWindowRadius(int radius); int windowRadius(); void setWindowEffectType(int windowEffectType); inline int windowEffectType() const { return m_windowEffectType; } inline double opacity() const { return m_opacity; } void setOpacity(double opacity); inline int miniEffect() const { return m_miniEffect; } void setMiniEffect(const int &effect); inline QString getActiveColor() { return m_activeColor; } void setActiveColor(const QString &color); inline bool getCompactDisplay() { return m_compactDisplay; } void setCompactDisplay(bool value); inline int getScrollBarPolicy() const { return m_scrollBarPolicy;} void setScrollBarPolicy(int policy); inline int getTitleBarHeight() const { return m_titleBarHeight; } void setTitleBarHeight(int titleBarHeight); void setIsMoveWindow(const bool isMoveWindow); bool getIsMoveWindow() const { return m_isMoveWindow; }; inline QString getScrollBarPolicyConfig() const { return m_scrollBarPolicyConfig; } void setScrollBarPolicyConfig(const QString &config); inline QString getCompactDisplayConfig() const { return m_compactDisplayConfig; } void setCompactDisplayConfig(const QString &config); inline QVariantMap getWallpaperMap() const { return m_wallpaperMap; } void setWallpaperMap(const QVariantMap &map); inline QVariantMap getWallpaperSlideShowMap() const { return m_wallpaperSlideShowMap; } void setWallpaperSlideShowMap(const QVariantMap &map); inline QString getCurrentSelectScreen() const { return m_currentSelectScreen; } void setCurrentSelectScreen(const QString &screen); inline QString getCurrentScreenSaver() const { return m_currentScreenSaver; } void setCurrentScreenSaver(const QString ¤tScreenSaver); inline QStringList getScreens() const { return m_screens; } void setScreens(const QStringList &screens); inline bool getLockScreenAtAwake() const { return m_lockScreenAtAwake; } void setLockScreenAtAwake(bool value); inline int getLinePowerScreenSaverIdleTime() const { return m_linePowerScreenSaverIdleTime; }; void setLinePowerScreenSaverIdleTime(int value); inline int getBatteryScreenSaverIdleTime() const { return m_batteryScreenSaverIdleTime; }; void setBatteryScreenSaverIdleTime(int value); inline QString getCurrentScreenSaverPicMode() const { return m_currentScreenSaverPicMode; } void setCurrentScreenSaverPicMode(const QString &mode); inline bool getOnBattery() const { return m_onBattery; } void setOnBattery(bool value); inline QStringList supportEffects() const { return m_supportEffects; } void setSupportEffects(const QStringList &value); Q_SIGNALS: void wmChanged(const bool is3d); void opacityChanged(double opacity); void miniEffectChanged(int effect); void onActiveColorChanged(const QString &color); void onCompositingAllowSwitch(bool value); void windowRadiusChanged(int radius); void onSaveWindowRadiusChanged(int radius); void compactDisplayChanged(bool value); void scrollBarPolicyChanged(int policy); void titleBarHeightChanged(int titleBarHeight); void moveWindowChanged(const bool isMoveWindow); void windowEffectTypeChanged(int windowEffectType); void scrollBarPolicyConfigChanged(const QString &config); void compactDisplayConfigChanged(const QString &config); void wallpaperMapChanged(const QVariantMap &map); void currentSelectScreenChanged(const QString &screen); void currentScreenSaverChanged(const QString ¤t); void screensChanged(const QStringList &screens); void lockScreenAtAwakeChanged(bool value); void linePowerScreenSaverIdleTimeChanged(int value); void batteryScreenSaverIdleTimeChanged(int value); void currentScreenSaverPicModeChanged(const QString &value); void wallpaperSlideShowMapChanged(const QVariantMap &value); void onBatteryChanged(bool value); void miniEffectChanged(bool value); void supportEffectsChanged(const QStringList &value); private: ThemeModel *m_windowModel; ThemeModel *m_iconModel; ThemeModel *m_mouseModel; ThemeModel *m_globalThemeModel; FontModel *m_standFontModel; FontModel *m_monoFontModel; FontSizeModel *m_fontSizeModel; WallpaperSortModel *m_customWallpaperSortModel; WallpaperSortModel *m_sysWallpaperSortModel; WallpaperSortModel *m_solidWallpaperSortModel; WallpaperSortModel *m_screenSaverSortModel; WallpaperSortModel *m_picScreenSaverSortModel; WallpaperModel *m_customWallpaperModel; WallpaperModel *m_sysWallpaperModel; WallpaperModel *m_solidWallpaperModel; WallpaperModel *m_screenSaverModel; WallpaperModel *m_picScreenSaverModel; bool m_isMoveWindow; double m_opacity; int m_miniEffect; QString m_activeColor; int m_windowRadius; bool m_compactDisplay; int m_scrollBarPolicy; int m_titleBarHeight; int m_windowEffectType; QString m_scrollBarPolicyConfig; QString m_compactDisplayConfig; QVariantMap m_wallpaperMap; QVariantMap m_wallpaperSlideShowMap; QString m_currentSelectScreen; QString m_currentScreenSaver; QStringList m_screens; bool m_lockScreenAtAwake; int m_linePowerScreenSaverIdleTime; int m_batteryScreenSaverIdleTime; QString m_currentScreenSaverPicMode; bool m_onBattery; QStringList m_supportEffects; }; #endif // PERSONALIZATIONMODEL_H ================================================ FILE: src/plugin-personalization/operation/personalizationworker.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "personalizationworker.h" #include "operation/personalizationexport.hpp" #include "operation/screensaverprovider.h" #include "operation/wallpaperprovider.h" #include "personalizationdbusproxy.h" #include "model/thememodel.h" #include "model/fontmodel.h" #include "model/fontsizemodel.h" #include "operation/personalizationmodel.h" #include "utils.hpp" #include #include #include #include #include #include #include #include #include #include #include #include #include #include DCORE_USE_NAMESPACE Q_LOGGING_CATEGORY(DdcPersonalWorker, "dcc-personal-worker") #define SOLID_PREFIX "solid::" static const std::vector OPACITY_SLIDER{ 0, 25, 40, 55, 70, 85, 100 }; const QList FontSizeList{ 11, 12, 13, 14, 15, 16, 18, 20 }; constexpr auto ORG_DEEPIN_CONTROL_CENTER = "org.deepin.dde.control-center"; constexpr auto CONTROL_CENTER_PERSONALIZATION = "org.deepin.dde.control-center.personalization"; constexpr auto DTK_PREFERENCE_NAME = "org.deepin.dtk.preference"; constexpr auto SCROLLBAR_POLICY_CONFIG_KEY = "scrollbarPolicyStatus"; constexpr auto COMPACT_MODE_DISPLAY_KEY = "compactDisplayStatus"; constexpr auto TITLE_BAR_HEIGHT_SUPPORT_COMPACT_DISPLAY = "titleBarHeightSupportCompactDisplay"; constexpr auto SIZE_MODE_KEY = "sizeMode"; constexpr auto SCROLLBAR_POLICY_KEY = "scrollBarPolicy"; PersonalizationWorker::PersonalizationWorker(PersonalizationModel *model, QObject *parent) : QObject(parent) , m_model(model) , m_personalizationDBusProxy(new PersonalizationDBusProxy(this)) , m_wallpaperWorker(new WallpaperProvider(m_personalizationDBusProxy, m_model, this)) , m_personalizationConfig(DConfig::create(ORG_DEEPIN_CONTROL_CENTER, CONTROL_CENTER_PERSONALIZATION, "", this)) , m_dtkConfig(DConfig::createGeneric(DTK_PREFERENCE_NAME, "", this)) { if (!Dtk::Gui::DGuiApplicationHelper::testAttribute(Dtk::Gui::DGuiApplicationHelper::IsWaylandPlatform)) { m_screenSaverProvider = new ScreensaverProvider(m_personalizationDBusProxy, m_model, this); } ThemeModel *cursorTheme = m_model->getMouseModel(); ThemeModel *windowTheme = m_model->getWindowModel(); ThemeModel *iconTheme = m_model->getIconModel(); ThemeModel *globalTheme = m_model->getGlobalThemeModel(); FontModel *fontMono = m_model->getMonoFontModel(); FontModel *fontStand = m_model->getStandFontModel(); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::GtkThemeChanged, windowTheme, &ThemeModel::setDefault); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::CursorThemeChanged, cursorTheme, &ThemeModel::setDefault); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::IconThemeChanged, iconTheme, &ThemeModel::setDefault); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::GlobalThemeChanged, globalTheme, &ThemeModel::setDefault); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::MonospaceFontChanged, fontMono, &FontModel::setFontName); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::StandardFontChanged, fontStand, &FontModel::setFontName); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::FontSizeChanged, this, &PersonalizationWorker::FontSizeChanged); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::Refreshed, this, &PersonalizationWorker::onRefreshedChanged); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::OpacityChanged, this, &PersonalizationWorker::refreshOpacity); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::QtActiveColorChanged, this, &PersonalizationWorker::refreshActiveColor); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::WindowRadiusChanged, this, &PersonalizationWorker::onWindowRadiusChanged); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::WallpaperURlsChanged, this, &PersonalizationWorker::onWallpaperUrlsChanged); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::currentScreenSaverChanged, this, &PersonalizationWorker::onCurrentScreenSaverChanged); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::lockScreenAtAwakeChanged, this, &PersonalizationWorker::onLockScreenAtAwakeChanged); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::linePowerScreenSaverTimeoutChanged, this, &PersonalizationWorker::onLinePowerScreenSaverTimeoutChanged); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::batteryScreenSaverTimeoutChanged, this, &PersonalizationWorker::onBatteryScreenSaverTimeoutChanged); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::WallpaperSlideShowChanged, this, &PersonalizationWorker::onWallpaperSlideShowChanged); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::OnBatteryChanged, m_model, &PersonalizationModel::setOnBattery); connect(m_wallpaperWorker, &WallpaperProvider::fetchFinish, this, &PersonalizationWorker::updateWallpaperSelected); connect(qApp, &QGuiApplication::screenAdded, this, &PersonalizationWorker::onScreensChanged); connect(qApp, &QGuiApplication::screenRemoved, this, &PersonalizationWorker::onScreensChanged); connect(m_personalizationDBusProxy, &PersonalizationDBusProxy::Changed, this, [this](const QString &propertyName, const QString &value) { qCDebug(DdcPersonalWorker) << "ChangeProperty is " << propertyName << "; value is" << value; if (propertyName == "globaltheme") { refreshTheme(); } }); connect(m_personalizationConfig, &DConfig::valueChanged, this, &PersonalizationWorker::onPersonalizationConfigChanged); connect(m_dtkConfig, &DConfig::valueChanged, this, &PersonalizationWorker::onDTKConfigChanged); m_themeModels["gtk"] = windowTheme; m_themeModels["icon"] = iconTheme; m_themeModels["cursor"] = cursorTheme; m_themeModels["globaltheme"] = globalTheme; m_fontModels["standardfont"] = fontStand; m_fontModels["monospacefont"] = fontMono; } void PersonalizationWorker::active() { m_personalizationDBusProxy->blockSignals(false); m_wallpaperWorker->fetchData(); if (m_screenSaverProvider) m_screenSaverProvider->fecthData(); refreshOpacity(m_personalizationDBusProxy->opacity()); refreshActiveColor(m_personalizationDBusProxy->qtActiveColor()); onWallpaperUrlsChanged(); onScreensChanged(); onWallpaperSlideShowChanged(); m_model->setCurrentSelectScreen(qApp->primaryScreen()->name()); m_model->getWindowModel()->setDefault(m_personalizationDBusProxy->gtkTheme()); m_model->getIconModel()->setDefault(m_personalizationDBusProxy->iconTheme()); m_model->getMouseModel()->setDefault(m_personalizationDBusProxy->cursorTheme()); m_model->getGlobalThemeModel()->setDefault(m_personalizationDBusProxy->globalTheme()); m_model->getMonoFontModel()->setFontName(m_personalizationDBusProxy->monospaceFont()); m_model->getStandFontModel()->setFontName(m_personalizationDBusProxy->standardFont()); m_model->setWindowRadius(m_personalizationDBusProxy->windowRadius()); m_model->getFontSizeModel()->setFontSize(ptToPx(m_personalizationDBusProxy->fontSize())); m_model->setCompactDisplay(m_personalizationDBusProxy->getDTKSizeMode()); m_model->setScrollBarPolicy(m_dtkConfig->value(SCROLLBAR_POLICY_KEY).toInt()); m_model->setCompactDisplay(m_dtkConfig->value(SIZE_MODE_KEY).toInt()); m_model->setCurrentScreenSaver(m_personalizationDBusProxy->getCurrentScreenSaver()); if (m_model->getCurrentScreenSaver() == DEEPIN_CUSTOM_SCREENSAVER) { m_model->setCurrentScreenSaverPicMode("default"); } else { m_model->setCurrentScreenSaverPicMode(""); } m_model->setLockScreenAtAwake(m_personalizationDBusProxy->getLockScreenAtAwake()); m_model->setOnBattery(m_personalizationDBusProxy->OnBattery()); m_model->setBatteryScreenSaverIdleTime(m_personalizationDBusProxy->getBatteryScreenSaverTimeout()); m_model->setLinePowerScreenSaverIdleTime(m_personalizationDBusProxy->getLinePowerScreenSaverTimeout()); QString scrollbarConfig = m_personalizationConfig->value(SCROLLBAR_POLICY_CONFIG_KEY).toString(); m_model->setScrollBarPolicyConfig(scrollbarConfig); QString compactDisplayConfig = m_personalizationConfig->value(COMPACT_MODE_DISPLAY_KEY).toString(); m_model->setCompactDisplayConfig(compactDisplayConfig); } void PersonalizationWorker::deactive() { m_personalizationDBusProxy->blockSignals(true); } QList PersonalizationWorker::converToList(const QString &type, const QJsonArray &array) { QList list; for (int i = 0; i != array.size(); i++) { QJsonObject object = array.at(i).toObject(); object.insert("type", QJsonValue(type)); list.append(object); } return list; } void PersonalizationWorker::addList(ThemeModel *model, const QString &type, const QJsonArray &array) { QList list; QList objList; QScopedPointer personalizationConfig(DConfig::create("org.deepin.dde.control-center", QStringLiteral("org.deepin.dde.control-center.personalization"), QString(), this)); auto hideIconThemeList = personalizationConfig->value("hideIconThemes").toStringList(); for (int i = 0; i != array.size(); i++) { QJsonObject object = array.at(i).toObject(); if (type == "icon" && hideIconThemeList.contains(object["Name"].toString())) { continue; } object.insert("type", QJsonValue(type)); if (object["Name"].toString() == "Custom") { object["Name"] = tr("Custom"); } objList << object; list.append(object["Id"].toString()); PersonalizationWatcher *watcher = new PersonalizationWatcher(this); watcher->setProperty("category", type); watcher->setProperty("id", object["Id"].toString()); m_personalizationDBusProxy->Thumbnail(type, object["Id"].toString(), watcher, SLOT(onThumbnail(const QString &)), SLOT(errorSlot(const QDBusError &))); } for (const QJsonObject &obj : objList) { model->addItem(obj["Id"].toString(), obj); } for (const QString &id : model->getList().keys()) { if (!list.contains(id)) { model->removeItem(id); } } } void PersonalizationWorker::FontSizeChanged(const double value) const { FontSizeModel *fontSizeModel = m_model->getFontSizeModel(); int px = static_cast(ptToPx(value)); fontSizeModel->setFontSize(px); } void PersonalizationWorker::onGetFontFinished(const QString &category, const QString &json) { setFontList(m_fontModels[category], category, json); } void PersonalizationWorker::onGetThemeFinished(const QString &category, const QString &json) { const QJsonArray &array = QJsonDocument::fromJson(json.toUtf8()).array(); addList(m_themeModels[category], category, array); if (category == "cursor") { m_themeModels[category]->setDefault(m_personalizationDBusProxy->cursorTheme()); } else if (category == "icon") { m_themeModels[category]->setDefault(m_personalizationDBusProxy->iconTheme()); } } void PersonalizationWorker::onGetPicFinished(const QString &category, const QString &id, const QString &json) { m_themeModels[category]->addPic(id, json); } void PersonalizationWorker::onRefreshedChanged(const QString &type) { if (m_themeModels.keys().contains(type)) { refreshThemeByType(type); } if (m_fontModels.keys().contains(type)) { refreshFontByType(type); } } void PersonalizationWorker::onWindowRadiusChanged(int value) { m_model->setWindowRadius(value); } void PersonalizationWorker::onCompactDisplayChanged(int value) { m_model->setCompactDisplay(value); } void PersonalizationWorker::onWindowEffectChanged(int value) { m_model->setWindowEffectType(value); } void PersonalizationWorker::onScreensChanged() { bool isMirror = true; QRect geometry = qApp->primaryScreen()->availableGeometry(); for (const auto screen : qApp->screens()) { if (geometry != screen->availableGeometry()) { isMirror = false; break; } } for (const auto screen : qApp->screens()) { connect(screen, &QScreen::geometryChanged, this, &PersonalizationWorker::onScreensChanged, Qt::UniqueConnection); } if (isMirror) { m_model->setScreens({qApp->primaryScreen()->name()}); m_model->setCurrentSelectScreen(qApp->primaryScreen()->name()); return; } else { QStringList screenNameList{}; for (const auto &screen : qApp->screens()) { screenNameList << screen->name(); } m_model->setScreens(screenNameList); }; } void PersonalizationWorker::onCurrentScreenSaverChanged(const QString &value) { m_model->setCurrentScreenSaver(value); } void PersonalizationWorker::onLockScreenAtAwakeChanged(bool value) { m_model->setLockScreenAtAwake(value); } void PersonalizationWorker::onLinePowerScreenSaverTimeoutChanged(int value) { m_model->setLinePowerScreenSaverIdleTime(value); } void PersonalizationWorker::onBatteryScreenSaverTimeoutChanged(int value) { m_model->setBatteryScreenSaverIdleTime(value); } void PersonalizationWorker::onWallpaperSlideShowChanged() { QVariantMap wallpaperSlideShowMap; QStringList screenNameList; for (const auto screen : qApp->screens()) { screenNameList << screen->name(); } for (const auto &screenName : screenNameList) { QString slideShow = m_personalizationDBusProxy->wallpaperSlideShow(screenName); wallpaperSlideShowMap.insert(screenName, slideShow); } if (!wallpaperSlideShowMap.isEmpty()) { m_model->setWallpaperSlideShowMap(wallpaperSlideShowMap); } } void PersonalizationWorker::updateWallpaperSelected() { QStringList wallpaperList; auto wallpaperMap = m_model->getWallpaperMap(); for (auto it = wallpaperMap.cbegin(); it != wallpaperMap.cend(); ++it) { wallpaperList << it.value().toString(); } m_model->getSysWallpaperModel()->updateSelected(wallpaperList); m_model->getSolidWallpaperModel()->updateSelected(wallpaperList); m_model->getCustomWallpaperModel()->updateSelected(wallpaperList); // 等待model更新完成后再发出wallpaperMapChanged信号,避免qml中读取到旧的数据 Q_EMIT m_model->wallpaperMapChanged(m_model->getWallpaperMap()); } void PersonalizationWorker::onWallpaperUrlsChanged() { // wallpaperUrls 存储着每个工作区和每个屏幕的壁纸, 若其改变, 需要刷新当前屏幕壁纸 QVariantMap wallpaperMap; QStringList screenNameList; for (const auto screen : qApp->screens()) { screenNameList << screen->name(); } for (const auto &screenName : screenNameList) { QString url = m_personalizationDBusProxy->getCurrentWorkSpaceBackgroundForMonitor(screenName); if (!url.isEmpty()) { wallpaperMap.insert(screenName, url); } } if (!wallpaperMap.isEmpty()) { m_model->setWallpaperMap(wallpaperMap); } updateWallpaperSelected(); } void PersonalizationWorker::setFontList(FontModel *model, const QString &type, const QString &list) { QJsonArray array = QJsonDocument::fromJson(list.toLocal8Bit().data()).array(); QStringList l; for (int i = 0; i != array.size(); i++) l << array.at(i).toString(); PersonalizationWatcher *watcher = new PersonalizationWatcher(this); watcher->setProperty("type", type); watcher->setProperty("FontModel", QVariant::fromValue(static_cast(model))); m_personalizationDBusProxy->Show(type, l, watcher, SLOT(onShow(const QString &))); } void PersonalizationWorker::setTitleBarHeight(int) { } void PersonalizationWorker::setDiabledCompactToTitleHeight() { if (m_personalizationConfig->value(TITLE_BAR_HEIGHT_SUPPORT_COMPACT_DISPLAY).toBool()) { m_personalizationConfig->setValue(TITLE_BAR_HEIGHT_SUPPORT_COMPACT_DISPLAY, false); } } void PersonalizationWorker::refreshTheme() { for (QMap::ConstIterator it = m_themeModels.begin(); it != m_themeModels.end(); it++) { refreshThemeByType(it.key()); } } void PersonalizationWorker::refreshThemeByType(const QString &type) { PersonalizationWatcher *watcher = new PersonalizationWatcher(this); watcher->setProperty("category", type); m_personalizationDBusProxy->List(type, watcher, SLOT(onList(const QString &)), SLOT(errorSlot(const QDBusError &))); } void PersonalizationWorker::refreshFont() { for (QMap::const_iterator it = m_fontModels.begin(); it != m_fontModels.end(); it++) { refreshFontByType(it.key()); } FontSizeChanged(m_personalizationDBusProxy->fontSize()); } bool PersonalizationWorker::checkWallpaperLockStatus() { if (QFileInfo::exists("/var/lib/deepin/permission-manager/wallpaper_locked")) { QDBusInterface notify("org.freedesktop.Notifications", "/org/freedesktop/Notifications", "org.freedesktop.Notifications"); notify.asyncCall(QString("Notify"), QString("dde-control-center"), // title static_cast(0), QString("preferences-system"), // icon QObject::tr("This system wallpaper is locked. Please contact your admin."), QString(), QStringList(), QVariantMap(), 5000); qCInfo(DdcPersonalWorker) << "wallpaper is locked.."; return true; } return false; } void PersonalizationWorker::refreshFontByType(const QString &type) { PersonalizationWatcher *watcher = new PersonalizationWatcher(this); watcher->setProperty("category", type); m_personalizationDBusProxy->List(type, watcher, SLOT(onGetFont(const QString &)), SLOT(errorSlot(const QDBusError &))); } void PersonalizationWorker::refreshActiveColor(const QString &color) { m_model->setActiveColor(color); } void PersonalizationWorker::refreshOpacity(double opacity) { qCDebug(DdcPersonalWorker) << QString("opacity: %1").arg(opacity); m_model->setOpacity(opacity); } double PersonalizationWorker::sliderValutToOpacity(const int value) const { return static_cast(value) / static_cast(100); } void PersonalizationWorker::setDefaultByType(const QString &type, const QString &value) { m_personalizationDBusProxy->Set(type, value); } void PersonalizationWorker::setDefault(const QJsonObject &value) { //使用type去调用 m_personalizationDBusProxy->Set(value["type"].toString(), value["Id"].toString()); } void PersonalizationWorker::setFontSize(const int pixelSize) { m_personalizationDBusProxy->setFontSize(pxToPt(pixelSize)); } void PersonalizationWorker::setWindowEffect(int) { } void PersonalizationWorker::setMovedWindowOpacity(bool) { } void PersonalizationWorker::setOpacity(int opacity) { m_personalizationDBusProxy->setOpacity(sliderValutToOpacity(opacity)); } void PersonalizationWorker::setMiniEffect(int) { } void PersonalizationWorker::setActiveColor(const QString &hexColor) { m_personalizationDBusProxy->setQtActiveColor(hexColor); } void PersonalizationWorker::setActiveColors(const QString &activeColors) { m_personalizationDBusProxy->setActiveColors(activeColors); } void PersonalizationWorker::addCustomWallpaper(const QString &url) { QString lastHashPath; if (isURI(url)) { lastHashPath = m_personalizationDBusProxy->saveCustomWallpaper(currentUserName(), QUrl(url).toLocalFile()); } else { lastHashPath = m_personalizationDBusProxy->saveCustomWallpaper(currentUserName(), url); } setWallpaperForMonitor(m_model->getCurrentSelectScreen(), lastHashPath, false, PersonalizationExport::Option_All); } void PersonalizationWorker::addSolidWallpaper(const QColor &color) { QString path = QDir::tempPath() + QString("/XXXXXX-solid-color-%0%1%2.jpg").arg(QString::number(color.red(), 16)) .arg(QString::number(color.green(), 16)) .arg(QString::number(color.blue(), 16)); // create img QImage img(1920, 1080, QImage::Format_ARGB32); img.fill(color); QTemporaryFile file(path); file.setAutoRemove(false); // 将临时文件设置为不自动删除 if (!file.open()) { qCWarning(DdcPersonalWorker) << "fail to save image" << file.fileName(); return; } img.save(&file, "JPG"); //set to dde, and prefix solid:: to tell dde this is a solid color wallpaper. const QString &hashPath = m_personalizationDBusProxy->saveCustomWallpaper(currentUserName(), SOLID_PREFIX + file.fileName()); setWallpaperForMonitor(m_model->getCurrentSelectScreen(), hashPath, false, PersonalizationExport::Option_All); } void PersonalizationWorker::deleteWallpaper(const QString &str) { qCWarning(DdcPersonalWorker) << "delete wallpaper" << str; if (isURI(str)) { m_personalizationDBusProxy->deleteCustomWallpaper(currentUserName(), QUrl(str).toLocalFile()); } else { m_personalizationDBusProxy->deleteCustomWallpaper(currentUserName(), str); } } void PersonalizationWorker::setScreenSaver(const QString &value) { m_personalizationDBusProxy->setCurrentScreenSaver(value); onCurrentScreenSaverChanged(value); } void PersonalizationWorker::setWallpaperSlideShow(const QString &monitorName, const QString &sliderShow) { m_personalizationDBusProxy->setWallpaperSlideShow(monitorName, sliderShow); } void PersonalizationWorker::setCurrentScreenSaverPicMode(const QString &mode) { m_model->setCurrentScreenSaverPicMode(mode); } void PersonalizationWorker::requestScreenSaverConfig(const QString &name) { m_personalizationDBusProxy->requestScreenSaverConfig(name); } void PersonalizationWorker::startScreenSaverPreview() { m_personalizationDBusProxy->preview(m_model->getCurrentScreenSaver()); } void PersonalizationWorker::setLockScreenAtAwake(bool value) { m_personalizationDBusProxy->setLockScreenAtAwake(value); } void PersonalizationWorker::setScreenSaverIdleTime(int value) { m_personalizationDBusProxy->setLinePowerScreenSaverTimeout(value); m_personalizationDBusProxy->setBatteryScreenSaverTimeout(value); } void PersonalizationWorker::setWindowRadius(int radius) { m_personalizationDBusProxy->setWindowRadius(radius); } void PersonalizationWorker::setCompactDisplay(bool value) { // 如果标题栏高度支持紧凑模式,则开/关紧凑模式需要与标题栏高度联动, 应与前端数值保持一致 static const QVector TitleHeightList = {24, 32, 40, 50}; bool isTitleBarHeightSupported = m_personalizationConfig->value(TITLE_BAR_HEIGHT_SUPPORT_COMPACT_DISPLAY).toBool(); if (isTitleBarHeightSupported) { int index = TitleHeightList.indexOf(m_model->getTitleBarHeight()); int tarHeight = value ? TitleHeightList.value(index - 1) : TitleHeightList.value(index + 1); if (TitleHeightList.contains(tarHeight)) { setTitleBarHeight(tarHeight); } } m_dtkConfig->setValue(SIZE_MODE_KEY, value); // TODO delete m_personalizationDBusProxy->setDTKSizeMode(int(value)); } void PersonalizationWorker::setScrollBarPolicy(int policy) { m_dtkConfig->setValue(SCROLLBAR_POLICY_KEY, policy); // TODO delete m_personalizationDBusProxy->setScrollBarPolicy( policy); } void PersonalizationWorker::goDownloadTheme() { DDBusSender().interface("com.home.appstore.client") .path("/com/home/appstore/client") .service("com.home.appstore.client") .method("openBusinessUri") .arg(QString("searchApp?keyword=theme")).call(); } template T PersonalizationWorker::toSliderValue(std::vector list, T value) { for (auto it = list.cbegin(); it != list.cend(); ++it) { if (value < *it) { return (--it) - list.begin(); } } return list.end() - list.begin(); } void PersonalizationWorker::onPersonalizationConfigChanged(const QString &key) { if (key == SCROLLBAR_POLICY_CONFIG_KEY) { QString value = m_personalizationConfig->value(key).toString(); m_model->setScrollBarPolicyConfig(value); } else if (key == COMPACT_MODE_DISPLAY_KEY) { QString value = m_personalizationConfig->value(key).toString(); m_model->setCompactDisplayConfig(value); } } void PersonalizationWorker::onDTKConfigChanged(const QString &key) { qCDebug(DdcPersonalWorker) << "PersonalizationWorker::onDTKConfigChanged" << key << m_dtkConfig->value(key); if (key == SIZE_MODE_KEY) { m_model->setCompactDisplay(m_dtkConfig->value(key).toBool()); } else if (key == SCROLLBAR_POLICY_KEY) { m_model->setScrollBarPolicy(m_dtkConfig->value(key).toInt()); } } void PersonalizationWorker::setGlobalTheme(const QString &themeId) { qDebug() << "applied global theme" << themeId; ThemeModel *globalTheme = m_model->getGlobalThemeModel(); QString mode; (void)getGlobalThemeId(globalTheme->getDefault(), mode); const QMap &itemList = globalTheme->getList(); if (itemList.contains(themeId)) setDefaultByType(itemList.value(themeId)["type"].toString(), themeId + mode); } void PersonalizationWorker::setAppearanceTheme(const QString &id, bool keepAuto) { Q_UNUSED(keepAuto) ThemeModel *globalTheme = m_model->getGlobalThemeModel(); QString mode; QString themeId = getGlobalThemeId(globalTheme->getDefault(), mode); const QMap &itemList = globalTheme->getList(); if (itemList.contains(themeId)) { setDefaultByType(itemList.value(themeId)["type"].toString(), themeId + id); } } void PersonalizationWorker::setIconTheme(const QString &id) { for (auto &object : m_model->getIconModel()->getList()) { if (object.value("Id").toString() == id) { setDefault(object); return; } } } void PersonalizationWorker::setCursorTheme(const QString &id) { for (auto &object : m_model->getMouseModel()->getList()) { if (object.value("Id").toString() == id) { setDefault(object); return; } } } void PersonalizationWorker::setWallpaperForMonitor(const QString &screen, const QString &url, bool isDark, PersonalizationExport::WallpaperSetOption option) { if (option == PersonalizationExport::Option_Desktop) { setBackgroundForMonitor(screen, url, isDark); } else if (option == PersonalizationExport::Option_Lock) { setLockBackForMonitor(screen, url, isDark); } else if (option == PersonalizationExport::Option_All) { setBackgroundForMonitor(screen, url, isDark); setLockBackForMonitor(screen, url, isDark); } } void PersonalizationWorker::setBackgroundForMonitor(const QString &, const QString &, bool ) { } void PersonalizationWorker::setLockBackForMonitor(const QString &, const QString &, bool) { } PersonalizationWatcher::PersonalizationWatcher(PersonalizationWorker *work) : QObject(work) , m_work(work) { } void PersonalizationWatcher::onShow(const QString &json) { deleteLater(); QJsonArray arrayValue = QJsonDocument::fromJson(json.toLocal8Bit().data()).array(); QList list = m_work->converToList(property("type").toString(), arrayValue); // sort for display name std::sort(list.begin(), list.end(), [=](const QJsonObject &obj1, const QJsonObject &obj2) { QCollator qc; return qc.compare(obj1["Name"].toString(), obj2["Name"].toString()) < 0; }); FontModel *model = static_cast(property("FontModel").value()); model->setFontList(list); } void PersonalizationWatcher::onList(const QString &json) { m_work->onGetThemeFinished(property("category").toString(), json); deleteLater(); } void PersonalizationWatcher::onGetFont(const QString &json) { m_work->onGetFontFinished(property("category").toString(), json); deleteLater(); } void PersonalizationWatcher::onThumbnail(const QString &json) { m_work->onGetPicFinished(property("category").toString(), property("id").toString(), json); deleteLater(); } void PersonalizationWatcher::errorSlot(const QDBusError &err) { qCInfo(DdcPersonalWorker) << err; deleteLater(); } ================================================ FILE: src/plugin-personalization/operation/personalizationworker.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef PERSONALIZATIONWORKER_H #define PERSONALIZATIONWORKER_H #include "operation/personalizationexport.hpp" #include "operation/screensaverprovider.h" #include "operation/wallpaperprovider.h" #include "personalizationmodel.h" #include #include #include #include #include #include #include #include class PersonalizationDBusProxy; class ThemeModel; class PersonalizationWorker : public QObject { Q_OBJECT public: PersonalizationWorker(PersonalizationModel *model, QObject *parent = nullptr); virtual void active(); void deactive(); void onGetList(); void refreshTheme(); void refreshFont(); bool checkWallpaperLockStatus(); public Q_SLOTS: void setDiabledCompactToTitleHeight(); void setScrollBarPolicy(int policy); void setCompactDisplay(bool value); void goDownloadTheme(); // 设置给Appearance分别在深色和浅色下的活动色 void setActiveColors(const QString &activeColors); void addCustomWallpaper(const QString &url); void addSolidWallpaper(const QColor &color); void deleteWallpaper(const QString &str); void setScreenSaver(const QString &value); void setWallpaperSlideShow(const QString &monitorName, const QString &sliderShow); void startScreenSaverPreview(); void setLockScreenAtAwake(bool value); void setScreenSaverIdleTime(int value); void setCurrentScreenSaverPicMode(const QString &mode); void requestScreenSaverConfig(const QString &name); virtual void setDefaultByType(const QString &type, const QString &value); virtual void setDefault(const QJsonObject &value); virtual void setFontSize(const int pixelSize); virtual void setOpacity(int opcaity); virtual void setWindowEffect(int value); virtual void setMiniEffect(int effect); virtual void setMovedWindowOpacity(bool value); virtual void setActiveColor(const QString &hexColor); virtual void setWindowRadius(int radius); virtual void setTitleBarHeight(int value); virtual void setGlobalTheme(const QString &themeId); virtual void setAppearanceTheme(const QString &id, bool keepAuto = false); virtual void setIconTheme(const QString &id); virtual void setCursorTheme(const QString &id); virtual void setWallpaperForMonitor(const QString &screen, const QString &url, bool isDark, PersonalizationExport::WallpaperSetOption option); virtual void setBackgroundForMonitor(const QString &screenName, const QString &url, bool isDark); virtual void setLockBackForMonitor(const QString &screenName, const QString &url, bool isDark); signals: void personalizationChanged(const QString &propertyName, const QString &value); private Q_SLOTS: void FontSizeChanged(const double value) const; void onGetFontFinished(const QString &category, const QString &json); void onGetThemeFinished(const QString &category, const QString &json); void onGetPicFinished(const QString &category, const QString &id, const QString &json); void onRefreshedChanged(const QString &type); void setFontList(FontModel *model, const QString &type, const QString &list); void onWindowRadiusChanged(int value); void onCompactDisplayChanged(int value); void onWindowEffectChanged(int value); void onScreensChanged(); void onCurrentScreenSaverChanged(const QString &value); void onLockScreenAtAwakeChanged(bool value); void onLinePowerScreenSaverTimeoutChanged(int value); void onBatteryScreenSaverTimeoutChanged(int value); void onWallpaperSlideShowChanged(); void updateWallpaperSelected(); protected: virtual void onWallpaperUrlsChanged(); private: double sliderValutToOpacity(const int value) const; QList converToList(const QString &type, const QJsonArray &array); void addList(ThemeModel *model, const QString &type, const QJsonArray &array); void refreshThemeByType(const QString &type); void refreshFontByType(const QString &type); void refreshOpacity(double opacity); void refreshActiveColor(const QString &color); void onPersonalizationConfigChanged(const QString &key); void onDTKConfigChanged(const QString &key); template T toSliderValue(std::vector list, T value); protected: PersonalizationModel *m_model; PersonalizationDBusProxy *m_personalizationDBusProxy; private: WallpaperProvider *m_wallpaperWorker = nullptr; ScreensaverProvider *m_screenSaverProvider = nullptr; Dtk::Core::DConfig *m_personalizationConfig = nullptr; Dtk::Core::DConfig *m_dtkConfig = nullptr; QMap m_themeModels; QMap m_fontModels; friend class PersonalizationWatcher; }; class QDBusError; class PersonalizationWatcher : public QObject { Q_OBJECT public: PersonalizationWatcher(PersonalizationWorker *work); private Q_SLOTS: void onShow(const QString &json); void onList(const QString &json); void onGetFont(const QString &json); void onThumbnail(const QString &json); void errorSlot(const QDBusError &err); private: PersonalizationWorker *m_work = nullptr; }; #endif // PERSONALIZATIONWORKER_H ================================================ FILE: src/plugin-personalization/operation/qrc/personalization.qrc ================================================ icons/dcc_nav_personalization_42px.svg icons/dcc_nav_personalization_84px.svg texts/fontsize_decrease_16px.svg texts/fontsize_increase_16px.svg texts/transparency_high_16px.svg texts/transparency_low_16px.svg texts/round_high_16px.svg texts/round_low_16px.svg texts/help_16px.svg dark/icons/corner_none_108px.svg dark/icons/corner_small_108px.svg dark/icons/corner_middle_108px.svg dark/icons/corner_big_108px.svg light/icons/corner_none_108px.svg light/icons/corner_small_108px.svg light/icons/corner_middle_108px.svg light/icons/corner_big_108px.svg icons/download_more_light.png icons/download_more_dark.png icons/slideshow_default_preview.webp icons/slideshow_default.png icons/balance.dci icons/best_vision.dci icons/optimum_performance.dci icons/appearance.dci icons/font_size.dci icons/icon_cursor.dci icons/taskbar.dci icons/dcc_wallpaper.dci icons/screensaver.dci icons/window_effect.dci icons/theme_icon.dci icons/topic_cursor.dci icons/color_extractor.dci icons/close.dci icons/arrow_left.dci icons/arrow_right.dci icons/wallpaper_add.dci icons/wallpaper_addcolor.dci icons/wallpaper_add_bg.dci ================================================ FILE: src/plugin-personalization/operation/screensaverprovider.cpp ================================================ // SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "screensaverprovider.h" #include "operation/model/wallpapermodel.h" #include "operation/personalizationdbusproxy.h" #include "utils.hpp" #include #include #include #include #include #include ScreensaverWorker::ScreensaverWorker(PersonalizationDBusProxy *proxy, QObject *parent) : QObject(parent) , m_proxy(proxy) { } void ScreensaverWorker::terminate() { running = false; } void ScreensaverWorker::list() { running = true; QStringList saverNameList = m_proxy->getAllscreensaver(); QStringList configurable = m_proxy->ConfigurableItems(); // Supports parameter setting for multiple screensavers int deepin = 0; for (const QString &name : saverNameList) { // The screensaver with the parameter configuration is placed first if (name == DEEPIN_CUSTOM_SCREENSAVER) { saverNameList.move(saverNameList.indexOf(name), deepin); deepin++; } } if (!running) return; QList items; QMap imgs; for (const QString &name : saverNameList) { // remove if ("flurry" == name || DEEPIN_CUSTOM_SCREENSAVER == name) continue; if (!running) return; auto temp = WallpaperItemPtr(new WallpaperItem); items.append(temp); QString coverPath = m_proxy->GetScreenSaverCover(name); const QString &thumbnail = QUrl::fromLocalFile(coverPath).toString(); temp->url = name; temp->configurable = configurable.contains(name); temp->deleteAble = false; temp->picPath = coverPath; temp->thumbnail = thumbnail; imgs.insert(name, coverPath); } emit pushScreensaver(items); running = false; } void ScreensaverProvider::setScreensaver(const QList &items) { qDebug() << "get screensaver list" << items.size() << "current thread" << QThread::currentThread() << "main:" << qApp->thread(); m_model->getScreenSaverModel()->resetData(items);} ScreensaverProvider::ScreensaverProvider(PersonalizationDBusProxy *proxy, PersonalizationModel *model, QObject *parent) : QObject(parent) , m_model(model) , m_proxy(proxy) { workThread = new QThread(this); worker = new ScreensaverWorker(proxy); worker->moveToThread(workThread); workThread->start(); const static QMap> picScreenSaverModesMap { {"default", {{"picPath", "qrc:///icons/slideshow_default_preview.webp"}, {"thumbnail", "qrc:///icons/slideshow_default.png"}}}, }; QList items; for (auto it = picScreenSaverModesMap.constBegin(); it != picScreenSaverModesMap.constEnd(); ++it) { auto temp = WallpaperItemPtr(new WallpaperItem); items.append(temp); temp->picPath = it.value()["picPath"]; temp->url = it.key(); temp->deleteAble = false; temp->thumbnail = it.value()["thumbnail"]; } m_model->getPicScreenSaverModel()->resetData(items); connect(worker, &ScreensaverWorker::pushScreensaver, this, &ScreensaverProvider::setScreensaver, Qt::QueuedConnection); } ScreensaverProvider::~ScreensaverProvider() { worker->terminate(); workThread->quit(); workThread->wait(1000); if (workThread->isRunning()) workThread->terminate(); delete worker; worker = nullptr; } void ScreensaverProvider::fecthData() { QMetaObject::invokeMethod(worker, "list", Qt::QueuedConnection); } ================================================ FILE: src/plugin-personalization/operation/screensaverprovider.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "operation/model/wallpapermodel.h" #include "personalizationdbusproxy.h" #include "personalizationmodel.h" class ScreensaverWorker : public QObject { Q_OBJECT public: explicit ScreensaverWorker(PersonalizationDBusProxy *proxy, QObject *parent = nullptr); void terminate(); signals: void pushScreensaver(const QList &items); public slots: void list(); private: PersonalizationDBusProxy *m_proxy = nullptr; volatile bool running = false; }; class ScreensaverProvider : public QObject { Q_OBJECT public: explicit ScreensaverProvider(PersonalizationDBusProxy *proxy, PersonalizationModel *model, QObject *parent = nullptr); ~ScreensaverProvider() override; void fecthData(); private slots: void setScreensaver(const QList &items); private: QThread *workThread = nullptr; ScreensaverWorker *worker = nullptr; PersonalizationModel *m_model = nullptr; PersonalizationDBusProxy *m_proxy = nullptr; }; ================================================ FILE: src/plugin-personalization/operation/treelandworker.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include #include #include #include #include #include #include #include #include #include #include "utils.hpp" #include #include #include #include "treelandworker.h" #include "operation/personalizationworker.h" #include "operation/model/thememodel.h" #define TYPEWALLPAPER "wallpaper" #define TYPEGREETERBACKGROUND "greeterbackground" #define TYPEWINDOWOPACITY "windowopacity" #define TYPEWINDOWRADIUS "windowradius" #define TYPEICON "icon" #define TYPECURSOR "cursor" #define TYPEGTK "gtk" #define TYPEFONTSIZE "fontsize" #define TYPEACTIVECOLOR "activecolor" #define TYPESTANDARDFONT "standardfont" #define TYPEMONOSPACEFONT "monospacefont" Q_LOGGING_CATEGORY(DdcPersonnalizationTreelandWorker, "dcc-personalization-treeland-woker") TreeLandWorker::TreeLandWorker(PersonalizationModel *model, QObject *parent) : PersonalizationWorker(model, parent) { } #ifdef Enable_Treeland void TreeLandWorker::setWallpaperForMonitor(const QString &screen, const QString &url, bool isDark, PersonalizationExport::WallpaperSetOption option) { if (checkWallpaperLockStatus()) { return; } if (option == PersonalizationExport::Option_Desktop) { setBackgroundForMonitor(screen, url, isDark); } else if (option == PersonalizationExport::Option_Lock) { setLockBackForMonitor(screen, url, isDark); } else if (option == PersonalizationExport::Option_All) { setBackgroundForMonitor(screen, url, isDark); setLockBackForMonitor(screen, url, isDark); } } void TreeLandWorker::setBackgroundForMonitor(const QString &monitorName, const QString &url, bool isDark) { setWallpaper(monitorName, url, isDark, PersonalizationWallpaperContext::options_background); } QString TreeLandWorker::getBackgroundForMonitor(const QString &monitorName) { if (m_wallpapers.contains(monitorName)) { return m_wallpapers.value(monitorName)->url; } return QString(); } void TreeLandWorker::setLockBackForMonitor(const QString &monitorName, const QString &url, bool isDark) { setWallpaper(monitorName, url, isDark, PersonalizationWallpaperContext::options_lockscreen); } QString TreeLandWorker::getLockBackForMonitor(const QString &monitorName) { if (m_lockWallpapers.contains(monitorName)) { return m_lockWallpapers.value(monitorName)->url; } return QString(); } void TreeLandWorker::setDefault(const QJsonObject &value) { const QString key = value.value("type").toString(); const QString id = value.value("Id").toString(); if (key == "standardfont") { setFontName(id); } else if (key == "monospacefont") { setMonoFontName(id); } PersonalizationWorker::setDefault(value); } void TreeLandWorker::setAppearanceTheme(const QString &id, bool keepAuto) { qCDebug(DdcPersonnalizationTreelandWorker) << "setAppearanceTheme:" << id; if (!keepAuto) { PersonalizationWorker::setAppearanceTheme(id); } if (id == ".light" && m_appearanceTheme != PersonalizationAppearanceContext::theme_type::theme_type_light) { m_appearanceTheme = PersonalizationAppearanceContext::theme_type::theme_type_light; m_appearanceContext->set_window_theme_type(PersonalizationAppearanceContext::theme_type::theme_type_light); } else if (id == ".dark" && m_appearanceTheme != PersonalizationAppearanceContext::theme_type::theme_type_dark) { m_appearanceTheme = PersonalizationAppearanceContext::theme_type::theme_type_dark; m_appearanceContext->set_window_theme_type(PersonalizationAppearanceContext::theme_type::theme_type_dark); } else if (id.isEmpty() && m_appearanceTheme != PersonalizationAppearanceContext::theme_type::theme_type_auto) { m_appearanceTheme = PersonalizationAppearanceContext::theme_type::theme_type_auto; m_appearanceContext->set_window_theme_type(PersonalizationAppearanceContext::theme_type::theme_type_auto); } else { qWarning() << "error id" << id; } } void TreeLandWorker::setFontName(const QString& fontName) { qCDebug(DdcPersonnalizationTreelandWorker) << "setFontName:" << fontName; if (m_fontName == fontName) { return; } m_fontName = fontName; m_fontContext->set_font(fontName); } void TreeLandWorker::setMonoFontName(const QString& monoFontName) { qCDebug(DdcPersonnalizationTreelandWorker) << "setMonoFontName:" << monoFontName; if (m_monoFontName == monoFontName) { return; } m_monoFontName = monoFontName; m_fontContext->set_monospace_font(monoFontName); } void TreeLandWorker::setIconTheme(const QString &id) { qCDebug(DdcPersonnalizationTreelandWorker) << "setIconTheme:" << id; if (m_iconTheme == id) { return; } m_iconTheme = id; PersonalizationWorker::setIconTheme(id); m_appearanceContext->set_icon_theme(id); } void TreeLandWorker::setCursorTheme(const QString &id) { qCDebug(DdcPersonnalizationTreelandWorker) << "setIconTheme:" << id; if (m_cursorTheme == id) { return; } m_cursorTheme = id; PersonalizationWorker::setCursorTheme(id); m_cursorContext->set_theme(id); m_cursorContext->commit(); } void TreeLandWorker::setActiveColor(const QString &hexColor) { qCDebug(DdcPersonnalizationTreelandWorker) << "setActiveColor:" << hexColor; if (m_activeColor == hexColor) { return; } m_activeColor = hexColor; PersonalizationWorker::setActiveColor(hexColor); m_appearanceContext->set_active_color(hexColor); } void TreeLandWorker::setFontSize(const int pixelSize) { qCDebug(DdcPersonnalizationTreelandWorker) << "setFontSize:" << pixelSize; if (m_fontSize == pixelSize) { return; } m_fontSize = pixelSize; PersonalizationWorker::setFontSize(pixelSize); m_fontContext->set_font_size(pxToPt(pixelSize) * 10); } void TreeLandWorker::setTitleBarHeight(int value) { qCDebug(DdcPersonnalizationTreelandWorker) << "setTitleBarHeight:" << value; if (m_titleBarHeight == value) { return; } m_titleBarHeight = value; PersonalizationWorker::setTitleBarHeight(value); m_appearanceContext->set_window_titlebar_height(value); } void TreeLandWorker::setWindowRadius(int value) { qCDebug(DdcPersonnalizationTreelandWorker) << "setWindowRadius:" << value; if (m_windowRadius == value) { return; } m_windowRadius = value; PersonalizationWorker::setWindowRadius(value); m_appearanceContext->set_round_corner_radius(value); } void TreeLandWorker::setOpacity(int value) { qCDebug(DdcPersonnalizationTreelandWorker) << "setOpacity:" << value; if (m_opacity == value) { return; } m_opacity = value; PersonalizationWorker::setOpacity(value); m_appearanceContext->set_window_opacity(value); } void TreeLandWorker::setGlobalTheme(const QString &themeId) { qCDebug(DdcPersonnalizationTreelandWorker) << "setGlobalTheme:" << themeId; if (m_globalTheme == themeId) { return; } m_globalTheme = themeId; handleGlobalTheme(themeId); PersonalizationWorker::setGlobalTheme(themeId); } void TreeLandWorker::onWallpaperUrlsChanged() { QVariantMap wallpaperMap; for (auto it = m_wallpapers.begin(); it != m_wallpapers.end(); ++it) { wallpaperMap.insert(it.key(), it.value()->url); } if (!wallpaperMap.isEmpty()) { m_model->setWallpaperMap(wallpaperMap); } } void TreeLandWorker::init() { if (m_wallpaperContext.isNull()) { m_wallpaperContext.reset(new PersonalizationWallpaperContext(m_personalizationManager->get_wallpaper_context())); connect(m_wallpaperContext.get(), &PersonalizationWallpaperContext::metadataChanged, this, &TreeLandWorker::wallpaperMetaDataChanged); m_wallpaperContext->get_metadata(); } if (m_appearanceContext.isNull()) { m_appearanceContext.reset(new PersonalizationAppearanceContext(m_personalizationManager->get_appearance_context(), this->m_model)); } if (m_cursorContext.isNull()) { m_cursorContext.reset(new PersonalizationCursorContext(m_personalizationManager->get_cursor_context(), this->m_model)); } if (m_fontContext.isNull()) { m_fontContext.reset(new PersonalizationFontContext(m_personalizationManager->get_font_context(), this->m_model)); } } void TreeLandWorker::wallpaperMetaDataChanged(const QString &data) { QJsonDocument json_doc = QJsonDocument::fromJson(data.toLocal8Bit()); if (!json_doc.isNull()) { QJsonObject json = json_doc.object(); for (auto it = json.begin(); it != json.end(); ++it) { QJsonObject context = it.value().toObject(); if (context.isEmpty()) continue; WallpaperMetaData *wallpaper = nullptr; if (m_wallpapers.contains(it.key())) { wallpaper = m_wallpapers.value(it.key()); } else { wallpaper = new WallpaperMetaData(); m_wallpapers.insert(it.key(), wallpaper); } wallpaper->isDark = context["isDark"].toBool(); wallpaper->url = context["url"].toString(); wallpaper->monitorName = context["monitorName"].toString(); } } onWallpaperUrlsChanged(); } void TreeLandWorker::setWallpaper(const QString &monitorName, const QString &url, bool isDark, uint32_t option) { qCDebug(DdcPersonnalizationTreelandWorker) << "setWallpaper:" << monitorName << "url:" << url << "isDark:" << isDark << "option:" << option; if (checkWallpaperLockStatus()) { return; } if (!m_wallpaperContext) return; QString dest; if (QFile::exists(url)) { dest = url; } else { QUrl destUrl(url); dest = destUrl.toLocalFile(); } if (dest.isEmpty()) return; QFile file(dest); if (file.open(QIODevice::ReadOnly)) { QMap wallpapers; if (option == PersonalizationWallpaperContext::options_background) { wallpapers = m_wallpapers; } else { wallpapers = m_lockWallpapers; } if (!m_wallpapers.contains(monitorName)) { m_wallpapers.insert(monitorName, new WallpaperMetaData); } auto meta_data = m_wallpapers.value(monitorName); if (meta_data != nullptr) { meta_data->isDark = isDark; meta_data->url = url; meta_data->monitorName = monitorName; m_wallpaperContext->set_on(PersonalizationWallpaperContext::options(option)); m_wallpaperContext->set_isdark(isDark); QMapIterator it(m_wallpapers); QJsonObject json; while (it.hasNext()) { it.next(); QJsonObject content; content.insert("isDark", it.value()->isDark); content.insert("url", it.value()->url); content.insert("monitorName", it.value()->monitorName); json[it.key()] = content; } QJsonDocument json_doc(json); m_wallpaperContext->set_fd(file.handle(), json_doc.toJson(QJsonDocument::Compact)); m_wallpaperContext->set_output(monitorName); m_wallpaperContext->commit(); if (option == PersonalizationWallpaperContext::options_background) { onWallpaperUrlsChanged(); } } file.close(); } } void TreeLandWorker::handleGlobalTheme(const QString &themeId) { uint8_t mode = m_appearanceTheme; ThemeModel *globalTheme = m_model->getGlobalThemeModel(); const QMap &itemList = globalTheme->getList(); if (itemList.contains(themeId)) { const QString &themePath = itemList.value(themeId).value("Path").toString(); KeyFile theme(','); theme.loadFile(themePath + QDir::separator() + QStringLiteral("index.theme")); QString defaultTheme = theme.getStr("Deepin Theme", "DefaultTheme"); if (defaultTheme.isEmpty()) return; QString darkTheme = theme.getStr("Deepin Theme", "DarkTheme"); if (darkTheme.isEmpty()) mode = PersonalizationAppearanceContext::theme_type_light; switch (mode) { case PersonalizationAppearanceContext::theme_type_light: applyGlobalTheme(theme, defaultTheme, defaultTheme, themePath); break; case PersonalizationAppearanceContext::theme_type_dark: { if (darkTheme.isEmpty()) return; applyGlobalTheme(theme, darkTheme, defaultTheme, themePath); break; } case PersonalizationAppearanceContext::theme_type_auto: { applyGlobalTheme(theme, defaultTheme, defaultTheme, themePath); break; } } } } void TreeLandWorker::applyGlobalTheme(KeyFile &theme, const QString &themeName, const QString &defaultTheme, const QString &themePath) { QString defTheme = (defaultTheme.isEmpty() || defaultTheme == themeName) ? QString() : defaultTheme; // 设置globlaTheme的一项,先从themeName中找对应项,若没有则从defTheme中找对应项,最后调用doSetByType实现功能 auto setGlobalItem = [&theme, &themeName, &defTheme, this](const QString &key, const QString &type) { QString themeValue = theme.getStr(themeName, key); if (themeValue.isEmpty() && !defTheme.isEmpty()) themeValue = theme.getStr(defTheme, key); if (!themeValue.isEmpty()) doSetByType(type, themeValue); }; auto setGlobalFile = [&theme, &themeName, &defTheme, &themePath, this](const QString &key, const QString &type) { QString themeValue = theme.getStr(themeName, key); // 如果是用户自定义的桌面壁纸, 切换主题的外观时, 不重新设置壁纸 // if (isSkipSetWallpaper(themePath) && type == TYPEWALLPAPER) { // return; // } if (themeValue.isEmpty() && !defTheme.isEmpty()) { themeValue = theme.getStr(defTheme, key); } if (!QFile::exists(themeValue)) { QString newPath = themePath + QDir::separator() + themeValue; bool isExist = QFile::exists(newPath); if (isExist) { themeValue = newPath; } } if (!themeValue.isEmpty()) { doSetByType(type, themeValue); } }; // 如果是用户自定义主题, 切换外观时只单独更新外观选项 if (themePath.endsWith("custom")) { return setGlobalItem("AppTheme", TYPEGTK); } setGlobalFile("Wallpaper", TYPEWALLPAPER); setGlobalFile("LockBackground", TYPEGREETERBACKGROUND); setGlobalItem("IconTheme", TYPEICON); setGlobalItem("CursorTheme", TYPECURSOR); setGlobalItem("AppTheme", TYPEGTK); setGlobalItem("StandardFont", TYPESTANDARDFONT); setGlobalItem("MonospaceFont", TYPEMONOSPACEFONT); setGlobalItem("FontSize", TYPEFONTSIZE); setGlobalItem("ActiveColor", TYPEACTIVECOLOR); setGlobalItem("WindowRadius", TYPEWINDOWRADIUS); setGlobalItem("WindowOpacity", TYPEWINDOWOPACITY); } void TreeLandWorker::doSetByType(const QString &type, const QString &value) { if (type == TYPEWALLPAPER) { auto screens = qApp->screens(); for (const auto screen : screens) { setWallpaper(screen->name(), value, false, PersonalizationWallpaperContext::options_background); } } else if(type == TYPEICON) { setIconTheme(value); } else if (type == TYPECURSOR) { setCursorTheme(value); } else if (type == TYPESTANDARDFONT) { setFontName(value); } else if (type == TYPEMONOSPACEFONT) { setMonoFontName(value); } else if (type == TYPEFONTSIZE) { double pointSize = value.toDouble(); if (pointSize > 0) { setFontSize(ptToPx(pointSize)); } } else if (type == TYPEACTIVECOLOR) { setActiveColor(value); } else if (type == TYPEWINDOWRADIUS) { setWindowRadius(value.toInt()); } else if (type == TYPEWINDOWOPACITY) { setOpacity(value.toDouble()); } } void TreeLandWorker::active() { if (m_personalizationManager.isNull()) { m_personalizationManager.reset(new PersonalizationManager(this)); connect(m_personalizationManager.get(), &PersonalizationManager::activeChanged, this, [this]() { if (m_personalizationManager->isActive()) { init(); } else { // clear(); } }); } PersonalizationWorker::active(); } PersonalizationManager::PersonalizationManager(QObject *parent) : QWaylandClientExtensionTemplate(1) { if (QGuiApplication::platformName() == QLatin1String("wayland")) { QtWaylandClient::QWaylandIntegration *waylandIntegration = static_cast(QGuiApplicationPrivate::platformIntegration()); if (!waylandIntegration) { qWarning() << "waylandIntegration is nullptr!!!"; return; } m_waylandDisplay = waylandIntegration->display(); if (!m_waylandDisplay) { qWarning() << "waylandDisplay is nullptr!!!"; return; } addListener(); } setParent(parent); } void PersonalizationManager::addListener() { if (!m_waylandDisplay) { qWarning() << "waylandDisplay is nullptr!, skip addListener"; return; } m_waylandDisplay->addRegistryListener(&handleListenerGlobal, this); } void PersonalizationManager::removeListener() { if (!m_waylandDisplay) { qWarning() << "waylandDisplay is nullptr!, skip removeListener"; return; } m_waylandDisplay->removeListener(&handleListenerGlobal, this); } void PersonalizationManager::handleListenerGlobal(void *data, wl_registry *registry, uint32_t id, const QString &interface, uint32_t version) { if (interface == treeland_personalization_manager_v1_interface.name) { PersonalizationManager *integration = static_cast(data); if (!integration) { qWarning() << "integration is nullptr!!!"; return; } integration->init(registry, id, version); } } PersonalizationAppearanceContext::PersonalizationAppearanceContext(struct ::treeland_personalization_appearance_context_v1 *context, PersonalizationModel *worker) : QWaylandClientExtensionTemplate(1) , QtWayland::treeland_personalization_appearance_context_v1(context) , m_model(worker) { get_round_corner_radius(); get_icon_theme(); get_active_color(); get_window_opacity(); get_window_theme_type(); get_window_titlebar_height(); } void PersonalizationAppearanceContext::treeland_personalization_appearance_context_v1_round_corner_radius(int32_t radius) { m_model->setWindowRadius(radius); } void PersonalizationAppearanceContext::treeland_personalization_appearance_context_v1_icon_theme(const QString &) { } void PersonalizationAppearanceContext::treeland_personalization_appearance_context_v1_active_color(const QString &active_color) { m_model->setActiveColor(active_color); } void PersonalizationAppearanceContext::treeland_personalization_appearance_context_v1_window_opacity(uint32_t opacity) { Q_UNUSED(opacity) // Using the value of the appearance module, this is an invalid value // m_model->setOpacity(opacity / 100.0); } void PersonalizationAppearanceContext::treeland_personalization_appearance_context_v1_window_theme_type(uint32_t) { // Using the value of the appearance module, this is an invalid value } void PersonalizationAppearanceContext::treeland_personalization_appearance_context_v1_window_titlebar_height(uint32_t height) { m_model->setTitleBarHeight(height); } PersonalizationWallpaperContext::PersonalizationWallpaperContext(struct ::treeland_personalization_wallpaper_context_v1 *context) : QWaylandClientExtensionTemplate(1) , QtWayland::treeland_personalization_wallpaper_context_v1(context) { } void PersonalizationWallpaperContext::treeland_personalization_wallpaper_context_v1_metadata( const QString &metadata) { Q_EMIT metadataChanged(metadata); } PersonalizationCursorContext::PersonalizationCursorContext(struct ::treeland_personalization_cursor_context_v1 *context, PersonalizationModel *model) : QWaylandClientExtensionTemplate(1) , QtWayland::treeland_personalization_cursor_context_v1(context) , m_model(model) { get_theme(); } void PersonalizationCursorContext::treeland_personalization_cursor_context_v1_theme(const QString &) { } PersonalizationFontContext::PersonalizationFontContext(struct ::treeland_personalization_font_context_v1 *context, PersonalizationModel *model) : QWaylandClientExtensionTemplate(1) , QtWayland::treeland_personalization_font_context_v1(context) , m_model(model) { get_font(); get_monospace_font(); get_font_size(); } void PersonalizationFontContext::treeland_personalization_font_context_v1_font(const QString &) { } void PersonalizationFontContext::treeland_personalization_font_context_v1_monospace_font(const QString &) { } void PersonalizationFontContext::treeland_personalization_font_context_v1_font_size(uint32_t) { } #endif ================================================ FILE: src/plugin-personalization/operation/treelandworker.h ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include #include #include "operation/personalizationmodel.h" #include "personalizationworker.h" #ifdef Enable_Treeland #include "wayland-treeland-personalization-manager-v1-client-protocol.h" #include "qwayland-treeland-personalization-manager-v1.h" #include "keyfile.h" #endif class PersonalizationManager; class PersonalizationAppearanceContext; class PersonalizationWallpaperContext; class PersonalizationCursorContext; class PersonalizationFontContext; class TreeLandWorker : public PersonalizationWorker { Q_OBJECT public: struct WallpaperMetaData { bool isDark; QString url; QString monitorName; }; TreeLandWorker(PersonalizationModel *model, QObject *parent = nullptr); #ifdef Enable_Treeland void setWallpaperForMonitor(const QString &screen, const QString &url, bool isDark, PersonalizationExport::WallpaperSetOption option) override; void setBackgroundForMonitor(const QString &monitorName, const QString &url, bool isDark) override; QString getBackgroundForMonitor(const QString &monitorName); void setLockBackForMonitor(const QString &monitorName, const QString &url, bool isDark) override; QString getLockBackForMonitor(const QString &monitorName); void setDefault(const QJsonObject &value) override; void setAppearanceTheme(const QString &id, bool keepAuto = false) override; uint32_t appearanceTheme() const { return m_appearanceTheme; } void setFontName(const QString& fontName); QString fontName() const { return m_fontName; } void setMonoFontName(const QString& monoFontName); QString monoFontName() const { return m_monoFontName; } void setIconTheme(const QString &id) override; QString iconTheme() const { return m_iconTheme; } void setCursorTheme(const QString &id) override; QString cursorTheme() const { return m_cursorTheme; } void setActiveColor(const QString &hexColor) override; QString activeColor() const { return m_activeColor; } void setFontSize(const int pixelSize) override; int fontSize() const { return m_fontSize; } void setTitleBarHeight(int value) override; int titleBarHeight() const { return m_titleBarHeight; } void setWindowRadius(int radius) override; int windowRadius() const { return m_windowRadius; } void setOpacity(const int value) override; int opacity() const { return m_opacity; } void setGlobalTheme(const QString &themeId) override; QString globalTheme()const { return m_globalTheme;} void active() override; void init(); public slots: void onWallpaperUrlsChanged() override; signals: void wallpaperChanged(); void ApppearanceThemeChanged(const QString &id); void IconThemeChanged(const QString &id); void CursorThemeChanged(const QString &id); private: void wallpaperMetaDataChanged(const QString &data); void setWallpaper(const QString &monitorName, const QString &url, bool isDark, uint32_t type); void handleGlobalTheme(const QString &themeId); void applyGlobalTheme(KeyFile &theme, const QString &themeName, const QString &defaultTheme, const QString &themePath); void doSetByType(const QString &type, const QString &value); private: QScopedPointer m_personalizationManager; QScopedPointer m_appearanceContext; QScopedPointer m_wallpaperContext; QScopedPointer m_cursorContext; QScopedPointer m_fontContext; QMap m_wallpapers; QMap m_lockWallpapers; uint8_t m_appearanceTheme; QString m_fontName; QString m_monoFontName; QString m_iconTheme; QString m_cursorTheme; QString m_activeColor; int m_fontSize; int m_titleBarHeight; int m_windowRadius; int m_opacity; QString m_globalTheme; bool m_compactDisplay; #endif }; #ifdef Enable_Treeland class PersonalizationManager: public QWaylandClientExtensionTemplate, public QtWayland::treeland_personalization_manager_v1 { Q_OBJECT public: explicit PersonalizationManager(QObject *parent = nullptr); private: void addListener(); void removeListener(); static void handleListenerGlobal(void *data, wl_registry *registry, uint32_t id, const QString &interface, uint32_t version); private: QtWaylandClient::QWaylandDisplay *m_waylandDisplay = nullptr; }; class PersonalizationAppearanceContext : public QWaylandClientExtensionTemplate, public QtWayland::treeland_personalization_appearance_context_v1 { Q_OBJECT public: explicit PersonalizationAppearanceContext(struct ::treeland_personalization_appearance_context_v1 *context, PersonalizationModel *model); protected: void treeland_personalization_appearance_context_v1_round_corner_radius(int32_t radius) override; void treeland_personalization_appearance_context_v1_icon_theme(const QString &theme_name) override; void treeland_personalization_appearance_context_v1_active_color(const QString &active_color) override; void treeland_personalization_appearance_context_v1_window_opacity(uint32_t opacity) override; void treeland_personalization_appearance_context_v1_window_theme_type(uint32_t type) override; void treeland_personalization_appearance_context_v1_window_titlebar_height(uint32_t height) override; private: PersonalizationModel *m_model; }; class PersonalizationWallpaperContext : public QWaylandClientExtensionTemplate, public QtWayland::treeland_personalization_wallpaper_context_v1 { Q_OBJECT public: explicit PersonalizationWallpaperContext(struct ::treeland_personalization_wallpaper_context_v1 *context); Q_SIGNALS: void metadataChanged(const QString &meta); protected: void treeland_personalization_wallpaper_context_v1_metadata(const QString &metadata) override; }; class PersonalizationCursorContext : public QWaylandClientExtensionTemplate, public QtWayland::treeland_personalization_cursor_context_v1 { Q_OBJECT public: explicit PersonalizationCursorContext(struct ::treeland_personalization_cursor_context_v1 *context, PersonalizationModel *model); protected: void treeland_personalization_cursor_context_v1_theme(const QString &name) override; private: PersonalizationModel *m_model; }; class PersonalizationFontContext : public QWaylandClientExtensionTemplate, public QtWayland::treeland_personalization_font_context_v1 { Q_OBJECT public: explicit PersonalizationFontContext(struct ::treeland_personalization_font_context_v1 *context, PersonalizationModel *model); protected: void treeland_personalization_font_context_v1_font(const QString &font_name) override; void treeland_personalization_font_context_v1_monospace_font(const QString &font_name) override; void treeland_personalization_font_context_v1_font_size(uint32_t font_size) override; private: PersonalizationModel *m_model; }; #endif ================================================ FILE: src/plugin-personalization/operation/utils.hpp ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef UTILS_H #define UTILS_H #include #include #include #include #include const int RENDER_DPI = 72; const double DPI = 96; const int THUMBNAIL_ICON_WIDTH = 84; const int THUMBNAIL_ICON_HEIGHT = 54; #define DEEPIN_CUSTOM_SCREENSAVER "deepin-custom-screensaver" inline QString getGlobalThemeId(const QString &themeId, QString &mode) { QString id = themeId; mode.clear(); if (id.endsWith(".light")) { id.chop(6); mode = ".light"; } else if (id.endsWith(".dark")) { id.chop(5); mode = ".dark"; } return id; } inline double ptToPx(double pt) { double px = pt / RENDER_DPI * DPI + 0.5; return px; } inline double pxToPt(double px) { double pt = px * RENDER_DPI / DPI; return pt; } inline bool isURI(QString uri) { if (uri.indexOf("://") != -1) return true; return false; } inline QString deCodeURI(QString uri) { QString path; if (isURI(uri)) { QUrl Url(uri); path = Url.path(); } else { path = uri; } return path; } inline QString enCodeURI(QString content, QString scheme) { QString path; if (isURI(content)) { path = deCodeURI(content); } else { path = content; } return scheme + path; } inline static QString currentUserName() { static QString cutName = qgetenv("USER"); return cutName; } #endif // UTILS_H ================================================ FILE: src/plugin-personalization/operation/wallpaperprovider.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later #include #include #include #include #include #include #include #include #include #include #include #include #include #include "wallpaperprovider.h" #include "operation/personalizationdbusproxy.h" #include "utils.hpp" Q_LOGGING_CATEGORY(DdcPersonalizationWallpaperWorker, "dcc-personalization-wallpaper-worker") #define SYS_WALLPAPER_DIR "/usr/share/wallpapers/deepin" #define SYS_SOLIDE_WALLPAPER_DIR "/usr/share/wallpapers/deepin-solidwallpapers" #define CUSTOM_SOLIDE_WALLPAPER_DIR "/var/cache/wallpapers/custom-solidwallpapers" #define CUSTOM_WALLPAPER_DIR "/var/cache/wallpapers/custom-wallpapers" #define CHECK_RETURN_RUNNING \ if (Q_UNLIKELY(!m_running.load(std::memory_order_acquire))) \ return; // Solid color sort order: 从浅到深、从暖到冷 (light to dark, warm to cold) static int solidColorSortOrder(const QString &path) { const QString fileName = QFileInfo(QUrl(path).toLocalFile().isEmpty() ? path : QUrl(path).toLocalFile()).baseName().toLower(); // Exact filename stem matching, ordered light-to-dark then warm-to-cold const QList order = { "mono-orange", "mono-dark-red", "mono-orange-red", "mono-rose-red", "mono-light-green", "mono-blue", "mono-blue-green", "mono-dark-green", "mono-blue-purple", "mono-black" }; int idx = order.indexOf(fileName); return (idx >= 0) ? idx : order.size(); } WallpaperProvider::WallpaperProvider(PersonalizationDBusProxy *PersonalizationDBusProxy, PersonalizationModel *model, QObject *parent) : QObject(parent) { m_workThread = new QThread(this); m_personalizationProxy = PersonalizationDBusProxy; m_worker = new InterfaceWorker(PersonalizationDBusProxy); m_model = model; m_worker->moveToThread(m_workThread); m_workThread->start(); connect(m_worker, &InterfaceWorker::pushBackground, this, &WallpaperProvider::setWallpaper, Qt::QueuedConnection); connect(m_worker, &InterfaceWorker::pushOneBackground, this, &WallpaperProvider::pushWallpaper, Qt::QueuedConnection); connect(m_worker, &InterfaceWorker::listFinished, this, &WallpaperProvider::fetchFinish); connect(m_personalizationProxy, &PersonalizationDBusProxy::WallpaperChanged, this, &WallpaperProvider::onWallpaperChangedFromDaemon); } WallpaperProvider::~WallpaperProvider() { m_worker->terminate(); m_workThread->quit(); m_workThread->wait(5000); if (m_workThread->isRunning()) { m_workThread->terminate(); } delete m_worker; m_worker = nullptr; } void WallpaperProvider::fetchData(WallpaperType type) { QMetaObject::invokeMethod(m_worker, "startListBackground", Qt::QueuedConnection, Q_ARG(WallpaperType, type)); } bool WallpaperProvider::isColor(const QString &path) { // these dirs save solid color wallpapers. return path.startsWith(CUSTOM_SOLIDE_WALLPAPER_DIR) || path.startsWith(SYS_SOLIDE_WALLPAPER_DIR); } void WallpaperProvider::setWallpaper(const QList &items, WallpaperType type) { qCDebug(DdcPersonalizationWallpaperWorker) << "get wallpaper list" << items.size() << "type:" << type; switch (type) { case WallpaperType::Wallpaper_Sys: m_wallpaperList[WallpaperType::Wallpaper_Sys] = items; m_model->getSysWallpaperModel()->resetData(items); break; case WallpaperType::Wallpaper_Custom: m_wallpaperList[WallpaperType::Wallpaper_Custom] = items; m_model->getCustomWallpaperModel()->resetData(items); break; case WallpaperType::Wallpaper_Solid: m_wallpaperList[WallpaperType::Wallpaper_Solid] = items; m_model->getSolidWallpaperModel()->resetData(items); break; default: break; } } void WallpaperProvider::pushWallpaper(WallpaperItemPtr item, WallpaperType type) { qCDebug(DdcPersonalizationWallpaperWorker) << "push wallpaper" << item->url<< "type:" << type; switch (type) { case WallpaperType::Wallpaper_Sys: m_wallpaperList[WallpaperType::Wallpaper_Sys].append(item); m_model->getSysWallpaperModel()->appendItem(item); break; case WallpaperType::Wallpaper_Custom: m_wallpaperList[WallpaperType::Wallpaper_Custom].append(item); m_model->getCustomWallpaperModel()->appendItem(item); break; case WallpaperType::Wallpaper_Solid: m_wallpaperList[WallpaperType::Wallpaper_Solid].append(item); m_model->getSolidWallpaperModel()->appendItem(item); break; default: break; } emit fetchFinish(); } WallpaperType WallpaperProvider::getWallpaperType(const QString &path) { for(auto iter = m_wallpaperList.begin(); iter != m_wallpaperList.end(); ++iter) { for (const auto &item : iter.value()) { if (item->url == path) { return iter.key(); } } } if (path.startsWith(SYS_WALLPAPER_DIR)) { return WallpaperType::Wallpaper_Sys; } else if (path.startsWith(CUSTOM_WALLPAPER_DIR)) { return WallpaperType::Wallpaper_Custom; } else if (path.startsWith(CUSTOM_SOLIDE_WALLPAPER_DIR)) { return WallpaperType::Wallpaper_Solid; } else if (path.startsWith(SYS_SOLIDE_WALLPAPER_DIR)) { return WallpaperType::Wallpaper_Solid; } return WallpaperType::Wallpaper_Unknown; } void WallpaperProvider::removeWallpaper(const QString &url) { qCDebug(DdcPersonalizationWallpaperWorker) << "remove wallpaper" << url; auto type = getWallpaperType(url); WallpaperItemPtr removeItem = nullptr; for(auto iter = m_wallpaperList.begin(); iter!= m_wallpaperList.end(); ++iter) { for (const auto &item : iter.value()) { if (item->url == url) { removeItem = item; break; } } } if (!removeItem) { return; } switch (type) { case WallpaperType::Wallpaper_Sys: m_model->getSysWallpaperModel()->removeItem(removeItem); m_wallpaperList[WallpaperType::Wallpaper_Sys].removeAll(removeItem); break; case WallpaperType::Wallpaper_Custom: m_model->getCustomWallpaperModel()->removeItem(removeItem); m_wallpaperList[WallpaperType::Wallpaper_Custom].removeAll(removeItem); break; case WallpaperType::Wallpaper_Solid: m_model->getSolidWallpaperModel()->removeItem(removeItem); m_wallpaperList[WallpaperType::Wallpaper_Solid].removeAll(removeItem); break; default: break; } } void WallpaperProvider::addWallpaper(const QString &url) { qCDebug(DdcPersonalizationWallpaperWorker) << "add wallpaper" << url; const auto path = deCodeURI(url); WallpaperType type = getWallpaperType(path); if (type == WallpaperType::Wallpaper_Unknown) { qCWarning(DdcPersonalizationWallpaperWorker) << "add wallpaper type unknown" << path; return; } QMetaObject::invokeMethod(m_worker, "startListOne", Qt::QueuedConnection, Q_ARG(QString, path), Q_ARG(WallpaperType, type)); } void WallpaperProvider::onWallpaperChangedFromDaemon(const QString &user, uint mode, const QStringList &paths) { if (user != currentUserName()) { return; } if (mode == 0) { // remove wallpaper for (const auto &path : paths) { removeWallpaper(enCodeURI(path, "file://")); } } else if (mode == 1) { // add wallpaper for (const auto &path : paths) { addWallpaper(enCodeURI(path, "file://")); } } } WallpaperItemPtr InterfaceWorker::createItem(const QString &path, bool del, WallpaperType type) { Q_UNUSED(type) if (path.isEmpty()) return {}; QUrl url(path); QFileInfo fileInfo; if (isURI(path)) { fileInfo = QFileInfo(url.toLocalFile()); } else { url = QUrl::fromLocalFile(path); fileInfo = QFileInfo(path); } const QString &thumbnail = url.toString(); auto ptr = WallpaperItemPtr(new WallpaperItem{url.toString(), url.toString() , thumbnail, del, fileInfo.lastModified().toMSecsSinceEpoch(), false, false}); return ptr; } InterfaceWorker::InterfaceWorker(PersonalizationDBusProxy *proxy, QObject *parent) : QObject(parent) , m_proxy(proxy) , m_running(true) { } void InterfaceWorker::terminate() { m_running.store(false, std::memory_order_release); } void InterfaceWorker::startListBackground(WallpaperType type) { m_running.store(true, std::memory_order_release); CHECK_RETURN_RUNNING switch (type) { case WallpaperType::Wallpaper_all: getCustomBackground(); getSysBackground(); getSolodBackground(); break; case WallpaperType::Wallpaper_Sys: getSysBackground(); break; case WallpaperType::Wallpaper_Custom: getCustomBackground(); break; case WallpaperType::Wallpaper_Solid: getSolodBackground(); break; default: break; } Q_EMIT listFinished(); } void InterfaceWorker::startListOne(const QString &path, WallpaperType type) { CHECK_RETURN_RUNNING bool canDel = type == WallpaperType::Wallpaper_Custom; if (type == WallpaperType::Wallpaper_Solid) { canDel = path.startsWith(CUSTOM_SOLIDE_WALLPAPER_DIR); } WallpaperItemPtr ptr = createItem(path, canDel, type); if (ptr) { Q_EMIT pushOneBackground(ptr, type); } } void InterfaceWorker::getSysBackground() { CHECK_RETURN_RUNNING QList wallpapers; auto list = fetchWallpaper(SYS_WALLPAPER_DIR); for (const auto &path : list) { CHECK_RETURN_RUNNING WallpaperItemPtr ptr = createItem(path, false, WallpaperType::Wallpaper_Sys); if (ptr) wallpapers.append(ptr); } Q_EMIT pushBackground(wallpapers, WallpaperType::Wallpaper_Sys); } void InterfaceWorker::getCustomBackground() { CHECK_RETURN_RUNNING QList wallpapers; auto customList = m_proxy->getCustomWallpaper(currentUserName()); for (const auto &path : customList) { CHECK_RETURN_RUNNING if (WallpaperProvider::isColor(path)) { continue; } WallpaperItemPtr ptr = createItem(path, true, WallpaperType::Wallpaper_Custom); if (ptr) wallpapers.append(ptr); } Q_EMIT pushBackground(wallpapers, WallpaperType::Wallpaper_Custom); } void InterfaceWorker::getSolodBackground() { CHECK_RETURN_RUNNING QList wallpapers; auto customList = m_proxy->getCustomWallpaper(currentUserName()); for (const auto &path : customList) { CHECK_RETURN_RUNNING if (!WallpaperProvider::isColor(path)) { continue; } WallpaperItemPtr ptr = createItem(path, true, WallpaperType::Wallpaper_Solid); if (ptr) wallpapers.append(ptr); } auto list = fetchWallpaper(SYS_SOLIDE_WALLPAPER_DIR); for (const auto &path : list) { WallpaperItemPtr ptr = createItem(path, false, WallpaperType::Wallpaper_Solid); if (ptr) wallpapers.append(ptr); } // Sort: 从浅到深、从暖到冷 (light to dark, warm to cold) std::stable_sort(wallpapers.begin(), wallpapers.end(), [](const WallpaperItemPtr &a, const WallpaperItemPtr &b) { return solidColorSortOrder(a->url) < solidColorSortOrder(b->url); }); for (int i = 0; i < wallpapers.size(); ++i) { wallpapers[i]->lastModifiedTime = wallpapers.size() - i; } Q_EMIT pushBackground(wallpapers, WallpaperType::Wallpaper_Solid); } QStringList InterfaceWorker::fetchWallpaper(const QString &dir) { QStringList walls; QDir qdir(dir); if (!qdir.exists()) return walls; QFileInfoList fileInfoList = qdir.entryInfoList(QDir::NoDotAndDotDot | QDir::Dirs | QDir::Files); for (auto file : fileInfoList) { QImageReader reader(file.filePath()); if (!reader.canRead()) { continue; } walls.append(file.filePath()); } return walls; } ================================================ FILE: src/plugin-personalization/operation/wallpaperprovider.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later #ifndef WALLPAPERPROVIDER_H #define WALLPAPERPROVIDER_H #include #include #include #include "operation/personalizationdbusproxy.h" #include "personalizationmodel.h" #include "model/wallpapermodel.h" enum WallpaperType{ Wallpaper_all = 0, Wallpaper_Sys, Wallpaper_Custom, Wallpaper_Solid, Wallpaper_Unknown }; class InterfaceWorker : public QObject { Q_OBJECT public: explicit InterfaceWorker(PersonalizationDBusProxy *proxy, QObject *parent = nullptr); void terminate(); void getSysBackground(); void getCustomBackground(); void getSolodBackground(); QStringList fetchWallpaper(const QString &dir); signals: void pushBackground(const QList &items, WallpaperType type = WallpaperType::Wallpaper_Sys); void pushOneBackground(const WallpaperItemPtr items, WallpaperType type = WallpaperType::Wallpaper_Sys); void listFinished(); public slots: void startListBackground(WallpaperType type = WallpaperType::Wallpaper_all); void startListOne(const QString &path, WallpaperType type = WallpaperType::Wallpaper_all); private: WallpaperItemPtr createItem(const QString &path, bool del, WallpaperType type); private: PersonalizationDBusProxy *m_proxy = nullptr; std::atomic_bool m_running = false; }; class WallpaperProvider : public QObject { Q_OBJECT public: explicit WallpaperProvider(PersonalizationDBusProxy *personalizationProxy, PersonalizationModel *model, QObject *parent = nullptr); ~WallpaperProvider(); void fetchData(WallpaperType type = WallpaperType::Wallpaper_all); static bool isColor(const QString &path); WallpaperType getWallpaperType(const QString &path); void removeWallpaper(const QString &url); void addWallpaper(const QString &url); signals: void fetchFinish(); private slots: void setWallpaper(const QList &items, WallpaperType type = WallpaperType::Wallpaper_Sys); void pushWallpaper(WallpaperItemPtr item, WallpaperType type = WallpaperType::Wallpaper_Sys); void onWallpaperChangedFromDaemon(const QString &user, uint mode, const QStringList &paths); private: QThread *m_workThread = nullptr; InterfaceWorker *m_worker = nullptr; PersonalizationModel *m_model = nullptr; PersonalizationDBusProxy *m_personalizationProxy = nullptr; QHash> m_wallpaperList; }; #endif // WALLPAPERPROVIDER_H ================================================ FILE: src/plugin-personalization/operation/x11worker.cpp ================================================ //SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "x11worker.h" #include "operation/personalizationworker.h" #include #include #include DCORE_USE_NAMESPACE Q_LOGGING_CATEGORY(DdcPersonnalizationX11Worker, "dcc-personalization-X11-woker") constexpr auto ORG_KDE_KWIN_DECORATION = "org.kde.kwin.decoration"; constexpr auto ORG_KDE_KWIN_DECORATION_TITLEBAR = "org.kde.kwin.decoration.titlebar"; constexpr auto TITLE_BAR_HEIGHT_KEY = "titlebarHeight"; constexpr auto DEFAULT_TITLE_BAR_HEIGHT_KEY = "defaultTitlebarHeight"; constexpr auto WINDOW_EFFECT_TYPE_KEY = "user_type"; constexpr auto ORG_KDE_KWIN = "org.kde.kwin"; constexpr auto ORG_KDE_KWIN_COMPOSITING = "org.kde.kwin.compositing"; constexpr auto EffectMoveWindowArg = "kwin4_effect_translucency"; constexpr auto EffectMiniLampArg = "magiclamp"; constexpr auto EffectMiniScaleArg = "kwin4_effect_scale"; X11Worker::X11Worker(PersonalizationModel *model, QObject *parent) : PersonalizationWorker(model, parent) , m_kwinTitleBarConfig(DConfig::create(ORG_KDE_KWIN_DECORATION, ORG_KDE_KWIN_DECORATION_TITLEBAR, "", this)) , m_kwinCompositingConfig(DConfig::create(ORG_KDE_KWIN, ORG_KDE_KWIN_COMPOSITING, "", this)) { connect(m_kwinTitleBarConfig, &DConfig::valueChanged, this, &X11Worker::onKWinConfigChanged); connect(m_kwinCompositingConfig, &DConfig::valueChanged, this, &X11Worker::onKWinConfigChanged); } void X11Worker::active() { PersonalizationWorker::active(); onTitleHeightChanged(); int windowEffectType = m_kwinCompositingConfig->value(WINDOW_EFFECT_TYPE_KEY).toInt(); m_model->setWindowEffectType(windowEffectType); m_personalizationDBusProxy->isEffectLoaded(EffectMiniLampArg, this, SLOT(onMiniEffectChanged(bool))); m_model->setIsMoveWindow(m_personalizationDBusProxy->isEffectLoaded(EffectMoveWindowArg)); QStringList supportEffects; if (m_personalizationDBusProxy->isEffectSupported(EffectMiniLampArg)) { supportEffects.append(EffectMiniLampArg); } if (m_personalizationDBusProxy->isEffectSupported(EffectMiniScaleArg)) { supportEffects.append(EffectMiniScaleArg); } if (m_personalizationDBusProxy->isEffectSupported(EffectMoveWindowArg)) { supportEffects.append(EffectMoveWindowArg); } m_model->setSupportEffects(supportEffects); } void X11Worker::setTitleBarHeight(int value) { if (m_kwinTitleBarConfig->value(TITLE_BAR_HEIGHT_KEY).toInt() != value) { m_kwinTitleBarConfig->setValue(TITLE_BAR_HEIGHT_KEY, value); } } void X11Worker::setWindowEffect(int value) { qCDebug(DdcPersonnalizationX11Worker) << "windowSwitchWM switch to: " << value; m_kwinCompositingConfig->setValue(WINDOW_EFFECT_TYPE_KEY, value); } void X11Worker::onKWinConfigChanged(const QString &key) { if (key == TITLE_BAR_HEIGHT_KEY) { onTitleHeightChanged(); } else if (key == WINDOW_EFFECT_TYPE_KEY) { int value = m_kwinCompositingConfig->value(key).toInt(); m_model->setWindowEffectType(value); } } void X11Worker::onTitleHeightChanged() { int titleBarHight = m_kwinTitleBarConfig->value(TITLE_BAR_HEIGHT_KEY).toInt(); if (titleBarHight < 24 || titleBarHight > 50) { titleBarHight = m_kwinTitleBarConfig->value(DEFAULT_TITLE_BAR_HEIGHT_KEY).toInt(); } m_model->setTitleBarHeight(titleBarHight); } void X11Worker::onMiniEffectChanged(bool value) { m_model->setMiniEffect(value ? 1 : 0); } void X11Worker::setMovedWindowOpacity(bool value) { if (value) { m_personalizationDBusProxy->loadEffect(EffectMoveWindowArg); } else { m_personalizationDBusProxy->unloadEffect(EffectMoveWindowArg); } //设置kwin接口后, 等待55ms给kwin反应,根据isEffectLoaded返回值确定真实状态 QTimer::singleShot(55, this, [this] { bool isLoaded = m_personalizationDBusProxy->isEffectLoaded(EffectMoveWindowArg); qCDebug(DdcPersonnalizationX11Worker) << "Moved window switch WM, load effect translucency: " << isLoaded; m_model->setIsMoveWindow(isLoaded); }); } void X11Worker::setMiniEffect(int effect) { switch (effect) { case 0: qCDebug(DdcPersonnalizationX11Worker) << EffectMiniScaleArg; m_personalizationDBusProxy->unloadEffect(EffectMiniLampArg); m_model->setMiniEffect(effect); break; case 1: qCDebug(DdcPersonnalizationX11Worker) << EffectMiniLampArg; m_personalizationDBusProxy->loadEffect(EffectMiniLampArg); m_model->setMiniEffect(effect); break; default: break; } } void X11Worker::setWallpaperForMonitor(const QString &screen, const QString &url, bool isDark, PersonalizationExport::WallpaperSetOption option) { if (checkWallpaperLockStatus()) { return; } if (option == PersonalizationExport::Option_Desktop) { setBackgroundForMonitor(screen, url, isDark); } else if (option == PersonalizationExport::Option_Lock) { setLockBackForMonitor(screen, url, isDark); } else if (option == PersonalizationExport::Option_All) { setBackgroundForMonitor(screen, url, isDark); setLockBackForMonitor(screen, url, isDark); } } void X11Worker::setBackgroundForMonitor(const QString &screenName, const QString &url, bool isDark) { Q_UNUSED(isDark) qCDebug(DdcPersonnalizationX11Worker) << "setMonitorBackground " << screenName << url; if (screenName.isEmpty() || url.isEmpty()) return; m_personalizationDBusProxy->SetCurrentWorkspaceBackgroundForMonitor(url, screenName); } void X11Worker::setLockBackForMonitor(const QString &screenName, const QString &url, bool isDark) { Q_UNUSED(isDark) qCDebug(DdcPersonnalizationX11Worker) << "setGreeterBackground " << screenName << url; if (screenName.isEmpty() || url.isEmpty()) return; m_personalizationDBusProxy->SetGreeterBackground(url); } ================================================ FILE: src/plugin-personalization/operation/x11worker.h ================================================ //SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "operation/personalizationworker.h" class X11Worker : public PersonalizationWorker { Q_OBJECT public: X11Worker(PersonalizationModel *model, QObject *parent = nullptr); void active() override; public Q_SLOTS: void setTitleBarHeight(int value) override; void setWindowEffect(int value) override; void setMovedWindowOpacity(bool value) override; void setMiniEffect(int effect) override; virtual void setWallpaperForMonitor(const QString &screen, const QString &url, bool isDark, PersonalizationExport::WallpaperSetOption option) override; void setBackgroundForMonitor(const QString &screenName, const QString &url, bool isDark) override; void setLockBackForMonitor(const QString &screenName, const QString &url, bool isDark) override; private Q_SLOTS: void onMiniEffectChanged(bool value); private: void onKWinConfigChanged(const QString &key); void onTitleHeightChanged(); private: Dtk::Core::DConfig *m_kwinTitleBarConfig = nullptr; Dtk::Core::DConfig *m_kwinCompositingConfig = nullptr; }; ================================================ FILE: src/plugin-personalization/qml/ColorAndIcons.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import QtQuick.Dialogs import Qt5Compat.GraphicalEffects import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { DccTitleObject { name: "accentColorTitle" weight: 10 parentName: "personalization/colorAndIcons" displayName: qsTr("Accent Color") } DccObject { name: "accentColor" parentName: "personalization/colorAndIcons" weight: 100 pageType: DccObject.Item backgroundType: DccObject.Normal page: ListView { id: listview readonly property var colors: ["#DF4187", "#EA691F", "#F3B517", "#49B125", "#00A48A", "#1F6EE7", "#402FDB", "#7724B1", "#757575", "CUSTOM"] readonly property var darkColors: ["#A82B62", "#CC4D03", "#D09C00", "#459F29", "#188876", "#024CCA", "#443BBA", "#6A2487", "#868686", "CUSTOM"] property var cutColors: dccData.currentAppearance === ".dark" ? darkColors : colors implicitHeight: 60 leftMargin: 10 clip: true model: cutColors.length orientation: ListView.Horizontal layoutDirection: Qt.LeftToRight spacing: 12 delegate: Item { anchors.verticalCenter: parent.verticalCenter property string activeColor: dccData.model.activeColor property string currentColor: listview.cutColors[index] width: 30 height: 30 Rectangle { anchors.fill: parent border.width: 2 color: "transparent" visible: activeColor === currentColor || (currentColor == "CUSTOM" && listview.cutColors.indexOf(activeColor) === -1) border.color: currentColor == "CUSTOM" ? activeColor : currentColor radius: width / 2 } Rectangle { id: colorImg anchors.fill: parent anchors.margins: 4 radius: width / 2 color: listview.cutColors[index] === "CUSTOM" ? "transparent" : listview.cutColors[index] anchors.centerIn: parent Canvas { anchors.fill: parent visible: listview.cutColors[index] === "CUSTOM" onPaint: { var ctx = getContext("2d"); ctx.clearRect(0, 0, width, height); var centerX = width / 2; var centerY = height / 2; var radius = Math.min(width, height) / 2; var gradient = ctx.createConicalGradient(centerX, centerY, 0, centerX, centerY, radius); gradient.addColorStop(0.0, "red"); gradient.addColorStop(0.167, "yellow"); gradient.addColorStop(0.333, "green"); gradient.addColorStop(0.5, "cyan"); gradient.addColorStop(0.667, "blue"); gradient.addColorStop(0.833, "magenta"); gradient.addColorStop(1.0, "red"); ctx.fillStyle = gradient; ctx.beginPath(); ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI); ctx.closePath(); ctx.fill(); } } MouseArea { anchors.fill: parent onClicked: { if (listview.cutColors[index] === "CUSTOM") { colorDialog.color = dccData.model.activeColor colorDialog.open() } else { dccData.worker.setActiveColors(listview.colors[index] + "," + listview.darkColors[index]) dccData.worker.setActiveColor(listview.cutColors[index]) } } } } InnerShadow { anchors.fill: colorImg radius: 0 samples: 24 spread: 0 horizontalOffset: 0 verticalOffset: -1 color: Qt.rgba(0, 0, 0, 0.1) source: colorImg } } DccColorDialog { id: colorDialog anchors.centerIn: Overlay.overlay popupType: Popup.Item width: 274 height: 322 onAccepted: { dccData.worker.setActiveColors(colorDialog.color + "," + colorDialog.color) dccData.worker.setActiveColor(colorDialog.color) } } } } DccTitleObject { name: "iconSettingsTitle" parentName: "personalization/colorAndIcons" displayName: qsTr("Icon Settings") weight: 200 } DccObject { name: "iconTheme" parentName: "personalization/colorAndIcons" displayName: qsTr("Icon Theme") description: qsTr("Customize your theme icon") icon: "theme_icon" weight: 300 backgroundType: DccObject.Normal pageType: DccObject.MenuEditor page: Label { text: dccData.model.iconModel.currentThemeName } DccObject { name: "iconThemeSelect" parentName: "personalization/colorAndIcons/iconTheme" weight: 1 DccObject { name: "cursorThemeSelect" parentName: "personalization/colorAndIcons/iconTheme/iconThemeSelect" weight: 1 pageType: DccObject.Item page: IconThemeGridView { model: dccData.iconThemeViewModel onRequsetSetTheme: (id)=> { dccData.worker.setIconTheme(id) } } } } } DccObject { name: "cursorTheme" parentName: "personalization/colorAndIcons" displayName: qsTr("Cursor Theme") description: qsTr("Customize your theme cursor") icon: "topic_cursor" weight: 400 backgroundType: DccObject.Normal pageType: DccObject.MenuEditor page: Label { text: dccData.model.cursorModel.currentThemeName } DccObject { name: "cursorThemeSelect" parentName: "personalization/colorAndIcons/cursorTheme" weight: 1 DccObject { name: "cursorThemeSelect" parentName: "personalization/colorAndIcons/cursorTheme/cursorThemeSelect" weight: 1 pageType: DccObject.Item page: IconThemeGridView { model: dccData.cursorThemeViewModel onRequsetSetTheme: (id)=> { dccData.worker.setCursorTheme(id) } } } } } } ================================================ FILE: src/plugin-personalization/qml/CustomComboBox.qml ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS D.ComboBox { id: control flat: true property string visibleRole property string enableRole delegate: D.MenuItem { id: menuItem useIndicatorPadding: true text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : (model[control.textRole] === undefined ? modelData[control.textRole] : model[control.textRole])) : modelData icon.name: control.iconNameRole ? ((model[control.iconNameRole] !== undefined ? model[control.iconNameRole] : modelData[control.iconNameRole])) : null highlighted: control.isInteractingWithContent ? control.highlightedIndex === index : false hoverEnabled: control.hoverEnabled autoExclusive: true checked: control.currentIndex === index enabled: control.enableRole ? ((model[control.enableRole] !== undefined ? model[control.enableRole] : modelData[control.enableRole])) : true visible: control.visibleRole ? ((model[control.visibleRole] !== undefined ? model[control.visibleRole] : modelData[control.visibleRole])) : true implicitHeight: visible ? DS.Style.control.implicitHeight(menuItem) : 0 } // To replace function: indexOfValue function indexByValue(value) { for (var i = 0; i < model.count; i++) { if (model.get(i).value === value) { return i; } } return -1; } } ================================================ FILE: src/plugin-personalization/qml/DccColorDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Controls.impl import QtQuick.Dialogs import QtQuick.Dialogs.quickimpl import QtQuick.Layouts import QtQuick.Templates as T import org.deepin.dtk as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc.personalization 1.0 import org.deepin.dcc 1.0 ColorDialogImpl { id: control implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, contentWidth + leftPadding + rightPadding, implicitHeaderWidth, implicitFooterWidth) implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, contentHeight + topPadding + bottomPadding + (implicitHeaderHeight > 0 ? implicitHeaderHeight + spacing : 0) + (implicitFooterHeight > 0 ? implicitFooterHeight + spacing : 0)) topPadding: 10 leftPadding: 10 rightPadding: 10 bottomPadding: 10 background: Loader { sourceComponent: D.FloatingPanel { radius: DS.Style.floatingPanel.radius blurMultiplier: 8.0 backgroundColor: DS.Style.floatingPanel.background backgroundNoBlurColor: DS.Style.floatingPanel.backgroundNoBlur } } // ensure set sucessfully, default is 0 Component.onCompleted: { alpha = 1.0 } Connections { target: dccData function onColorPicked(color) { control.color = color } function onPickerError(error) { console.warn("deepin-picker error:", error) } } // Use deepin-picker if available, otherwise fallback to Qt's built-in eyeDropper ColorDialogImpl.eyeDropperButton: dccData.pickerAvailable ? null : eyeDropperButton ColorDialogImpl.colorPicker: colorPicker contentItem: ColumnLayout { DccSaturationLightnessPicker { id: colorPicker color: control.color Layout.fillWidth: true Layout.fillHeight: true } RowLayout { Layout.fillWidth: true Layout.preferredHeight: 20 Layout.topMargin: 2 Layout.bottomMargin: 2 D.IconButton { id: eyeDropperButton icon.name: "color_extractor" icon.width: 20 textColor: D.Palette { normal: Qt.rgba(0, 0, 0, 1) normalDark: Qt.rgba(1, 1, 1, 1) } flat: true visible: true Layout.preferredWidth: 22 Layout.preferredHeight: 22 opacity: 0.6 background: Rectangle { implicitWidth: 22 implicitHeight: 22 radius: 4 visible: eyeDropperButton.hovered color: eyeDropperButton.palette.windowText opacity: 0.1 } onClicked: { // Use deepin-picker if available, Qt's eyeDropper will handle it otherwise if (dccData.pickerAvailable) { dccData.startPicker() } } } Slider { id: hueSlider orientation: Qt.Horizontal value: control.hue implicitHeight: 16 onMoved: function() { control.hue = value; } handle: Rectangle { implicitWidth: 6 height: hueSlider.height border.color: Qt.rgba(0, 0, 0, 0.2) x: hueSlider.leftPadding + (hueSlider.horizontal ? hueSlider.visualPosition * (hueSlider.availableWidth - width) : (hueSlider.availableWidth - width) / 2) y: hueSlider.topPadding + (hueSlider.horizontal ? (hueSlider.availableHeight - height) / 2 : hueSlider.visualPosition * (hueSlider.availableHeight - height)) } background: Item { anchors.fill: parent anchors.leftMargin: hueSlider.handle.width / 2 anchors.rightMargin: hueSlider.handle.width / 2 Rectangle { anchors.fill: parent anchors.topMargin: 3 anchors.bottomMargin: 3 radius: 2 gradient: HueGradient { orientation: Gradient.Horizontal } } } Layout.fillWidth: true } } GridLayout { Layout.fillWidth: true Layout.preferredHeight: 24 Layout.topMargin: 2 Layout.bottomMargin: 2 columns: 5 rows: 2 Rectangle { Layout.preferredHeight: 28 Layout.preferredWidth: 28 color: control.color border.width: 1 border.color: Qt.rgba(0, 0, 0, 0.1) radius: 3 } D.TextField { text: control.color.toString().substring(1).toUpperCase() Layout.preferredWidth: 74 Layout.preferredHeight: 28 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font { family: D.DTK.fontManager.t8.family pointSize: D.DTK.fontManager.t8.pointSize weight: Font.Medium } validator: RegularExpressionValidator { regularExpression: /^[0-9a-fA-F]{6}$/ } onEditingFinished: { control.color = "#" + text.toUpperCase() } } Repeater { model: [control.red, control.green, control.blue] D.TextField { text: modelData Layout.fillWidth: true Layout.preferredWidth: 44 Layout.preferredHeight: 28 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter inputMethodHints: Qt.ImhDigitsOnly validator: IntValidator { bottom: 0; top: 255 } font { family: D.DTK.fontManager.t8.family pointSize: D.DTK.fontManager.t8.pointSize weight: Font.Medium } onEditingFinished: { if (text !== "") { if (modelData === control.red) { control.red = text; } else if (modelData === control.green) { control.green = text; } else if (modelData === control.blue) { control.blue = text; } } } } } Item { } Repeater { model: ["Hex", "R", "G", "B"] Label { Layout.fillWidth: true horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font { family: D.DTK.fontManager.t8.family pointSize: D.DTK.fontManager.t8.pointSize weight: Font.Medium } text: modelData } } } } footer: ColumnLayout { spacing: 10 Rectangle { id: line Layout.leftMargin: 10 Layout.rightMargin: 10 color: Qt.rgba(0, 0, 0, 0.08) height: 1 Layout.fillWidth: true Layout.alignment: Qt.AlignVCenter } RowLayout { Layout.leftMargin: 10 Layout.rightMargin: 10 Layout.bottomMargin: 10 spacing: 9 D.Button { text: qsTr("Cancel") Layout.fillWidth: true background: Rectangle { color: Qt.rgba(0, 0, 0, 0.15) radius: 6 } onClicked: { control.reject() } } D.Button { text: qsTr("Save") Layout.fillWidth: true background: Rectangle { color: Qt.rgba(0, 0, 0, 0.15) radius: 6 } textColor: D.Palette { normal { common: D.DTK.makeColor(D.Color.Highlight) } normalDark: normal hovered { common: D.DTK.makeColor(D.Color.Highlight).lightness(+10) } hoveredDark: hovered } onClicked: { control.accept() } } } } } ================================================ FILE: src/plugin-personalization/qml/DccSaturationLightnessPicker.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Dialogs import QtQuick.Dialogs.quickimpl import org.deepin.dtk as D SaturationLightnessPickerImpl { id: control clip: true implicitWidth: Math.max(background ? background.implicitWidth : 0, contentItem.implicitWidth) implicitHeight: Math.max(background ? background.implicitHeight : 0, contentItem.implicitHeight) contentItem: Item { ShaderEffect { id: effect scale: contentItem.width / width anchors.fill: parent property alias hue: control.hue fragmentShader: "qrc:/qt-project.org/imports/QtQuick/Dialogs/quickimpl/shaders/SaturationLightness.frag.qsb" } D.ItemViewport { radius: 8 sourceItem: effect hideSource: true anchors.fill: parent fixed: true antialiasing: true } } handle: Rectangle { implicitWidth: 12 implicitHeight: 12 radius: 6 color: "transparent" border.color: Qt.rgba(0, 0, 0, 0.2) border.width: 1 x: control.leftPadding + control.lightness * control.availableWidth - width / 2 y: control.topPadding + (1.0 - control.saturation) * control.availableHeight - height / 2 z: 1 Rectangle { x: 1 y: 1 width: 10 height: 10 radius: 5 color: control.color border.color: "white" border.width: 2 } } } ================================================ FILE: src/plugin-personalization/qml/FontCombobox.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS D.ComboBox { id: control flat: true property string visibleRole displayText: { if (currentIndex < 0 || currentIndex >= model.count) { return "" } else { return model[currentIndex][textRole] } } delegate: D.MenuItem { id: menuItem useIndicatorPadding: true width: parent.width text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : (model[control.textRole] === undefined ? modelData[control.textRole] : model[control.textRole])) : modelData font.family: text icon.name: (control.iconNameRole && model[control.iconNameRole] !== undefined) ? model[control.iconNameRole] : null highlighted: control.isInteractingWithContent ? control.highlightedIndex === index : false hoverEnabled: control.hoverEnabled autoExclusive: true checked: control.currentIndex === index enabled: (control.enableRole && model[control.enableRole] !== undefined) ? model[control.enableRole] : true visible: (control.visibleRole && model[control.visibleRole] !== undefined) ? model[control.visibleRole] : true implicitHeight: visible ? DS.Style.control.implicitHeight(menuItem) : 0 } } ================================================ FILE: src/plugin-personalization/qml/FontSizePage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import QtQuick.Dialogs import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { DccObject { name: "fontSize" parentName: "personalization/font" displayName: qsTr("Size") backgroundType: DccObject.Normal weight: 10 pageType: DccObject.Item page: ColumnLayout { Layout.fillHeight: true Label { Layout.topMargin: 10 font: D.DTK.fontManager.t6 text: dccObj.displayName Layout.leftMargin: 14 } D.TipsSlider { id: fontSizeSlider readonly property var fontSizeModel: [11, 12, 13, 14, 15, 16, 18, 20] Layout.preferredHeight: 90 Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true tickDirection: D.TipsSlider.TickDirection.Back slider.handleType: Slider.HandleType.ArrowBottom slider.from: 0 slider.to: fontSizeModel.length - 1 slider.live: true slider.stepSize: 1 slider.snapMode: Slider.SnapAlways ticks: [ D.SliderTipItem {text: fontSizeSlider.fontSizeModel[0]; highlight: fontSizeSlider.slider.value === 0}, D.SliderTipItem {text: fontSizeSlider.fontSizeModel[1]; highlight: fontSizeSlider.slider.value === 1}, D.SliderTipItem {text: fontSizeSlider.fontSizeModel[2]; highlight: fontSizeSlider.slider.value === 2}, D.SliderTipItem {text: fontSizeSlider.fontSizeModel[3]; highlight: fontSizeSlider.slider.value === 3}, D.SliderTipItem {text: fontSizeSlider.fontSizeModel[4]; highlight: fontSizeSlider.slider.value === 4}, D.SliderTipItem {text: fontSizeSlider.fontSizeModel[5]; highlight: fontSizeSlider.slider.value === 5}, D.SliderTipItem {text: fontSizeSlider.fontSizeModel[6]; highlight: fontSizeSlider.slider.value === 6}, D.SliderTipItem {text: fontSizeSlider.fontSizeModel[7]; highlight: fontSizeSlider.slider.value === 7} ] slider.onValueChanged: { dccData.worker.setFontSize(fontSizeSlider.fontSizeModel[fontSizeSlider.slider.value]) } Component.onCompleted: { slider.value = fontSizeModel.indexOf(dccData.model.fontSizeModel.size) } } } } DccObject { name: "standardFont" parentName: "personalization/font" displayName: qsTr("Standard Font") weight: 100 backgroundType: DccObject.Normal pageType: DccObject.Editor page: FontCombobox { flat: true model: dccData.model.standardFontModel.fontList textRole: "Name" valueRole: "Id" currentIndex: indexOfValue(dccData.model.standardFontModel.fontName) onCurrentIndexChanged: { dccData.worker.setDefault(model[currentIndex]); } function indexOfValue(value) { for (var i = 0; i < model.length; i++) { if (model[i][valueRole] === value) { return i } } return -1 } } } DccObject { name: "monoFont" parentName: "personalization/font" displayName: qsTr("Monospaced Font") weight: 200 backgroundType: DccObject.Normal pageType: DccObject.Editor page: FontCombobox { flat: true model: dccData.model.monoFontModel.fontList textRole: "Name" valueRole: "Id" currentIndex: indexOfValue(dccData.model.monoFontModel.fontName) onCurrentIndexChanged: { dccData.worker.setDefault(model[currentIndex]); } function indexOfValue(value) { for (var i = 0; i < model.length; i++) { if (model[i][valueRole] === value) { return i } } return -1 } } } } ================================================ FILE: src/plugin-personalization/qml/IconThemeGridView.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import QtQuick.Dialogs import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D ColumnLayout { id: root property alias model: repeater.model readonly property int itemWidth: 245 readonly property int itemHeight: 97 readonly property int itemSpacing: 10 signal requsetSetTheme(string id) Item { Layout.fillWidth: true Layout.preferredHeight: flow.height Flow { id: flow property int lineCount: Math.floor((parent.width + root.itemSpacing) / (root.itemWidth + root.itemSpacing)) width: lineCount * (root.itemWidth + root.itemSpacing) - root.itemSpacing spacing: 10 anchors.horizontalCenter: parent.horizontalCenter Repeater { id: repeater Rectangle { id: rect width: root.itemWidth height: root.itemHeight radius: 8 color: this.palette.base ColumnLayout { anchors.fill: parent anchors.margins: 10 spacing: 6 RowLayout { Layout.fillWidth: true Text { text: model.name color: this.palette.windowText } Item { Layout.fillWidth: true } DccCheckIcon { visible: model.checked } } Rectangle { Layout.preferredHeight: 2 Layout.fillWidth: true color: this.palette.window } Rectangle { Layout.fillWidth: true Layout.fillHeight: true color: "transparent" Image { anchors.fill: parent fillMode: Image.PreserveAspectFit mipmap: true source: model.pic asynchronous: true } } } MouseArea { anchors.fill: parent onClicked: { if (!model.checked) { root.requsetSetTheme(model.id); } } } } } } } } ================================================ FILE: src/plugin-personalization/qml/InterfaceEffectListview.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dcc 1.0 DccRepeater { enum WindowEffectType { Default = 0, Best, Better, Good, Normal, Compatible } delegate: DccObject { name: "effectItem_" + modelData.value parentName: "interfaceAndEffect" pageType: DccObject.Editor weight: 10 + index icon: modelData.icon displayName: modelData.title description: modelData.description backgroundType: DccObject.ClickStyle page: DccCheckIcon { visible: modelData.value === dccData.model.windowEffectType } onActive: function (cmd) { if (cmd === "") { dccData.worker.setWindowEffect(modelData.value) } } } model: [{ "value": InterfaceEffectListview.WindowEffectType.Normal, "title": qsTr("Optimal Performance"), "icon": "optimum_performance", "description": qsTr("Disable all interface and window effects for efficient system performance.") }, { "value": InterfaceEffectListview.WindowEffectType.Better, "title": qsTr("Balance"), "icon": "balance", "description": qsTr("Limit some window effects for excellent visuals while maintaining smooth system performance.") }, { "value": InterfaceEffectListview.WindowEffectType.Best, "title": qsTr("Best Visuals"), "icon": "best_vision", "description": qsTr("Enable all interface and window effects for the best visual experience.") }] } ================================================ FILE: src/plugin-personalization/qml/Personalization.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { name: "personalization" parentName: "root" displayName: qsTr("Personalization") icon: "personalization" weight: 30 } ================================================ FILE: src/plugin-personalization/qml/PersonalizationMain.qml ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dcc.personalization 1.0 DccObject { DccObject { name: "themeRoot" parentName: "personalization" weight: 10 pageType: DccObject.Item page: DccGroupView {} onActive: function (cmdParam) { dccData.handleCmdParam(PersonalizationData.Theme, cmdParam) } DccObject { name: "themeTitle" parentName: "personalization/themeRoot" displayName: qsTr("Theme") weight: 1 pageType: DccObject.Item onParentItemChanged: item => { if (item) item.activeFocusOnTab = false } page: ColumnLayout { Layout.fillHeight: true Layout.margins: 10 RowLayout { Layout.fillWidth: true spacing: 10 Layout.topMargin: 10 Layout.rightMargin: 10 Label { font: D.DTK.fontManager.t6 text: dccObj.displayName Layout.leftMargin: 10 } Item { Layout.fillWidth: true Layout.fillHeight: true } D.IconButton { flat: true enabled: themeSelectView.currentIndex !== 0 icon.name: "arrow_left" icon.width: 16 icon.height: 16 implicitWidth: 16 implicitHeight: 16 onClicked: { themeSelectView.decrementCurrentIndex() } background: null Component.onCompleted: { if (contentItem) { contentItem.smooth = false } } } D.IconButton { flat: true enabled: themeSelectView.currentIndex !== themeSelectView.count - 1 icon.name: "arrow_right" icon.width: 16 icon.height: 16 implicitWidth: 16 implicitHeight: 16 onClicked: { themeSelectView.incrementCurrentIndex() } background: null Component.onCompleted: { if (contentItem) { contentItem.smooth = false } } } } ThemeSelectView { id: themeSelectView Layout.fillWidth: true Layout.preferredHeight: 240 Layout.bottomMargin: 15 } } } DccObject { name: "appearance" parentName: "personalization/themeRoot" displayName: qsTr("Appearance") description: qsTr("Select light, dark or automatic theme appearance") weight: 2 pageType: DccObject.Editor icon: "appearance" page: D.ComboBox { flat: true textRole: "text" model: dccData.appearanceSwitchModel currentIndex: { for (var i = 0; i < model.length; ++i) { if (model[i].value === dccData.currentAppearance) { return i; } } return 0 } enabled: model.length > 1 onCurrentIndexChanged: { if (dccData.currentAppearance !== model[currentIndex].value) { dccData.worker.setAppearanceTheme(model[currentIndex].value) } } } } } DccObject { name: "windowEffect" parentName: "personalization" displayName: qsTr("Window effect") description: qsTr("Interface and effects, rounded corners") icon: "window_effect" weight: 200 WindowEffectPage {} } DccObject { name: "wallpaper" parentName: "personalization" displayName: qsTr("Wallpaper") description: qsTr("Personalize your wallpaper and screensaver") icon: "dcc_wallpaper" weight: 300 onActive: function (cmdParam) { dccData.handleCmdParam(PersonalizationData.Wallpaper, cmdParam) } WallpaperPage {} } DccObject { name: "screenSaver" parentName: "personalization" displayName: qsTr("Screensaver") description: qsTr("Personalize your wallpaper and screensaver") icon: "screensaver" weight: 400 visible: !DccApp.isTreeland() ScreenSaverPage {} } DccObject { name: "colorAndIcons" parentName: "personalization" displayName: qsTr("Colors and icons") description: qsTr("Adjust accent color and theme icons") icon: "icon_cursor" weight: 500 ColorAndIcons {} } DccObject { name: "font" parentName: "personalization" displayName: qsTr("Font and font size") description: qsTr("Change system font and size") icon: "font_size" weight: 600 FontSizePage {} } } ================================================ FILE: src/plugin-personalization/qml/ScreenIndicator.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import org.deepin.dcc 1.0 Window { id: root flags: Qt.CoverWindow | Qt.WindowStaysOnTopHint | Qt.SplashScreen | Qt.FramelessWindowHint | Qt.X11BypassWindowManagerHint color: "#2ca7f8" x: screen.virtualX y: screen.virtualY width: screen.width height: 10 onClosing: destroy(10) Timer { interval: 1000 running: root.visible onTriggered: root.close() } Window { flags: Qt.CoverWindow | Qt.WindowStaysOnTopHint | Qt.SplashScreen | Qt.FramelessWindowHint | Qt.X11BypassWindowManagerHint visible: root.visible color: root.color screen: root.screen x: screen.virtualX y: screen.virtualY + screen.height - 10 width: screen.width height: 10 } Window { flags: Qt.CoverWindow | Qt.WindowStaysOnTopHint | Qt.SplashScreen | Qt.FramelessWindowHint | Qt.X11BypassWindowManagerHint visible: root.visible color: root.color screen: root.screen x: screen.virtualX y: screen.virtualY width: 10 height: screen.height } Window { flags: Qt.CoverWindow | Qt.WindowStaysOnTopHint | Qt.SplashScreen | Qt.FramelessWindowHint | Qt.X11BypassWindowManagerHint visible: root.visible color: root.color screen: root.screen x: screen.virtualX + screen.width - 10 y: screen.virtualY width: 10 height: screen.height } } ================================================ FILE: src/plugin-personalization/qml/ScreenSaverPage.qml ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import QtQuick.Dialogs import Qt5Compat.GraphicalEffects import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dtk.private 1.0 as P DccObject { DccTitleObject { name: "screenSaverTitle" weight: 10 parentName: "personalization/screenSaver" displayName: qsTr("Screensaver") } DccObject { name: "screenSaverStatusGroup" parentName: "personalization/screenSaver" weight: 100 pageType: DccObject.Item page: DccRowView { } DccObject { name: "screenSaverDisplayArea" parentName: "personalization/screenSaver/screenSaverStatusGroup" weight: 200 pageType: DccObject.Item page: RowLayout { Item { implicitWidth: 197 implicitHeight: 108 AnimatedImage { id: image anchors.fill: parent source: dccData.model.currentScreenSaverPicMode === "" ? dccData.model.screenSaverModel.getPicPathByUrl(dccData.model.currentScreenSaver) : dccData.model.picScreenSaverModel.getPicPathByUrl(dccData.model.currentScreenSaverPicMode) sourceSize: Qt.size(width, height) playing: true mipmap: true visible: false fillMode: Image.PreserveAspectCrop asynchronous: true onSourceChanged: { playing = false playing = true } } OpacityMask { anchors.fill: parent source: image maskSource: Rectangle { implicitWidth: image.width implicitHeight: image.height radius: 6 } } Rectangle { anchors.fill: parent radius: 6 color: "transparent" border.color: D.DTK.themeType === D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.1) : Qt.rgba(1, 1, 1, 0.1) border.width: 1 } D.Button { id: previewBtn anchors.bottom: parent.bottom anchors.bottomMargin: 15 anchors.horizontalCenter: parent.horizontalCenter implicitWidth: { font.pixelSize return previewFm.advanceWidth(text) + leftPadding + rightPadding } implicitHeight: 24 visible: hoverHandler.hovered text: qsTr("preview") FontMetrics { id: previewFm font: previewBtn.font } background: P.ButtonPanel { property D.Palette background1: D.Palette { normal { common: ("#f7f7f7") crystal: Qt.rgba(0, 0, 0, 0.1) } normalDark { common: Qt.rgba(0, 0, 0, 1) crystal: Qt.rgba(0, 0, 0, 1) } hovered { common: ("#e1e1e1") crystal: Qt.rgba(16.0 / 255, 16.0 / 255, 16.0 / 255, 0.2) } pressed { common: ("#bcc4d0") crystal: Qt.rgba(16.0 / 255, 16.0 / 255, 16.0 / 255, 0.15) } } property D.Palette background2: D.Palette { normal { common: ("#f0f0f0") crystal: Qt.rgba(0, 0, 0, 0.1) } normalDark { common: Qt.rgba(0, 0, 0, 1) crystal: Qt.rgba(0, 0, 0, 1) } hovered { common: ("#d2d2d2") crystal: Qt.rgba(16.0 / 255, 16.0 / 255, 16.0 / 255, 0.2) } pressed { common: ("#cdd6e0") crystal: Qt.rgba(16.0 / 255, 16.0 / 255, 16.0 / 255, 0.15) } } color1: selectValue(background1, DS.Style.checkedButton.background, background1) color2: selectValue(background2, DS.Style.checkedButton.background, background2) implicitWidth: DS.Style.button.width implicitHeight: DS.Style.button.height button: previewBtn opacity: 0.6 } onClicked: { dccData.worker.startScreenSaverPreview() } } HoverHandler { id: hoverHandler } } } } DccObject { name: "screenSaverSetGroup" parentName: "personalization/screenSaver/screenSaverStatusGroup" weight: 300 pageType: DccObject.Item page: DccGroupView { Layout.alignment: Qt.AlignTop } DccObject { name: "personalizedScreensaver" parentName: "personalization/screenSaver/screenSaverStatusGroup/screenSaverSetGroup" displayName: qsTr("Personalized screensaver") weight: 10 pageType: DccObject.Editor enabled: dccData.model.screenSaverModel.getConfigAbleByUrl(dccData.model.currentScreenSaver) || dccData.model.currentScreenSaver === "deepin-custom-screensaver" page: D.Button { id: settingBtn implicitWidth: { font.pixelSize return fm.advanceWidth(text) + leftPadding + rightPadding } implicitHeight: 24 FontMetrics { id: fm font: settingBtn.font } text: qsTr("setting") font { pixelSize: D.DTK.fontManager.t7.pixelSize letterSpacing: 2 } onClicked: { dccData.worker.requestScreenSaverConfig(dccData.model.currentScreenSaver) } } onParentItemChanged: { if (parentItem) parentItem.implicitHeight = 36 } } DccObject { name: "idleTime" parentName: "personalization/screenSaver/screenSaverStatusGroup/screenSaverSetGroup" displayName: qsTr("idle time") weight: 20 pageType: DccObject.Editor page: CustomComboBox { flat: true textRole: "text" currentIndex: { let value = dccData.model.onBattery ? dccData.model.batteryScreenSaverIdleTime : dccData.model.linePowerScreenSaverIdleTime return indexByValue(value) } model: ListModel { ListElement { text: qsTr("1 minute"); value: 60 } ListElement { text: qsTr("5 minute"); value: 300 } ListElement { text: qsTr("10 minute"); value: 600 } ListElement { text: qsTr("15 minute"); value: 900 } ListElement { text: qsTr("30 minute"); value: 1800 } ListElement { text: qsTr("1 hour"); value: 3600 } ListElement { text: qsTr("never"); value: 0 } } onCurrentIndexChanged: { let value = dccData.model.onBattery ? dccData.model.batteryScreenSaverIdleTime : dccData.model.linePowerScreenSaverIdleTime if (value !== model.get(currentIndex).value) { dccData.worker.setScreenSaverIdleTime(model.get(currentIndex).value) } } } onParentItemChanged: { if (parentItem) { parentItem.implicitHeight = 36 parentItem.rightItemTopMargin = 0 parentItem.rightItemBottomMargin = 0 } } } DccObject { name: "lockScreenAtAwake" parentName: "personalization/screenSaver/screenSaverStatusGroup/screenSaverSetGroup" displayName: qsTr("Password required for recovery") weight: 30 pageType: DccObject.Editor page: D.Switch { checked: dccData.model.lockScreenAtAwake onCheckedChanged: { if (checked != dccData.model.lockScreenAtAwake) { dccData.worker.setLockScreenAtAwake(checked) } } } onParentItemChanged: { if (parentItem) parentItem.implicitHeight = 36 } } } } DccObject { name: "screenSaverPicobj" parentName: "personalization/screenSaver" displayName: qsTr("Picture slideshow screensaver") weight: 400 backgroundType: DccObject.Normal pageType: DccObject.Item page: WallpaperSelectView { model: dccData.model.picScreenSaverModel currentItem: dccData.model.currentScreenSaverPicMode enableContextMenu: false onWallpaperSelected: (url, isDark, isLock) => { // 防止调用两次 if (isLock) { dccData.worker.setCurrentScreenSaverPicMode(url) dccData.worker.setScreenSaver("deepin-custom-screensaver") } } } } DccObject { name: "screenSaverListObj" parentName: "personalization/screenSaver" displayName: qsTr("System screensaver") weight: 500 backgroundType: DccObject.Normal pageType: DccObject.Item page: WallpaperSelectView { model: dccData.model.screenSaverModel currentItem: dccData.model.currentScreenSaver enableContextMenu: false onWallpaperSelected: (url, isDark, isLock) => { // 防止调用两次 if (isLock) { dccData.worker.setScreenSaver(url) if (url === "deepin-custom-screensaver") { dccData.worker.setCurrentScreenSaverPicMode("default") } else { dccData.worker.setCurrentScreenSaverPicMode("") } } } } } } ================================================ FILE: src/plugin-personalization/qml/ScreenTab.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 Item { id: root property var screen property alias model: repeater.model implicitHeight: 30 RowLayout { Repeater { id: repeater delegate: Rectangle { property bool isSelect: modelData === screen property alias hovered: mouseArea.containsMouse implicitWidth: nameLabel.implicitWidth + 20 implicitHeight: 30 radius: 8 color: isSelect ? (D.DTK.themeType == D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.1) : Qt.rgba(1, 1, 1, 0.1)) : "transparent" Label { id: nameLabel anchors.centerIn: parent text: modelData color: hovered ? this.palette.link : (isSelect ? this.palette.highlight : this.palette.text) } MouseArea { id: mouseArea anchors.fill: parent hoverEnabled: true onClicked: { if (!isSelect) { screen = modelData } } } } } } } ================================================ FILE: src/plugin-personalization/qml/ThemeSelectView.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D FocusScope { id: root activeFocusOnTab: true property alias currentIndex: listview.currentIndex property alias count: listview.count function incrementCurrentIndex() { listview.incrementCurrentIndex() } function decrementCurrentIndex() { listview.decrementCurrentIndex() } property int focusedThemeIndex: 0 // 记录上次的模型数量,用于判断是否真正需要重置焦点 property int lastModelCount: dccData.globalThemeModel ? dccData.globalThemeModel.rowCount() : 0 property bool hadLostFocus: false onActiveFocusChanged: { if (activeFocus) { if (hadLostFocus) { focusedThemeIndex = 0 hadLostFocus = false } } else { hadLostFocus = true } } Keys.onLeftPressed: { if (focusedThemeIndex > 0) { focusedThemeIndex-- var pageIndex = Math.floor(focusedThemeIndex / (listview.gridMaxColumns * listview.gridMaxRows)) if (pageIndex !== listview.currentIndex) { listview.currentIndex = pageIndex } } } Keys.onRightPressed: { // +1 for "More Wallpapers" var totalCount = dccData.globalThemeModel.rowCount() + 1 if (focusedThemeIndex < totalCount - 1) { focusedThemeIndex++ var pageIndex = Math.floor(focusedThemeIndex / (listview.gridMaxColumns * listview.gridMaxRows)) if (pageIndex !== listview.currentIndex) { listview.currentIndex = pageIndex } } } Keys.onUpPressed: { if (focusedThemeIndex >= listview.gridMaxColumns) { focusedThemeIndex -= listview.gridMaxColumns } } Keys.onDownPressed: { var totalCount = dccData.globalThemeModel.rowCount() + 1 if (focusedThemeIndex + listview.gridMaxColumns < totalCount) { focusedThemeIndex += listview.gridMaxColumns } } Keys.onReturnPressed: activateCurrentItem() Keys.onEnterPressed: activateCurrentItem() Keys.onSpacePressed: activateCurrentItem() // IdRole value from ThemeVieweModel::UserDataRole (Qt::UserRole + 0x101 = 0x201) readonly property int themeIdRole: 0x201 function activateCurrentItem() { var totalThemes = dccData.globalThemeModel.rowCount() if (focusedThemeIndex < totalThemes) { var themeId = dccData.globalThemeModel.data(dccData.globalThemeModel.index(focusedThemeIndex, 0), themeIdRole) listview.selectTheme = themeId dccData.worker.setGlobalTheme(themeId) } else { // "More Wallpapers" button dccData.worker.goDownloadTheme() } } // 使用Item容器,支持触控板手势和鼠标拖拽翻页 // MouseArea处理wheel事件,ListView处理拖拽 Item { anchors.fill: parent // ListView放在前面(底层),处理鼠标拖拽翻页 ListView { id: listview anchors.fill: parent // 启用交互性以支持鼠标拖拽翻页 interactive: true focus: true // 132 = 130 + itemBorderWidth readonly property int itemWidth: 132 readonly property int itemHeight: 100 readonly property int itemBorderWidth: 2 readonly property int itemSpacing: 18 readonly property int imageRectH: 86 readonly property int imageRectW: itemWidth property int gridMaxColumns: Math.floor(listview.width / (itemWidth + itemSpacing)) property int gridMaxRows: 2 property string selectTheme: "" model: Math.ceil((dccData.globalThemeModel.rowCount() + 1) / (2 * gridMaxColumns)) spacing: 0 clip: true orientation: ListView.Horizontal layoutDirection: Qt.LeftToRight snapMode: ListView.SnapOneItem boundsBehavior: Flickable.StopAtBounds highlightRangeMode: ListView.StrictlyEnforceRange highlightFollowsCurrentItem: true highlightMoveDuration: 200 highlightMoveVelocity: -1 Connections { target: dccData.globalThemeModel function onModelReset() { var newCount = dccData.globalThemeModel.rowCount() // 只有当模型数量真正发生变化时才重置焦点 if (newCount !== root.lastModelCount) { listview.selectTheme = "" root.focusedThemeIndex = 0 root.lastModelCount = newCount } } } delegate: Item { width: listview.width height: listview.height D.SortFilterModel { id: sortedModel model: dccData.globalThemeModel property int pageIndex: index property int maxCount: listview.gridMaxColumns * listview.gridMaxRows lessThan: function(left, right) { return left.index < right.index } filterAcceptsItem: function(item) { return item.index >= index * maxCount && item.index < (index + 1) * maxCount } onMaxCountChanged: { sortedModel.update() } delegate: Rectangle { id: delegateRoot Layout.fillHeight: true Layout.fillWidth: true color: "transparent" ToolTip.visible: mouseArea.containsMouse && model.toolTip !== "" ToolTip.text: model.toolTip ToolTip.delay: 300 property bool isCurrent: listview.selectTheme === "" ? model.checked : listview.selectTheme === model.id property bool isFocused: root.activeFocus && root.focusedThemeIndex === model.index ColumnLayout { width: listview.itemWidth height: listview.itemHeight anchors.centerIn: parent Rectangle { Layout.preferredHeight: listview.imageRectH Layout.preferredWidth: listview.imageRectW border.width: 2 border.color: delegateRoot.isCurrent || delegateRoot.isFocused ? D.DTK.platformTheme.activeColor : "transparent" color: "transparent" radius: 8 Image { anchors.fill: parent anchors.margins: 4 mipmap: true source: model.pic sourceSize: Qt.size(width, height) asynchronous: true } } Item { Layout.fillWidth: true Layout.fillHeight: true } Text { Layout.fillWidth: true Layout.fillHeight: true text: model.name horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font: D.DTK.fontManager.t9 color: delegateRoot.isCurrent ? D.DTK.platformTheme.activeColor : this.palette.windowText } } MouseArea { id: mouseArea anchors.fill: parent hoverEnabled: true onClicked: { root.focusedThemeIndex = model.index listview.selectTheme = model.id dccData.worker.setGlobalTheme(model.id) } } } } GridLayout { id: gridLayout anchors.left: parent.left property int contentCount: repeater.count + 1 width: contentCount < columns ? contentCount * (listview.itemWidth + listview.itemSpacing) : parent.width height: contentCount <= columns ? parent.height / 2 : parent.height rowSpacing: 0 columnSpacing: 0 rows: listview.gridMaxRows columns: listview.gridMaxColumns Repeater { id: repeater model: sortedModel } Rectangle { id: moreWallpapersItem Layout.fillHeight: true Layout.fillWidth: true visible: index === listview.model - 1 color: "transparent" property int itemGlobalIndex: dccData.globalThemeModel.rowCount() property bool isFocused: root.activeFocus && root.focusedThemeIndex === itemGlobalIndex ColumnLayout { width: listview.itemWidth height: listview.itemHeight anchors.centerIn: parent Item { Layout.preferredHeight: listview.imageRectH Layout.preferredWidth: listview.imageRectW Rectangle { anchors.fill: parent anchors.margins: listview.itemBorderWidth + 1 color: "transparent" radius: 8 border.width: moreWallpapersItem.isFocused ? 2 : 0 border.color: moreWallpapersItem.isFocused ? D.DTK.platformTheme.activeColor : "transparent" Image { anchors.fill: parent anchors.margins: moreWallpapersItem.isFocused ? 2 : 0 mipmap: true source: D.DTK.themeType === D.ApplicationHelper.LightType ? "qrc:/icons/download_more_light.png" : "qrc:/icons/download_more_dark.png" } } } Item { Layout.fillWidth: true Layout.fillHeight: true } Text { Layout.fillWidth: true Layout.fillHeight: true text: qsTr("More Wallpapers") horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter color: this.palette.windowText font: D.DTK.fontManager.t9 } } MouseArea { anchors.fill: parent onClicked: { dccData.worker.goDownloadTheme() } } } } } } // MouseArea放在后面(上层),处理wheel事件 // acceptedButtons: Qt.NoButton 让鼠标按钮事件穿透到ListView MouseArea { anchors.fill: parent scrollGestureEnabled: false acceptedButtons: Qt.NoButton onWheel: function(wheel) { // 使用angleDelta判断滚动方向(单位:1/8度) var xDelta = wheel.angleDelta.x / 8 var yDelta = wheel.angleDelta.y / 8 // 判断滚动方向:水平翻页,垂直传递给父组件 if (Math.abs(xDelta) > Math.abs(yDelta)) { // 水平滚动 - 双指左右滑动或鼠标滚轮,翻页 var toPage = (xDelta > 0) ? -1 : 1 if (toPage < 0 && listview.currentIndex > 0) { listview.decrementCurrentIndex() } else if (toPage > 0 && listview.currentIndex < listview.count - 1) { listview.incrementCurrentIndex() } wheel.accepted = true // 拦截事件 } else { // 垂直滚动 - 双指上下滑动或鼠标滚轮,传递给父组件 wheel.accepted = false // 不拦截,让父组件处理 } } } } } ================================================ FILE: src/plugin-personalization/qml/WallpaperPage.qml ================================================ // SPDX-FileCopyrightText: 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Window import QtQuick.Controls import QtQuick.Layouts import QtQuick.Dialogs import Qt5Compat.GraphicalEffects import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dcc.personalization 1.0 DccObject { DccTitleObject { name: "wallpaperTitle" weight: 10 parentName: "personalization/wallpaper" displayName: qsTr("wallpaper") } DccObject { name: "screenTab" parentName: "personalization/wallpaper" weight: 50 pageType: DccObject.Item visible: dccData.model.screens.length > 1 page: ScreenTab { id: screemTab model: dccData.model.screens screen: dccData.model.currentSelectScreen onScreenChanged: { if (screen !== dccData.model.currentSelectScreen) { dccData.model.currentSelectScreen = screen if (true) { indicator.createObject(this, { "screen": getQtScreen(screemTab.screen) }).show() } } } Component { id: indicator ScreenIndicator {} } function getQtScreen(screenName) { for (var s of Qt.application.screens) { if (screenName === s.name) { return s } } return null } } } DccObject { name: "wallpaperStatusGroup" parentName: "personalization/wallpaper" weight: 100 pageType: DccObject.Item page: DccRowView { } DccObject { name: "wallpaparDisplayArea" parentName: "personalization/wallpaper/wallpaperStatusGroup" weight: 200 pageType: DccObject.Item page: RowLayout { Item { implicitWidth: 197 implicitHeight: 110 Image { id: image anchors.fill: parent source: "image://DccImage/" + dccData.model.wallpaperMap[dccData.model.currentSelectScreen] sourceSize: Qt.size(197, 110) mipmap: true visible: false fillMode: Image.PreserveAspectCrop asynchronous: true retainWhileLoading: true } OpacityMask { anchors.fill: parent source: image maskSource: Rectangle { implicitWidth: image.width implicitHeight: image.height radius: 6 } } Rectangle { anchors.fill: parent radius: 6 color: "transparent" border.color: D.DTK.themeType === D.ApplicationHelper.LightType ? Qt.rgba(0, 0, 0, 0.1) : Qt.rgba(1, 1, 1, 0.1) border.width: 1 } } } } DccObject { name: "wallpaperSetGroup" parentName: "personalization/wallpaper/wallpaperStatusGroup" weight: 300 pageType: DccObject.Item page: DccGroupView { Layout.alignment: Qt.AlignTop } DccObject { name: "wallpaperType" parentName: "personalization/wallpaper/wallpaperStatusGroup/wallpaperSetGroup" displayName: { let cutUrl = dccData.model.wallpaperMap[dccData.model.currentSelectScreen] if (dccData.model.customWallpaperModel.hasWallpaper(cutUrl)) { return qsTr("My pictures") } else if (dccData.model.sysWallpaperModel.hasWallpaper(cutUrl)) { return qsTr("System Wallpaper") } else if (dccData.model.solidWallpaperModel.hasWallpaper(cutUrl)) { return qsTr("Solid color wallpaper") } else { return qsTr("Customizable wallpapers") } } canSearch: false pageType: DccObject.Editor weight: 10 onParentItemChanged: { if (parentItem) parentItem.implicitHeight = 36 } } DccObject { name: "fillStyle" parentName: "personalization/wallpaper/wallpaperStatusGroup/wallpaperSetGroup" displayName: qsTr("fill style") visible: false weight: 100 pageType: DccObject.Editor page: D.ComboBox { flat: true model: ["adapt"] } onParentItemChanged: { if (parentItem) parentItem.implicitHeight = 36 } } DccObject { name: "automaticWallpaper" parentName: "personalization/wallpaper/wallpaperStatusGroup/wallpaperSetGroup" displayName: qsTr("Automatic wallpaper change") weight: 200 pageType: DccObject.Editor page: CustomComboBox { flat: true textRole: "text" currentIndex: indexByValue(dccData.model.wallpaperSlideShowMap[dccData.model.currentSelectScreen]) model: ListModel { ListElement { text: qsTr("never"); value: "" } ListElement { text: qsTr("30 second"); value: "30" } ListElement { text: qsTr("1 minute"); value: "60" } ListElement { text: qsTr("5 minute"); value: "300" } ListElement { text: qsTr("10 minute"); value: "600" } ListElement { text: qsTr("15 minute"); value: "900" } ListElement { text: qsTr("30 minute"); value: "1800" } ListElement { text: qsTr("1 hour"); value: "3600" } ListElement { text: qsTr("login"); value: "login" } ListElement { text: qsTr("wake up"); value: "wakeup" } } onCurrentIndexChanged: { if (indexByValue(dccData.model.wallpaperSlideShowMap[dccData.model.currentSelectScreen]) !== currentIndex) { dccData.worker.setWallpaperSlideShow(dccData.model.currentSelectScreen, model.get(currentIndex).value) } } } onParentItemChanged: { if (parentItem) { parentItem.implicitHeight = 36 parentItem.rightItemTopMargin = 0 parentItem.rightItemBottomMargin = 0 } } } } } DccObject { name: "myPictures" parentName: "personalization/wallpaper" displayName: qsTr("My pictures") weight: 400 backgroundType: DccObject.Normal pageType: DccObject.Item page: WallpaperSelectView { firstItemImgSource: "wallpaper_add_bg" firstItemTopIconName: "wallpaper_add" model: dccData.model.customWallpaperModel currentItem: dccData.model.wallpaperMap[dccData.model.currentSelectScreen] onFirstItemClicked: { customWallpaperFileDialog.open() } onWallpaperSelected: (url, isDark, option) => { dccData.worker.setWallpaperForMonitor(dccData.model.currentSelectScreen, url, isDark, option) } onWallpaperDeleteClicked: (url) => { dccData.worker.deleteWallpaper(url) } FileDialog { id: customWallpaperFileDialog title: "Choose an Image File" nameFilters: ["Image files (*.png *.jpg *.jpeg *.bmp *.tiff)", "All files (*)"] fileMode: FileDialog.OpenFile onAccepted: { dccData.worker.addCustomWallpaper(customWallpaperFileDialog.selectedFile) } } } } DccObject { name: "systemWallapers" parentName: "personalization/wallpaper" displayName: qsTr("System Wallpapers") weight: 500 backgroundType: DccObject.Normal pageType: DccObject.Item page: WallpaperSelectView { model: dccData.model.sysWallpaperModel currentItem: dccData.model.wallpaperMap[dccData.model.currentSelectScreen] onWallpaperSelected: (url, isDark, option) => { dccData.worker.setWallpaperForMonitor(dccData.model.currentSelectScreen, url, isDark, option) } } } DccObject { name: "liveWallpaper" parentName: "personalization/wallpaper" visible: false displayName: qsTr("Live Wallpaper") weight: 600 backgroundType: DccObject.Normal pageType: DccObject.Item page: WallpaperSelectView { // model: dccData.model.wallpaperModel } } DccObject { name: "solidColor" parentName: "personalization/wallpaper" displayName: qsTr("Solid color wallpaper") weight: 600 backgroundType: DccObject.Normal pageType: DccObject.Item page: WallpaperSelectView { firstItemImgSource: "wallpaper_addcolor" model: dccData.model.solidWallpaperModel currentItem: dccData.model.wallpaperMap[dccData.model.currentSelectScreen] onWallpaperSelected: (url, isDark, option) => { dccData.worker.setWallpaperForMonitor(dccData.model.currentSelectScreen, url, isDark, option) } onFirstItemClicked: { colorDialog.open() } onWallpaperDeleteClicked: (url) => { dccData.worker.deleteWallpaper(url) } DccColorDialog { id: colorDialog anchors.centerIn: Overlay.overlay popupType: Popup.Item width: 274 height: 322 onAccepted: { dccData.worker.addSolidWallpaper(colorDialog.color) } } } } } ================================================ FILE: src/plugin-personalization/qml/WallpaperSelectView.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Controls import QtQuick.Layouts import QtQuick.Dialogs import Qt5Compat.GraphicalEffects import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dtk.private as P import org.deepin.dcc.personalization 1.0 ColumnLayout { id: root spacing: 0 readonly property int imageBorder: 2 // 1 is the distance between the border and the image readonly property int imageSpacing: 4 readonly property int imageMargin: imageBorder + 1 // base size for layout calculation (fixed 84x54) property int baseImageRectW: 84 property int baseImageRectH: 54 // scaling factor applied to thumbnails when window is resized property real scaleFactor: 1.0 property int imageRectW: baseImageRectW * scaleFactor property int imageRectH: baseImageRectH * scaleFactor property int baseItemWidth: baseImageRectW + imageBorder * 2 + 1 property int baseItemHeight: baseImageRectH + imageBorder * 2 + 1 property int itemWidth: baseItemWidth * scaleFactor property int itemHeight: baseItemHeight * scaleFactor property var model property bool isExpand: false property var currentItem property string firstItemImgSource: "" property bool firstItemVisible: firstItemImgSource !== "" property string firstItemTopIconName: "" property bool enableContextMenu: true signal wallpaperSelected(var url, bool isDark, var option) signal firstItemClicked() signal wallpaperDeleteClicked(var url) onIsExpandChanged: { sortedModel.update() } onFirstItemVisibleChanged: { layout.updateLayout() } Component.onCompleted: { layout.updateLayout() } RowLayout { id: titleLayout Layout.fillWidth: true Layout.preferredHeight: Math.max(titleLabel.implicitHeight, titleLoolButton.implicitHeight) Layout.topMargin: 6 Layout.bottomMargin: 0 Label { id: titleLabel Layout.leftMargin: 10 font: D.DTK.fontManager.t6 text: dccObj.displayName } Item { Layout.fillWidth: true } D.ToolButton { id: titleLoolButton font: D.DTK.fontManager.t7 visible: layout.lineCount * 2 < root.model.count + root.firstItemVisible ? 1 : 0 textColor: D.Palette { normal { common: D.DTK.makeColor(D.Color.Highlight) } normalDark: normal hovered { common: D.DTK.makeColor(D.Color.Highlight).lightness(+30) } hoveredDark: hovered } text: root.isExpand ? qsTr("unfold") : qsTr("show all - %1 items").arg(root.model.count) onClicked: { root.isExpand = !root.isExpand } background: Item {} } } Item { Layout.fillWidth: true Layout.preferredHeight: containter.height Layout.leftMargin: 8 Layout.rightMargin: 8 // animation used Rectangle { id: containter width: parent.width height: layout.height color: "transparent" Behavior on height { NumberAnimation { duration: 300 easing.type: Easing.OutQuart } } } Flow { id: layout property int lineCount: 0 width: parent.width spacing: root.imageSpacing bottomPadding: 12 function updateLayout() { var modelCount = root.model ? root.model.count : 0 var totalItems = (root.firstItemVisible ? 1 : 0) + modelCount if (totalItems <= 0 || parent.width <= 0) { lineCount = 0 root.scaleFactor = 1.0 return } var availableWidth = parent.width var spacing = root.imageSpacing var baseItemTotal = root.baseItemWidth + spacing // theoretical columns based purely on base width 84 and spacing var columns = Math.max(1, Math.floor((availableWidth + spacing) / baseItemTotal)) // distribute the remaining width across columns to get a scale factor var usedWidth = columns * baseItemTotal - spacing var extra = availableWidth - usedWidth var actualItemWidth = root.baseItemWidth var scale = 1.0 if (columns > 0) { var delta = extra / columns actualItemWidth = root.baseItemWidth + delta scale = actualItemWidth / root.baseItemWidth } lineCount = columns root.scaleFactor = scale } onWidthChanged: updateLayout() move: Transition { } Loader { active: root.firstItemVisible sourceComponent: Item { width: root.itemWidth height: root.itemHeight Control { id: iconControl anchors.fill: parent contentItem: D.DciIcon { id: firstItemImage anchors.fill: parent visible: false sourceSize: Qt.size(168, 108) name: root.firstItemImgSource asynchronous: true theme: iconControl.D.ColorSelector.controlTheme } } OpacityMask { anchors.fill: parent anchors.margins: root.imageMargin source: firstItemImage maskSource: Rectangle { anchors.fill: parent implicitWidth: firstItemImage.width implicitHeight: firstItemImage.height radius: 6 } } Item { id: firstItemTopIconContainer anchors.fill: parent anchors.margins: root.imageMargin Column { anchors.centerIn: parent spacing: 4 D.DciIcon { id: firstItemTopIcon anchors.horizontalCenter: parent.horizontalCenter width: 18 height: 18 sourceSize: Qt.size(18, 18) theme: firstItemImage.theme name: root.firstItemTopIconName visible: root.firstItemTopIconName !== "" asynchronous: true } Label { anchors.horizontalCenter: parent.horizontalCenter text: qsTr("Add Picture") font: D.DTK.fontManager.t10 opacity: 0.7 visible: root.firstItemTopIconName !== "" } } } MouseArea { anchors.fill: parent onClicked: { root.firstItemClicked() } } } } Repeater { model: sortedModel } } Timer { id: updateTimer interval: 20 running: false repeat: false onTriggered: { sortedModel.update() } } D.SortFilterModel { id: sortedModel model: root.model property int maxCount: layout.lineCount * 2 - (root.firstItemVisible ? 1 : 0) property int lastMaxCount: 0 lessThan: function(left, right) { return left.index < right.index } filterAcceptsItem: function(item) { return root.isExpand ? true : item.index < maxCount } onMaxCountChanged: { if ((Math.abs(maxCount - lastMaxCount)) > 5) { updateTimer.start() } else { sortedModel.update() } lastMaxCount = maxCount } delegate: Control { id: control width: root.itemWidth height: root.itemHeight hoverEnabled: true contentItem: Item { id: wallpaperItem function requestSetWallpaper(option) { img2x2.grabToImage(function(result) { const isDarkType = dccData.imageHelper.isDarkType(result.image) root.wallpaperSelected(model.url, isDarkType, option) }, Qt.size(2, 2)) } Image { id: img2x2 property bool isDarktype: true anchors.centerIn : parent width: 2 height: 2 source: "image://DccImage/" + model.thumbnail fillMode: Image.Stretch asynchronous: true } Image { id: image anchors.centerIn: parent width: root.imageRectW height: root.imageRectH sourceSize: Qt.size(width, height) source: "image://DccImage/" + model.thumbnail mipmap: false visible: false fillMode: Image.PreserveAspectCrop asynchronous: true retainWhileLoading: true } OpacityMask { anchors.fill: parent anchors.margins: root.imageMargin source: image maskSource: Rectangle { anchors.fill: parent implicitWidth: image.width implicitHeight: image.height radius: 6 } } D.InsideBoxBorder { anchors.fill: image visible: !borderRect.visible color: Qt.rgba(0, 0, 0, 0.1) radius: 6 } Rectangle { id: borderRect anchors.fill: parent visible: model.url !== undefined && model.url === root.currentItem color: "transparent" border.width: 2 border.color: D.DTK.platformTheme.activeColor radius: 8 } MouseArea { anchors.fill: parent hoverEnabled: true acceptedButtons: Qt.LeftButton | Qt.RightButton onClicked: function(mouse) { if (mouse.button === Qt.LeftButton) { wallpaperItem.requestSetWallpaper(PersonalizationExport.Option_All) } else if (mouse.button === Qt.RightButton && root.enableContextMenu && !DccApp.isTreeland()) { contextMenu.x = mouse.x contextMenu.y = mouse.y contextMenu.open() } } } Control { anchors.right: parent.right anchors.top: parent.top anchors.topMargin: - height / 2 + root.imageMargin anchors.rightMargin: - width / 2 + root.imageMargin + 2 hoverEnabled: true z: 999 contentItem: D.ActionButton { icon.name: "close" implicitWidth: 20 implicitHeight: 20 icon.width: 14 icon.height: 14 visible: (control.hovered || parent.hovered) && model.deleteAble && !model.selected background: D.BoxPanel { radius: width / 2 enableBoxShadow: true boxShadowBlur: 10 boxShadowOffsetY: 4 color1: D.Palette { normal { common: Qt.rgba(240 / 255.0, 240 / 255.0, 240 / 255.0, 0.9) // TODO crystal: Qt.rgba(240 / 255.0, 240 / 255.0, 240 / 255.0, 0.5) crystal: Qt.rgba(240 / 255.0, 240 / 255.0, 240 / 255.0, 1.0) } normalDark { common: Qt.rgba(24 / 255.0, 24 / 255.0, 24 / 255.0, 0.8) // TODO crystal: Qt.rgba(240 / 255.0, 240 / 255.0, 240 / 255.0, 0.5) crystal: Qt.rgba(24 / 255.0, 24 / 255.0, 24 / 255.0, 1.0) } hovered { common: Qt.rgba(220 / 255.0, 220 / 255.0, 220 / 255.0, 0.95) crystal: Qt.rgba(220 / 255.0, 220 / 255.0, 220 / 255.0, 1.0) } hoveredDark { common: Qt.rgba(44 / 255.0, 44 / 255.0, 44 / 255.0, 0.9) crystal: Qt.rgba(44 / 255.0, 44 / 255.0, 44 / 255.0, 1.0) } } color2: color1 insideBorderColor: null outsideBorderColor: null } onClicked: { root.wallpaperDeleteClicked(model.url) } scale: visible ? 1 : 0 Behavior on scale { NumberAnimation { duration: 300 easing.type: Easing.OutExpo } } } } D.Menu { id: contextMenu MenuItem { text: qsTr("Set lock screen") onTriggered: { wallpaperItem.requestSetWallpaper(PersonalizationExport.Option_Lock) } } MenuItem { text: qsTr("Set desktop") onTriggered: { wallpaperItem.requestSetWallpaper(PersonalizationExport.Option_Desktop) } } } } } } } } ================================================ FILE: src/plugin-personalization/qml/WindowEffectPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { DccTitleObject { name: "interfaceAndEffectTitle" parentName: "personalization/windowEffect" displayName: qsTr("Interface and Effects") visible: dccData.platformName() !== "wayland" weight: 10 } DccObject { name: "interfaceAndEffect" parentName: "personalization/windowEffect" weight: 100 pageType: DccObject.Item visible: dccData.platformName() !== "wayland" page: DccGroupView {} InterfaceEffectListview {} } DccTitleObject { name: "windowSettingsTitle" parentName: "personalization/windowEffect" displayName: qsTr("Window Settings") weight: 200 } DccObject { name: "windowSettingsGroup" parentName: "personalization/windowEffect" weight: 300 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "roundedEffect" parentName: "personalization/windowEffect/windowSettingsGroup" displayName: qsTr("Window rounded corners") visible: dccData.model.windowEffectType < InterfaceEffectListview.WindowEffectType.Normal || dccData.platformName() === "wayland" weight: 1 pageType: DccObject.Item page: ColumnLayout { anchors.fill: parent Label { id: speedText Layout.topMargin: 10 text: dccObj.displayName Layout.leftMargin: 14 } Flow { id: listview Layout.fillWidth: true Layout.bottomMargin: 10 Layout.leftMargin: 10 property var tips: [qsTr("None"), qsTr("Small"), qsTr("Medium", "describe size of window rounded corners"), qsTr("Large")] property var icons: ["corner_none", "corner_small", "corner_middle", "corner_big"] spacing: 8 Repeater { model: listview.tips.length ColumnLayout { id: layout property bool checked: dccData.model.windowRadius === 6 * index width: 112 height: 104 Item { Layout.preferredHeight: 78 Layout.fillWidth: true Rectangle { anchors.fill: parent color: "transparent" border.width: 2 border.color: layout.checked ? D.DTK.platformTheme.activeColor : "transparent" radius: 7 Control { id: iconControl anchors.fill: parent anchors.margins: 4 contentItem: D.DciIcon { palette: D.DTK.makeIconPalette(iconControl.palette) theme: iconControl.D.ColorSelector.controlTheme sourceSize: Qt.size(width, height) name: listview.icons[index] } } } MouseArea { anchors.fill: parent onClicked: { dccData.worker.setWindowRadius(6 * index) } } } Text { Layout.fillWidth: true Layout.fillHeight: true text: listview.tips[index] horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter color: layout.checked ? D.DTK.platformTheme.activeColor : this.palette.windowText } } } } } } DccObject { name: "enableTransparentWhenMoveWindow" parentName: "personalization/windowEffect/windowSettingsGroup" displayName: qsTr("Enable transparent effects when moving windows") visible: dccData.model.windowEffectType < InterfaceEffectListview.WindowEffectType.Normal && dccData.platformName() !== "wayland" && dccData.model.supportEffects.indexOf("kwin4_effect_translucency") !== -1 weight: 2 pageType: DccObject.Editor page: D.Switch { checked: dccData.model.isMoveWindow onCheckedChanged: { dccData.worker.setMovedWindowOpacity(checked) } } } DccObject { id: minimizeEffectObject property var supportEffects: dccData.model.supportEffects name: "minimizeEffect" parentName: "personalization/windowEffect/windowSettingsGroup" displayName: qsTr("Window Minimize Effect") visible: dccData.model.windowEffectType <= InterfaceEffectListview.WindowEffectType.Best && dccData.platformName() !== "wayland" && (supportEffects.indexOf("kwin4_effect_scale") !== -1 || supportEffects.indexOf("magiclamp") !== -1) weight: 3 pageType: DccObject.Editor page: CustomComboBox { flat: true currentIndex: dccData.model.miniEffect textRole: "text" visibleRole: "support" model: [ {text: qsTr("Scale"), support: minimizeEffectObject.supportEffects.indexOf("kwin4_effect_scale") !== -1}, {text: qsTr("Magic Lamp"), support: minimizeEffectObject.supportEffects.indexOf("magiclamp") !== -1} ] onCurrentIndexChanged: { dccData.worker.setMiniEffect(currentIndex) } } } } DccObject { name: "computerSuspendsAfter" parentName: "personalization/windowEffect" displayName: qsTr("Opacity") weight: 600 visible: dccData.model.windowEffectType < InterfaceEffectListview.WindowEffectType.Normal || dccData.platformName() === "wayland" pageType: DccObject.Item backgroundType: DccObject.Normal page: ColumnLayout { Layout.fillHeight: true Label { Layout.topMargin: 10 font: D.DTK.fontManager.t6 text: dccObj.displayName Layout.leftMargin: 14 } D.TipsSlider { Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true tickDirection: D.TipsSlider.TickDirection.Back slider.handleType: Slider.HandleType.ArrowBottom slider.from: 25 slider.to: 100 slider.value: 25 slider.live: true slider.stepSize: 1 slider.snapMode: Slider.SnapAlways ticks: [ D.SliderTipItem { text: qsTr("Low") }, D.SliderTipItem { text: "" }, D.SliderTipItem { text: qsTr("High") } ] slider.onValueChanged: { dccData.worker.setOpacity(slider.value) } Component.onCompleted: { slider.value = dccData.model.opacity * 100 } } } } DccObject { name: "titleBarHeight" parentName: "personalization/windowEffect" displayName: qsTr("Title Bar Height") description: qsTr("Only suitable for application window title bars drawn by the window manager.") weight: 700 backgroundType: DccObject.Normal pageType: DccObject.Editor page: D.ComboBox { flat: true currentIndex: indexOfValue(dccData.model.titleBarHeight) model: [ { text: qsTr("Extremely small"), value: 24 }, { text: qsTr("Small"), value: 32 }, { text: qsTr("Medium", "describe height of window title bar"), value: 40 }, { text: qsTr("Large"), value: 50 } ] textRole: "text" valueRole: "value" onCurrentIndexChanged: { var selectedValue = model[currentIndex][valueRole] dccData.worker.setDiabledCompactToTitleHeight() dccData.worker.setTitleBarHeight(selectedValue) } function indexOfValue(value) { for (var i = 0; i < model.length; i++) { if (model[i][valueRole] === value) { return i } } return -1 } } } DccObject { id: scrollBarObject name: "scrollBar" property bool hasDBusProperty: false parentName: "personalization/windowEffect" displayName: qsTr("Scroll Bars") visible: dccData.model.scrollBarPolicyConfig !== "Hidden" weight: 800 backgroundType: DccObject.Normal pageType: DccObject.Editor page: D.ComboBox { flat: true enabled: dccData.model.scrollBarPolicyConfig !== "Disabled" model: [qsTr("Show on scrolling"), qsTr("Keep shown")] currentIndex: { let policy = dccData.model.scrollBarPolicy if (policy === Qt.ScrollBarAsNeeded) { return 0 } else { return 1 } } onCurrentIndexChanged: { if (currentIndex === 0) { dccData.worker.setScrollBarPolicy(Qt.ScrollBarAsNeeded) } else if (currentIndex === 1) { dccData.worker.setScrollBarPolicy(Qt.ScrollBarAlwaysOn) } } } } DccObject { name: "compact" parentName: "personalization/windowEffect" displayName: qsTr("Compact Display") description: qsTr("If enabled, more content is displayed in the window.") visible: false && dccData.model.compactDisplayConfig !== "Hidden" weight: 900 backgroundType: DccObject.Normal pageType: DccObject.Editor page: D.Switch { enabled: dccData.model.compactDisplayConfig !== "Disabled" checked: dccData.model.compactDisplay onCheckedChanged: { dccData.worker.setCompactDisplay(checked) } } } } ================================================ FILE: src/plugin-personalization/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-power/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(Power_Name power) file(GLOB_RECURSE power_SRCS "operation/*.cpp" "operation/*.h" "operation/qrc/power.qrc" ) add_library(${Power_Name} MODULE ${power_SRCS} ) set(Power_Libraries ${DCC_FRAME_Library} ${DTK_NS}::Gui ${QT_NS}::DBus ${QT_NS}::Concurrent ) target_link_libraries(${Power_Name} PRIVATE ${Power_Libraries} ) dcc_install_plugin(NAME ${Power_Name} TARGET ${Power_Name}) ================================================ FILE: src/plugin-power/operation/powerdbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "powerdbusproxy.h" #include #include #include #include #include #include #include #include const QString PowerService = QStringLiteral("org.deepin.dde.Power1"); const QString PowerPath = QStringLiteral("/org/deepin/dde/Power1"); const QString PowerInterface = QStringLiteral("org.deepin.dde.Power1"); const QString SysPowerService = QStringLiteral("org.deepin.dde.Power1"); const QString SysPowerPath = QStringLiteral("/org/deepin/dde/Power1"); const QString SysPowerInterface = QStringLiteral("org.deepin.dde.Power1"); const QString Login1ManagerService = QStringLiteral("org.freedesktop.login1"); const QString Login1ManagerPath = QStringLiteral("/org/freedesktop/login1"); const QString Login1ManagerInterface = QStringLiteral("org.freedesktop.login1.Manager"); const QString UPowerService = QStringLiteral("org.freedesktop.UPower"); const QString UPowerPath = QStringLiteral("/org/freedesktop/UPower"); const QString UPowerInterface = QStringLiteral("org.freedesktop.UPower"); const QString accountsService = QStringLiteral("org.deepin.dde.Accounts1"); const QString defaultAccountsPath = QStringLiteral("/org/deepin/dde/Accounts1"); const QString accountsInterface = QStringLiteral("org.deepin.dde.Accounts1"); const QString accountsUserInterface = QStringLiteral("org.deepin.dde.Accounts1.User"); const QString timeDateService = QStringLiteral("org.deepin.dde.Timedate1"); const QString timeDatePath = QStringLiteral("/org/deepin/dde/Timedate1"); const QString timeDateInterface = QStringLiteral("org.deepin.dde.Timedate1"); const QString PropertiesInterface = QStringLiteral("org.freedesktop.DBus.Properties"); const QString PropertiesChanged = QStringLiteral("PropertiesChanged"); PowerDBusProxy::PowerDBusProxy(QObject *parent) : QObject(parent) , m_accountRootInter(new DDBusInterface(accountsService, defaultAccountsPath, accountsInterface, QDBusConnection::systemBus(), this)) , m_currentAccountInter(nullptr) , m_powerInter(new DDBusInterface(PowerService, PowerPath, PowerInterface, QDBusConnection::sessionBus(), this)) , m_sysPowerInter(new DDBusInterface(SysPowerService, SysPowerPath, SysPowerInterface, QDBusConnection::systemBus(), this)) , m_login1ManagerInter(new DDBusInterface(Login1ManagerService, Login1ManagerPath, Login1ManagerInterface, QDBusConnection::systemBus(), this)) , m_upowerInter(new DDBusInterface(UPowerService, UPowerPath, UPowerInterface, QDBusConnection::systemBus(), this)) { } std::optional PowerDBusProxy::findUserById() { int id = getuid(); QDBusReply reply = m_accountRootInter->callWithArgumentList(QDBus::CallMode::Block, "FindUserById", {QString::number(id)}); if (reply.isValid()) { return reply.value(); } return std::nullopt; } bool PowerDBusProxy::noPasswdLogin() { if (!m_currentAccountInter) { auto path = findUserById(); if (!path.has_value()) { return false; } m_currentAccountInter = new DDBusInterface(accountsInterface, path.value(), accountsUserInterface, QDBusConnection::systemBus(), this); } return qvariant_cast(m_currentAccountInter->property("NoPasswdLogin")); } // power bool PowerDBusProxy::screenBlackLock() { return qvariant_cast(m_powerInter->property("ScreenBlackLock")); } void PowerDBusProxy::setScreenBlackLock(bool value) { m_powerInter->setProperty("ScreenBlackLock", QVariant::fromValue(value)); } bool PowerDBusProxy::sleepLock() { return qvariant_cast(m_powerInter->property("SleepLock")); } void PowerDBusProxy::setSleepLock(bool value) { m_powerInter->setProperty("SleepLock", QVariant::fromValue(value)); } bool PowerDBusProxy::lidIsPresent() { return qvariant_cast(m_powerInter->property("LidIsPresent")); } bool PowerDBusProxy::lidClosedSleep() { return qvariant_cast(m_powerInter->property("LidClosedSleep")); } void PowerDBusProxy::setLidClosedSleep(bool value) { m_powerInter->setProperty("LidClosedSleep", QVariant::fromValue(value)); } bool PowerDBusProxy::lowPowerNotifyEnable() { return qvariant_cast(m_powerInter->property("LowPowerNotifyEnable")); } void PowerDBusProxy::setLowPowerNotifyEnable(bool value) { m_powerInter->setProperty("LowPowerNotifyEnable", QVariant::fromValue(value)); } int PowerDBusProxy::lowPowerAutoSleepThreshold() { return qvariant_cast(m_powerInter->property("LowPowerAutoSleepThreshold")); } void PowerDBusProxy::setLowPowerAutoSleepThreshold(int value) { m_powerInter->setProperty("LowPowerAutoSleepThreshold", QVariant::fromValue(value)); } void PowerDBusProxy::setLowPowerAction(int action) { m_powerInter->setProperty("LowPowerAction", QVariant::fromValue(action)); } int PowerDBusProxy::lowPowerAction() { return qvariant_cast(m_powerInter->property("LowPowerAction")); } int PowerDBusProxy::lowPowerNotifyThreshold() { return qvariant_cast(m_powerInter->property("LowPowerNotifyThreshold")); } void PowerDBusProxy::setLowPowerNotifyThreshold(int value) { m_powerInter->setProperty("LowPowerNotifyThreshold", QVariant::fromValue(value)); } int PowerDBusProxy::linePowerPressPowerBtnAction() { return qvariant_cast(m_powerInter->property("LinePowerPressPowerBtnAction")); } void PowerDBusProxy::setLinePowerPressPowerBtnAction(int value) { m_powerInter->setProperty("LinePowerPressPowerBtnAction", QVariant::fromValue(value)); } int PowerDBusProxy::linePowerLidClosedAction() { return qvariant_cast(m_powerInter->property("LinePowerLidClosedAction")); } void PowerDBusProxy::setLinePowerLidClosedAction(int value) { m_powerInter->setProperty("LinePowerLidClosedAction", QVariant::fromValue(value)); } int PowerDBusProxy::batteryPressPowerBtnAction() { return qvariant_cast(m_powerInter->property("BatteryPressPowerBtnAction")); } void PowerDBusProxy::setBatteryPressPowerBtnAction(int value) { m_powerInter->setProperty("BatteryPressPowerBtnAction", QVariant::fromValue(value)); } int PowerDBusProxy::batteryLidClosedAction() { return qvariant_cast(m_powerInter->property("BatteryLidClosedAction")); } void PowerDBusProxy::setBatteryLidClosedAction(int value) { m_powerInter->setProperty("BatteryLidClosedAction", QVariant::fromValue(value)); } bool PowerDBusProxy::isHighPerformanceSupported() { return qvariant_cast(m_powerInter->property("IsHighPerformanceSupported")); } bool PowerDBusProxy::isBalancePerformanceSupported() { return qvariant_cast(m_sysPowerInter->property("IsBalancePerformanceSupported")); } int PowerDBusProxy::linePowerScreenBlackDelay() { return qvariant_cast(m_powerInter->property("LinePowerScreenBlackDelay")); } void PowerDBusProxy::setLinePowerScreenBlackDelay(int value) { m_powerInter->setProperty("LinePowerScreenBlackDelay", QVariant::fromValue(value)); } int PowerDBusProxy::linePowerSleepDelay() { return qvariant_cast(m_powerInter->property("LinePowerSleepDelay")); } void PowerDBusProxy::setLinePowerSleepDelay(int value) { m_powerInter->setProperty("LinePowerSleepDelay", QVariant::fromValue(value)); } int PowerDBusProxy::batteryScreenBlackDelay() { return qvariant_cast(m_powerInter->property("BatteryScreenBlackDelay")); } void PowerDBusProxy::setBatteryScreenBlackDelay(int value) { m_powerInter->setProperty("BatteryScreenBlackDelay", QVariant::fromValue(value)); } int PowerDBusProxy::batterySleepDelay() { return qvariant_cast(m_powerInter->property("BatterySleepDelay")); } void PowerDBusProxy::setBatterySleepDelay(int value) { m_powerInter->setProperty("BatterySleepDelay", QVariant::fromValue(value)); } int PowerDBusProxy::batteryLockDelay() { return qvariant_cast(m_powerInter->property("BatteryLockDelay")); } void PowerDBusProxy::setBatteryLockDelay(int value) { m_powerInter->setProperty("BatteryLockDelay", QVariant::fromValue(value)); } int PowerDBusProxy::linePowerLockDelay() { return qvariant_cast(m_powerInter->property("LinePowerLockDelay")); } void PowerDBusProxy::setLinePowerLockDelay(int value) { m_powerInter->setProperty("LinePowerLockDelay", QVariant::fromValue(value)); } // sysPower bool PowerDBusProxy::hasBattery() { return qvariant_cast(m_sysPowerInter->property("HasBattery")); } bool PowerDBusProxy::powerSavingModeAutoWhenBatteryLow() { return qvariant_cast(m_sysPowerInter->property("PowerSavingModeAutoWhenBatteryLow")); } void PowerDBusProxy::setPowerSavingModeAutoWhenBatteryLow(bool value) { m_sysPowerInter->setProperty("PowerSavingModeAutoWhenBatteryLow", QVariant::fromValue(value)); } uint PowerDBusProxy::powerSavingModeBrightnessDropPercent() { return qvariant_cast(m_sysPowerInter->property("PowerSavingModeBrightnessDropPercent")); } void PowerDBusProxy::setPowerSavingModeBrightnessDropPercent(uint value) { m_sysPowerInter->setProperty("PowerSavingModeBrightnessDropPercent", QVariant::fromValue(value)); } uint PowerDBusProxy::powerSavingModeAutoBatteryPercent() { return qvariant_cast(m_sysPowerInter->property("PowerSavingModeAutoBatteryPercent")); } void PowerDBusProxy::setPowerSavingModeAutoBatteryPercent(uint value) { m_sysPowerInter->setProperty("PowerSavingModeAutoBatteryPercent", QVariant::fromValue(value)); } QString PowerDBusProxy::mode() { return qvariant_cast(m_sysPowerInter->property("Mode")); } bool PowerDBusProxy::powerSavingModeAuto() { return qvariant_cast(m_sysPowerInter->property("PowerSavingModeAuto")); } void PowerDBusProxy::setPowerSavingModeAuto(bool value) { m_sysPowerInter->setProperty("PowerSavingModeAuto", QVariant::fromValue(value)); } bool PowerDBusProxy::powerSavingModeEnabled() { return qvariant_cast(m_sysPowerInter->property("PowerSavingModeEnabled")); } void PowerDBusProxy::setPowerSavingModeEnabled(bool value) { m_sysPowerInter->setProperty("PowerSavingModeEnabled", QVariant::fromValue(value)); } double PowerDBusProxy::batteryCapacity() { return qvariant_cast(m_sysPowerInter->property("BatteryCapacity")); } int PowerDBusProxy::maxBacklightBrightness() { QDBusInterface Interface("org.deepin.dde.Display1", "/org/deepin/dde/Display1", "org.deepin.dde.Display1", QDBusConnection::sessionBus()); return Interface.property("MaxBacklightBrightness").toInt(); } void PowerDBusProxy::SetMode(const QString &mode) { QList argumentList; argumentList << QVariant::fromValue(mode); m_sysPowerInter->asyncCallWithArgumentList(QStringLiteral("SetMode"), argumentList); } bool PowerDBusProxy::CanSuspend() { if (!QFile("/sys/power/mem_sleep").exists()) return false; return login1ManagerCanSuspend(); } bool PowerDBusProxy::CanHibernate() { return login1ManagerCanHibernate(); } bool PowerDBusProxy::login1ManagerCanSuspend() { /* return true; */ QList argumentList; QDBusPendingReply reply = m_login1ManagerInter->callWithArgumentList(QDBus::BlockWithGui, QStringLiteral("CanSuspend"), argumentList); return reply.value().contains("yes"); } bool PowerDBusProxy::login1ManagerCanHibernate() { /* return true; */ QList argumentList; QDBusPendingReply reply = m_login1ManagerInter->callWithArgumentList(QDBus::BlockWithGui, QStringLiteral("CanHibernate"), argumentList); return reply.value().contains("yes"); } void PowerDBusProxy::setScheduledShutdownState(bool value) { m_powerInter->setProperty("ScheduledShutdownState", QVariant(value)); } bool PowerDBusProxy::scheduledShutdownState() { return qvariant_cast(m_powerInter->property("ScheduledShutdownState")); } void PowerDBusProxy::setShutdownTime(const QString &time) { m_powerInter->setProperty("ShutdownTime", QVariant(time)); } QString PowerDBusProxy::shutdownTime() { return qvariant_cast(m_powerInter->property("ShutdownTime")); } void PowerDBusProxy::setShutdownRepetition(int repetition) { m_powerInter->setProperty("ShutdownRepetition", QVariant::fromValue(repetition)); } int PowerDBusProxy::shutdownRepetition() { return qvariant_cast(m_powerInter->property("ShutdownRepetition")); } void PowerDBusProxy::setCustomShutdownWeekDays(const QByteArray &weekdays) { m_powerInter->setProperty("CustomShutdownWeekDays", weekdays); } QByteArray PowerDBusProxy::customShutdownWeekDays() { return qvariant_cast(m_powerInter->property("CustomShutdownWeekDays")); } ================================================ FILE: src/plugin-power/operation/powerdbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef POWERDBUSPROXY_H #define POWERDBUSPROXY_H #include #include #include class QDBusInterface; class QDBusMessage; using Dtk::Core::DDBusInterface; class PowerDBusProxy : public QObject { Q_OBJECT public: explicit PowerDBusProxy(QObject *parent = nullptr); // Power Q_PROPERTY(bool ScreenBlackLock READ screenBlackLock WRITE setScreenBlackLock NOTIFY ScreenBlackLockChanged) bool screenBlackLock(); void setScreenBlackLock(bool value); Q_PROPERTY(bool SleepLock READ sleepLock WRITE setSleepLock NOTIFY SleepLockChanged) bool sleepLock(); void setSleepLock(bool value); Q_PROPERTY(bool LidIsPresent READ lidIsPresent NOTIFY LidIsPresentChanged) bool lidIsPresent(); Q_PROPERTY(bool LidClosedSleep READ lidClosedSleep WRITE setLidClosedSleep NOTIFY LidClosedSleepChanged) bool lidClosedSleep(); void setLidClosedSleep(bool value); Q_PROPERTY(bool LowPowerNotifyEnable READ lowPowerNotifyEnable WRITE setLowPowerNotifyEnable NOTIFY LowPowerNotifyEnableChanged) bool lowPowerNotifyEnable(); void setLowPowerNotifyEnable(bool value); Q_PROPERTY(int LowPowerAutoSleepThreshold READ lowPowerAutoSleepThreshold WRITE setLowPowerAutoSleepThreshold NOTIFY LowPowerAutoSleepThresholdChanged) int lowPowerAutoSleepThreshold(); void setLowPowerAutoSleepThreshold(int value); Q_PROPERTY(int LowPowerNotifyThreshold READ lowPowerNotifyThreshold WRITE setLowPowerNotifyThreshold NOTIFY LowPowerNotifyThresholdChanged) int lowPowerNotifyThreshold(); void setLowPowerNotifyThreshold(int value); Q_PROPERTY(int LinePowerPressPowerBtnAction READ linePowerPressPowerBtnAction WRITE setLinePowerPressPowerBtnAction NOTIFY LinePowerPressPowerBtnActionChanged) int linePowerPressPowerBtnAction(); void setLinePowerPressPowerBtnAction(int value); Q_PROPERTY(int LinePowerLidClosedAction READ linePowerLidClosedAction WRITE setLinePowerLidClosedAction NOTIFY LinePowerLidClosedActionChanged) int linePowerLidClosedAction(); void setLinePowerLidClosedAction(int value); Q_PROPERTY(int BatteryPressPowerBtnAction READ batteryPressPowerBtnAction WRITE setBatteryPressPowerBtnAction NOTIFY BatteryPressPowerBtnActionChanged) int batteryPressPowerBtnAction(); void setBatteryPressPowerBtnAction(int value); Q_PROPERTY(int BatteryLidClosedAction READ batteryLidClosedAction WRITE setBatteryLidClosedAction NOTIFY BatteryLidClosedActionChanged) int batteryLidClosedAction(); void setBatteryLidClosedAction(int value); Q_PROPERTY(bool IsHighPerformanceSupported READ isHighPerformanceSupported NOTIFY IsHighPerformanceSupportedChanged) bool isHighPerformanceSupported(); Q_PROPERTY(bool IsBalancePerformanceSupported READ isBalancePerformanceSupported NOTIFY IsBalancePerformanceSupportedChanged) bool isBalancePerformanceSupported(); Q_PROPERTY(int LinePowerScreenBlackDelay READ linePowerScreenBlackDelay WRITE setLinePowerScreenBlackDelay NOTIFY LinePowerScreenBlackDelayChanged) int linePowerScreenBlackDelay(); void setLinePowerScreenBlackDelay(int value); Q_PROPERTY(int LinePowerSleepDelay READ linePowerSleepDelay WRITE setLinePowerSleepDelay NOTIFY LinePowerSleepDelayChanged) int linePowerSleepDelay(); void setLinePowerSleepDelay(int value); Q_PROPERTY(int BatteryScreenBlackDelay READ batteryScreenBlackDelay WRITE setBatteryScreenBlackDelay NOTIFY BatteryScreenBlackDelayChanged) int batteryScreenBlackDelay(); void setBatteryScreenBlackDelay(int value); Q_PROPERTY(int BatterySleepDelay READ batterySleepDelay WRITE setBatterySleepDelay NOTIFY BatterySleepDelayChanged) int batterySleepDelay(); void setBatterySleepDelay(int value); Q_PROPERTY(int BatteryLockDelay READ batteryLockDelay WRITE setBatteryLockDelay NOTIFY BatteryLockDelayChanged) int batteryLockDelay(); void setBatteryLockDelay(int value); Q_PROPERTY(int LinePowerLockDelay READ linePowerLockDelay WRITE setLinePowerLockDelay NOTIFY LinePowerLockDelayChanged) int linePowerLockDelay(); void setLinePowerLockDelay(int value); // SystemPower Q_PROPERTY(bool HasBattery READ hasBattery NOTIFY HasBatteryChanged) bool hasBattery(); Q_PROPERTY(bool PowerSavingModeAutoWhenBatteryLow READ powerSavingModeAutoWhenBatteryLow WRITE setPowerSavingModeAutoWhenBatteryLow NOTIFY PowerSavingModeAutoWhenBatteryLowChanged) bool powerSavingModeAutoWhenBatteryLow(); void setPowerSavingModeAutoWhenBatteryLow(bool value); Q_PROPERTY(uint PowerSavingModeBrightnessDropPercent READ powerSavingModeBrightnessDropPercent WRITE setPowerSavingModeBrightnessDropPercent NOTIFY PowerSavingModeBrightnessDropPercentChanged) uint powerSavingModeBrightnessDropPercent(); void setPowerSavingModeBrightnessDropPercent(uint value); Q_PROPERTY(uint PowerSavingModeAutoBatteryPercent READ powerSavingModeAutoBatteryPercent WRITE setPowerSavingModeAutoBatteryPercent NOTIFY PowerSavingModeAutoBatteryPercentChanged) uint powerSavingModeAutoBatteryPercent(); void setPowerSavingModeAutoBatteryPercent(uint value); Q_PROPERTY(QString Mode READ mode NOTIFY ModeChanged) QString mode(); Q_PROPERTY(bool PowerSavingModeAuto READ powerSavingModeAuto WRITE setPowerSavingModeAuto NOTIFY PowerSavingModeAutoChanged) bool powerSavingModeAuto(); void setPowerSavingModeAuto(bool value); Q_PROPERTY(bool PowerSavingModeEnabled READ powerSavingModeEnabled WRITE setPowerSavingModeEnabled NOTIFY PowerSavingModeEnabledChanged) bool powerSavingModeEnabled(); void setPowerSavingModeEnabled(bool value); Q_PROPERTY(double BatteryCapacity READ batteryCapacity NOTIFY BatteryCapacityChanged) double batteryCapacity(); Q_PROPERTY(int MaxBacklightBrightness READ maxBacklightBrightness) int maxBacklightBrightness(); // USER Q_PROPERTY(bool NoPasswdLogin READ noPasswdLogin NOTIFY noPasswdLoginChanged) bool noPasswdLogin(); Q_PROPERTY(bool ScheduledShutdownState READ scheduledShutdownState WRITE setScheduledShutdownState NOTIFY ScheduledShutdownStateChanged) void setScheduledShutdownState(bool value); bool scheduledShutdownState(); Q_PROPERTY(QString ShutdownTime READ shutdownTime WRITE setShutdownTime NOTIFY ShutdownTimeChanged) void setShutdownTime(const QString &time); QString shutdownTime(); Q_PROPERTY(int ShutdownRepetition READ shutdownRepetition WRITE setShutdownRepetition NOTIFY ShutdownRepetitionChanged) void setShutdownRepetition(int repetition); int shutdownRepetition(); Q_PROPERTY(QByteArray CustomShutdownWeekDays READ customShutdownWeekDays WRITE setCustomShutdownWeekDays NOTIFY CustomShutdownWeekDaysChanged) void setCustomShutdownWeekDays(const QByteArray &weekdays); QByteArray customShutdownWeekDays(); Q_PROPERTY(int LowPowerAction READ lowPowerAction WRITE setLowPowerAction NOTIFY LowPowerActionChanged) void setLowPowerAction(int action); int lowPowerAction(); std::optional findUserById(); signals: // Power void ScreenBlackLockChanged(bool value) const; void SleepLockChanged(bool value) const; void LidIsPresentChanged(bool value) const; void LidClosedSleepChanged(bool value) const; void LinePowerScreenBlackDelayChanged(int value) const; void LinePowerSleepDelayChanged(int value) const; void BatteryScreenBlackDelayChanged(int value) const; void BatterySleepDelayChanged(int value) const; void BatteryLockDelayChanged(int value) const; void LinePowerLockDelayChanged(int value) const; void IsHighPerformanceSupportedChanged(bool value) const; void IsBalancePerformanceSupportedChanged(bool value) const; void LinePowerPressPowerBtnActionChanged(int value) const; void LinePowerLidClosedActionChanged(int value) const; void BatteryPressPowerBtnActionChanged(int value) const; void BatteryLidClosedActionChanged(int value) const; void LowPowerNotifyEnableChanged(bool value) const; void LowPowerNotifyThresholdChanged(int value) const; void LowPowerAutoSleepThresholdChanged(int value) const; void ShutdownTimeChanged(const QString &time); // SystemPower void PowerSavingModeAutoChanged(bool value) const; void PowerSavingModeEnabledChanged(bool value) const; void HasBatteryChanged(bool value) const; void BatteryPercentageChanged(double value) const; void PowerSavingModeAutoWhenBatteryLowChanged(bool value) const; void PowerSavingModeBrightnessDropPercentChanged(uint value) const; void PowerSavingModeAutoBatteryPercentChanged(uint value) const; void ModeChanged(const QString &value) const; void BatteryCapacityChanged(double value) const; void noPasswdLoginChanged(bool value); void ScheduledShutdownStateChanged(bool value); void ShutdownRepetitionChanged(int repetition); void CustomShutdownWeekDaysChanged(const QByteArray &value); void LowPowerActionChanged(int action); public slots: // SystemPower void SetMode(const QString &mode); // PowerManager bool CanSuspend(); bool CanHibernate(); // login1Manager bool login1ManagerCanSuspend(); bool login1ManagerCanHibernate(); private: DDBusInterface *m_accountRootInter; DDBusInterface *m_currentAccountInter; DDBusInterface *m_powerInter; DDBusInterface *m_sysPowerInter; DDBusInterface *m_login1ManagerInter; DDBusInterface *m_upowerInter; }; #endif // POWERDBUSPROXY_H ================================================ FILE: src/plugin-power/operation/powerinterface.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "powerinterface.h" #include "powermodel.h" #include "dccfactory.h" #include "poweroperatormodel.h" #include #include #include "utils.h" Q_LOGGING_CATEGORY(DdcPowerInterface, "dcc-power-interface") PowerInterface::PowerInterface(QObject *parent) : QObject(parent) , m_model(new PowerModel(this)) , m_worker(new PowerWorker(m_model, this)) , m_powerLidClosedOperatorModel(new PowerOperatorModel(this)) , m_powerPressedOperatorModel(new PowerOperatorModel(this)) , m_batteryLidClosedOperatorModel(new PowerOperatorModel(this)) , m_batteryPressedOperatorModel(new PowerOperatorModel(this)) { setPowerActionsVisible({m_powerLidClosedOperatorModel, m_batteryLidClosedOperatorModel}, {POT_ShutDown, POT_ShowShutDownInter}, false); setPowerActionsVisible( {m_powerLidClosedOperatorModel, m_powerPressedOperatorModel, m_batteryLidClosedOperatorModel, m_batteryPressedOperatorModel}, {POT_Suspend}, m_model->canSuspend() && m_model->getSuspend() &&!isVirtualEnvironment()); setPowerActionsVisible( {m_powerLidClosedOperatorModel, m_powerPressedOperatorModel, m_batteryLidClosedOperatorModel, m_batteryPressedOperatorModel}, {POT_Hibernate}, m_model->canHibernate() && m_model->getHibernate() &&!isVirtualEnvironment()); connect(m_model, &PowerModel::canHibernateChanged, this, [this](bool value){ setPowerActionsVisible( {m_powerLidClosedOperatorModel, m_powerPressedOperatorModel, m_batteryLidClosedOperatorModel, m_batteryPressedOperatorModel}, {POT_Hibernate}, value && m_model->getHibernate() &&!isVirtualEnvironment()); }); connect(m_model, &PowerModel::canSuspendChanged, this, [this](bool value){ setPowerActionsVisible( {m_powerLidClosedOperatorModel, m_powerPressedOperatorModel, m_batteryLidClosedOperatorModel, m_batteryPressedOperatorModel}, {POT_Suspend}, value && m_model->getSuspend() &&!isVirtualEnvironment()); }); connect(m_model, &PowerModel::hibernateChanged, this, [this](bool value){ setPowerActionsVisible( {m_powerLidClosedOperatorModel, m_powerPressedOperatorModel, m_batteryLidClosedOperatorModel, m_batteryPressedOperatorModel}, {POT_Hibernate}, value && m_model->canHibernate() &&!isVirtualEnvironment()); }); connect(m_model, &PowerModel::suspendChanged, this, [this](bool value){ setPowerActionsVisible( {m_powerLidClosedOperatorModel, m_powerPressedOperatorModel, m_batteryLidClosedOperatorModel, m_batteryPressedOperatorModel}, {POT_Suspend}, value && m_model->canSuspend() &&!isVirtualEnvironment()); }); connect(m_model, &PowerModel::shutdownChanged, this, [this](bool value){ setPowerActionsVisible( {m_powerPressedOperatorModel, m_batteryPressedOperatorModel}, {POT_ShutDown}, value); }); if (isVirtualEnvironment()) { qCInfo(DdcPowerInterface) << "virtual environment, disable suspend and hibernate"; setPowerActionsVisible( {m_powerLidClosedOperatorModel, m_powerPressedOperatorModel, m_batteryLidClosedOperatorModel, m_batteryPressedOperatorModel}, {POT_Hibernate, POT_Suspend}, false); } m_worker->active(); } int PowerInterface::indexByValueOnModel(QAbstractListModel *model, int targetValue) { if (!model) return -1; QHash roles = model->roleNames(); int valueRole = -1; for (auto it = roles.constBegin(); it != roles.constEnd(); ++it) { if (it.value() == "value") { valueRole = it.key(); break; } } if (valueRole == -1) { return -1; } for (int i = 0; i < model->rowCount(); i++) { QModelIndex index = model->index(i, 0); QVariant value = model->data(index, valueRole); if (value.toInt() == targetValue) { return i; } } return -1; } int PowerInterface::indexByValueOnMap(const QVariantList& dataMap, int targetValue) { for (int i = 0; i < dataMap.size(); i++) { QVariantMap map = dataMap.at(i).toMap(); if (map.value("value").toInt() == targetValue) { return i; } } return -1; } QString PowerInterface::platformName() { return qApp->platformName(); } void PowerInterface::setPowerActionsVisible(QList actionModels, QList type, bool visible) { for (auto model : actionModels) { if (!model) { continue; } for (auto t : type) { model->setVisible(t, visible); } } } DCC_FACTORY_CLASS(PowerInterface) #include "powerinterface.moc" ================================================ FILE: src/plugin-power/operation/powerinterface.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef POWERINTERFACE_H #define POWERINTERFACE_H #include "powermodel.h" #include "powerworker.h" #include "poweroperatormodel.h" class PowerInterface : public QObject { Q_OBJECT Q_PROPERTY(PowerModel *model READ getModel NOTIFY powerModelChanged) Q_PROPERTY(PowerWorker *worker READ getWorker NOTIFY powerWorkerChanged) Q_PROPERTY(PowerOperatorModel *powerLidModel MEMBER m_powerLidClosedOperatorModel CONSTANT) Q_PROPERTY(PowerOperatorModel *powerPressModel MEMBER m_powerPressedOperatorModel CONSTANT) Q_PROPERTY(PowerOperatorModel *batteryLidModel MEMBER m_batteryLidClosedOperatorModel CONSTANT) Q_PROPERTY(PowerOperatorModel *batteryPressModel MEMBER m_batteryPressedOperatorModel CONSTANT) public: explicit PowerInterface(QObject *parent = nullptr); PowerModel *getModel() const { return m_model; }; PowerWorker *getWorker() const { return m_worker; }; Q_INVOKABLE int indexByValueOnModel(QAbstractListModel *model, int targetValue); Q_INVOKABLE int indexByValueOnMap(const QVariantList& dataMap, int targetValue); Q_INVOKABLE QString platformName(); private: void setPowerActionsVisible(QList actionModels, QList type, bool visible); signals: void powerModelChanged(PowerModel *model); void powerWorkerChanged(PowerWorker *worker); private: PowerModel *m_model; PowerWorker *m_worker; PowerOperatorModel *m_powerLidClosedOperatorModel; PowerOperatorModel *m_powerPressedOperatorModel; PowerOperatorModel *m_batteryLidClosedOperatorModel; PowerOperatorModel *m_batteryPressedOperatorModel; }; #endif // POWERINTERFACE_H ================================================ FILE: src/plugin-power/operation/powermodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "powermodel.h" #include "utils.h" #include const double EPSINON = 1e-6; PowerModel::PowerModel(QObject *parent) : QObject(parent) , m_lidPresent(false) , m_sleepOnLidOnPowerClose(false) , m_sleepOnLidOnBatteryClose(false) , m_screenBlackLock(false) , m_sleepLock(false) , m_canSuspend(true) , m_canHibernate(false) , m_screenBlackDelayOnPower(0) , m_sleepDelayOnPower(0) , m_screenBlackDelayOnBattery(0) , m_sleepDelayOnBattery(0) , m_haveBettary(false) , m_batteryLockScreenDelay(0) , m_powerLockScreenDelay(0) , m_bPowerSavingModeAutoWhenQuantifyLow(0) , m_bPowerSavingModeAuto(false) , m_dPowerSavingModeLowerBrightnessThreshold(0) , m_dPowerSavingModeAutoBatteryPercentage(0) , m_nLinePowerPressPowerBtnAction(0) , m_nLinePowerLidClosedAction(0) , m_nBatteryPressPowerBtnAction(0) , m_nBatteryLidClosedAction(0) , m_bLowPowerNotifyEnable(false) , m_dLowPowerNotifyThreshold(0) , m_dLowPowerAutoSleepThreshold(0) , m_isSuspend(true) , m_isHibernate(true) , m_isShutdown(true) , m_powerPlan("") , m_isHighPerformanceSupported(false) , m_isBalancePerformanceSupported(false) { } void PowerModel::setScreenBlackLock(const bool lock) { if (lock != m_screenBlackLock) { m_screenBlackLock = lock; Q_EMIT screenBlackLockChanged(lock); } } void PowerModel::setLidPresent(bool lidPresent) { if (lidPresent != m_lidPresent) { m_lidPresent = lidPresent; Q_EMIT lidPresentChanged(lidPresent); } } void PowerModel::setScreenBlackDelayOnPower(const int screenBlackDelayOnPower) { if (screenBlackDelayOnPower != m_screenBlackDelayOnPower) { m_screenBlackDelayOnPower = screenBlackDelayOnPower; Q_EMIT screenBlackDelayChangedOnPower(screenBlackDelayOnPower); } } void PowerModel::setSleepDelayOnPower(const int sleepDelayOnPower) { if (sleepDelayOnPower != m_sleepDelayOnPower) { m_sleepDelayOnPower = sleepDelayOnPower; Q_EMIT sleepDelayChangedOnPower(sleepDelayOnPower); } } void PowerModel::setScreenBlackDelayOnBattery(const int screenBlackDelayOnBattery) { if (screenBlackDelayOnBattery != m_screenBlackDelayOnBattery) { m_screenBlackDelayOnBattery = screenBlackDelayOnBattery; Q_EMIT screenBlackDelayChangedOnBattery(screenBlackDelayOnBattery); } } void PowerModel::setSleepDelayOnBattery(const int sleepDelayOnBattery) { if (sleepDelayOnBattery != m_sleepDelayOnBattery) { m_sleepDelayOnBattery = sleepDelayOnBattery; Q_EMIT sleepDelayChangedOnBattery(sleepDelayOnBattery); } } void PowerModel::setSleepOnLidOnPowerClose(bool sleepOnLidClose) { if (sleepOnLidClose != m_sleepOnLidOnPowerClose) { m_sleepOnLidOnPowerClose = sleepOnLidClose; Q_EMIT sleepOnLidOnPowerCloseChanged(sleepOnLidClose); } } void PowerModel::setSleepOnLidOnBatteryClose(bool sleepOnLidOnBatteryClose) { if (sleepOnLidOnBatteryClose != m_sleepOnLidOnBatteryClose) { m_sleepOnLidOnBatteryClose = sleepOnLidOnBatteryClose; Q_EMIT sleepOnLidOnBatteryCloseChanged(sleepOnLidOnBatteryClose); } } void PowerModel::setBatteryLockScreenDelay(const int value) { if (value != m_batteryLockScreenDelay) { m_batteryLockScreenDelay = value; Q_EMIT batteryLockScreenDelayChanged(value); } } void PowerModel::setPowerLockScreenDelay(const int value) { if (value != m_powerLockScreenDelay) { m_powerLockScreenDelay = value; Q_EMIT powerLockScreenDelayChanged(value); } } void PowerModel::setAutoPowerSaveMode(bool autoPowerSavingMode) { if (m_autoPowerSaveMode == autoPowerSavingMode) return; m_autoPowerSaveMode = autoPowerSavingMode; Q_EMIT autoPowerSavingModeChanged(autoPowerSavingMode); } void PowerModel::setPowerSaveMode(bool powerSaveMode) { if (m_powerSaveMode == powerSaveMode) return; m_powerSaveMode = powerSaveMode; Q_EMIT powerSaveModeChanged(powerSaveMode); } void PowerModel::setHaveBettary(bool haveBettary) { if (haveBettary == m_haveBettary) return; m_haveBettary = haveBettary; Q_EMIT haveBettaryChanged(haveBettary); } bool PowerModel::getDoubleCompare(const double value1, const double value2) { return ((value1 - value2 >= -EPSINON) && (value1 - value2 <= EPSINON)); } void PowerModel::setPowerSavingModeAutoWhenQuantifyLow(bool bLowBatteryAutoIntoSaveEnergyMode) { if (bLowBatteryAutoIntoSaveEnergyMode != m_bPowerSavingModeAutoWhenQuantifyLow) { m_bPowerSavingModeAutoWhenQuantifyLow = bLowBatteryAutoIntoSaveEnergyMode; Q_EMIT powerSavingModeAutoWhenQuantifyLowChanged(bLowBatteryAutoIntoSaveEnergyMode); } } void PowerModel::setPowerSavingModeAuto(bool bAutoIntoSaveEnergyMode) { if (bAutoIntoSaveEnergyMode != m_bPowerSavingModeAuto) { m_bPowerSavingModeAuto = bAutoIntoSaveEnergyMode; Q_EMIT powerSavingModeAutoChanged(bAutoIntoSaveEnergyMode); } } void PowerModel::setPowerSavingModeLowerBrightnessThreshold(uint dPowerSavingModeLowerBrightnessThreshold) { if (dPowerSavingModeLowerBrightnessThreshold != m_dPowerSavingModeLowerBrightnessThreshold) { m_dPowerSavingModeLowerBrightnessThreshold = dPowerSavingModeLowerBrightnessThreshold; Q_EMIT powerSavingModeLowerBrightnessThresholdChanged(dPowerSavingModeLowerBrightnessThreshold); } } void PowerModel::setPowerSavingModeAutoBatteryPercentage(uint dPowerSavingModeAutoBatteryPercentage) { if (dPowerSavingModeAutoBatteryPercentage != m_dPowerSavingModeAutoBatteryPercentage) { m_dPowerSavingModeAutoBatteryPercentage = dPowerSavingModeAutoBatteryPercentage; Q_EMIT powerSavingModeAutoBatteryPercentageChanged(dPowerSavingModeAutoBatteryPercentage); } } void PowerModel::setLinePowerPressPowerBtnAction(int nLinePowerPressPowerBtnAction) { if (nLinePowerPressPowerBtnAction != m_nLinePowerPressPowerBtnAction) { m_nLinePowerPressPowerBtnAction = nLinePowerPressPowerBtnAction; Q_EMIT linePowerPressPowerBtnActionChanged(nLinePowerPressPowerBtnAction); } } void PowerModel::setLinePowerLidClosedAction(int nLinePowerLidClosedAction) { if (nLinePowerLidClosedAction != m_nLinePowerLidClosedAction) { m_nLinePowerLidClosedAction = nLinePowerLidClosedAction; Q_EMIT linePowerLidClosedActionChanged(nLinePowerLidClosedAction); } } void PowerModel::setBatteryPressPowerBtnAction(int nBatteryPressPowerBtnAction) { if (nBatteryPressPowerBtnAction != m_nBatteryPressPowerBtnAction) { m_nBatteryPressPowerBtnAction = nBatteryPressPowerBtnAction; Q_EMIT batteryPressPowerBtnActionChanged(nBatteryPressPowerBtnAction); } } void PowerModel::setBatteryLidClosedAction(int nBatteryLidClosedAction) { if (nBatteryLidClosedAction != m_nBatteryLidClosedAction) { m_nBatteryLidClosedAction = nBatteryLidClosedAction; Q_EMIT batteryLidClosedActionChanged(nBatteryLidClosedAction); } } void PowerModel::setLowPowerNotifyEnable(bool bLowPowerNotifyEnable) { if (bLowPowerNotifyEnable != m_bLowPowerNotifyEnable) { m_bLowPowerNotifyEnable = bLowPowerNotifyEnable; Q_EMIT lowPowerNotifyEnableChanged(bLowPowerNotifyEnable); } } void PowerModel::setLowPowerNotifyThreshold(int dLowPowerNotifyThreshold) { if (dLowPowerNotifyThreshold != m_dLowPowerNotifyThreshold) { m_dLowPowerNotifyThreshold = dLowPowerNotifyThreshold; Q_EMIT lowPowerNotifyThresholdChanged(dLowPowerNotifyThreshold); } } void PowerModel::setLowPowerAutoSleepThreshold(int dLowPowerAutoSleepThreshold) { if (dLowPowerAutoSleepThreshold != m_dLowPowerAutoSleepThreshold) { m_dLowPowerAutoSleepThreshold = dLowPowerAutoSleepThreshold; Q_EMIT lowPowerAutoSleepThresholdChanged(dLowPowerAutoSleepThreshold); } } void PowerModel::setLowPowerAction(int action) { if (m_lowPowerAction != action) { m_lowPowerAction = action; Q_EMIT lowPowerActionChanged(action); } } void PowerModel::setSleepLock(bool sleepLock) { if (sleepLock != m_sleepLock) { m_sleepLock = sleepLock; Q_EMIT sleepLockChanged(sleepLock); } } void PowerModel::setCanSuspend(bool canSuspend) { if (canSuspend != m_canSuspend) { m_canSuspend = canSuspend; Q_EMIT canSuspendChanged(canSuspend); } } void PowerModel::setCanHibernate(bool value) { if (m_canHibernate != value) { m_canHibernate = value; Q_EMIT canHibernateChanged(value); } } void PowerModel::setPowerPlan(const QString &powerPlan) { if (m_powerPlan != powerPlan) { m_powerPlan = powerPlan; Q_EMIT powerPlanChanged(m_powerPlan); } } void PowerModel::setHighPerformanceSupported(bool isHighSupport) { if (m_isHighPerformanceSupported == isHighSupport) return; m_isHighPerformanceSupported = isHighSupport; Q_EMIT highPerformaceSupportChanged(isHighSupport); } void PowerModel::setBalancePerformanceSupported(bool isBalancePerformanceSupported) { if (m_isBalancePerformanceSupported == isBalancePerformanceSupported) return; m_isBalancePerformanceSupported = isBalancePerformanceSupported; Q_EMIT highPerformaceSupportChanged(isBalancePerformanceSupported); } void PowerModel::setSuspend(bool suspend) { bool enable = !IsServerSystem && suspend; if (m_isSuspend != enable) { m_isSuspend = enable; Q_EMIT suspendChanged(enable); } } void PowerModel::setHibernate(bool hibernate) { bool enable = !IsServerSystem && hibernate; if (m_isHibernate != enable) { m_isHibernate = enable; Q_EMIT hibernateChanged(enable); } } void PowerModel::setShutdown(bool shutdown) { if (m_isShutdown != shutdown) { m_isShutdown = shutdown; Q_EMIT shutdownChanged(shutdown); } } void PowerModel::setNoPasswdLogin(bool value) { if (value != m_noPasswdLogin) { m_noPasswdLogin = value; Q_EMIT noPasswdLoginChanged(value); } } void PowerModel::setBatteryCapacity(int value) { if (m_batteryCapacity != value) { m_batteryCapacity = value; Q_EMIT batteryCapacityChanged(value); } } void PowerModel::setShowBatteryTimeToFull(bool value) { if (m_showBatteryTimeToFull != value) { m_showBatteryTimeToFull = value; Q_EMIT showBatteryTimeToFullChanged(value); } } void PowerModel::setScheduledShutdownState(bool value) { if (m_scheduledShutdownState != value) { m_scheduledShutdownState = value; Q_EMIT scheduledShutdownStateChanged(value); } } void PowerModel::setShutdownTime(const QString &time) { if (m_shutdownTime != time) { m_shutdownTime = time; Q_EMIT shutdownTimeChanged(time); } } void PowerModel::setShutdownRepetition(int repetition) { if (m_shutdownRepetition != repetition) { m_shutdownRepetition = repetition; Q_EMIT shutdownRepetitionChanged(repetition); } } void PowerModel::setWeekBegins(int value) { if (m_weekBegins != value) { m_weekBegins = value; Q_EMIT weekBeginsChanged(value); } } void PowerModel::setCustomShutdownWeekDays(const QVariantList &value) { if (m_customShutdownWeekDays != value) { m_customShutdownWeekDays = value; Q_EMIT customShutdownWeekDaysChanged(value); } } void PowerModel::setBatteryLockDelayModel(const QVariantList &value) { if (m_batteryLockDelayModel != value) { m_batteryLockDelayModel = value; Q_EMIT batteryLockDelayModelChanged(value); } } void PowerModel::setBatteryScreenBlackDelayModel(const QVariantList &value) { if (m_batteryScreenBlackDelayModel != value) { m_batteryScreenBlackDelayModel = value; Q_EMIT batteryScreenBlackDelayModelChanged(value); } } void PowerModel::setBatterySleepDelayModel(const QVariantList &value) { if (m_batterySleepDelayModel != value) { m_batterySleepDelayModel = value; Q_EMIT batterySleepDelayModelChanged(value); } } void PowerModel::setLinePowerLockDelayModel(const QVariantList &value) { if (m_linePowerLockDelayModel != value) { m_linePowerLockDelayModel = value; Q_EMIT linePowerLockDelayModelChanged(value); } } void PowerModel::setLinePowerScreenBlackDelayModel(const QVariantList &value) { if (m_linePowerScreenBlackDelayModel != value) { m_linePowerScreenBlackDelayModel = value; Q_EMIT linePowerScreenBlackDelayModelChanged(value); } } void PowerModel::setLinePowerSleepDelayModel(const QVariantList &value) { if (m_linePowerSleepDelayModel != value) { m_linePowerSleepDelayModel = value; Q_EMIT linePowerSleepDelayModelChanged(value); } } void PowerModel::setEnableScheduledShutdown(const QString &value) { if (m_enableScheduledShutdown != value) { m_enableScheduledShutdown = value; Q_EMIT enableScheduledShutdownChanged(value); } } void PowerModel::setIsVirtualEnvironment(bool isVirtualEnvironment) { if (m_isVirtualEnvironment != isVirtualEnvironment) { m_isVirtualEnvironment = isVirtualEnvironment; Q_EMIT isVirtualEnvironmentChanged(isVirtualEnvironment); } } ================================================ FILE: src/plugin-power/operation/powermodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef POWERMODEL_H #define POWERMODEL_H #include class PowerWorker; class PowerModel : public QObject { Q_OBJECT Q_PROPERTY(bool lidPresent READ lidPresent WRITE setLidPresent NOTIFY lidPresentChanged) Q_PROPERTY(bool sleepOnLidOnPowerClose READ sleepOnLidOnPowerClose WRITE setSleepOnLidOnPowerClose NOTIFY sleepOnLidOnPowerCloseChanged) Q_PROPERTY(bool sleepOnLidOnBatteryClose READ sleepOnLidOnBatteryClose WRITE setSleepOnLidOnBatteryClose NOTIFY sleepOnLidOnBatteryCloseChanged) Q_PROPERTY(bool screenBlackLock READ screenBlackLock WRITE setScreenBlackLock NOTIFY screenBlackLockChanged) Q_PROPERTY(bool sleepLock READ sleepLock WRITE setSleepLock NOTIFY sleepLockChanged) Q_PROPERTY(bool canSuspend READ canSuspend WRITE setCanSuspend NOTIFY suspendChanged) Q_PROPERTY(bool canHibernate READ canHibernate WRITE setCanHibernate NOTIFY canHibernateChanged) Q_PROPERTY(int screenBlackDelayOnPower READ screenBlackDelayOnPower WRITE setScreenBlackDelayOnPower NOTIFY screenBlackDelayChangedOnPower) Q_PROPERTY(int sleepDelayOnPower READ sleepDelayOnPower WRITE setSleepDelayOnPower NOTIFY sleepDelayChangedOnPower) Q_PROPERTY(int screenBlackDelayOnBattery READ screenBlackDelayOnBattery WRITE setScreenBlackDelayOnBattery NOTIFY screenBlackDelayChangedOnBattery) Q_PROPERTY(int sleepDelayOnBattery READ sleepDelayOnBattery WRITE setSleepDelayOnBattery NOTIFY sleepDelayChangedOnBattery) Q_PROPERTY(bool autoPowerSaveMode READ autoPowerSaveMode WRITE setAutoPowerSaveMode NOTIFY autoPowerSavingModeChanged) Q_PROPERTY(bool powerSaveMode READ powerSaveMode WRITE setPowerSaveMode NOTIFY powerSaveModeChanged) Q_PROPERTY(bool haveBettary READ haveBettary WRITE setHaveBettary NOTIFY haveBettaryChanged) Q_PROPERTY(int batteryLockScreenDelay READ getBatteryLockScreenDelay WRITE setBatteryLockScreenDelay NOTIFY batteryLockScreenDelayChanged) Q_PROPERTY(int powerLockScreenDelay READ getPowerLockScreenDelay WRITE setPowerLockScreenDelay NOTIFY powerLockScreenDelayChanged) Q_PROPERTY(bool powerSavingModeAutoWhenQuantifyLow READ powerSavingModeAutoWhenQuantifyLow WRITE setPowerSavingModeAutoWhenQuantifyLow NOTIFY powerSavingModeAutoWhenQuantifyLowChanged) Q_PROPERTY(bool powerSavingModeAuto READ powerSavingModeAuto WRITE setPowerSavingModeAuto NOTIFY powerSavingModeAutoChanged) Q_PROPERTY(uint powerSavingModeLowerBrightnessThreshold READ powerSavingModeLowerBrightnessThreshold WRITE setPowerSavingModeLowerBrightnessThreshold NOTIFY powerSavingModeLowerBrightnessThresholdChanged) Q_PROPERTY(uint powerSavingModeAutoBatteryPercentage READ powerSavingModeAutoBatteryPercentage WRITE setPowerSavingModeAutoBatteryPercentage NOTIFY powerSavingModeAutoBatteryPercentageChanged) Q_PROPERTY(int linePowerPressPowerBtnAction READ linePowerPressPowerBtnAction WRITE setLinePowerPressPowerBtnAction NOTIFY linePowerPressPowerBtnActionChanged) Q_PROPERTY(int linePowerLidClosedAction READ linePowerLidClosedAction WRITE setLinePowerLidClosedAction NOTIFY linePowerLidClosedActionChanged) Q_PROPERTY(int batteryPressPowerBtnAction READ batteryPressPowerBtnAction WRITE setBatteryPressPowerBtnAction NOTIFY batteryPressPowerBtnActionChanged) Q_PROPERTY(int batteryLidClosedAction READ batteryLidClosedAction WRITE setBatteryLidClosedAction NOTIFY batteryLidClosedActionChanged) Q_PROPERTY(bool lowPowerNotifyEnable READ lowPowerNotifyEnable WRITE setLowPowerNotifyEnable NOTIFY lowPowerNotifyEnableChanged) Q_PROPERTY(int lowPowerNotifyThreshold READ lowPowerNotifyThreshold WRITE setLowPowerNotifyThreshold NOTIFY lowPowerNotifyThresholdChanged) Q_PROPERTY(int lowPowerAutoSleepThreshold READ lowPowerAutoSleepThreshold WRITE setLowPowerAutoSleepThreshold NOTIFY lowPowerAutoSleepThresholdChanged) Q_PROPERTY(bool isSuspend READ getSuspend WRITE setSuspend NOTIFY suspendChanged) Q_PROPERTY(bool isHibernate READ getHibernate WRITE setHibernate NOTIFY hibernateChanged) Q_PROPERTY(bool isShutdown READ getShutdown WRITE setShutdown NOTIFY shutdownChanged) Q_PROPERTY(QString powerPlan READ getPowerPlan WRITE setPowerPlan NOTIFY powerPlanChanged) Q_PROPERTY(bool isHighPerformanceSupported READ isHighPerformanceSupported WRITE setHighPerformanceSupported NOTIFY highPerformaceSupportChanged) Q_PROPERTY(bool isBalancePerformanceSupported READ isBalancePerformanceSupported WRITE setBalancePerformanceSupported NOTIFY highPerformaceSupportChanged) Q_PROPERTY(bool isNoPasswdLogin READ isNoPasswdLogin WRITE setNoPasswdLogin NOTIFY noPasswdLoginChanged) Q_PROPERTY(int batteryCapacity READ batteryCapacity WRITE setBatteryCapacity NOTIFY batteryCapacityChanged) Q_PROPERTY(bool showBatteryTimeToFull READ showBatteryTimeToFull WRITE setShowBatteryTimeToFull NOTIFY showBatteryTimeToFullChanged) Q_PROPERTY(bool scheduledShutdownState READ scheduledShutdownState WRITE setScheduledShutdownState NOTIFY scheduledShutdownStateChanged) Q_PROPERTY(QString shutdownTime READ shutdownTime WRITE setShutdownTime NOTIFY shutdownTimeChanged) Q_PROPERTY(int shutdownRepetition READ shutdownRepetition WRITE setShutdownRepetition NOTIFY shutdownRepetitionChanged) Q_PROPERTY(int weekBegins READ weekBegins WRITE setWeekBegins NOTIFY weekBeginsChanged) Q_PROPERTY(int lowPowerAction READ lowPowerAction WRITE setLowPowerAction NOTIFY lowPowerActionChanged) Q_PROPERTY(QVariantList customShutdownWeekDays READ customShutdownWeekDays WRITE setCustomShutdownWeekDays NOTIFY customShutdownWeekDaysChanged) Q_PROPERTY(bool isVirtualEnvironment READ isVirtualEnvironment WRITE setIsVirtualEnvironment NOTIFY isVirtualEnvironmentChanged) Q_PROPERTY(QVariantList batteryLockDelayModel READ batteryLockDelayModel WRITE setBatteryLockDelayModel NOTIFY batteryLockDelayModelChanged) Q_PROPERTY(QVariantList batteryScreenBlackDelayModel READ batteryScreenBlackDelayModel WRITE setBatteryScreenBlackDelayModel NOTIFY batteryScreenBlackDelayModelChanged) Q_PROPERTY(QVariantList batterySleepDelayModel READ batterySleepDelayModel WRITE setBatterySleepDelayModel NOTIFY batterySleepDelayModelChanged) Q_PROPERTY(QVariantList linePowerLockDelayModel READ linePowerLockDelayModel WRITE setLinePowerLockDelayModel NOTIFY linePowerLockDelayModelChanged) Q_PROPERTY(QVariantList linePowerScreenBlackDelayModel READ linePowerScreenBlackDelayModel WRITE setLinePowerScreenBlackDelayModel NOTIFY linePowerScreenBlackDelayModelChanged) Q_PROPERTY(QVariantList linePowerSleepDelayModel READ linePowerSleepDelayModel WRITE setLinePowerSleepDelayModel NOTIFY linePowerSleepDelayModelChanged) Q_PROPERTY(QString enableScheduledShutdown READ enableScheduledShutdown WRITE setEnableScheduledShutdown NOTIFY enableScheduledShutdownChanged) friend class PowerWorker; public: explicit PowerModel(QObject *parent = 0); inline bool screenBlackLock() const { return m_screenBlackLock; } void setScreenBlackLock(const bool lock); inline bool sleepLock() const { return m_sleepLock; } void setSleepLock(bool sleepLock); inline bool canSuspend() const { return m_canSuspend; } void setCanSuspend(bool canSuspend); inline bool lidPresent() const { return m_lidPresent; } void setLidPresent(bool lidPresent); inline int screenBlackDelayOnPower() const { return m_screenBlackDelayOnPower; } void setScreenBlackDelayOnPower(const int screenBlackDelayOnPower); inline int sleepDelayOnPower() const { return m_sleepDelayOnPower; } void setSleepDelayOnPower(const int sleepDelayOnPower); inline int screenBlackDelayOnBattery() const { return m_screenBlackDelayOnBattery; } void setScreenBlackDelayOnBattery(const int screenBlackDelayOnBattery); inline int sleepDelayOnBattery() const { return m_sleepDelayOnBattery; } void setSleepDelayOnBattery(const int sleepDelayOnBattery); inline bool sleepOnLidOnPowerClose() const { return m_sleepOnLidOnPowerClose; } void setSleepOnLidOnPowerClose(bool sleepOnLidClose); inline bool sleepOnLidOnBatteryClose() const { return m_sleepOnLidOnBatteryClose; } void setSleepOnLidOnBatteryClose(bool sleepOnLidOnBatteryClose); inline int getBatteryLockScreenDelay() const { return m_batteryLockScreenDelay; } void setBatteryLockScreenDelay(const int value); inline int getPowerLockScreenDelay() const { return m_powerLockScreenDelay; } void setPowerLockScreenDelay(const int value); inline bool autoPowerSaveMode() const { return m_autoPowerSaveMode; } void setAutoPowerSaveMode(bool autoPowerSavingMode); inline bool powerSaveMode() const { return m_powerSaveMode; } void setPowerSaveMode(bool powerSaveMode); inline bool haveBettary() const { return m_haveBettary; } void setHaveBettary(bool haveBettary); bool getDoubleCompare(const double value1, const double value2); //--------------sp2 add--------------------------- inline bool powerSavingModeAutoWhenQuantifyLow() const { return m_bPowerSavingModeAutoWhenQuantifyLow; } void setPowerSavingModeAutoWhenQuantifyLow(bool bLowBatteryAutoIntoSaveEnergyMode); inline bool powerSavingModeAuto() const { return m_bPowerSavingModeAuto; } void setPowerSavingModeAuto(bool bAutoIntoSaveEnergyMode); inline int powerSavingModeLowerBrightnessThreshold() const { return m_dPowerSavingModeLowerBrightnessThreshold; } void setPowerSavingModeLowerBrightnessThreshold(uint dPowerSavingModeLowerBrightnessThreshold); inline int powerSavingModeAutoBatteryPercentage() const { return m_dPowerSavingModeAutoBatteryPercentage; } void setPowerSavingModeAutoBatteryPercentage(uint dPowerSavingModeAutoBatteryPercentage); inline int linePowerPressPowerBtnAction() const { return m_nLinePowerPressPowerBtnAction; } void setLinePowerPressPowerBtnAction(int nLinePowerPressPowerBtnAction); inline int linePowerLidClosedAction() const { return m_nLinePowerLidClosedAction; } void setLinePowerLidClosedAction(int nLinePowerLidClosedAction); inline int batteryPressPowerBtnAction() const { return m_nBatteryPressPowerBtnAction; } void setBatteryPressPowerBtnAction(int nBatteryPressPowerBtnAction); inline int batteryLidClosedAction() const { return m_nBatteryLidClosedAction; } void setBatteryLidClosedAction(int nBatteryLidClosedAction); inline bool lowPowerNotifyEnable() const { return m_bLowPowerNotifyEnable; } void setLowPowerNotifyEnable(bool bLowPowerNotifyEnable); inline int lowPowerNotifyThreshold() const { return m_dLowPowerNotifyThreshold; } void setLowPowerNotifyThreshold(int dLowPowerNotifyThreshold); inline int lowPowerAutoSleepThreshold() const { return m_dLowPowerAutoSleepThreshold; } void setLowPowerAutoSleepThreshold(int dLowPowerAutoSleepThreshold); void setLowPowerAction(int action); int lowPowerAction() const { return m_lowPowerAction; } //----------------------------------------------- inline bool getSuspend() const { return m_isSuspend; } void setSuspend(bool suspend); inline bool canHibernate() const { return m_canHibernate; } void setCanHibernate(bool value); inline bool getHibernate() const { return m_isHibernate; } void setHibernate(bool hibernate); inline bool getShutdown() const { return m_isShutdown; } void setShutdown(bool shutdown); inline QString getPowerPlan() const { return m_powerPlan; } void setPowerPlan(const QString &powerPlan); inline bool isHighPerformanceSupported() const { return m_isHighPerformanceSupported; } void setHighPerformanceSupported(bool isHighSupport); inline bool isBalancePerformanceSupported() const { return m_isBalancePerformanceSupported; } void setBalancePerformanceSupported(bool isBalancePerformanceSupported); // ---- inline bool isNoPasswdLogin() const { return m_noPasswdLogin; } void setNoPasswdLogin(bool value); inline int batteryCapacity() const { return m_batteryCapacity; } void setBatteryCapacity(int batterCapacity); inline bool showBatteryTimeToFull() const { return m_showBatteryTimeToFull; } void setShowBatteryTimeToFull(bool showBatteryTimeToFull); inline bool scheduledShutdownState() const { return m_scheduledShutdownState; } void setScheduledShutdownState(bool value); inline QString shutdownTime() const { return m_shutdownTime; } void setShutdownTime(const QString &time); inline int shutdownRepetition() const { return m_shutdownRepetition; } void setShutdownRepetition(int repetition); Q_INVOKABLE void refreshShutdownRepetition() { Q_EMIT shutdownRepetitionChanged(m_shutdownRepetition); } inline int weekBegins() const { return m_weekBegins; } void setWeekBegins(int value); inline QVariantList customShutdownWeekDays() const { return m_customShutdownWeekDays; } void setCustomShutdownWeekDays(const QVariantList &value); inline QVariantList batteryLockDelayModel() const { return m_batteryLockDelayModel; }; void setBatteryLockDelayModel(const QVariantList &value); inline QVariantList batteryScreenBlackDelayModel() const { return m_batteryScreenBlackDelayModel; }; void setBatteryScreenBlackDelayModel(const QVariantList& value); inline QVariantList batterySleepDelayModel() const { return m_batterySleepDelayModel; }; void setBatterySleepDelayModel(const QVariantList &value); inline QVariantList linePowerLockDelayModel() const { return m_linePowerLockDelayModel; }; void setLinePowerLockDelayModel(const QVariantList &value); inline QVariantList linePowerScreenBlackDelayModel() const { return m_linePowerScreenBlackDelayModel; }; void setLinePowerScreenBlackDelayModel(const QVariantList &value); inline QVariantList linePowerSleepDelayModel() const { return m_linePowerSleepDelayModel; }; void setLinePowerSleepDelayModel(const QVariantList &value); inline QString enableScheduledShutdown() const { return m_enableScheduledShutdown; }; void setEnableScheduledShutdown(const QString &value); inline bool isVirtualEnvironment() const { return m_isVirtualEnvironment; } void setIsVirtualEnvironment(bool isVirtualEnvironment); Q_SIGNALS: void sleepLockChanged(const bool sleepLock); void canSuspendChanged(const bool canSuspend); void screenBlackLockChanged(const bool screenBlackLock); void lidPresentChanged(const bool lidPresent); void sleepOnLidOnPowerCloseChanged(const bool sleepOnLidClose); void sleepOnLidOnBatteryCloseChanged(const bool sleepOnLidClose); void screenBlackDelayChangedOnPower(const int screenBlackDelay); void sleepDelayChangedOnPower(const int sleepDelay); void screenBlackDelayChangedOnBattery(const int screenBlackDelay); void sleepDelayChangedOnBattery(const int sleepDelay); void canHibernateChanged(const bool canHibernate); void hibernateChanged(const bool hibernate); void shutdownChanged(const bool shutdown); void autoPowerSavingModeChanged(bool autoPowerSaveMode); void powerSaveModeChanged(bool powerSaveMode); void haveBettaryChanged(bool haveBettary); void batteryLockScreenDelayChanged(const int batteryLockScreenTime); void powerLockScreenDelayChanged(const int powerLockScreenTime); //------------------------sp2 add------------------------------- void powerSavingModeAutoWhenQuantifyLowChanged(const bool state); void powerSavingModeAutoChanged(const bool state); void powerSavingModeLowerBrightnessThresholdChanged(const uint level); void powerSavingModeAutoBatteryPercentageChanged(const uint level); //electric void linePowerPressPowerBtnActionChanged(const int reply); void linePowerLidClosedActionChanged(const int reply); //battery void batteryPressPowerBtnActionChanged(const int reply); void batteryLidClosedActionChanged(const int reply); void lowPowerNotifyEnableChanged(const bool state); void lowPowerNotifyThresholdChanged(const int value); void lowPowerAutoSleepThresholdChanged(const int value); //-------------------------------------------------------------- void suspendChanged(bool suspendState); void powerPlanChanged(const QString &value); void highPerformaceSupportChanged(bool value); void noPasswdLoginChanged(bool value); void batteryCapacityChanged(double value); void showBatteryTimeToFullChanged(bool value); void scheduledShutdownStateChanged(bool value); void shutdownTimeChanged(const QString &time); void shutdownRepetitionChanged(int repetition); void weekBeginsChanged(int value); void customShutdownWeekDaysChanged(const QVariantList &value); void isVirtualEnvironmentChanged(bool isVirtualEnvironment); void batteryLockDelayModelChanged(const QVariantList &value); void batteryScreenBlackDelayModelChanged(const QVariantList &value); void batterySleepDelayModelChanged(const QVariantList &value); void linePowerLockDelayModelChanged(const QVariantList &value); void linePowerScreenBlackDelayModelChanged(const QVariantList &value); void linePowerSleepDelayModelChanged(const QVariantList &value); void lowPowerActionChanged(int action); void enableScheduledShutdownChanged(const QString &value); private: bool m_lidPresent; //以此判断是否为笔记本 bool m_sleepOnLidOnPowerClose; bool m_sleepOnLidOnBatteryClose; bool m_screenBlackLock; bool m_sleepLock; bool m_canSuspend; bool m_canHibernate; int m_screenBlackDelayOnPower; int m_sleepDelayOnPower; int m_screenBlackDelayOnBattery; int m_sleepDelayOnBattery; bool m_autoPowerSaveMode { false }; bool m_powerSaveMode { false }; bool m_haveBettary; int m_batteryLockScreenDelay; int m_powerLockScreenDelay; //---------------sp2 add------------------ bool m_bPowerSavingModeAutoWhenQuantifyLow; bool m_bPowerSavingModeAuto; uint m_dPowerSavingModeLowerBrightnessThreshold; uint m_dPowerSavingModeAutoBatteryPercentage; int m_nLinePowerPressPowerBtnAction; int m_nLinePowerLidClosedAction; int m_nBatteryPressPowerBtnAction; int m_nBatteryLidClosedAction; bool m_bLowPowerNotifyEnable; int m_dLowPowerNotifyThreshold; int m_dLowPowerAutoSleepThreshold; //-------------------------------------- bool m_isSuspend; bool m_isHibernate; bool m_isShutdown; QString m_powerPlan; bool m_isHighPerformanceSupported; bool m_isBalancePerformanceSupported; bool m_isVirtualEnvironment; // Account bool m_noPasswdLogin; double m_batteryCapacity; bool m_showBatteryTimeToFull; // scheduledShutdown bool m_scheduledShutdownState; QString m_shutdownTime; QVariantList m_customShutdownWeekDays; int m_shutdownRepetition; int m_weekBegins; int m_lowPowerAction; QString m_enableScheduledShutdown; QVariantList m_batteryLockDelayModel; QVariantList m_batteryScreenBlackDelayModel; QVariantList m_batterySleepDelayModel; QVariantList m_linePowerLockDelayModel; QVariantList m_linePowerScreenBlackDelayModel; QVariantList m_linePowerSleepDelayModel; }; #endif // POWERMODEL_H ================================================ FILE: src/plugin-power/operation/poweroperatormodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "poweroperatormodel.h" PowerOperatorModel::PowerOperatorModel(QObject *parent) : QAbstractListModel(parent) { appendRow(new PowerOperator(0, tr("Shut down"), true, true)); appendRow(new PowerOperator(1, tr("Suspend"), true, true)); appendRow(new PowerOperator(2, tr("Hibernate"), true, true)); appendRow(new PowerOperator(3, tr("Turn off the monitor"), true, true)); appendRow(new PowerOperator(4, tr("Show the shutdown Interface"), true, true)); appendRow(new PowerOperator(5, tr("Do nothing"), true, true)); } PowerOperatorModel::~PowerOperatorModel() { qDeleteAll(m_powerOperatorList); m_powerOperatorList.resize(0); } int PowerOperatorModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); return m_powerOperatorList.size(); } QVariant PowerOperatorModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return {}; if (index.row() < 0 || index.row() >= m_powerOperatorList.size()) return {}; const auto operatorItem = m_powerOperatorList[index.row()]; switch (role) { case KeyRole: return operatorItem->key; case TextRole: return operatorItem->text; case EnableRole: return operatorItem->enable; case VisibleRole: return operatorItem->visible; } return QVariant(); } void PowerOperatorModel::appendRow(PowerOperator *powerOperator) { beginInsertRows(QModelIndex(), rowCount(), rowCount()); m_powerOperatorList.append(powerOperator); endInsertRows(); } void PowerOperatorModel::setEnable(int index, bool enable) { if (index >= 0 && index < m_powerOperatorList.size()) { m_powerOperatorList[index]->enable = enable; emit dataChanged(PowerOperatorModel::index(index, 0), PowerOperatorModel::index(index, 0)); } } void PowerOperatorModel::setVisible(int index, bool visible) { if (index >= 0 && index < m_powerOperatorList.size()) { m_powerOperatorList[index]->visible = visible; emit dataChanged(PowerOperatorModel::index(index, 0), PowerOperatorModel::index(index, 0)); } } QHash PowerOperatorModel::roleNames() const { QHash roles; roles[KeyRole] = "key"; roles[TextRole] = "text"; roles[EnableRole] = "enable"; roles[VisibleRole] = "visible"; return roles; } quint8 PowerOperatorModel::keyOfIndex(int rowIndex) const { if (rowIndex < 0 || rowIndex >= m_powerOperatorList.size()) { return -1; } return m_powerOperatorList[rowIndex]->key; } int PowerOperatorModel::indexOfKey(quint8 key) const { for (int i = 0; i < m_powerOperatorList.size(); i++) { if (m_powerOperatorList[i]->key == key) { return i; } } return -1; } ================================================ FILE: src/plugin-power/operation/poweroperatormodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef POWEROPERATORMODEL_H #define POWEROPERATORMODEL_H #include #include enum PowerOperatorType{ POT_ShutDown = 0, POT_Suspend, POT_Hibernate, POT_TurnOffMonitor, POT_ShowShutDownInter, POT_DoNoting }; struct PowerOperator { quint8 key; QString text; bool visible; bool enable; PowerOperator(quint8 key, QString text, bool visible = true, bool enable = true) : key(key), text(text), visible(visible), enable(enable) {} }; class PowerOperatorModel : public QAbstractListModel { Q_OBJECT QML_NAMED_ELEMENT(PowerOperatorModel) public: enum PowerOperatorRole { KeyRole = Qt::UserRole + 1, TextRole, VisibleRole, EnableRole, }; Q_ENUM(PowerOperatorRole) PowerOperatorModel(QObject *parent = nullptr); ~PowerOperatorModel(); QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; int rowCount(const QModelIndex &parent= QModelIndex()) const override;; void setEnable(int index, bool enable); void setVisible(int index, bool visible); Q_INVOKABLE quint8 keyOfIndex(int rowIndex) const; Q_INVOKABLE int indexOfKey(quint8 key) const; protected: QHash roleNames() const override; private: void appendRow(PowerOperator *info); private: QList m_powerOperatorList; }; Q_DECLARE_METATYPE(PowerOperatorModel) #endif // POWEROPERATORMODEL_H ================================================ FILE: src/plugin-power/operation/powerworker.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "powerworker.h" #include "operation/powerdbusproxy.h" #include "powermodel.h" #include "utils.h" #include #include #include #include #define POWER_CAN_SLEEP "POWER_CAN_SLEEP" #define POWER_CAN_HIBERNATE "POWER_CAN_HIBERNATE" #define BATTERY_LOCKDELAY_NAME "batteryLockDelay" #define BATTERY_SLEEPDELAY_NAME "batterySleepDelay" #define BATTERY_SBDELAY_NAME "batteryScreenBlackDelay" #define LINEPOWER_LOCKDELAY_NAME "linePowerLockDelay" #define LINEPOWER_SLEEPDELAY_NAME "linePowerSleepDelay" #define LINEPOWER_SBDELAY_NAME "linePowerScreenBlackDelay" #define TIME_WEEK_START_NAME "firstDayOfWeek" #define ENABLE_SCHEDULED_SHUTDOWN "enableScheduledShutdown" #define SHOW_HIBERNATE_NAME "showHibernate" #define SHOW_SHUTDOWN_NAME "showShutdown" #define SHOW_SUSPEND_NAME "showSuspend" static const QStringList DCC_CONFIG_FILES { "/etc/deepin/dde-control-center.conf", "/usr/share/dde-control-center/dde-control-center.conf" }; PowerWorker::PowerWorker(PowerModel *model, QObject *parent) : QObject(parent) , m_powerModel(model) , m_powerDBusProxy(new PowerDBusProxy(this)) , m_cfgDock(DConfig::create("org.deepin.dde.tray-loader", "org.deepin.dde.dock.plugin.power", QString(), this)) , m_cfgPower(DConfig::create("org.deepin.dde.control-center", "org.deepin.dde.control-center.power", QString(), this)) , m_cfgTime(DConfig::createGeneric("org.deepin.region-format", QString(), this)) { connect(m_powerDBusProxy, &PowerDBusProxy::noPasswdLoginChanged, m_powerModel, &PowerModel::setNoPasswdLogin); connect(m_powerDBusProxy, &PowerDBusProxy::ScreenBlackLockChanged, m_powerModel, &PowerModel::setScreenBlackLock); connect(m_powerDBusProxy, &PowerDBusProxy::SleepLockChanged, m_powerModel, &PowerModel::setSleepLock); connect(m_powerDBusProxy, &PowerDBusProxy::LidIsPresentChanged, m_powerModel, &PowerModel::setLidPresent); connect(m_powerDBusProxy, &PowerDBusProxy::LidClosedSleepChanged, m_powerModel, &PowerModel::setSleepOnLidOnPowerClose); connect(m_powerDBusProxy, &PowerDBusProxy::LinePowerScreenBlackDelayChanged, this, &PowerWorker::setScreenBlackDelayToModelOnPower); connect(m_powerDBusProxy, &PowerDBusProxy::LinePowerSleepDelayChanged, this, &PowerWorker::setSleepDelayToModelOnPower); connect(m_powerDBusProxy, &PowerDBusProxy::BatteryScreenBlackDelayChanged, this, &PowerWorker::setScreenBlackDelayToModelOnBattery); connect(m_powerDBusProxy, &PowerDBusProxy::BatterySleepDelayChanged, this, &PowerWorker::setSleepDelayToModelOnBattery); connect(m_powerDBusProxy, &PowerDBusProxy::BatteryLockDelayChanged, this, &PowerWorker::setResponseBatteryLockScreenDelay); connect(m_powerDBusProxy, &PowerDBusProxy::LinePowerLockDelayChanged, this, &PowerWorker::setResponsePowerLockScreenDelay); connect(m_powerDBusProxy, &PowerDBusProxy::IsHighPerformanceSupportedChanged, this, &PowerWorker::setHighPerformanceSupported); connect(m_powerDBusProxy, &PowerDBusProxy::PowerSavingModeAutoChanged, m_powerModel, &PowerModel::setAutoPowerSaveMode); connect(m_powerDBusProxy, &PowerDBusProxy::PowerSavingModeEnabledChanged, m_powerModel, &PowerModel::setPowerSaveMode); connect(m_powerDBusProxy, &PowerDBusProxy::HasBatteryChanged, m_powerModel, &PowerModel::setHaveBettary); //--------------------sp2 add---------------------------- connect(m_powerDBusProxy, &PowerDBusProxy::PowerSavingModeAutoWhenBatteryLowChanged, m_powerModel, &PowerModel::setPowerSavingModeAutoWhenQuantifyLow); connect(m_powerDBusProxy, &PowerDBusProxy::PowerSavingModeAutoChanged, m_powerModel, &PowerModel::setPowerSavingModeAuto); connect(m_powerDBusProxy, &PowerDBusProxy::PowerSavingModeBrightnessDropPercentChanged, m_powerModel, &PowerModel::setPowerSavingModeLowerBrightnessThreshold); connect(m_powerDBusProxy, &PowerDBusProxy::PowerSavingModeAutoBatteryPercentChanged, m_powerModel, &PowerModel::setPowerSavingModeAutoBatteryPercentage); connect(m_powerDBusProxy, &PowerDBusProxy::LinePowerPressPowerBtnActionChanged, m_powerModel, &PowerModel::setLinePowerPressPowerBtnAction); connect(m_powerDBusProxy, &PowerDBusProxy::LinePowerLidClosedActionChanged, m_powerModel, &PowerModel::setLinePowerLidClosedAction); connect(m_powerDBusProxy, &PowerDBusProxy::BatteryPressPowerBtnActionChanged, m_powerModel, &PowerModel::setBatteryPressPowerBtnAction); connect(m_powerDBusProxy, &PowerDBusProxy::BatteryLidClosedActionChanged, m_powerModel, &PowerModel::setBatteryLidClosedAction); connect(m_powerDBusProxy, &PowerDBusProxy::LowPowerNotifyEnableChanged, m_powerModel, &PowerModel::setLowPowerNotifyEnable); connect(m_powerDBusProxy, &PowerDBusProxy::LowPowerNotifyThresholdChanged, m_powerModel, &PowerModel::setLowPowerNotifyThreshold); connect(m_powerDBusProxy, &PowerDBusProxy::LowPowerAutoSleepThresholdChanged, m_powerModel, &PowerModel::setLowPowerAutoSleepThreshold); connect(m_powerDBusProxy, &PowerDBusProxy::ScheduledShutdownStateChanged, m_powerModel, &PowerModel::setScheduledShutdownState); connect(m_powerDBusProxy, &PowerDBusProxy::ShutdownTimeChanged, m_powerModel, &PowerModel::setShutdownTime); connect(m_powerDBusProxy, &PowerDBusProxy::ShutdownRepetitionChanged, m_powerModel, &PowerModel::setShutdownRepetition); connect(m_powerDBusProxy, &PowerDBusProxy::CustomShutdownWeekDaysChanged, this, &PowerWorker::onCustomShutdownWeekDaysChanged); //------------------------------------------------------- connect(m_powerDBusProxy, &PowerDBusProxy::ModeChanged, m_powerModel, &PowerModel::setPowerPlan); connect(m_powerDBusProxy, &PowerDBusProxy::BatteryCapacityChanged, m_powerModel, &PowerModel::setBatteryCapacity); connect(m_powerDBusProxy, &PowerDBusProxy::LowPowerActionChanged, m_powerModel, &PowerModel::setLowPowerAction); connect(m_cfgDock, &DConfig::valueChanged, [this] (const QString &key) { if ("showTimeToFull" == key) { m_powerModel->setShowBatteryTimeToFull(m_cfgDock->value("showTimeToFull").toBool()); } }); connect(m_cfgPower, &DConfig::valueChanged, [this](const QString &key) { if (key == BATTERY_LOCKDELAY_NAME) { readConfig(BATTERY_LOCKDELAY_NAME, std::bind(&PowerModel::setBatteryLockDelayModel, m_powerModel, std::placeholders::_1)); } else if (key == BATTERY_SLEEPDELAY_NAME) { readConfig(BATTERY_SLEEPDELAY_NAME, std::bind(&PowerModel::setBatterySleepDelayModel, m_powerModel, std::placeholders::_1)); } else if (key == BATTERY_SBDELAY_NAME) { readConfig(BATTERY_SBDELAY_NAME, std::bind(&PowerModel::setBatteryScreenBlackDelayModel, m_powerModel, std::placeholders::_1)); } else if (key == LINEPOWER_LOCKDELAY_NAME) { readConfig(LINEPOWER_LOCKDELAY_NAME, std::bind(&PowerModel::setLinePowerLockDelayModel, m_powerModel, std::placeholders::_1)); } else if (key == LINEPOWER_SLEEPDELAY_NAME) { readConfig(LINEPOWER_SLEEPDELAY_NAME, std::bind(&PowerModel::setLinePowerSleepDelayModel, m_powerModel, std::placeholders::_1)); } else if (key == LINEPOWER_SBDELAY_NAME) { readConfig(LINEPOWER_SBDELAY_NAME, std::bind(&PowerModel::setLinePowerScreenBlackDelayModel, m_powerModel, std::placeholders::_1)); } else if (key == SHOW_HIBERNATE_NAME) { readConfig(SHOW_HIBERNATE_NAME, std::bind(&PowerModel::setHibernate, m_powerModel, std::placeholders::_1)); } else if (key == SHOW_SHUTDOWN_NAME) { readConfig(SHOW_SHUTDOWN_NAME, std::bind(&PowerModel::setShutdown, m_powerModel, std::placeholders::_1)); } else if (key == SHOW_SUSPEND_NAME) { readConfig(SHOW_SUSPEND_NAME, std::bind(&PowerModel::setSuspend, m_powerModel, std::placeholders::_1)); } else if (key == ENABLE_SCHEDULED_SHUTDOWN) { readConfig(ENABLE_SCHEDULED_SHUTDOWN, std::bind(&PowerModel::setEnableScheduledShutdown, m_powerModel, std::placeholders::_1)); } }); connect(m_cfgTime, &DConfig::valueChanged, [this](const QString &key) { if (key == TIME_WEEK_START_NAME) { int value = m_cfgTime->value(TIME_WEEK_START_NAME).toInt(); m_powerModel->setWeekBegins(value); } }); // init base property m_powerModel->setHaveBettary(m_powerDBusProxy->hasBattery()); } QVariantList PowerWorker::converToDataMap(const QStringList& conf) { QVariantList dataMap; for(const QString& numStr : conf) { int num; if (numStr.isEmpty()) { qWarning() << "Convert to num failed, config is empty"; continue; } bool ok; num = numStr.mid(0, numStr.length() - 1).toInt(&ok); if (!ok) { qWarning() << "Convert to num failed, can't change num to int"; num = 0; } QVariantMap map; if (numStr.contains("m")) { num = num * 60; map["trText"] = numStr.chopped(1) + " " + tr("Minutes"); } else if (numStr.contains("h")) { num = num * 3600; map["trText"] = numStr.chopped(1) + " " + tr("Hour"); } map["text"] = numStr; map["value"] = num; dataMap.push_back(map); } QVariantMap map; map["trText"] = tr("Never"); map["text"] = tr("Never"); map["value"] = 0; dataMap.push_back(map); return dataMap; } void PowerWorker::active() { m_powerDBusProxy->blockSignals(false); // refersh data m_powerModel->setScreenBlackLock(m_powerDBusProxy->screenBlackLock()); m_powerModel->setSleepLock(m_powerDBusProxy->sleepLock()); m_powerModel->setLidPresent(m_powerDBusProxy->lidIsPresent()); m_powerModel->setSleepOnLidOnPowerClose(m_powerDBusProxy->lidClosedSleep()); m_powerModel->setHaveBettary(m_powerDBusProxy->hasBattery()); m_powerModel->setPowerSavingModeAutoWhenQuantifyLow(m_powerDBusProxy->powerSavingModeAutoWhenBatteryLow()); m_powerModel->setPowerSavingModeAutoBatteryPercentage(m_powerDBusProxy->powerSavingModeAutoBatteryPercent()); m_powerModel->setPowerSavingModeLowerBrightnessThreshold(m_powerDBusProxy->powerSavingModeBrightnessDropPercent()); m_powerModel->setLowPowerNotifyEnable(m_powerDBusProxy->lowPowerNotifyEnable()); m_powerModel->setLowPowerAutoSleepThreshold(m_powerDBusProxy->lowPowerAutoSleepThreshold()); m_powerModel->setLowPowerNotifyThreshold(m_powerDBusProxy->lowPowerNotifyThreshold()); m_powerModel->setLinePowerPressPowerBtnAction(m_powerDBusProxy->linePowerPressPowerBtnAction()); m_powerModel->setLinePowerLidClosedAction(m_powerDBusProxy->linePowerLidClosedAction()); m_powerModel->setBatteryPressPowerBtnAction(m_powerDBusProxy->batteryPressPowerBtnAction()); m_powerModel->setBatteryLidClosedAction(m_powerDBusProxy->batteryLidClosedAction()); m_powerModel->setPowerPlan(m_powerDBusProxy->mode()); m_powerModel->setBatteryCapacity(m_powerDBusProxy->batteryCapacity()); m_powerModel->setNoPasswdLogin(m_powerDBusProxy->noPasswdLogin()); m_powerModel->setShowBatteryTimeToFull(m_cfgDock->value("showTimeToFull").toBool()); m_powerModel->setNoPasswdLogin(m_powerDBusProxy->noPasswdLogin()); m_powerModel->setScheduledShutdownState(m_powerDBusProxy->scheduledShutdownState()); m_powerModel->setShutdownTime(m_powerDBusProxy->shutdownTime()); m_powerModel->setShutdownRepetition(m_powerDBusProxy->shutdownRepetition()); m_powerModel->setWeekBegins(m_cfgTime->value(TIME_WEEK_START_NAME).toInt()); m_powerModel->setLowPowerAction(m_powerDBusProxy->lowPowerAction()); onCustomShutdownWeekDaysChanged(m_powerDBusProxy->customShutdownWeekDays()); setHighPerformanceSupported(m_powerDBusProxy->isHighPerformanceSupported()); setBalancePerformanceSupported(m_powerDBusProxy->isBalancePerformanceSupported()); setScreenBlackDelayToModelOnPower(m_powerDBusProxy->linePowerScreenBlackDelay()); setSleepDelayToModelOnPower(m_powerDBusProxy->linePowerSleepDelay()); setScreenBlackDelayToModelOnBattery(m_powerDBusProxy->batteryScreenBlackDelay()); setSleepDelayToModelOnBattery(m_powerDBusProxy->batterySleepDelay()); setResponseBatteryLockScreenDelay(m_powerDBusProxy->batteryLockDelay()); setResponsePowerLockScreenDelay(m_powerDBusProxy->linePowerLockDelay()); m_powerModel->setAutoPowerSaveMode(m_powerDBusProxy->powerSavingModeAuto()); m_powerModel->setPowerSaveMode(m_powerDBusProxy->powerSavingModeEnabled()); m_powerModel->setIsVirtualEnvironment(isVirtualEnvironment()); QProcessEnvironment env = QProcessEnvironment::systemEnvironment(); const bool confVal = valueByQSettings(DCC_CONFIG_FILES, "Power", "sleep", true); const bool envVal = QVariant(env.value(POWER_CAN_SLEEP)).toBool(); const bool envVal_hibernate = QVariant(env.value(POWER_CAN_HIBERNATE)).toBool(); bool canSuspend = m_powerDBusProxy->login1ManagerCanSuspend(); bool can_suspend = env.contains(POWER_CAN_SLEEP) ? envVal : confVal && canSuspend; m_powerModel->setCanSuspend(can_suspend); bool canHibernate = m_powerDBusProxy->login1ManagerCanHibernate(); bool can_hibernate = env.contains(POWER_CAN_HIBERNATE) ? envVal_hibernate : canHibernate; m_powerModel->setCanHibernate(can_hibernate); readConfig(BATTERY_LOCKDELAY_NAME, std::bind(&PowerModel::setBatteryLockDelayModel, m_powerModel, std::placeholders::_1)); readConfig(BATTERY_SLEEPDELAY_NAME, std::bind(&PowerModel::setBatterySleepDelayModel, m_powerModel, std::placeholders::_1)); readConfig(BATTERY_SBDELAY_NAME, std::bind(&PowerModel::setBatteryScreenBlackDelayModel, m_powerModel, std::placeholders::_1)); readConfig(LINEPOWER_LOCKDELAY_NAME, std::bind(&PowerModel::setLinePowerLockDelayModel, m_powerModel, std::placeholders::_1)); readConfig(LINEPOWER_SLEEPDELAY_NAME, std::bind(&PowerModel::setLinePowerSleepDelayModel, m_powerModel, std::placeholders::_1)); readConfig(LINEPOWER_SBDELAY_NAME, std::bind(&PowerModel::setLinePowerScreenBlackDelayModel, m_powerModel, std::placeholders::_1)); readConfig(SHOW_HIBERNATE_NAME, std::bind(&PowerModel::setHibernate, m_powerModel, std::placeholders::_1)); readConfig(SHOW_SHUTDOWN_NAME, std::bind(&PowerModel::setShutdown, m_powerModel, std::placeholders::_1)); readConfig(SHOW_SUSPEND_NAME, std::bind(&PowerModel::setSuspend, m_powerModel, std::placeholders::_1)); readConfig(ENABLE_SCHEDULED_SHUTDOWN, std::bind(&PowerModel::setEnableScheduledShutdown, m_powerModel, std::placeholders::_1)); } void PowerWorker::readConfig(const QString &key, std::function callback) { auto configList = m_cfgPower->value(key).toStringList(); bool isLegal = true; if (configList.size() != 6) { isLegal = false; } else { QRegularExpression re("^[1-9][0-9]*[mh]"); for (const QString &v : configList) { if (!re.match(v).hasMatch()) { isLegal = false; break; } } } if (!isLegal) { m_cfgPower->reset(key); qWarning() << "config is illegal, reset config"; } auto configDataMap = converToDataMap(configList); callback(configDataMap); } void PowerWorker::readConfig(const QString &key, std::function callback) { bool enable = m_cfgPower->value(key, true).toBool(); callback(enable); } void PowerWorker::readConfig(const QString &key, std::function callback) { const QString &enable = m_cfgPower->value(key, true).toString(); callback(enable); } void PowerWorker::deactive() { m_powerDBusProxy->blockSignals(true); } void PowerWorker::setScreenBlackLock(const bool lock) { m_powerDBusProxy->setScreenBlackLock(lock); } void PowerWorker::setScheduledShutdownState(const bool state) { m_powerDBusProxy->setScheduledShutdownState(state); } void PowerWorker::setShutdownTime(const QString &time) { m_powerDBusProxy->setShutdownTime(time); } void PowerWorker::setShutdownRepetition(int repetition) { m_powerDBusProxy->setShutdownRepetition(repetition); } void PowerWorker::setCustomShutdownWeekDays(const QString &weekdays) { QByteArray value; for (const auto &num : weekdays.simplified().split(',')) { bool ok = false; int day = num.toInt(&ok); if (ok) { value.append(static_cast(day)); } } m_powerDBusProxy->setCustomShutdownWeekDays(value); } void PowerWorker::setSleepLock(const bool lock) { m_powerDBusProxy->setSleepLock(lock); } void PowerWorker::setSleepOnLidOnPowerClosed(const bool sleep) { m_powerDBusProxy->setLidClosedSleep(sleep); } void PowerWorker::setSleepDelayOnPower(const int delay) { qDebug() << "m_powerDBusProxy->setLinePowerSleepDelay: " << delay; m_powerDBusProxy->setLinePowerSleepDelay(delay); } void PowerWorker::setSleepDelayOnBattery(const int delay) { qDebug() << "m_powerDBusProxy->setBatterySleepDelay: " << delay; m_powerDBusProxy->setBatterySleepDelay(delay); } void PowerWorker::setScreenBlackDelayOnPower(const int delay) { qDebug() << "m_powerDBusProxy->setLinePowerScreenBlackDelay: " << delay; m_powerDBusProxy->setLinePowerScreenBlackDelay(delay); } void PowerWorker::setScreenBlackDelayOnBattery(const int delay) { qDebug() << "m_powerDBusProxy->setBatteryScreenBlackDelay: " << delay; m_powerDBusProxy->setBatteryScreenBlackDelay(delay); } void PowerWorker::setSleepDelayToModelOnPower(const int delay) { m_powerModel->setSleepDelayOnPower(delay); } void PowerWorker::setScreenBlackDelayToModelOnPower(const int delay) { m_powerModel->setScreenBlackDelayOnPower(delay); } void PowerWorker::setSleepDelayToModelOnBattery(const int delay) { m_powerModel->setSleepDelayOnBattery(delay); } void PowerWorker::setResponseBatteryLockScreenDelay(const int delay) { m_powerModel->setBatteryLockScreenDelay(delay); } void PowerWorker::setResponsePowerLockScreenDelay(const int delay) { m_powerModel->setPowerLockScreenDelay(delay); } void PowerWorker::setHighPerformanceSupported(bool state) { m_powerModel->setHighPerformanceSupported(state); } void PowerWorker::setBalancePerformanceSupported(bool state) { m_powerModel->setBalancePerformanceSupported(state); } void PowerWorker::setPowerSavingModeAutoWhenQuantifyLow(bool bLowBatteryAutoIntoSaveEnergyMode) { m_powerDBusProxy->setPowerSavingModeAutoWhenBatteryLow(bLowBatteryAutoIntoSaveEnergyMode); } void PowerWorker::setPowerSavingModeAuto(bool bAutoIntoSaveEnergyMode) { m_powerDBusProxy->setPowerSavingModeAuto(bAutoIntoSaveEnergyMode); } void PowerWorker::setPowerSavingModeLowerBrightnessThreshold(uint dPowerSavingModeLowerBrightnessThreshold) { m_powerDBusProxy->setPowerSavingModeBrightnessDropPercent(dPowerSavingModeLowerBrightnessThreshold); } void PowerWorker::setPowerSavingModeAutoBatteryPercentage(uint dPowerSavingModeBatteryPercentage) { m_powerDBusProxy->setPowerSavingModeAutoBatteryPercent(dPowerSavingModeBatteryPercentage); } void PowerWorker::setLinePowerPressPowerBtnAction(int nLinePowerPressPowerBtnAction) { m_powerDBusProxy->setLinePowerPressPowerBtnAction(nLinePowerPressPowerBtnAction); } void PowerWorker::setLinePowerLidClosedAction(int nLinePowerLidClosedAction) { m_powerDBusProxy->setLinePowerLidClosedAction(nLinePowerLidClosedAction); } void PowerWorker::setBatteryPressPowerBtnAction(int nBatteryPressPowerBtnAction) { m_powerDBusProxy->setBatteryPressPowerBtnAction(nBatteryPressPowerBtnAction); } void PowerWorker::setBatteryLidClosedAction(int nBatteryLidClosedAction) { m_powerDBusProxy->setBatteryLidClosedAction(nBatteryLidClosedAction); } void PowerWorker::setLowPowerNotifyEnable(bool bLowPowerNotifyEnable) { m_powerDBusProxy->setLowPowerNotifyEnable(bLowPowerNotifyEnable); } void PowerWorker::setLowPowerNotifyThreshold(int dLowPowerNotifyThreshold) { m_powerDBusProxy->setLowPowerNotifyThreshold(dLowPowerNotifyThreshold); } void PowerWorker::setLowPowerAutoSleepThreshold(int dLowPowerAutoSleepThreshold) { m_powerDBusProxy->setLowPowerAutoSleepThreshold(dLowPowerAutoSleepThreshold); } void PowerWorker::setLowPowerAction(int action) { m_powerDBusProxy->setLowPowerAction(action); } /** * @brief PowerWorker::setPowerPlan * @param powerPlan * 设置性能模式的dbus接口 */ void PowerWorker::setPowerPlan(const QString &powerPlan) { m_powerDBusProxy->SetMode(powerPlan); } bool PowerWorker::getCurCanSuspend() { return m_powerDBusProxy->CanSuspend(); } bool PowerWorker::getCurCanHibernate() { return m_powerDBusProxy->CanHibernate(); } void PowerWorker::setScreenBlackDelayToModelOnBattery(const int delay) { m_powerModel->setScreenBlackDelayOnBattery(delay); } void PowerWorker::setLockScreenDelayOnBattery(const int delay) { qDebug() << "m_powerDBusProxy->setBatteryLockDelay: " << delay; m_powerDBusProxy->setBatteryLockDelay(delay); } void PowerWorker::setLockScreenDelayOnPower(const int delay) { qDebug() << "m_powerDBusProxy->setLinePowerLockDelay: " << delay; m_powerDBusProxy->setLinePowerLockDelay(delay); } void PowerWorker::setEnablePowerSave(const bool isEnable) { m_powerDBusProxy->setPowerSavingModeEnabled(isEnable); } int PowerWorker::getMaxBacklightBrightness() { return m_powerDBusProxy->maxBacklightBrightness(); } void PowerWorker::setShowBatteryTimeToFull(bool value) { if (m_cfgDock) { m_cfgDock->setValue("showTimeToFull", value); } } void PowerWorker::onCustomShutdownWeekDaysChanged(const QByteArray &value) { QVariantList valueList; for (auto c : value) { valueList.append(static_cast(c)); } m_powerModel->setCustomShutdownWeekDays(valueList); } ================================================ FILE: src/plugin-power/operation/powerworker.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef POWERWORKER_H #define POWERWORKER_H #include "powerdbusproxy.h" #include #include #include "powermodel.h" class PowerWorker : public QObject { Q_OBJECT public: explicit PowerWorker(PowerModel *model, QObject *parent = 0); void active(); void deactive(); public Q_SLOTS: void setScreenBlackLock(const bool lock); void setScheduledShutdownState(const bool state); void setShutdownTime(const QString &time); void setShutdownRepetition(int repetition); void setCustomShutdownWeekDays(const QString &weekdays); void setSleepLock(const bool lock); void setSleepOnLidOnPowerClosed(const bool sleep); void setSleepDelayOnPower(const int delay); void setSleepDelayOnBattery(const int delay); void setScreenBlackDelayOnPower(const int delay); void setScreenBlackDelayOnBattery(const int delay); void setSleepDelayToModelOnPower(const int delay); void setScreenBlackDelayToModelOnPower(const int delay); void setSleepDelayToModelOnBattery(const int delay); void setScreenBlackDelayToModelOnBattery(const int delay); void setLockScreenDelayOnBattery(const int delay); void setLockScreenDelayOnPower(const int delay); void setResponseBatteryLockScreenDelay(const int delay); void setResponsePowerLockScreenDelay(const int delay); void setHighPerformanceSupported(bool state); void setBalancePerformanceSupported(bool state); //------------sp2 add----------------------- void setPowerSavingModeAutoWhenQuantifyLow(bool bLowBatteryAutoIntoSaveEnergyMode); void setPowerSavingModeAuto(bool bAutoIntoSaveEnergyMode); void setPowerSavingModeLowerBrightnessThreshold(uint dPowerSavingModeLowerBrightnessThreshold); void setPowerSavingModeAutoBatteryPercentage(uint dPowerSavingModebatteryPentage); void setLinePowerPressPowerBtnAction(int nLinePowerPressPowerBtnAction); void setLinePowerLidClosedAction(int nLinePowerLidClosedAction); void setBatteryPressPowerBtnAction(int nBatteryPressPowerBtnAction); void setBatteryLidClosedAction(int nBatteryLidClosedAction); void setLowPowerNotifyEnable(bool bLowPowerNotifyEnable); void setLowPowerNotifyThreshold(int dLowPowerNotifyThreshold); void setLowPowerAutoSleepThreshold(int dLowPowerAutoSleepThreshold); void setLowPowerAction(int action); //------------------------------------------ void setPowerPlan(const QString &powerPlan); void setShowBatteryTimeToFull(bool value); bool getCurCanSuspend(); bool getCurCanHibernate(); void setEnablePowerSave(const bool isEnable); int getMaxBacklightBrightness(); private: void readConfig(const QString &key, std::function callback); void readConfig(const QString &key, std::function callback); void readConfig(const QString &key, std::function callback); QVariantList converToDataMap(const QStringList& conf); private slots: void onCustomShutdownWeekDaysChanged(const QByteArray &value); private: PowerModel *m_powerModel; PowerDBusProxy *m_powerDBusProxy; Dtk::Core::DConfig *m_cfgDock; Dtk::Core::DConfig *m_cfgPower; Dtk::Core::DConfig *m_cfgTime; }; #endif // POWERWORKER_H ================================================ FILE: src/plugin-power/operation/qrc/power.qrc ================================================ icons/dcc_nav_power_42px.svg icons/dcc_nav_power_84px.svg actions/dcc_general_purpose_32px.svg actions/dcc_battery_32px.svg actions/dcc_using_electric_32px.svg icons/balanced.dci icons/balance_performance.dci icons/high_performance.dci icons/power_performance.dci icons/general.dci icons/on_battery.dci icons/plugged_in.dci ================================================ FILE: src/plugin-power/operation/utils.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef UTILS_H #define UTILS_H #include #include #include #include #include DCORE_USE_NAMESPACE template T valueByQSettings(const QStringList& configFiles, const QString& group, const QString& key, const QVariant& failback) { for (const QString& path : configFiles) { QSettings settings(path, QSettings::IniFormat); if (!group.isEmpty()) { settings.beginGroup(group); } const QVariant& v = settings.value(key); if (v.isValid()) { T t = v.value(); return t; } } return failback.value(); } inline const static Dtk::Core::DSysInfo::UosType UosType = Dtk::Core::DSysInfo::uosType(); inline const static bool IsServerSystem = (Dtk::Core::DSysInfo::UosServer == UosType); // 是否是服务器版 inline static bool isVirtualEnvironment() { static bool cached = false; static bool result = false; if (!cached) { QProcess proc; proc.start("systemd-detect-virt"); proc.waitForFinished(1000); QString output = proc.readAllStandardOutput(); result = !output.contains("none"); cached = true; } return result; } #endif // UTILS_H ================================================ FILE: src/plugin-power/qml/BatteryPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { DccTitleObject { name: "screenAndSuspendTitle" parentName: "power/onBattery" displayName: qsTr("Screen and Suspend") visible: dccData.platformName() !== "wayland" weight: 10 } DccObject { name: "turnOffTheMonitorAfterGroup" parentName: "power/onBattery" weight: 100 pageType: DccObject.Item visible: dccData.platformName() !== "wayland" page: DccGroupView {} DccObject { name: "turnOffTheMonitorAfter" parentName: "power/onBattery/turnOffTheMonitorAfterGroup" displayName: qsTr("Turn off the monitor after") weight: 1 pageType: DccObject.Item page: ColumnLayout { Layout.fillHeight: true RowLayout { Layout.leftMargin: 14 Layout.rightMargin: 10 Layout.topMargin: 10 Label { font: D.DTK.fontManager.t6 text: dccObj.displayName } Item { Layout.fillWidth: true } Label { text: offMonitorSlider.dataMap[offMonitorSlider.slider.value].trText horizontalAlignment: Text.AlignRight } } CustomTipsSlider { id: offMonitorSlider dataMap: dccData.model.batteryScreenBlackDelayModel Layout.preferredHeight: 80 Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true slider.value: dccData.indexByValueOnMap(dataMap, dccData.model.screenBlackDelayOnBattery) slider.onValueChanged: { dccData.worker.setScreenBlackDelayOnBattery(dataMap[slider.value].value) } } } } } DccObject { name: "lockScreenAfterGroup" parentName: "power/onBattery" weight: 200 pageType: DccObject.Item visible: dccData.platformName() !== "wayland" page: DccGroupView {} DccObject { name: "lockScreenAfter" parentName: "power/onBattery/lockScreenAfterGroup" displayName: qsTr("Lock screen after") weight: 1 pageType: DccObject.Item page: ColumnLayout { Layout.fillHeight: true RowLayout { Layout.leftMargin: 14 Layout.rightMargin: 10 Layout.topMargin: 10 Label { font: D.DTK.fontManager.t6 text: dccObj.displayName } Item { Layout.fillWidth: true } Label { text: lockScreenSlider.dataMap[lockScreenSlider.slider.value].trText horizontalAlignment: Text.AlignRight } } CustomTipsSlider { id: lockScreenSlider dataMap: dccData.model.batteryLockDelayModel Layout.preferredHeight: 80 Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true slider.value: dccData.indexByValueOnMap(dataMap, dccData.model.batteryLockScreenDelay) slider.onValueChanged: { dccData.worker.setLockScreenDelayOnBattery(dataMap[slider.value].value) } } } } } DccObject { name: "computerSuspendsAfterGroup" parentName: "power/onBattery" weight: 300 pageType: DccObject.Item visible: dccData.platformName() !== "wayland" && !dccData.model.isVirtualEnvironment && dccData.model.canSuspend page: DccGroupView {} DccObject { name: "computerSuspendsAfter" parentName: "power/onBattery/computerSuspendsAfterGroup" displayName: qsTr("Computer suspends after") weight: 1 pageType: DccObject.Item page: ColumnLayout { Layout.fillHeight: true RowLayout { Layout.leftMargin: 14 Layout.rightMargin: 10 Layout.topMargin: 10 Label { font: D.DTK.fontManager.t6 text: dccObj.displayName } Item { Layout.fillWidth: true } Label { text: suspendsSlider.dataMap[suspendsSlider.slider.value].trText horizontalAlignment: Text.AlignRight } } CustomTipsSlider { id: suspendsSlider dataMap: dccData.model.batterySleepDelayModel Layout.preferredHeight: 80 Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true slider.value: dccData.indexByValueOnMap(dataMap, dccData.model.sleepDelayOnBattery) slider.onValueChanged: { dccData.worker.setSleepDelayOnBattery(dataMap[slider.value].value) } } } } } DccObject { name: "powerButtonGroup" parentName: "power/onBattery" weight: 400 pageType: DccObject.Item visible: dccData.platformName() !== "wayland" page: DccGroupView {} DccObject { name: "whenTheLidIsClosed" parentName: "power/onBattery/powerButtonGroup" displayName: qsTr("When the lid is closed") visible: dccData.model.lidPresent weight: 1 pageType: DccObject.Editor page: CustomComboBox { textRole: "text" enableRole: "enable" visibleRole: "visible" model: dccData.batteryLidModel currentIndex: model.indexOfKey(dccData.model.batteryLidClosedAction) onCurrentIndexChanged: { dccData.worker.setBatteryLidClosedAction(model.keyOfIndex(currentIndex)) } } } DccObject { name: "whenThePowerButtonIsPressed" parentName: "power/onBattery/powerButtonGroup" displayName: qsTr("When the power button is pressed") weight: 2 pageType: DccObject.Editor page: CustomComboBox { textRole: "text" enableRole: "enable" visibleRole: "visible" model: dccData.batteryPressModel currentIndex: model.indexOfKey(dccData.model.batteryPressPowerBtnAction) onCurrentIndexChanged: { dccData.worker.setBatteryPressPowerBtnAction(model.keyOfIndex(currentIndex)) } } } } DccTitleObject { name: "lowBatteryTitle" parentName: "power/onBattery" displayName: qsTr("Low Battery") weight: 500 } DccObject { name: "lowBatteryNotificationGroup" parentName: "power/onBattery" weight: 600 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "lowBatteryNotification" parentName: "power/onBattery/lowBatteryNotificationGroup" displayName: qsTr("Low battery notification") weight: 1 pageType: DccObject.Editor page: D.ComboBox { textRole: "text" flat: true currentIndex: dccData.indexByValueOnModel(model, dccData.model.lowPowerNotifyThreshold) model: ListModel { ListElement { text: qsTr("Disable"); value: 0 } ListElement { text: "10%"; value: 10 } ListElement { text: "15%"; value: 15 } ListElement { text: "20%"; value: 20 } ListElement { text: "25%"; value: 25 } } onCurrentIndexChanged: { var selectedValue = model.get(currentIndex).value; if (selectedValue === 0) { dccData.worker.setLowPowerNotifyEnable(false) dccData.worker.setLowPowerNotifyThreshold(selectedValue) } else { dccData.worker.setLowPowerNotifyEnable(true) dccData.worker.setLowPowerNotifyThreshold(selectedValue) } } } } } DccObject { name: "lowBatteryOperatorGroup" parentName: "power/onBattery" weight: 700 pageType: DccObject.Item visible: dccData.platformName() !== "wayland" && (dccData.model.canSuspend || dccData.model.canHibernate) page: DccGroupView {} DccObject { name: "lowBatteryOperator" parentName: "power/onBattery/lowBatteryOperatorGroup" displayName: qsTr("Low battery level") weight: 1 pageType: DccObject.Editor page: CustomComboBox { textRole: "text" valueRole: "value" flat: true currentIndex: indexByValue(dccData.model.lowPowerAction) model: ListModel { ListElement { text: qsTr("Auto suspend"); value: 0 } ListElement { text: qsTr("Auto Hibernate"); value: 1 } } onCurrentIndexChanged: { var selectedValue = model.get(currentIndex).value; dccData.worker.setLowPowerAction(selectedValue) } } } DccObject { name: "lowBatteryThreshold" parentName: "power/onBattery/lowBatteryOperatorGroup" displayName: qsTr("Low battery threshold") weight: 2 pageType: DccObject.Editor page: CustomComboBox { textRole: "text" valueRole: "value" currentIndex: indexByValue(dccData.model.lowPowerAutoSleepThreshold) model: ListModel { ListElement { text: "1%"; value: 1 } ListElement { text: "2%"; value: 2 } ListElement { text: "3%"; value: 3 } ListElement { text: "4%"; value: 4 } ListElement { text: "5%"; value: 5 } ListElement { text: "6%"; value: 6 } ListElement { text: "7%"; value: 7 } ListElement { text: "8%"; value: 8 } ListElement { text: "9%"; value: 9 } } flat: true onCurrentIndexChanged: { var selectedValue = model.get(currentIndex).value; dccData.worker.setLowPowerAutoSleepThreshold(selectedValue) } } } } DccTitleObject { name: "batteryManagementTitle" parentName: "power/onBattery" displayName: qsTr("Battery Management") weight: 800 } DccObject { name: "batteryManagementGroup" parentName: "power/onBattery" weight: 900 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "displayRemainingUsingAndChargingTime" parentName: "power/onBattery/batteryManagementGroup" displayName: qsTr("Display remaining using and charging time") weight: 1 pageType: DccObject.Editor page: D.Switch { checked: dccData.model.showBatteryTimeToFull onCheckedChanged: { dccData.worker.setShowBatteryTimeToFull(checked) } } } DccObject { name: "maximumCapacity" parentName: "power/onBattery/batteryManagementGroup" displayName: qsTr("Maximum capacity") weight: 2 pageType: DccObject.Editor page: Label { Layout.leftMargin: 10 text: dccData.model.batteryCapacity + "%" } } } } ================================================ FILE: src/plugin-power/qml/CustomComboBox.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS D.ComboBox { id: control flat: true property string visibleRole property string enableRole delegate: D.MenuItem { id: menuItem useIndicatorPadding: true width: parent.width text: control.textRole ? (Array.isArray(control.model) ? modelData[control.textRole] : model[control.textRole]) : modelData icon.name: (control.iconNameRole && model[control.iconNameRole] !== undefined) ? model[control.iconNameRole] : null highlighted: control.isInteractingWithContent ? control.highlightedIndex === index : false hoverEnabled: control.hoverEnabled autoExclusive: true checked: control.currentIndex === index enabled: (control.enableRole && model[control.enableRole] !== undefined) ? model[control.enableRole] : true visible: (control.visibleRole && model[control.visibleRole] !== undefined) ? model[control.visibleRole] : true implicitHeight: visible ? DS.Style.control.implicitHeight(menuItem) : 0 readonly property real availableTextWidth: { return contentItem.width - contentItem.leftPadding - contentItem.rightPadding } FontMetrics { id: fontMetrics font: menuItem.font } HoverHandler { id: hoverHandler } D.ToolTip { visible: hoverHandler.hovered && fontMetrics.advanceWidth(menuItem.text) > menuItem.availableTextWidth text: menuItem.text } } // To replace function: indexOfValue function indexByValue(value) { for (var i = 0; i < model.count; i++) { if (model.get(i).value === value) { return i; } } return -1; } } ================================================ FILE: src/plugin-power/qml/CustomTipsSlider.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 D.TipsSlider { id: slider property var dataMap slider.handleType: D.Slider.HandleType.ArrowBottom slider.from: 0 slider.to: dataMap.length - 1 slider.live: true slider.stepSize: 1 slider.snapMode: D.Slider.SnapAlways Loader { Repeater { model: slider.dataMap.length D.SliderTipItem { // TODO need to modify parent: slider.children[1] text: slider.dataMap[index].text highlight: slider.slider.value === index } } } } ================================================ FILE: src/plugin-power/qml/GeneralPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { DccTitleObject { name: "powerPlansTitle" parentName: "power/general" displayName: qsTr("Power Plans") weight: 10 visible: dccData.platformName() !== "wayland" } DccObject { name: "powerPlans" parentName: "power/general" weight: 100 pageType: DccObject.Item visible: dccData.platformName() !== "wayland" page: DccGroupView {} PowerPlansListview {} } DccTitleObject { name: "powerSavingSettingsTitle" parentName: "power/general" displayName: qsTr("Power Saving Settings") weight: 200 visible: dccData.platformName() !== "wayland" } DccObject { name: "powerSavingSettingsGroup" parentName: "power/general" weight: 300 pageType: DccObject.Item visible: dccData.platformName() !== "wayland" page: DccGroupView {} DccObject { name: "autoPowerSavingOnLowBattery" parentName: "power/general/powerSavingSettingsGroup" displayName: qsTr("Auto power saving on low battery") weight: 1 visible: dccData.model.haveBettary pageType: DccObject.Editor page: D.Switch { checked: dccData.model.powerSavingModeAutoWhenQuantifyLow onCheckedChanged: { dccData.worker.setPowerSavingModeAutoWhenQuantifyLow(checked) } } } DccObject { name: "lowPowerThreshold" parentName: "power/general/powerSavingSettingsGroup" displayName: qsTr("Low battery threshold") weight: 2 visible: dccData.model.haveBettary && dccData.model.powerSavingModeAutoWhenQuantifyLow pageType: DccObject.Editor page: D.ComboBox { model: [ "10%", "20%", "30%", "40%", "50%" ] flat: true currentIndex: dccData.model.powerSavingModeAutoBatteryPercentage / 10 - 1 onCurrentIndexChanged: { dccData.worker.setPowerSavingModeAutoBatteryPercentage((currentIndex + 1) * 10) } } } } DccObject { name: "autoPowerSavingOnBattery" parentName: "power/general" displayName: qsTr("Auto power saving on battery") weight: 400 backgroundType: DccObject.Normal visible: dccData.model.haveBettary && dccData.platformName() !== "wayland" pageType: DccObject.Editor page: D.Switch { checked: dccData.model.autoPowerSaveMode onCheckedChanged: { dccData.worker.setPowerSavingModeAuto(checked) } } } DccObject { name: "decreaseBrightness" parentName: "power/general" displayName: qsTr("Decrease screen brightness on power saver") weight: 450 visible: dccData.platformName() !== "wayland" backgroundType: DccObject.Normal pageType: DccObject.Item page: ColumnLayout { Layout.fillHeight: true Label { Layout.topMargin: 10 Layout.leftMargin: 14 font: D.DTK.fontManager.t6 text: dccObj.displayName } D.TipsSlider { id: scrollSlider readonly property var tips: [("10%"), ("20%"), ("30%"), ("40%")] Layout.preferredHeight: 80 Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true slider.handleType: Slider.HandleType.ArrowBottom slider.from: 10 slider.to: ticks.length * 10 slider.live: true slider.stepSize: 10 slider.snapMode: Slider.SnapAlways slider.value: dccData.model.powerSavingModeLowerBrightnessThreshold ticks: [ D.SliderTipItem { text: scrollSlider.tips[0]; highlight: scrollSlider.slider.value === 10 }, D.SliderTipItem { text: scrollSlider.tips[1]; highlight: scrollSlider.slider.value === 20 }, D.SliderTipItem { text: scrollSlider.tips[2]; highlight: scrollSlider.slider.value === 30 }, D.SliderTipItem { text: scrollSlider.tips[3]; highlight: scrollSlider.slider.value === 40 } ] slider.onValueChanged: { dccData.worker.setPowerSavingModeLowerBrightnessThreshold(slider.value) } } } } DccTitleObject { name: "wakeupSettingsTitle" parentName: "power/general" displayName: qsTr("Wakeup Settings") weight: 500 } DccObject { name: "wakeupSettingsGroup" parentName: "power/general" weight: 600 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "passwordIsRequiredToWakeUpTheComputer" parentName: "power/general/wakeupSettingsGroup" displayName: qsTr("Password is required to wake up the computer") weight: 1 visible: dccData.model.canSuspend && dccData.model.isSuspend && !dccData.model.isVirtualEnvironment pageType: DccObject.Editor page: D.Switch { checked: dccData.model.sleepLock onCheckedChanged: { dccData.worker.setSleepLock(checked) } } } DccObject { name: "passwordIsRequiredToWakeUpTheMonitor" parentName: "power/general/wakeupSettingsGroup" displayName: qsTr("Password is required to wake up the monitor") weight: 2 pageType: DccObject.Editor page: D.Switch { checked: dccData.model.screenBlackLock onCheckedChanged: { dccData.worker.setScreenBlackLock(checked) } } } } DccTitleObject { name: "shutdownSettingTitle" parentName: "power/general" displayName: qsTr("Shutdown Settings") weight: 700 visible: dccData.model.enableScheduledShutdown !== "Hidden" enabled: dccData.model.enableScheduledShutdown !== "Disabled" } DccObject { name: "shutdownGroup" parentName: "power/general" weight: 800 pageType: DccObject.Item visible: dccData.model.enableScheduledShutdown !== "Hidden" enabled: dccData.model.enableScheduledShutdown !== "Disabled" page: DccGroupView {} DccObject { name: "timedPoweroff" parentName: "power/general/shutdownGroup" displayName: qsTr("Scheduled Shutdown") weight: 1 pageType: DccObject.Editor page: D.Switch { checked: dccData.model.scheduledShutdownState onCheckedChanged: { if (dccData.model.scheduledShutdownState !== checked) { dccData.worker.setScheduledShutdownState(checked) Qt.callLater(function () { if (repeatDaysEditObject.visible) { DccApp.showPage(repeatDaysEditObject) } else { DccApp.showPage("repeatDays") } }) } } } } DccObject { name: "poweroffTime" parentName: "power/general/shutdownGroup" visible: dccData.model.scheduledShutdownState displayName: qsTr("Time") weight: 2 pageType: DccObject.Editor page: RowLayout { DccTimeRange { id: timeRange Layout.preferredWidth: 100 hour: dccData.model.shutdownTime.split(':')[0] minute: dccData.model.shutdownTime.split(':')[1] onTimeChanged: { dccData.worker.setShutdownTime(timeRange.timeString) } } } } DccObject { name: "repeatDays" parentName: "power/general/shutdownGroup" visible: dccData.model.scheduledShutdownState displayName: qsTr("Repeat") weight: 3 pageType: DccObject.Editor page: D.ComboBox { id: shutdownRepetitionCombobox model: [ qsTr("Once"), qsTr("Every day"), qsTr("Working days"), qsTr("Custom Time") ] flat: true currentIndex: dccData.model.shutdownRepetition onCurrentIndexChanged: { if (currentIndex === model.length - 1 && dccData.model.customShutdownWeekDays.length === 0) { selectDayDialogforCombobox.show() } else { if (currentIndex === dccData.model.shutdownRepetition) { return } dccData.worker.setShutdownRepetition(currentIndex) if (currentIndex === 3) { Qt.callLater(function () { DccApp.showPage(repeatDaysEditObject) }) } } } ScheduledShutdownDialog { id: selectDayDialogforCombobox onCancel: { // 通过Q_INVOKABLE方法触发信号更新,直接赋值currentIndex会导致属性绑定失效 dccData.model.refreshShutdownRepetition() } onAccept: { if (dccData.model.shutdownRepetition === 3) { return } dccData.worker.setShutdownRepetition(3) Qt.callLater(function () { DccApp.showPage(repeatDaysEditObject) }) } } } } DccObject { id: repeatDaysEditObject property bool forceShow: false name: "repeatDaysEdit" parentName: "power/general/shutdownGroup" visible: (dccData.model.scheduledShutdownState && dccData.model.shutdownRepetition === 3) weight: 4 pageType: DccObject.Item page: RowLayout { DccLabel { Layout.fillWidth: true Layout.preferredHeight: 40 Layout.leftMargin: 14 horizontalAlignment: Text.AlignRight verticalAlignment: Text.AlignVCenter text: { var str = "" var days = dccData.model.customShutdownWeekDays for (var i = 0; i < days.length; i++) { str += selectDayDialog.dateStr[days[i] - 1] + ", " } if (str.length > 1) { str = str.slice(0, -2) } return str; } } D.ToolButton { Layout.rightMargin: 8 icon.name: "action_edit" icon.width: 12 icon.height: 12 implicitWidth: 24 implicitHeight: 24 background: Rectangle { color: "transparent" border.color: "transparent" border.width: 0 } onClicked: { selectDayDialog.show() } ScheduledShutdownDialog { id: selectDayDialog } } } } } } ================================================ FILE: src/plugin-power/qml/Power.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { id: power name: "power" parentName: "root" displayName: qsTr("Power") description: qsTr("Power saving settings, screen and suspend") icon: "power" weight: 50 visible: false DccDBusInterface { property var onBattery service: "org.deepin.dde.Power1" path: "/org/deepin/dde/Power1" inter: "org.deepin.dde.Power1" connection: DccDBusInterface.SessionBus onOnBatteryChanged: power.visible = true } } ================================================ FILE: src/plugin-power/qml/PowerMain.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { DccObject { name: "general" parentName: "power" displayName: qsTr("General") description: qsTr("Power plans, power saving settings, wakeup settings, shutdown settings") icon: "general" weight: 10 page: DccRightView { spacing: 0 } GeneralPage {} } DccObject { name: "onPower" parentName: "power" displayName: qsTr("Plugged In") description: qsTr("Screen and suspend") icon: "plugged_in" weight: 100 visible: dccData.platformName() !== "wayland" page: DccRightView { spacing: 0 } PowerPage {} } DccObject { name: "onBattery" parentName: "power" displayName: qsTr("On Battery") description: qsTr("screen and suspend, low battery, battery management") icon: "on_battery" weight: 200 visible: dccData.model.haveBettary page: DccRightView { spacing: 0 } BatteryPage {} } } ================================================ FILE: src/plugin-power/qml/PowerPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { DccTitleObject { name: "screenAndSuspendTitle" parentName: "power/onPower" displayName: qsTr("Screen and Suspend") visible: dccData.platformName() !== "wayland" weight: 10 } DccObject { name: "turnOffTheMonitorAfterGroup" parentName: "power/onPower" weight: 100 pageType: DccObject.Item visible: dccData.platformName() !== "wayland" page: DccGroupView {} DccObject { name: "turnOffTheMonitorAfter" parentName: "power/onPower/turnOffTheMonitorAfterGroup" displayName: qsTr("Turn off the monitor after") weight: 1 pageType: DccObject.Item page: ColumnLayout { Layout.fillHeight: true RowLayout { Layout.leftMargin: 14 Layout.rightMargin: 10 Layout.topMargin: 10 Label { font: D.DTK.fontManager.t6 text: dccObj.displayName } Item { Layout.fillWidth: true } Label { text: offMonitorSlider.dataMap[offMonitorSlider.slider.value].trText horizontalAlignment: Text.AlignRight } } CustomTipsSlider { id: offMonitorSlider dataMap: dccData.model.linePowerScreenBlackDelayModel Layout.preferredHeight: 80 Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true slider.value: dccData.indexByValueOnMap(dataMap, dccData.model.screenBlackDelayOnPower) slider.onValueChanged: { dccData.worker.setScreenBlackDelayOnPower(dataMap[slider.value].value) } } } } } DccObject { name: "lockScreenAfterGroup" parentName: "power/onPower" weight: 200 pageType: DccObject.Item visible: dccData.platformName() !== "wayland" page: DccGroupView {} DccObject { name: "lockScreenAfter" parentName: "power/onPower/lockScreenAfterGroup" displayName: qsTr("Lock screen after") weight: 1 pageType: DccObject.Item page: ColumnLayout { Layout.fillHeight: true RowLayout { Layout.leftMargin: 14 Layout.rightMargin: 10 Layout.topMargin: 10 Label { font: D.DTK.fontManager.t6 text: dccObj.displayName } Item { Layout.fillWidth: true } Label { text: lockScreenSlider.dataMap[lockScreenSlider.slider.value].trText horizontalAlignment: Text.AlignRight } } CustomTipsSlider { id: lockScreenSlider dataMap: dccData.model.linePowerLockDelayModel Layout.preferredHeight: 80 Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true slider.value: dccData.indexByValueOnMap(dataMap, dccData.model.powerLockScreenDelay) slider.onValueChanged: { dccData.worker.setLockScreenDelayOnPower(dataMap[slider.value].value) } } } } } DccObject { name: "computerSuspendsAfterGroup" parentName: "power/onPower" weight: 300 pageType: DccObject.Item visible: dccData.platformName() !== "wayland" && !dccData.model.isVirtualEnvironment && dccData.model.canSuspend page: DccGroupView {} DccObject { name: "computerSuspendsAfter" parentName: "power/onPower/computerSuspendsAfterGroup" displayName: qsTr("Computer suspends after") weight: 1 pageType: DccObject.Item page: ColumnLayout { Layout.fillHeight: true RowLayout { Layout.leftMargin: 14 Layout.rightMargin: 10 Layout.topMargin: 10 Label { font: D.DTK.fontManager.t6 text: dccObj.displayName } Item { Layout.fillWidth: true } Label { text: suspendsSlider.dataMap[suspendsSlider.slider.value].trText horizontalAlignment: Text.AlignRight } } CustomTipsSlider { id: suspendsSlider dataMap: dccData.model.linePowerSleepDelayModel Layout.preferredHeight: 80 Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true slider.value: dccData.indexByValueOnMap(dataMap, dccData.model.sleepDelayOnPower) slider.onValueChanged: { dccData.worker.setSleepDelayOnPower(dataMap[slider.value].value) } } } } } DccObject { name: "powerButtonGroup" parentName: "power/onPower" weight: 400 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "whenTheLidIsClosed" parentName: "power/onPower/powerButtonGroup" displayName: qsTr("When the lid is closed") visible: dccData.model.lidPresent weight: 1 pageType: DccObject.Editor page: CustomComboBox { textRole: "text" enableRole: "enable" visibleRole: "visible" model: dccData.powerLidModel currentIndex: model.indexOfKey(dccData.model.linePowerLidClosedAction) onCurrentIndexChanged: { dccData.worker.setLinePowerLidClosedAction(model.keyOfIndex(currentIndex)) } } } DccObject { name: "whenThePowerButtonIsPressed" parentName: "power/onPower/powerButtonGroup" displayName: qsTr("When the power button is pressed") weight: 2 pageType: DccObject.Editor visible: dccData.platformName() !== "wayland" page: CustomComboBox { textRole: "text" enableRole: "enable" visibleRole: "visible" model: dccData.powerPressModel currentIndex: model.indexOfKey(dccData.model.linePowerPressPowerBtnAction) onCurrentIndexChanged: { dccData.worker.setLinePowerPressPowerBtnAction(model.keyOfIndex(currentIndex)) } } } } } ================================================ FILE: src/plugin-power/qml/PowerPlansListview.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 DccRepeater { id: repeater delegate: DccObject { visible: { if (modelData.mode === "performance") { return dccData.model.isHighPerformanceSupported } else if (modelData.mode === "balance_performance") { return dccData.model.isBalancePerformanceSupported } return true } name: "powerPlans" + index parentName: "powerPlans" pageType: DccObject.Editor weight: 10 + index icon: modelData.icon displayName: modelData.title description: modelData.description // pageType: DccObject.Item backgroundType: DccObject.ClickStyle page: DccCheckIcon { visible: modelData.mode === dccData.model.powerPlan } onActive: function (cmd) { if (cmd === "") { dccData.worker.setPowerPlan(modelData.mode) } } } model: [{ "mode": "performance", "title": qsTr("High Performance"), "icon": "high_performance", "description": qsTr("Prioritize performance, which will significantly increase power consumption and heat generation") }, { "mode": "balance_performance", "title": qsTr("Balance Performance"), "icon": "balance_performance", "description": qsTr("Aggressively adjust CPU operating frequency based on CPU load condition") }, { "mode": "balance", "title": qsTr("Balanced"), "icon": "balanced", "description": qsTr("Balancing performance and battery life, automatically adjusted according to usage") }, { "mode": "powersave", "title": qsTr("Power Saver"), "icon": "power_performance", "description": qsTr("Prioritize battery life, which the system will sacrifice some performance to reduce power consumption") }] } ================================================ FILE: src/plugin-power/qml/ScheduledShutdownDialog.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 D.DialogWindow { id: selectDayDialog modality: Qt.ApplicationModal width: 330 height: 420 signal cancel() signal accept() // Copy is used here to prevent contamination of data in the original model when selecting items property var selectedDays: [] property var dateStr: { var locale = Qt.locale(Qt.locale().name); var days = []; for (var i = 1; i <= 7; i++) { var dayEnum = Qt.Monday + (i - 1) % 7; days.push(locale.standaloneDayName(dayEnum, "long")); } return days; } // 当对话框显示时,重新同步最新的自定义重复时间数据 function syncSelectedDays() { selectedDays = dccData.model.customShutdownWeekDays.length === 0 ? [1, 2, 3, 4, 5] : dccData.model.customShutdownWeekDays.slice() } // 当对话框可见性改变时,同步数据 onVisibleChanged: { if (visible) { syncSelectedDays() } } property var dayModel: generateDayModel() function generateDayModel() { var array = [] let weekBegin = dccData.model.weekBegins if (weekBegin < 1 || weekBegin > 7) { // default is monday weekBegin = 1 } for (var i = dccData.model.weekBegins; i <= 7; i++) { array.push(i) } for (i = 1; i < dccData.model.weekBegins; i++) { array.push(i) } return array } // only accept close event , the app can quit normally onClosing: function(close) { close.accepted = true // 当用户点击关闭按钮或按ESC键关闭对话框时,触发取消事件 syncSelectedDays() // 重新同步数据 selectDayDialog.cancel() } ColumnLayout { implicitWidth: parent.width clip: true D.Label { Layout.alignment: Qt.AlignHCenter font: D.DTK.fontManager.t6 text: qsTr("Customize repetition time") } ListView { Layout.fillWidth: true height: contentHeight clip: true model: selectDayDialog.dayModel spacing: 2 delegate: D.ItemDelegate { width: ListView.view.width leftPadding: 10 rightPadding: 10 implicitHeight: 40 checkable: false corners: getCornersForBackground(index, 7) cascadeSelected: true text: selectDayDialog.dateStr[modelData - 1] onClicked: handleSelected(modelData) content: DccCheckIcon { checked: selectDayDialog.selectedDays.indexOf(modelData) !== -1 onClicked: handleSelected(modelData) } background: DccItemBackground { separatorVisible: true } function handleSelected(index) { if (selectDayDialog.selectedDays.indexOf(index) === -1) { selectDayDialog.selectedDays.push(index); } else { selectDayDialog.selectedDays.splice(selectDayDialog.selectedDays.indexOf(index), 1); } selectDayDialog.selectedDays = selectDayDialog.selectedDays.slice(); } } } RowLayout { Layout.fillHeight: true Layout.fillWidth: true Layout.alignment: Qt.AlignHCenter spacing: 10 D.Button { text: qsTr("Cancel") onClicked: { selectDayDialog.close() syncSelectedDays() // 重新同步数据 selectDayDialog.cancel() } } D.Button { text: qsTr("Save") enabled: selectDayDialog.selectedDays.length > 0 onClicked: { var days = selectDayDialog.selectedDays.sort() console.log("Selected days: " + days); dccData.worker.setCustomShutdownWeekDays(days) selectDayDialog.close() selectDayDialog.accept() } } } } } ================================================ FILE: src/plugin-power/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-privacy/CMakeLists.txt ================================================ set(LIB_NAME privacy) find_package(DDEShell REQUIRED) find_package(PolkitQt6-1 REQUIRED) file(GLOB_RECURSE Privacy_SRCS "operation/*.cpp" "operation/*.hpp" "operation/*.h" "operation/qrc/privacy.qrc" ) set(Privacy_Includes src/plugin-privacy/operation ) add_library(${LIB_NAME} MODULE ${Privacy_SRCS} ${DBUS_INTERFACES} ) set(Privacy_Libraries ${DCC_FRAME_Library} ${DTK_NS}::Gui ${QT_NS}::DBus ${QT_NS}::Qml ${QT_NS}::Concurrent Dde::Shell PolkitQt6-1::Agent ) target_include_directories(${LIB_NAME} PUBLIC ${Privacy_Includes} ) target_link_libraries(${LIB_NAME} PRIVATE ${Privacy_Libraries} ) dcc_install_plugin(NAME ${LIB_NAME} TARGET ${LIB_NAME}) ================================================ FILE: src/plugin-privacy/operation/applicationitem.cpp ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "applicationitem.h" #include DCORE_USE_NAMESPACE ApplicationItem::ApplicationItem(QObject *parent) : QObject(parent) , m_uniqueID(0) { connect(this, &ApplicationItem::objectNameChanged, this, &ApplicationItem::dataChanged); } ApplicationItem::~ApplicationItem() { } void ApplicationItem::setUniqueID(unsigned ID) { m_uniqueID = ID; } QString ApplicationItem::id() const { return m_id; } QMap ApplicationItem::execs() const { return m_execs; } QString ApplicationItem::name() const { return m_name; } QString ApplicationItem::appPath() const { return m_appPath; } QString ApplicationItem::package() const { return m_package; } QStringList ApplicationItem::executablePaths() const { return m_executablePaths; } QString ApplicationItem::icon() const { return m_iconStr; } QString ApplicationItem::sortField() const { return m_sortField; } QString ApplicationItem::desktopPath() const { return m_desktopPath; } // 默认允许 bool ApplicationItem::isPremissionEnabled(int premission) const { return m_premissionMap.value(premission, true); } void ApplicationItem::setPremissionEnabled(int premission, bool enabled) { // worker 实现 Q_EMIT requestSetPremissionEnabled(premission, enabled, this); } void ApplicationItem::emitDataChanged() { Q_EMIT dataChanged(); } void ApplicationItem::onIdChanged(const QString &id) { if (m_id == id) return; m_id = id; emitDataChanged(); } void ApplicationItem::onExecsChanged(const QMap &execs) { if (m_execs == execs) return; m_execs = execs; emitDataChanged(); } void ApplicationItem::onNameChanged(const QString &name) { if (m_name == name) return; m_name = name; // 不区分大小写,中文按拼音排序排后面 QString upperName = m_name.toUpper(); int category = 2; for (const QChar &ch : upperName) { if (ch.isSpace()) continue; if (ch.isDigit()) { category = 0; } else if (ch.isLetter() && ch.unicode() < 128) { category = 1; } else { category = 2; } break; } QString pinyin = DTK_CORE_NAMESPACE::Chinese2Pinyin(upperName); m_sortField = QString::number(category) + pinyin; emitDataChanged(); } void ApplicationItem::onAppPathChanged(const QString &path) { if (m_appPath == path) return; m_appPath = path; Q_EMIT appPathChanged(); } void ApplicationItem::onPackageChanged(const QString &package) { if (m_package == package) return; m_package = package; Q_EMIT packageChanged(); } void ApplicationItem::onExecutablePathsChanged(const QStringList &paths) { if (m_executablePaths == paths) return; m_executablePaths = paths; } void ApplicationItem::onIconChanged(const QString &icon) { m_iconStr = icon; emitDataChanged(); } bool ApplicationItem::onPremissionEnabledChanged(int premission, bool enabled) { if (m_premissionMap[premission] != enabled) { m_premissionMap[premission] = enabled; return true; } return false; } void ApplicationItem::onDesktopPathChanged(const QString &desktopPath) { if (m_desktopPath == desktopPath) return; m_desktopPath = desktopPath; } ================================================ FILE: src/plugin-privacy/operation/applicationitem.h ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef APPLICATIONITEM_H #define APPLICATIONITEM_H #include #include #include #include Q_DECLARE_LOGGING_CATEGORY(DCC_PRIVACY) class ApplicationItem; using ApplicationItemList = QList; using ApplicationItemListPtr = QList; class ApplicationItem : public QObject { Q_OBJECT public: enum PermissionType { CameraPermission = 0x100, // 摄像头 FoldersPermission = 0x200, // 文件和文件夹 DocumentFoldersPermission, PictureFoldersPermission, DesktopFoldersPermission, VideoFoldersPermission, MusicFoldersPermission, DownloadFoldersPermission, GroupPermissionMask = 0xff00, // 组权限掩码 }; Q_ENUM(PermissionType) explicit ApplicationItem(QObject *parent = nullptr); ~ApplicationItem(); inline unsigned getUniqueID() const { return m_uniqueID; } QString id() const; QMap execs() const; QString name() const; QString appPath() const; QString package() const; QString icon() const; QString sortField() const; QString desktopPath() const; bool isPremissionEnabled(int premission) const; void setPremissionEnabled(int premission, bool enabled); Q_SIGNALS: void dataChanged(); void appPathChanged(); void packageChanged(); void requestSetPremissionEnabled(int premission, bool enabled, ApplicationItem *item); protected Q_SLOTS: void emitDataChanged(); void setUniqueID(unsigned ID); void onIdChanged(const QString &id); void onExecsChanged(const QMap &execs); void onNameChanged(const QString &name); void onAppPathChanged(const QString &path); void onPackageChanged(const QString &package); void onExecutablePathsChanged(const QStringList &paths); void onIconChanged(const QString &icon); bool onPremissionEnabledChanged(int premission, bool enabled); void onDesktopPathChanged(const QString &desktopPath); QStringList executablePaths() const; private: unsigned m_uniqueID; QString m_id; // 应用id QMap m_execs; // 应用Desktop的所有Exec QString m_name; // 显示名 QString m_appPath; // app路径 QString m_package; // 包名 QStringList m_executablePaths; // 可执行程序路径 QString m_iconStr; // 图标名 QMap m_premissionMap; // 应用权限 QString m_sortField; // 用于排序 QString m_desktopPath; friend class PrivacySecurityWorker; friend class PrivacySecurityModel; }; #endif // APPLICATIONITEM_H ================================================ FILE: src/plugin-privacy/operation/dde-apps.h ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include "dsglobal.h" // from dde-shell->dde-apps DS_BEGIN_NAMESPACE class AppGroupManager { public: enum Roles { GroupIdRole = Qt::UserRole + 1, GroupItemsPerPageRole, ExtendRole = 0x1000, }; }; class AppItemModel { public: enum Roles { DesktopIdRole = AppGroupManager::ExtendRole, NameRole, IconNameRole, StartUpWMClassRole, NoDisplayRole, ActionsRole, DDECategoryRole, InstalledTimeRole, LastLaunchedTimeRole, LaunchedTimesRole, DockedRole, OnDesktopRole, AutoStartRole, AppTypeRole, XLingLongRole, IdRole, XCreatedByRole, ExecsRole, CategoriesRole, DesktopSourcePathRole, }; }; DS_END_NAMESPACE ================================================ FILE: src/plugin-privacy/operation/privacysecuritydataproxy.cpp ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "privacysecuritydataproxy.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #define DBUS_TIMEOUT 10000 const QString UsecService = "org.deepin.usec1"; const QString UsecPath = "/org/deepin/usec1/AccessControl"; const QString UsecInterface = "org.deepin.usec1.AccessControl"; PrivacySecurityDataProxy::PrivacySecurityDataProxy(QObject *parent) : QObject(parent) , m_serviceExists(false) { QDBusMessage message = QDBusMessage::createMethodCall("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "GetNameOwner"); message << UsecService; QDBusConnection::systemBus().callWithCallback(message, this, SLOT(onGetNameOwner(QString))); QDBusConnection::systemBus().connect("org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus", "NameOwnerChanged", this, SLOT(onDBusNameOwnerChanged(QString, QString, QString))); } PrivacySecurityDataProxy::~PrivacySecurityDataProxy() { } void PrivacySecurityDataProxy::getMode(const QString &object) { QDBusMessage message = QDBusMessage::createMethodCall(UsecService, UsecPath, UsecInterface, "GetMode"); message << object; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(message, DBUS_TIMEOUT), this); watcher->setProperty("DBusObject", object); connect(watcher, &QDBusPendingCallWatcher::finished, this, &PrivacySecurityDataProxy::onGetModeFinished); } void PrivacySecurityDataProxy::onGetModeFinished(QDBusPendingCallWatcher *w) { QString object = w->property("DBusObject").toString(); QDBusPendingReply reply = w->reply(); if (!reply.isError()) { Q_EMIT ModeChanged(reply.value(), "modify"); } else { qCWarning(DCC_PRIVACY) << "Get " << object << " mode failed, DBus reply error: " << reply.error(); } w->deleteLater(); } void PrivacySecurityDataProxy::setMode(const QString &config) { QDBusMessage message = QDBusMessage::createMethodCall(UsecService, UsecPath, UsecInterface, "SetMode"); message << config; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(message, DBUS_TIMEOUT), this); watcher->setProperty("DBusConfig", config); connect(watcher, &QDBusPendingCallWatcher::finished, this, &PrivacySecurityDataProxy::onSetModeFinished); } void PrivacySecurityDataProxy::onSetModeFinished(QDBusPendingCallWatcher *w) { QString config = w->property("DBusConfig").toString(); QDBusPendingReply<> reply = w->reply(); if (!reply.isError()) { Q_EMIT ModeChanged(config, "modify"); } else { qCWarning(DCC_PRIVACY) << "Set " << config << " mode failed, DBus reply error: " << reply.error(); } w->deleteLater(); } void PrivacySecurityDataProxy::listEntity() { QDBusMessage message = QDBusMessage::createMethodCall(UsecService, UsecPath, UsecInterface, "ListEntity"); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(message, DBUS_TIMEOUT), this); connect(watcher, &QDBusPendingCallWatcher::finished, this, &PrivacySecurityDataProxy::onListEntityFinished); } void PrivacySecurityDataProxy::onListEntityFinished(QDBusPendingCallWatcher *w) { QDBusPendingReply reply = w->reply(); if (!reply.isError()) { for (auto &&entity : reply.value()) { Q_EMIT EntityChanged(entity, "modify"); } } else { qCWarning(DCC_PRIVACY) << "Get entity list failed, DBus reply error: " << reply.error(); } w->deleteLater(); } void PrivacySecurityDataProxy::getEntity(const QString &entity) { QDBusMessage message = QDBusMessage::createMethodCall(UsecService, UsecPath, UsecInterface, "GetEntity"); message << entity; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(message, DBUS_TIMEOUT), this); watcher->setProperty("DBusEntity", entity); connect(watcher, &QDBusPendingCallWatcher::finished, this, &PrivacySecurityDataProxy::onGetEntityFinished); } void PrivacySecurityDataProxy::onGetEntityFinished(QDBusPendingCallWatcher *w) { QString entity = w->property("DBusEntity").toString(); QDBusPendingReply reply = w->reply(); if (!reply.isError()) { Q_EMIT EntityChanged(reply.value(), "modify"); } else { qCWarning(DCC_PRIVACY) << "Get" << entity << "entity failed, DBus reply error: " << reply.error(); } w->deleteLater(); } void PrivacySecurityDataProxy::setEntity(const QString &entity) { QDBusMessage message = QDBusMessage::createMethodCall(UsecService, UsecPath, UsecInterface, "SetEntity"); message << entity; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(message, DBUS_TIMEOUT), this); watcher->setProperty("DBusEntity", entity); connect(watcher, &QDBusPendingCallWatcher::finished, this, &PrivacySecurityDataProxy::onSetEntityFinished); } void PrivacySecurityDataProxy::onSetEntityFinished(QDBusPendingCallWatcher *w) { QString entity = w->property("DBusEntity").toString(); QDBusPendingReply<> reply = w->reply(); if (!reply.isError()) { Q_EMIT EntityChanged(entity, "modify"); } else { qCWarning(DCC_PRIVACY) << "Set" << entity << "entity failed, DBus reply error: " << reply.error(); } w->deleteLater(); } void PrivacySecurityDataProxy::getPolicy(const QString &entity) { QDBusMessage message = QDBusMessage::createMethodCall(UsecService, UsecPath, UsecInterface, "GetPolicy"); message << entity; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(message, DBUS_TIMEOUT), this); watcher->setProperty("DBusEntity", entity); connect(watcher, &QDBusPendingCallWatcher::finished, this, &PrivacySecurityDataProxy::onGetPolicyFinished); } void PrivacySecurityDataProxy::onGetPolicyFinished(QDBusPendingCallWatcher *w) { QString entity = w->property("DBusEntity").toString(); QDBusPendingReply reply = w->reply(); if (!reply.isError()) { Q_EMIT PolicyChanged(reply.value(), "modify"); } else { qCWarning(DCC_PRIVACY) << "Get" << entity << "policy failed, DBus reply error: " << reply.error(); } w->deleteLater(); } void PrivacySecurityDataProxy::setPolicy(const QString &policy) { QDBusMessage message = QDBusMessage::createMethodCall(UsecService, UsecPath, UsecInterface, "SetPolicy"); message << policy; QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(QDBusConnection::systemBus().asyncCall(message, DBUS_TIMEOUT), this); watcher->setProperty("DBusPolicy", policy); connect(watcher, &QDBusPendingCallWatcher::finished, this, &PrivacySecurityDataProxy::onSetPolicyFinished); } void PrivacySecurityDataProxy::onSetPolicyFinished(QDBusPendingCallWatcher *w) { QString policy = w->property("DBusPolicy").toString(); QDBusPendingReply<> reply = w->reply(); if (!reply.isError()) { Q_EMIT PolicyChanged(policy, "modify"); } else { qCWarning(DCC_PRIVACY) << "Set" << policy << "policy failed, DBus reply error: " << reply.error(); } w->deleteLater(); } void PrivacySecurityDataProxy::init() { QDBusConnection::systemBus().connect(UsecService, UsecPath, UsecInterface, "PolicyChanged", this, SIGNAL(PolicyChanged(QString, QString))); QDBusConnection::systemBus().connect(UsecService, UsecPath, UsecInterface, "EntityChanged", this, SIGNAL(EntityChanged(QString, QString))); QDBusConnection::systemBus().connect(UsecService, UsecPath, UsecInterface, "ModeChanged", this, SIGNAL(ModeChanged(QString, QString))); } bool PrivacySecurityDataProxy::existsService() const { return m_serviceExists; } void PrivacySecurityDataProxy::onGetNameOwner(const QString &) { updateServiceExists(true); } void PrivacySecurityDataProxy::onDBusNameOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner) { if (UsecService == name) { if (newOwner.isEmpty()) { // remove updateServiceExists(false); } else if (oldOwner.isEmpty()) { // add updateServiceExists(true); } } } void PrivacySecurityDataProxy::updateServiceExists(bool serviceExists) { if (serviceExists != m_serviceExists) { m_serviceExists = serviceExists; Q_EMIT serviceExistsChanged(m_serviceExists); } } ================================================ FILE: src/plugin-privacy/operation/privacysecuritydataproxy.h ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef PRIVACYSECURITYDATAPROXY_H #define PRIVACYSECURITYDATAPROXY_H #include #include Q_DECLARE_LOGGING_CATEGORY(DCC_PRIVACY) namespace Dtk { namespace Core { } // namespace Core } // namespace Dtk class QDBusPendingCallWatcher; class QFileSystemWatcher; class PrivacySecurityDataProxy : public QObject { Q_OBJECT public: explicit PrivacySecurityDataProxy(QObject *parent = nullptr); ~PrivacySecurityDataProxy(); enum Mode { AllDisabled = 0, AllEnable = 1, ByCustom = 2, }; Q_SIGNALS: void serviceExistsChanged(bool exists); void PolicyChanged(const QString &policy, const QString &type); void EntityChanged(const QString &entity, const QString &type); void ModeChanged(const QString &mode, const QString &type); public Q_SLOTS: void getMode(const QString &object); void setMode(const QString &config); void listEntity(); void getEntity(const QString &entity); void setEntity(const QString &entity); void getPolicy(const QString &entity); void setPolicy(const QString &policy); public Q_SLOTS: void init(); // FileArmor bool existsService() const; private Q_SLOTS: void onGetNameOwner(const QString &); void onDBusNameOwnerChanged(const QString &name, const QString &oldOwner, const QString &newOwner); void updateServiceExists(bool serviceExists); void onGetModeFinished(QDBusPendingCallWatcher *w); void onSetModeFinished(QDBusPendingCallWatcher *w); void onListEntityFinished(QDBusPendingCallWatcher *w); void onGetEntityFinished(QDBusPendingCallWatcher *w); void onSetEntityFinished(QDBusPendingCallWatcher *w); void onGetPolicyFinished(QDBusPendingCallWatcher *w); void onSetPolicyFinished(QDBusPendingCallWatcher *w); private: bool m_serviceExists; }; #endif // PRIVACYSECURITYDATAPROXY_H ================================================ FILE: src/plugin-privacy/operation/privacysecurityexport.cpp ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "privacysecurityexport.h" #include "dccfactory.h" #include "applicationitem.h" #include "privacysecuritymodel.h" #include "privacysecurityworker.h" #include #include Q_LOGGING_CATEGORY(DCC_PRIVACY, "dde.dcc.privacy") PrivacySecurityExport::PrivacySecurityExport(QObject *parent) : QObject(parent) , m_privacyModel(new PrivacySecurityModel(this)) , m_woker(new PrivacySecurityWorker(m_privacyModel, this)) { m_appsModel = m_privacyModel->appModel(); qmlRegisterType("org.deepin.dcc.privacy", 1, 0, "ApplicationItem"); } DCC_FACTORY_CLASS(PrivacySecurityExport) #include "privacysecurityexport.moc" ================================================ FILE: src/plugin-privacy/operation/privacysecurityexport.h ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "privacysecuritymodel.h" #include "operation/privacysecurityworker.h" class PrivacySecurityExport : public QObject { Q_OBJECT Q_PROPERTY(AppsModel *appsModel MEMBER m_appsModel CONSTANT) Q_PROPERTY(PrivacySecurityWorker *worker MEMBER m_woker CONSTANT) public: explicit PrivacySecurityExport(QObject *parent = nullptr); private: AppsModel *m_appsModel = nullptr; PrivacySecurityModel *m_privacyModel = nullptr; PrivacySecurityWorker *m_woker = nullptr; }; ================================================ FILE: src/plugin-privacy/operation/privacysecuritymodel.cpp ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "privacysecuritymodel.h" #include "applicationitem.h" #include "privacysecuritydataproxy.h" #include #include AppsModel::AppsModel(QObject *parent) : QAbstractListModel(parent) { } QVariant AppsModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); switch (role) { case NameRole: { return m_appItems.at(index.row())->name(); } case IconNameRole: { QString icon = m_appItems.at(index.row())->icon(); return icon.startsWith("/") ? QUrl::fromLocalFile(icon).toString() : icon; } case CameraRole: { return m_appItems.at(index.row())->isPremissionEnabled(ApplicationItem::CameraPermission); } case DocumentRole: { return m_appItems.at(index.row())->isPremissionEnabled(ApplicationItem::DocumentFoldersPermission); } case PictureRole: { return m_appItems.at(index.row())->isPremissionEnabled(ApplicationItem::PictureFoldersPermission); } case DesktopRole: { return m_appItems.at(index.row())->isPremissionEnabled(ApplicationItem::DesktopFoldersPermission); } case VideoRole: { return m_appItems.at(index.row())->isPremissionEnabled(ApplicationItem::VideoFoldersPermission); } case MusicRole: { return m_appItems.at(index.row())->isPremissionEnabled(ApplicationItem::MusicFoldersPermission); } case DownloadRole: { return m_appItems.at(index.row())->isPremissionEnabled(ApplicationItem::DownloadFoldersPermission); } } return QVariant(); } QVariant AppsModel::data(const QModelIndex &index, const QString propertyName) const { const auto roleNames = this->roleNames(); for (auto it = roleNames.cbegin(); it != roleNames.cend(); ++it) { if (propertyName == it.value()) { return data(index, it.key()); } } return QVariant(); } int AppsModel::rowCount(const QModelIndex &) const { return m_appItems.size(); } QHash AppsModel::roleNames() const { QHash roleNames; roleNames[NameRole] = "name"; roleNames[IconNameRole] = "iconName"; roleNames[CameraRole] = "cameraPermission"; roleNames[DocumentRole] = "documentPermission"; roleNames[PictureRole] = "picturePermission"; roleNames[DesktopRole] = "desktopPermission"; roleNames[VideoRole] = "videoPermission"; roleNames[MusicRole] = "musicPermission"; roleNames[DownloadRole] = "downloadPermission"; return roleNames; } void AppsModel::reset(ApplicationItemListPtr appList) { beginResetModel(); m_appItems = appList; endResetModel(); } void AppsModel::appendItem(ApplicationItem *appItem) { int insertPos = m_appItems.size(); for (int i = 0; i < m_appItems.size(); ++i) { if (appItem->sortField() < m_appItems.at(i)->sortField()) { insertPos = i; break; } } beginInsertRows(QModelIndex(), insertPos, insertPos); m_appItems.insert(insertPos, appItem); endInsertRows(); } void AppsModel::removeItem(ApplicationItem *appItem) { for (int index = 0; index < m_appItems.size(); index++) { if (m_appItems.at(index) == appItem) { beginRemoveRows(QModelIndex(), index, index); m_appItems.removeAt(index); endRemoveRows(); return; } } } PrivacySecurityModel::PrivacySecurityModel(QObject *parent) : QObject(parent) , m_appModel(new AppsModel(this)) , m_uniqueID(1) , m_updating(true) { } PrivacySecurityModel::~PrivacySecurityModel() { } bool PrivacySecurityModel::isPremissionEnabled(int premission) const { switch (premission) { case ApplicationItem::FoldersPermission: return isPremissionEnabled(ApplicationItem::DocumentFoldersPermission) && isPremissionEnabled(ApplicationItem::PictureFoldersPermission) && isPremissionEnabled(ApplicationItem::DesktopFoldersPermission) && isPremissionEnabled(ApplicationItem::VideoFoldersPermission) && isPremissionEnabled(ApplicationItem::MusicFoldersPermission) && isPremissionEnabled(ApplicationItem::DownloadFoldersPermission); default: return m_premissionMap.value(premission, PrivacySecurityDataProxy::AllEnable) != PrivacySecurityDataProxy::AllDisabled; } } void PrivacySecurityModel::setPremissionEnabled(int premission, bool enabled) { // worker 实现 if (enabled) { if (!m_appModel->appList().isEmpty()) { auto &&item = m_appModel->appList().first(); qCInfo(DCC_PRIVACY) << "Set premission enabled: true, item: " << item << ", premission: " << premission; // 触发设置信号 switch (premission) { case ApplicationItem::CameraPermission: item->setPremissionEnabled(ApplicationItem::CameraPermission, item->isPremissionEnabled(ApplicationItem::CameraPermission)); break; case ApplicationItem::FoldersPermission: item->setPremissionEnabled(ApplicationItem::DocumentFoldersPermission, item->isPremissionEnabled(ApplicationItem::DocumentFoldersPermission)); item->setPremissionEnabled(ApplicationItem::PictureFoldersPermission, item->isPremissionEnabled(ApplicationItem::PictureFoldersPermission)); item->setPremissionEnabled(ApplicationItem::DesktopFoldersPermission, item->isPremissionEnabled(ApplicationItem::DesktopFoldersPermission)); item->setPremissionEnabled(ApplicationItem::VideoFoldersPermission, item->isPremissionEnabled(ApplicationItem::VideoFoldersPermission)); item->setPremissionEnabled(ApplicationItem::MusicFoldersPermission, item->isPremissionEnabled(ApplicationItem::MusicFoldersPermission)); item->setPremissionEnabled(ApplicationItem::DownloadFoldersPermission, item->isPremissionEnabled(ApplicationItem::DownloadFoldersPermission)); break; } } } else { Q_EMIT requestSetPremissionMode(premission, PrivacySecurityDataProxy::AllDisabled); } } bool PrivacySecurityModel::addApplictionItem(ApplicationItem *item) { m_appModel->appendItem(item); return true; } void PrivacySecurityModel::removeApplictionItem(const QString &id) { const auto list = m_appModel->appList(); auto it = std::find_if(list.cbegin(), list.cend(), [id](ApplicationItem *appItem) { return appItem->id() == id; }); if (it != list.end()) { Q_EMIT itemAboutToBeRemoved(it - list.begin()); m_appModel->removeItem(*it); delete *it; Q_EMIT itemRemoved(); } } void PrivacySecurityModel::dataUpdateFinished(bool updating) { m_updating = updating; if (m_updating) { Q_EMIT itemDataUpdate(m_updating); blockSignals(m_updating); } else { blockSignals(m_updating); Q_EMIT itemDataUpdate(m_updating); } } ApplicationItem *PrivacySecurityModel::applictionItem(unsigned uniqueID) { auto it = std::find_if(m_appModel->appList().begin(), m_appModel->appList().end(), [uniqueID](ApplicationItem *item) { return item->getUniqueID() == uniqueID; }); return it == m_appModel->appList().end() ? nullptr : *it; } int PrivacySecurityModel::getAppIndex(unsigned uniqueID) const { auto it = std::find_if(m_appModel->appList().begin(), m_appModel->appList().end(), [uniqueID](ApplicationItem *item) { return item->getUniqueID() == uniqueID; }); return it == m_appModel->appList().end() ? -1 : it - m_appModel->appList().begin(); } void PrivacySecurityModel::updatePermission() { for (int i = 0; i < m_appModel->appList().count(); ++i) { if (updatePermission(m_appModel->appList()[i])) { Q_EMIT appModel()->dataChanged(m_appModel->index(i), m_appModel->index(i)); } } } bool PrivacySecurityModel::updatePermission(ApplicationItem *item) { bool sucUpdate = false; if (!item->package().isEmpty()) { sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::DocumentFoldersPermission, !m_blacklistByPackage[premissiontoPath(ApplicationItem::DocumentFoldersPermission)].contains(item->package())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::PictureFoldersPermission, !m_blacklistByPackage[premissiontoPath(ApplicationItem::PictureFoldersPermission)].contains(item->package())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::DesktopFoldersPermission, !m_blacklistByPackage[premissiontoPath(ApplicationItem::DesktopFoldersPermission)].contains(item->package())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::VideoFoldersPermission, !m_blacklistByPackage[premissiontoPath(ApplicationItem::VideoFoldersPermission)].contains(item->package())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::MusicFoldersPermission, !m_blacklistByPackage[premissiontoPath(ApplicationItem::MusicFoldersPermission)].contains(item->package())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::DownloadFoldersPermission, !m_blacklistByPackage[premissiontoPath(ApplicationItem::DownloadFoldersPermission)].contains(item->package())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::CameraPermission, !m_blacklistByPackage[premissiontoPath(ApplicationItem::CameraPermission)].contains(item->package())); } else { // 若一个启动器没有包名,则认为它的权限由其appPath决定 sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::DocumentFoldersPermission, !m_blacklist[premissiontoPath(ApplicationItem::DocumentFoldersPermission)].contains(item->appPath())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::PictureFoldersPermission, !m_blacklist[premissiontoPath(ApplicationItem::PictureFoldersPermission)].contains(item->appPath())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::DesktopFoldersPermission, !m_blacklist[premissiontoPath(ApplicationItem::DesktopFoldersPermission)].contains(item->appPath())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::VideoFoldersPermission, !m_blacklist[premissiontoPath(ApplicationItem::VideoFoldersPermission)].contains(item->appPath())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::MusicFoldersPermission, !m_blacklist[premissiontoPath(ApplicationItem::MusicFoldersPermission)].contains(item->appPath())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::DownloadFoldersPermission, !m_blacklist[premissiontoPath(ApplicationItem::DownloadFoldersPermission)].contains(item->appPath())); sucUpdate |= item->onPremissionEnabledChanged(ApplicationItem::CameraPermission, !m_blacklist[premissiontoPath(ApplicationItem::CameraPermission)].contains(item->appPath())); } return sucUpdate; } const QString PrivacySecurityModel::premissiontoPath(int premission) const { switch (premission) { case ApplicationItem::CameraPermission: return "camera"; case ApplicationItem::DocumentFoldersPermission: return QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation); case ApplicationItem::PictureFoldersPermission: return QStandardPaths::writableLocation(QStandardPaths::PicturesLocation); case ApplicationItem::DesktopFoldersPermission: return QStandardPaths::writableLocation(QStandardPaths::DesktopLocation); case ApplicationItem::VideoFoldersPermission: return QStandardPaths::writableLocation(QStandardPaths::MoviesLocation); case ApplicationItem::MusicFoldersPermission: return QStandardPaths::writableLocation(QStandardPaths::MusicLocation); case ApplicationItem::DownloadFoldersPermission: return QStandardPaths::writableLocation(QStandardPaths::DownloadLocation); } return QString(); } int PrivacySecurityModel::pathtoPremission(const QString &path, bool mainPremission) const { if (path == "camera") { return ApplicationItem::CameraPermission; } else if (path == QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)) { return mainPremission ? ApplicationItem::FoldersPermission : ApplicationItem::DocumentFoldersPermission; } else if (path == QStandardPaths::writableLocation(QStandardPaths::PicturesLocation)) { return mainPremission ? ApplicationItem::FoldersPermission : ApplicationItem::PictureFoldersPermission; } else if (path == QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)) { return mainPremission ? ApplicationItem::FoldersPermission : ApplicationItem::DesktopFoldersPermission; } else if (path == QStandardPaths::writableLocation(QStandardPaths::MoviesLocation)) { return mainPremission ? ApplicationItem::FoldersPermission : ApplicationItem::VideoFoldersPermission; } else if (path == QStandardPaths::writableLocation(QStandardPaths::MusicLocation)) { return mainPremission ? ApplicationItem::FoldersPermission : ApplicationItem::MusicFoldersPermission; } else if (path == QStandardPaths::writableLocation(QStandardPaths::DownloadLocation)) { return mainPremission ? ApplicationItem::FoldersPermission : ApplicationItem::DownloadFoldersPermission; } return 0; } void PrivacySecurityModel::emitAppDataChanged(ApplicationItem *item) { for (int i = 0; i < m_appModel->appList().count(); ++i) { if (m_appModel->appList()[i] == item) { Q_EMIT appModel()->dataChanged(m_appModel->index(i), m_appModel->index(i)); return; } } } void PrivacySecurityModel::onPremissionModeChanged(int premission, int mode) { int groupPremisson = premission & ApplicationItem::GroupPermissionMask; m_premissionMap[groupPremisson] = mode; emitPremissionModeChanged(groupPremisson); } void PrivacySecurityModel::emitPremissionModeChanged(int premission) { int groupPremisson = premission & ApplicationItem::GroupPermissionMask; Q_EMIT premissionEnabledChanged(groupPremisson, isPremissionEnabled(groupPremisson)); } void PrivacySecurityModel::onAppPremissionEnabledChanged(const QString &file, const QSet &apps) { if (isPremissionEnabled(pathtoPremission(file, true))) { m_blacklist[file] = apps; } updatePermission(); } void PrivacySecurityModel::onItemPermissionChanged() { ApplicationItem *item = qobject_cast(sender()); if (item) updatePermission(item); } void PrivacySecurityModel::onItemDataChanged() { ApplicationItem *item = qobject_cast(sender()); Q_EMIT itemDataChanged(item); } unsigned PrivacySecurityModel::createUniqueID() { return m_uniqueID++; } void PrivacySecurityModel::setBlackListByPackage(QMap> blacklistByPackage) { m_blacklistByPackage = blacklistByPackage; updatePermission(); } ================================================ FILE: src/plugin-privacy/operation/privacysecuritymodel.h ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include "applicationitem.h" class AppsModel : public QAbstractListModel { Q_OBJECT enum AppPrivacyRole { NameRole = Qt::UserRole + 1, IconNameRole, CameraRole, DocumentRole, PictureRole, DesktopRole, VideoRole, MusicRole, DownloadRole, }; public: explicit AppsModel(QObject *parent = nullptr); QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant data(const QModelIndex &index, const QString propertyName = QString()) const; int rowCount(const QModelIndex &parent = QModelIndex()) const override; ApplicationItemListPtr appList() const { return m_appItems; }; void reset(ApplicationItemListPtr appList); void appendItem(ApplicationItem *item); void removeItem(ApplicationItem *item); protected: QHash roleNames() const override; private: ApplicationItemListPtr m_appItems; }; class PrivacySecurityModel : public QObject { Q_OBJECT Q_PROPERTY(AppsModel *appModel MEMBER m_appModel CONSTANT) public: explicit PrivacySecurityModel(QObject *parent = nullptr); ~PrivacySecurityModel(); AppsModel *appModel() { return m_appModel; } bool isPremissionEnabled(int premission) const; void setPremissionEnabled(int premission, bool enabled); ApplicationItem *applictionItem(unsigned uniqueID); int getAppIndex(unsigned uniqueID) const; void updatePermission(); bool updatePermission(ApplicationItem *item); const QSet blacklist(const QString &file) const; const QString premissiontoPath(int premission) const; int pathtoPremission(const QString &path, bool mainPremission) const; // 数据更新中,界面应禁用 inline bool updating() const { return m_updating; } inline unsigned lastUniqueID() const { return m_uniqueID; } void setBlackListByPackage(QMap>); Q_SIGNALS: void serviceExistsChanged(bool exists); void checkAuthorization(bool checking); void premissionEnabledChanged(int premission, bool enabled); void requestSetPremissionMode(int premission, int mode); void itemAboutToBeAdded(int pos); void itemAdded(); void itemAboutToBeRemoved(int pos); void itemRemoved(); void itemDataChanged(ApplicationItem *appItem); void itemDataUpdate(bool updating); public Q_SLOTS: void emitAppDataChanged(ApplicationItem *item); protected Q_SLOTS: void onPremissionModeChanged(int premission, int mode); void emitPremissionModeChanged(int premission); void onItemPermissionChanged(); void onItemDataChanged(); void onAppPremissionEnabledChanged(const QString &file, const QSet &apps); bool addApplictionItem(ApplicationItem *item); void removeApplictionItem(const QString &id); void dataUpdateFinished(bool updating); private: unsigned createUniqueID(); private: AppsModel *m_appModel = nullptr; unsigned m_uniqueID; // ApplicationItem的唯一ID,从1开始,只处理m_appItems中的项 QMap m_premissionMap; // 权限总开关 QMap> m_blacklist; // 权限列表 QMap> m_blacklistByPackage; // 黑名单 <权限,包名列表> bool m_updating; // 数据更新中 friend class PrivacySecurityWorker; }; ================================================ FILE: src/plugin-privacy/operation/privacysecurityworker.cpp ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "privacysecurityworker.h" #include "privacysecuritydataproxy.h" #include "applicationitem.h" #include "dde-apps.h" #include #include #include #include #include #include #include #include "QCoreApplication" #include #include "applet.h" #include #include "pluginloader.h" #include "containment.h" #include #include #include Q_DECLARE_LOGGING_CATEGORY(DCC_PRIVACY) static const QString DESKTOP_ENTRY_ICON_KEY = "Desktop Entry"; static const QString DEEPIN_WINE_TEAM = "Deepin WINE Team"; const QString DataVersion = "1.0"; static QList s_systemPrem = { ApplicationItem::CameraPermission }; static QString getDpkgArch() { const static QString arch = []() { QString arch = QSysInfo::currentCpuArchitecture(); QProcess pro; pro.start("/usr/bin/dpkg", QStringList() << "--print-architecture"); pro.waitForFinished(2000); if (pro.exitCode() != 0) { qCWarning(DCC_PRIVACY) << "Failed to get dpkg architecture, dpkg error: " << pro.readAllStandardError().simplified() << ", fallback to QSysInfo architecture:" << arch; return arch; } QString output = pro.readAllStandardOutput().simplified(); if (output.isEmpty()) { qCWarning(DCC_PRIVACY) << "No architecture found for dpkg, fallback to QSysInfo architecture:" << arch; return arch; } return output; }(); return arch; } PrivacySecurityWorker::PrivacySecurityWorker(PrivacySecurityModel *appsModel, QObject *parent) : QObject(parent) , m_model(appsModel) , m_dataProxy(new PrivacySecurityDataProxy(this)) { m_dpkgThreadPool = new QThreadPool(this); m_dpkgThreadPool->setMaxThreadCount(1); connect(m_dataProxy, &PrivacySecurityDataProxy::serviceExistsChanged, this, &PrivacySecurityWorker::serviceExistsChanged); init(); } PrivacySecurityWorker::~PrivacySecurityWorker() { m_dpkgThreadPool->waitForDone(); if (!m_pathList.isEmpty()) return; m_dataProxy->init(); } void PrivacySecurityWorker::init() { if (!m_pathList.isEmpty()) return; m_dataProxy->init(); // TODO:由于控制中心通过子线程加载插件后,会移动插件的加载线程->主线程, // 并删除原有线程->未指定父的对象所处的线程会被删除,所以使用qApp->主线程调用initApp QMetaObject::invokeMethod(qApp, [this]() { initApp(); }, Qt::BlockingQueuedConnection); connect(m_dataProxy, &PrivacySecurityDataProxy::ModeChanged, this, &PrivacySecurityWorker::onModeChanged, Qt::QueuedConnection); connect(m_dataProxy, &PrivacySecurityDataProxy::EntityChanged, this, &PrivacySecurityWorker::onEntityChanged, Qt::QueuedConnection); connect(m_dataProxy, &PrivacySecurityDataProxy::PolicyChanged, this, &PrivacySecurityWorker::onPolicyChanged, Qt::QueuedConnection); QString envPath = QProcessEnvironment::systemEnvironment().value("PATH"); m_pathList = envPath.split(':'); m_dataProxy->listEntity(); QStringList folders = { "camera", m_model->premissiontoPath(ApplicationItem::DocumentFoldersPermission), m_model->premissiontoPath(ApplicationItem::PictureFoldersPermission), m_model->premissiontoPath(ApplicationItem::DesktopFoldersPermission), m_model->premissiontoPath(ApplicationItem::VideoFoldersPermission), m_model->premissiontoPath(ApplicationItem::MusicFoldersPermission), m_model->premissiontoPath(ApplicationItem::DownloadFoldersPermission) }; for (const auto &folder : folders) { m_dataProxy->getMode(folder); m_dataProxy->getPolicy(folder); } } void PrivacySecurityWorker::initApp() { auto rootApplet = qobject_cast(DS_NAMESPACE::DPluginLoader::instance()->rootApplet()); auto applet = rootApplet->createApplet(DS_NAMESPACE::DAppletData{"org.deepin.ds.dde-apps"}); applet->load(); applet->init(); DS_NAMESPACE::DAppletBridge bridge("org.deepin.ds.dde-apps"); DS_NAMESPACE::DAppletProxy * amAppsProxy = bridge.applet(); if (amAppsProxy) { QAbstractItemModel * model = amAppsProxy->property("appModel").value(); m_ddeAmModel = model; connect(model, &QAbstractItemModel::rowsInserted, this, [this](const QModelIndex &parent, int first, int last) { Q_UNUSED(parent) for (int i = first; i <= last; i++) { addAppItem(i); } }); connect(model, &QAbstractItemModel::rowsAboutToBeRemoved, this, [this](const QModelIndex &parent, int first, int last) { Q_UNUSED(parent) for (int i = last; i >= first; i--) { QString appId = m_ddeAmModel->data(m_ddeAmModel->index(i, 0), DS_NAMESPACE::AppItemModel::IdRole).toString(); if (!appId.isEmpty()) { m_model->removeApplictionItem(appId); } } }, Qt::DirectConnection); } } void PrivacySecurityWorker::setPremissionEnabled(int appItemIndex, int premission, bool enabled) { auto item = m_model->appModel()->appList().value(appItemIndex); item->setPremissionEnabled(premission, enabled); } QString PrivacySecurityWorker::getAppPath(const QMap &execs) { static QStringList s_excludeBin = { "gio", "dbus-send", "python", "KboxAppLauncher", "/usr/bin/uengine-launch.sh" }; QString appPath; for (auto it = execs.begin(); it != execs.end(); ++it) { if (it.key() != DESKTOP_ENTRY_ICON_KEY) { continue; } QString exec = it.value(); if (s_excludeBin.contains(exec)) { continue; } QRegularExpression regex(R"(^\s*("|')([^"]+)\1|^(\S+))"); QRegularExpressionMatch match = regex.match(exec); QString cleanedString; if (match.hasMatch()) { if (match.captured(2).isEmpty()) { cleanedString = match.captured(3); // 没有引号的命令 } else { cleanedString = match.captured(2); // 引号包裹的命令 } } if (QFile::exists(cleanedString)) { appPath = cleanedString; break; } else { for (const auto &binDir : m_pathList) { QDir bin(binDir); if (bin.exists(cleanedString)) { appPath = bin.absolutePath() + "/" + cleanedString; break; } } } } if (!appPath.isEmpty()) { while (true) { QFileInfo info(appPath); if (info.isSymLink()) { appPath = info.symLinkTarget(); } else if (!info.exists()) { appPath.clear(); break; } else { break; } } } return appPath; } void PrivacySecurityWorker::updateCheckAuthorizationing(bool checking) { if (m_checkAuthorizationing != checking) { m_checkAuthorizationing = checking; if (m_checkAuthorizationing) { QTimer::singleShot(100, this, [this]() { if (m_checkAuthorizationing) { Q_EMIT checkAuthorization(m_checkAuthorizationing); } }); } else { Q_EMIT checkAuthorization(m_checkAuthorizationing); } } } // 刷新所有状态 void PrivacySecurityWorker::updateAllPermission() { m_model->setBlackListByPackage(m_blacklistByPackage); for (auto &&it = m_blacklistByPackage.begin(); it != m_blacklistByPackage.end(); ++it) { QSet files; for (const auto &package : it.value()) { for (const auto &file : m_entityMap.value(package)) { files.insert(file); } } m_model->onAppPremissionEnabledChanged(it.key(), files); } } QString PrivacySecurityWorker::getEntityJson(const QString &name, bool isFile) { QJsonObject obj; QJsonObject attrs; attrs.insert("bus_type", QString()); // 此处空项没有接口调用会报错 attrs.insert("exes", QJsonArray()); attrs.insert("interface", QString()); attrs.insert("methods", QJsonArray()); attrs.insert("object_path", QString()); attrs.insert("service_name", QString()); obj.insert("attrs", attrs); obj.insert("description", QString()); obj.insert("description_zh_CN", QString()); obj.insert("level", QString()); obj.insert("owner", QString()); obj.insert("sensitivity", QString()); QJsonArray available_operations; available_operations.append("allow"); available_operations.append("deny"); obj.insert("name", name); obj.insert("available_operations", available_operations); obj.insert("subtype", isFile ? "file" : ""); obj.insert("version", DataVersion); QJsonArray tags; tags.append("system"); obj.insert("tags", tags); obj.insert("type", "object"); QJsonDocument doc(obj); return doc.toJson(QJsonDocument::Compact); } QString PrivacySecurityWorker::getAppEntityJson(const ApplicationItem *item) { QJsonObject obj; QJsonObject attrs; bool isPackage = !item->package().isEmpty(); attrs.insert("bus_type", QString()); // 此处空项没有接口调用会报错 attrs.insert("interface", QString()); attrs.insert("methods", QJsonArray()); attrs.insert("object_path", QString()); attrs.insert("service_name", QString()); obj.insert("description", item->name()); // obj.insert("description_zh_CN", item->name()); // obj.insert("level", QString()); obj.insert("owner", QString()); obj.insert("sensitivity", QString()); if (isPackage) { QJsonArray exes = QJsonArray::fromStringList(item->executablePaths()); attrs.insert("exes", exes); } else { QJsonArray exes = QJsonArray::fromStringList({item->appPath()}); attrs.insert("exes", exes); } obj.insert("attrs", attrs); obj.insert("name", isPackage ? item->package() : item->appPath()); QJsonArray available_operations; obj.insert("available_operations", available_operations); obj.insert("subtype", isPackage ? "package" : "file"); obj.insert("version", DataVersion); QJsonArray tags; tags.append("system"); obj.insert("tags", tags); obj.insert("type", "subject"); QJsonDocument doc(obj); return doc.toJson(QJsonDocument::Compact); } QString PrivacySecurityWorker::getSubjectModeJson(const QString &name, bool isBlacklist) { QJsonObject obj; obj.insert("mode", isBlacklist ? "blacklist" : "whitelist"); obj.insert("object", name); obj.insert("version", DataVersion); QJsonDocument doc(obj); return doc.toJson(QJsonDocument::Compact); } QString PrivacySecurityWorker::getObjectPolicyJson(const ApplicationItem *item, int premission, bool enabled) { QJsonObject obj; QJsonArray policies; QJsonObject policy; QJsonArray objects; QJsonObject object; object.insert("timestamp", 0); object.insert("valid_period", 0); object.insert("object", m_model->premissiontoPath(premission)); // 需要设置的路径 object.insert("operations", enabled ? QJsonArray::fromStringList({ "allow" }) : QJsonArray::fromStringList({ "deny" })); objects.append(object); QJsonObject subject; subject.insert("name", item->package().isEmpty() ? item->appPath() : item->package()); // 包名 policy.insert("objects", objects); policy.insert("subject", subject); policies.append(policy); obj.insert("policies", policies); obj.insert("version", DataVersion); QJsonDocument doc(obj); return doc.toJson(QJsonDocument::Compact); } void PrivacySecurityWorker::updateAppPath(ApplicationItem *item) { if (!item) return; m_pendingPathUpdates.append(item); if (!m_batchScheduled) { m_batchScheduled = true; QTimer::singleShot(0, this, &PrivacySecurityWorker::processBatchPathUpdates); } } void PrivacySecurityWorker::processBatchPathUpdates() { m_batchScheduled = false; if (m_pendingPathUpdates.isEmpty()) return; QList items; items.swap(m_pendingPathUpdates); struct ItemData { QString itemId; QString itemName; QMap execs; QString desktopPath; }; QList batch; batch.reserve(items.size()); const auto &appList = m_model->appModel()->appList(); for (auto *item : items) { if (!appList.contains(item)) continue; ItemData d; d.itemId = item->id(); d.itemName = item->name(); d.execs = item->execs(); d.desktopPath = item->desktopPath(); batch.append(std::move(d)); } if (batch.isEmpty()) return; (void)QtConcurrent::run(m_dpkgThreadPool, [this, batch]() { struct ProcessedItem { QString itemId; QString itemName; QString appPath; QString dpkgQueryPath; }; QList processed; processed.reserve(batch.size()); QStringList allDpkgPaths; for (const auto &d : batch) { ProcessedItem p; p.itemId = d.itemId; p.itemName = d.itemName; p.appPath = getAppPath(d.execs); p.dpkgQueryPath = d.desktopPath.isEmpty() ? p.appPath : d.desktopPath; processed.append(p); if (!p.dpkgQueryPath.isEmpty()) { allDpkgPaths.append(p.dpkgQueryPath); } } QMap pathToPackage; if (!allDpkgPaths.isEmpty()) { pathToPackage = batchGetPackageNames(allDpkgPaths); } for (const auto &p : processed) { QString packageName = pathToPackage.value(p.dpkgQueryPath); QMetaObject::invokeMethod(this, [this, itemId = p.itemId, itemName = p.itemName, path = p.appPath, packageName]() { if (path.isEmpty()) { qCInfo(DCC_PRIVACY) << "Exclude app id: " << itemId << ", name: " << itemName << "because it appPath is empty"; m_model->removeApplictionItem(itemId); return; } const auto &appList = m_model->appModel()->appList(); auto it = std::find_if(appList.cbegin(), appList.cend(), [&itemId](ApplicationItem *app) { return app->id() == itemId; }); if (it == appList.cend()) return; ApplicationItem *item = *it; item->onAppPathChanged(path); item->onPackageChanged(packageName); m_model->updatePermission(item); m_model->emitAppDataChanged(item); }, Qt::QueuedConnection); } }); } QMap PrivacySecurityWorker::batchGetPackageNames(const QStringList &paths) { QMap result; QSet uniqueSet(paths.begin(), paths.end()); QStringList uniquePaths(uniqueSet.begin(), uniqueSet.end()); const int chunkSize = 100; for (int i = 0; i < uniquePaths.size(); i += chunkSize) { QStringList chunk = uniquePaths.mid(i, chunkSize); QProcess pro; QStringList args; args << "-S"; args.append(chunk); pro.start("/usr/bin/dpkg-query", args); if (!pro.waitForFinished(5000)) { qCWarning(DCC_PRIVACY) << "dpkg-query batch timed out for chunk starting at index" << i << ", killing process"; pro.kill(); pro.waitForFinished(1000); continue; } // dpkg-query returns exit code 1 when any path is not found, // but still prints found packages to stdout QString output = pro.readAllStandardOutput(); const QStringList lines = output.split('\n', Qt::SkipEmptyParts); for (const QString &line : lines) { // Format: "package-name: /path/to/file" // Or: "package-name:amd64: /path/to/file" int separatorIdx = line.indexOf(": /"); if (separatorIdx < 0) continue; QString packagePart = line.left(separatorIdx); QString filePath = line.mid(separatorIdx + 2).trimmed(); QString packageName = packagePart.split(':').first(); if (!result.contains(filePath)) { result.insert(filePath, packageName); } } if (pro.exitCode() != 0) { qCDebug(DCC_PRIVACY) << "dpkg-query batch: some paths not found, stderr:" << pro.readAllStandardError().simplified(); } } return result; } ApplicationItem *PrivacySecurityWorker::addAppItem(int dataIndex) { // 不展示的应用 static const QStringList s_excludeApp = { "dde-computer", "org.deepin.dde.control-center", "dde-file-manager", "dde-trash", "deepin-manual", "deepin-terminal", "onboard", "onboard-settings", }; const auto &NoDisplay = m_ddeAmModel->data(m_ddeAmModel->index(dataIndex, 0), DS_NAMESPACE::AppItemModel::NoDisplayRole).toBool(); if (NoDisplay) { return nullptr; } const auto &name = m_ddeAmModel->data(m_ddeAmModel->index(dataIndex, 0), DS_NAMESPACE::AppItemModel::NameRole).toString(); const auto &iconName = m_ddeAmModel->data(m_ddeAmModel->index(dataIndex, 0), DS_NAMESPACE::AppItemModel::IconNameRole).toString(); const auto &isLingLong = m_ddeAmModel->data(m_ddeAmModel->index(dataIndex, 0), DS_NAMESPACE::AppItemModel::XLingLongRole).toBool(); const auto &XCreatedBy = m_ddeAmModel->data(m_ddeAmModel->index(dataIndex, 0), DS_NAMESPACE::AppItemModel::XCreatedByRole).toString(); const auto &id = m_ddeAmModel->data(m_ddeAmModel->index(dataIndex, 0), DS_NAMESPACE::AppItemModel::IdRole).toString(); const auto &execs = m_ddeAmModel->data(m_ddeAmModel->index(dataIndex, 0), DS_NAMESPACE::AppItemModel::ExecsRole).value>(); const auto &desktopSoucePath = m_ddeAmModel->data(m_ddeAmModel->index(dataIndex, 0), DS_NAMESPACE::AppItemModel::DesktopSourcePathRole).toString(); for (const auto &app : s_excludeApp) { if (id.contains(app)) { qCInfo(DCC_PRIVACY) << "Exclude app id: " << id << ", name: " << name << "because it is in exclude list"; return nullptr; } } if (isLingLong) { qCInfo(DCC_PRIVACY) << "Exclude app id: " << id << ", name: " << name << "because it is a linglong application"; return nullptr; } if (XCreatedBy == DEEPIN_WINE_TEAM) { qCInfo(DCC_PRIVACY) << "Exclude app id: " << id << ", name: " << name << "because it is a wine application"; return nullptr; } ApplicationItem *appItem = new ApplicationItem(); appItem->onIdChanged(id); appItem->onNameChanged(name); appItem->onIconChanged(iconName); appItem->onExecsChanged(execs); appItem->onDesktopPathChanged(desktopSoucePath); if (m_model->addApplictionItem(appItem)) { updateAppPath(appItem); connect(appItem, &ApplicationItem::requestSetPremissionEnabled, this, &PrivacySecurityWorker::setAppPermissionEnable); } else { delete appItem; appItem = nullptr; } return appItem; } void PrivacySecurityWorker::onModeChanged(const QString &mode, const QString &type) { if (type != "add" && type != "modify") return; QJsonParseError jsonError; QJsonDocument doc = QJsonDocument::fromJson(mode.toLatin1(), &jsonError); if (doc.isNull() || jsonError.error != QJsonParseError::NoError) { qCWarning(DCC_PRIVACY) << "mode changed :json parse error:" << jsonError.errorString(); return; } QJsonObject obj = doc.object(); if (obj.value("version").toString() != DataVersion) { qCWarning(DCC_PRIVACY) << "mode changed :version error: current version:" << DataVersion << "json version:" << obj.value("version").toString(); return; } QString object = obj.value("object").toString(); QString objMode = obj.value("mode").toString(); int modeType = PrivacySecurityDataProxy::AllEnable; if (objMode == "blacklist") { modeType = PrivacySecurityDataProxy::ByCustom; } else if (objMode == "allallow") { modeType = PrivacySecurityDataProxy::AllEnable; } int premission = m_model->pathtoPremission(object, false); if (premission != 0) m_model->onPremissionModeChanged(premission, modeType); } void PrivacySecurityWorker::onEntityChanged(const QString &entity, const QString &type) { if (type != "add" && type != "modify") return; QJsonParseError jsonError; QJsonDocument doc = QJsonDocument::fromJson(entity.toLatin1(), &jsonError); if (doc.isNull() || jsonError.error != QJsonParseError::NoError) { qCWarning(DCC_PRIVACY) << "entity changed :json parse error:" << jsonError.errorString(); return; } QJsonObject obj = doc.object(); if (obj.value("version").toString() != DataVersion) { qCWarning(DCC_PRIVACY) << "entity changed :version error: current version:" << DataVersion << "json version:" << obj.value("version").toString(); return; } QString name = obj.value("name").toString(); QSet exes; if (name.isEmpty()) { qCWarning(DCC_PRIVACY) << "entity changed :name is empty"; return; } QJsonObject attrs = obj.value("attrs").toObject(); if (!attrs.isEmpty()) { QJsonArray exesJson = attrs.value("exes").toArray(); for (const auto it : exesJson) { exes.insert(it.toString()); } } m_entityMap.insert(name, exes); updateAllPermission(); } void PrivacySecurityWorker::onPolicyChanged(const QString &policy, const QString &type) { if (type != "add" && type != "modify") return; QJsonParseError jsonError; QJsonDocument doc = QJsonDocument::fromJson(policy.toLatin1(), &jsonError); if (doc.isNull() || jsonError.error != QJsonParseError::NoError) { qCWarning(DCC_PRIVACY) << "policy changed :json parse error:" << jsonError.errorString(); return; } QJsonObject obj = doc.object(); if (obj.value("version").toString() != DataVersion) { qCWarning(DCC_PRIVACY) << "policy changed :version error: current version:" << DataVersion << "json version:" << obj.value("version").toString(); return; } QJsonArray policies = obj.value("policies").toArray(); for (const auto policy : policies) { QJsonObject policyObj = policy.toObject(); QString package = policyObj.value("subject").toObject().value("name").toString(); QJsonArray objects = policyObj.value("objects").toArray(); for (const auto object : objects) { QJsonObject objectObj = object.toObject(); QString objectName = objectObj.value("object").toString(); QVariantList operations = objectObj.value("operations").toArray().toVariantList(); if (operations.contains("deny")) { m_blacklistByPackage[objectName].insert(package); } else { m_blacklistByPackage[objectName].remove(package); } } } updateAllPermission(); } void PrivacySecurityWorker::setAppPermissionEnableByCheck(bool ok) { while (!m_cacheAppPermission.isEmpty()) { const auto &&it = m_cacheAppPermission.takeFirst(); ApplicationItem *item = it.first; int premission = it.second.first; bool enabled = it.second.second; if (ok) { QString file = m_model->premissiontoPath(premission); if (file.isEmpty()) { item->emitDataChanged(); m_model->emitAppDataChanged(item); continue; } QStringList executablePaths = item->executablePaths(); if (executablePaths.isEmpty()) { QString path = item->appPath(); executablePaths = getExecutable(item->package()); item->onExecutablePathsChanged(executablePaths); } // 检查是否有权限实体 if (!m_entityMap.contains(file)) { m_dataProxy->setEntity(getEntityJson(file, premission != ApplicationItem::CameraPermission)); } // 检查有没有二进制或者包的实体,只有有实体之后才设置权限策略 if ((!item->package().isEmpty() && !m_entityMap.contains(item->package())) || (item->package().isEmpty() && !m_entityMap.contains(item->appPath()))) { m_dataProxy->setEntity(getAppEntityJson(item)); } m_dataProxy->setMode(getSubjectModeJson(file, true)); // 设置黑名单模式, 设置客体模式 m_dataProxy->setPolicy(getObjectPolicyJson(item, premission, enabled)); } else { item->emitDataChanged(); m_model->emitAppDataChanged(item); } } } void PrivacySecurityWorker::setAppPermissionEnable(int premission, bool enabled, ApplicationItem *item) { m_cacheAppPermission.append({ item, { premission, enabled } }); // 存入缓存 if (!s_systemPrem.contains(premission)) { // 如果申请的权限不包括列表中的权限(比如相机以外的权限) setAppPermissionEnableByCheck(true); return; } if (m_checkAuthorizationing) return; connect(PolkitQt1::Authority::instance(), &PolkitQt1::Authority::checkAuthorizationFinished, this, [this](PolkitQt1::Authority::Result authenticationResult) { disconnect(PolkitQt1::Authority::instance(), nullptr, this, nullptr); updateCheckAuthorizationing(false); setAppPermissionEnableByCheck(PolkitQt1::Authority::Result::Yes == authenticationResult); }); updateCheckAuthorizationing(true); PolkitQt1::Authority::instance()->checkAuthorization("com.deepin.FileArmor1", PolkitQt1::UnixProcessSubject(getpid()), PolkitQt1::Authority::AllowUserInteraction); } void PrivacySecurityWorker::checkAuthorizationCancel() { if (m_checkAuthorizationing) { // PolkitQt1::Authority::instance()->checkAuthorizationCancel(); // 取消后不能再拉起 disconnect(PolkitQt1::Authority::instance(), nullptr, this, nullptr); updateCheckAuthorizationing(false); } } QStringList PrivacySecurityWorker::getExecutable(const QString &packageName) { if (packageName.isEmpty()) { qCWarning(DCC_PRIVACY) << "getExecutable failed: packageName is empty"; return {}; } QString listFilePath = QString("/var/lib/dpkg/info/%1.list").arg(packageName); if (!QFile::exists(listFilePath)) { listFilePath = QString("/var/lib/dpkg/info/%1.list").arg(packageName + ":" + getDpkgArch()); } QFile listFile(listFilePath); if (!listFile.exists() || !listFile.open(QIODevice::ReadOnly | QIODevice::Text)) { qCWarning(DCC_PRIVACY) << "Failed to open list file:" << listFilePath; return {}; } QStringList files; QTextStream stream(&listFile); while (!stream.atEnd()) { QString filePath = stream.readLine().trimmed(); if (filePath.isEmpty()) { continue; } QFileInfo fileInfo(filePath); if (fileInfo.exists() && fileInfo.isFile() && fileInfo.isExecutable() && !QLibrary::isLibrary(filePath)) { files << filePath; } } listFile.close(); return files; } ================================================ FILE: src/plugin-privacy/operation/privacysecurityworker.h ================================================ // SPDX-FileCopyrightText: 2025 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include "privacysecuritymodel.h" #include "privacysecuritydataproxy.h" #include "applicationitem.h" #include #include class PrivacySecurityWorker : public QObject { Q_OBJECT public: explicit PrivacySecurityWorker(PrivacySecurityModel *appModel, QObject *parent = nullptr); ~PrivacySecurityWorker(); public slots: void setPremissionEnabled(int appItemIndex, int premission, bool enabled); void setAppPermissionEnable(int premission, bool enabled, ApplicationItem *item); void checkAuthorizationCancel(); private slots: void updateAppPath(ApplicationItem *item); ApplicationItem *addAppItem(int index); void onModeChanged(const QString &mode, const QString &type); void onEntityChanged(const QString &entity, const QString &type); void onPolicyChanged(const QString &policy, const QString &type); void setAppPermissionEnableByCheck(bool ok); signals: void checkAuthorization(bool checking); void serviceExistsChanged(bool exists); void appAdded(const QString &appId); void appRemoved(const QString &id); private: void updateAllPermission(); QString getAppPath(const QMap &execs); void updateCheckAuthorizationing(bool checking); QString getEntityJson(const QString &name, bool isFile); QString getAppEntityJson(const ApplicationItem *item); QString getSubjectModeJson(const QString &name, bool isBlacklist); QString getObjectPolicyJson(const ApplicationItem *item, int premission, bool enabled); bool existsService() const; void init(); void initApp(); QStringList getExecutable(const QString &packageName); void processBatchPathUpdates(); QMap batchGetPackageNames(const QStringList &paths); private: PrivacySecurityModel *m_model = nullptr; QAbstractItemModel *m_ddeAmModel = nullptr; PrivacySecurityDataProxy *m_dataProxy = nullptr; QStringList m_pathList; bool m_checkAuthorizationing = false; QList>> m_cacheAppPermission; QList> m_cachePermission; QHash> m_entityMap; // entity信息,对包是 <包名,可执行文件列表> QMap> m_blacklistByPackage; // 黑名单 <权限,包名列表> QMutex m_appItemsMutex; QList m_pendingPathUpdates; QThreadPool *m_dpkgThreadPool = nullptr; bool m_batchScheduled = false; }; ================================================ FILE: src/plugin-privacy/operation/qrc/privacy.qrc ================================================ icons/arrow-down.dci icons/security_folder.dci icons/security_camera.dci ================================================ FILE: src/plugin-privacy/qml/Camera.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dcc.privacy 1.0 DccObject { DccObject { name: "cameraAppViewGroup" parentName: "privacy/camera" weight: 100 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "title" weight: 1 parentName: "privacy/camera/cameraAppViewGroup" pageType: DccObject.Editor canSearch: false displayName: qsTr("Allow below apps to access your camera:") } DccRepeater { model: dccData.appsModel delegate: DccObject { name: "plugin" + model.itemKey parentName: "privacy/camera/cameraAppViewGroup" weight: 10 + index * 10 icon: model.iconName displayName: model.name pageType: DccObject.Editor canSearch: false backgroundType: DccObject.Hover page: D.Switch { checked: model.cameraPermission onCheckedChanged: { if (checked !== model.cameraPermission) { dccData.worker.setPremissionEnabled(index, ApplicationItem.CameraPermission, checked) } } } } } } } ================================================ FILE: src/plugin-privacy/qml/FileAndFolder.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc.privacy 1.0 DccObject { DccObject { name: "filefolderViewGroup" parentName: "privacy/filefolder" weight: 100 pageType: DccObject.Item page: DccGroupView {} DccObject { name: "title" weight: 1 parentName: "privacy/filefolder/filefolderViewGroup" pageType: DccObject.Editor canSearch: false displayName: qsTr("Allow below apps to access these files and folders:") } DccRepeater { model: dccData.appsModel delegate: DccObject { id: privacyFolderItem name: "plugin" + model.name property real iconSize: 16 property bool isExpanded: false property var dataModel: model parentName: "privacy/filefolder/filefolderViewGroup" weight: 10 + index * 10 pageType: DccObject.Item visible: !model.noDisplay canSearch: false backgroundType: DccObject.ClickStyle onParentItemChanged: { if (parentItem) { parentItem.activeFocusOnTab = true } } Connections { target: parentItem function onClicked() { privacyFolderItem.isExpanded = !privacyFolderItem.isExpanded } } DccRepeater { id: rep property var itemIndex: index model: [ { name: qsTr("Documents"), premission: ApplicationItem.DocumentFoldersPermission}, { name: qsTr("Desktop"), premission: ApplicationItem.DesktopFoldersPermission}, { name: qsTr("Pictures"), premission: ApplicationItem.PictureFoldersPermission}, { name: qsTr("Videos"), premission: ApplicationItem.VideoFoldersPermission}, { name: qsTr("Music"), premission: ApplicationItem.MusicFoldersPermission}, { name: qsTr("Downloads"), premission: ApplicationItem.DownloadFoldersPermission} ] property var checkedStates: [ privacyFolderItem.dataModel.documentPermission, privacyFolderItem.dataModel.desktopPermission, privacyFolderItem.dataModel.picturePermission, privacyFolderItem.dataModel.videoPermission, privacyFolderItem.dataModel.musicPermission, privacyFolderItem.dataModel.downloadPermission ] delegate: DccObject { parentName: "privacy/filefolder/filefolderViewGroup" weight: privacyFolderItem.weight + 1 canSearch: false visible: privacyFolderItem.isExpanded displayName: modelData.name pageType: DccObject.Item backgroundType: DccObject.Hover page: RowLayout { spacing: 2 Item { Layout.preferredHeight: DS.Style.itemDelegate.height Layout.preferredWidth: 34 } DccLabel { text: String('"%1" ').arg(modelData.name) color: D.DTK.platformTheme.activeColor } DccLabel { Layout.fillWidth: true text: qsTr("folder") } D.Switch { Layout.alignment: Qt.AlignRight Layout.rightMargin: 10 checked: rep.checkedStates[index] onCheckedChanged: { if (checked != rep.checkedStates[index]) { dccData.worker.setPremissionEnabled(rep.itemIndex, modelData.premission, checked) } } } } } } page: ColumnLayout { RowLayout { Layout.preferredHeight: DS.Style.itemDelegate.height Layout.leftMargin: 10 Layout.rightMargin: 10 D.DciIcon { sourceSize: Qt.size(DS.Style.itemDelegate.iconSize, DS.Style.itemDelegate.iconSize) name: model.iconName theme: D.DTK.themeType palette: parent ? D.DTK.makeIconPalette(parent.palette) : D.DTK.makeIconPalette(D.DTK.palette) } DccLabel { text: model.name } Item { Layout.fillWidth: true } Control { id: control rotation: privacyFolderItem.isExpanded ? 180 : 0 Behavior on rotation { NumberAnimation { duration: 200 } } contentItem: D.DciIcon { name: "arrow_ordinary_down" sourceSize: Qt.size(12, 12) theme: D.DTK.themeType palette: parent ? D.DTK.makeIconPalette(parent.palette) : D.DTK.makeIconPalette(control.palette) } } } } } } } } ================================================ FILE: src/plugin-privacy/qml/Privacy.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { name: "privacy" parentName: "root" displayName: qsTr("Privacy and Security") description: qsTr("Camera, folder permissions") icon: "privacy" weight: 80 visible: typeof D.SysInfo !== 'undefined' && DccApp.productType() === D.SysInfo.Uos } ================================================ FILE: src/plugin-privacy/qml/PrivacyMain.qml ================================================ // SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import QtQuick.Layouts 1.15 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { DccObject { name: "camera" parentName: "privacy" displayName: qsTr("Camera") description: qsTr("Choose whether the application has access to the camera") icon: "security_camera" weight: 10 Camera {} } DccObject { name: "filefolder" parentName: "privacy" displayName: qsTr("Files and Folders") description: qsTr("Choose whether the application has access to files and folders") icon: "security_folder" weight: 100 FileAndFolder {} } } ================================================ FILE: src/plugin-privacy/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-sound/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(Sound_Name sound) file(GLOB_RECURSE Sound_SRCS "operation/*.cpp" "operation/qrc/sound.qrc" ) add_library(${Sound_Name} MODULE ${Sound_SRCS} operation/soundInteraction.cpp operation/soundInteraction.h operation/soundDeviceModel.cpp operation/soundDeviceModel.h operation/soundDeviceData.cpp operation/soundDeviceData.h operation/port.cpp operation/port.h operation/audioservermodel.cpp ) if (DISABLE_SOUND_ADVANCED) target_compile_definitions(${Sound_Name} PUBLIC -DDCC_DISABLE_SOUND_ADVANCED) endif() set(Sound_Libraries ${DCC_FRAME_Library} ${DTK_NS}::Gui ${QT_NS}::DBus ${QT_NS}::Multimedia ) target_link_libraries(${Sound_Name} PRIVATE ${Sound_Libraries} ) dcc_install_plugin(NAME ${Sound_Name} TARGET ${Sound_Name}) # QML_ROOT_DIR ${CMAKE_CURRENT_SOURCE_DIR}/src/plugin-sound/qml) ================================================ FILE: src/plugin-sound/operation/audioport.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef AUDIOPORT_H #define AUDIOPORT_H #include #include #include #include class AudioPort { public: AudioPort() {} friend QDebug operator<<(QDebug argument, const AudioPort &port) { argument << port.name << port.description << port.availability; return argument; } friend QDBusArgument &operator<<(QDBusArgument &argument, const AudioPort &port) { argument.beginStructure(); argument << port.name << port.description << port.availability; argument.endStructure(); return argument; } friend const QDBusArgument &operator>>(const QDBusArgument &argument, AudioPort &port) { argument.beginStructure(); argument >> port.name >> port.description >> port.availability; argument.endStructure(); return argument; } bool operator==(const AudioPort what) const { return what.name == name && what.description == description && what.availability == availability; } bool operator!=(const AudioPort what) const { return what.name != name || what.description != description || what.availability != availability; } public: QString name; QString description; uchar availability; // 0 for Unknown, 1 for Not Available, 2 for Available. }; Q_DECLARE_METATYPE(AudioPort) void registerAudioPortMetaType(); #endif // AUDIOPORT_H ================================================ FILE: src/plugin-sound/operation/audioservermodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "audioservermodel.h" AudioServerModel::AudioServerModel(QObject *parent) : QAbstractListModel(parent) { } void AudioServerModel::addData(const AudioServerData &data) { int row = rowCount(); beginInsertRows(QModelIndex(), row, row); m_audioServerDatas.append(data); endInsertRows(); } void AudioServerModel::updateAllData() { for (int index = 0; index < m_audioServerDatas.count(); index++) { QModelIndex modelIndex = createIndex(index, 0); emit dataChanged(modelIndex, modelIndex, {}); } } void AudioServerModel::updateCheckedService(const QString &name) { for (int index = 0; index < m_audioServerDatas.count(); index++) { AudioServerData &data = m_audioServerDatas[index]; data.checked = name == data.serverName; QModelIndex modelIndex = createIndex(index, 0); emit dataChanged(modelIndex, modelIndex, {}); } } int AudioServerModel::rowCount(const QModelIndex &parent) const { // For list models only the root node (an invalid parent) should return the list's size. For all // other (valid) parents, rowCount() should return 0 so that it does not become a tree model. if (parent.isValid()) return 0; return m_audioServerDatas.count(); } QVariant AudioServerModel::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); const AudioServerData &data = m_audioServerDatas.at(index.row()); switch (role) { case NameRole: return data.name; case IsChecked: return data.checked; case ServerName: return data.serverName; default: break; } return QVariant(); } bool AudioServerModel::insertRows(int row, int count, const QModelIndex &parent) { beginInsertRows(parent, row, row + count - 1); endInsertRows(); return true; } bool AudioServerModel::removeRows(int row, int count, const QModelIndex &parent) { beginRemoveRows(parent, row, row + count - 1); endRemoveRows(); return true; } ================================================ FILE: src/plugin-sound/operation/audioservermodel.h ================================================ // SPDX-FileCopyrightText: 2024 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef AUDIOSERVERMODEL_H #define AUDIOSERVERMODEL_H #include #include struct AudioServerData { QString name; QString serverName; bool checked; }; class AudioServerModel : public QAbstractListModel { Q_OBJECT public: enum soundEffectsRoles{ NameRole = Qt::UserRole + 1, ServerName, IsChecked }; explicit AudioServerModel(QObject *parent = nullptr); void addData(const AudioServerData &data); void updateAllData(); void updateCheckedService(const QString &name); // Basic functionality: int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; // Add data: bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; // Remove data: bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; QHash roleNames() const override { QHash roles; roles[NameRole] = "name"; roles[ServerName] = "serverName"; roles[IsChecked] = "isChecked"; return roles; } private: QList m_audioServerDatas; }; #endif // AUDIOSERVERMODEL_H ================================================ FILE: src/plugin-sound/operation/port.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "port.h" void Port::setId(const QString &id) { if (id != m_id) { m_id = id; Q_EMIT idChanged(id); } } void Port::setName(const QString &name) { if (name != m_name) { m_name = name; Q_EMIT nameChanged(name); } } void Port::setCardName(const QString &cardName) { if (cardName != m_cardName) { m_cardName = cardName; Q_EMIT cardNameChanged(cardName); } } void Port::setIsActive(bool isActive) { if (isActive != m_isActive) { m_isActive = isActive; if (m_direction == Port::In) Q_EMIT isInputActiveChanged(isActive); else Q_EMIT isOutputActiveChanged(isActive); } } void Port::setDirection(const Direction &direction) { if (direction != m_direction) { m_direction = direction; Q_EMIT directionChanged(direction); } } void Port::setCardId(const uint &cardId) { if (cardId != m_cardId) { m_cardId = cardId; Q_EMIT cardIdChanged(cardId); } } void Port::setEnabled(const bool enabled) { if (enabled != m_enabled) { m_enabled = enabled; Q_EMIT currentPortEnabled(enabled); } } void Port::setIsBluetoothPort(const bool isBlue) { if (m_isBluetoothPort != isBlue) { m_isBluetoothPort = isBlue; Q_EMIT currentBluetoothPortChanged(isBlue); } } ================================================ FILE: src/plugin-sound/operation/port.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef PORT_H #define PORT_H #include #include #include class Port : public QObject { Q_OBJECT public: enum Direction { Out = 1, In = 2 }; explicit Port(QObject * parent) : QObject(parent),m_id(""), m_name(""), m_cardName(""), m_cardId(0), m_isActive(false), m_enabled(false), m_isBluetoothPort(false), m_direction(Out){} virtual ~Port() {} inline QString id() const { return m_id; } void setId(const QString &id); inline QString name() const { return m_name; } void setName(const QString &name); inline QString cardName() const { return m_cardName; } void setCardName(const QString &cardName); inline bool isActive() const { return m_isActive; } void setIsActive(bool isActive); inline Direction direction() const { return m_direction; } void setDirection(const Direction &direction); inline uint cardId() const { return m_cardId; } void setCardId(const uint &cardId); inline bool isEnabled() const { return m_enabled; } void setEnabled(const bool enabled); inline bool isBluetoothPort() const { return m_isBluetoothPort; } void setIsBluetoothPort(const bool isBlue); Q_SIGNALS: void idChanged(QString id) const; void nameChanged(QString name) const; void cardNameChanged(QString name) const; void isInputActiveChanged(bool active) const; void isOutputActiveChanged(bool active) const; void directionChanged(Direction direction) const; void cardIdChanged(uint cardId) const; void currentPortEnabled(bool enable) const; void currentBluetoothPortChanged(bool isBlue) const; private: QString m_id; QString m_name; QString m_cardName; uint m_cardId; bool m_isActive; bool m_enabled; bool m_isBluetoothPort; Direction m_direction; }; #endif //PORT_H ================================================ FILE: src/plugin-sound/operation/qrc/sound.qrc ================================================ actions/dcc_volume1_32px.svg actions/dcc_volume2_32px.svg actions/dcc_volume3_32px.svg actions/checked.png actions/nocheck.png icons/play_back.dci icons/sound_off.dci icons/small_volume.dci icons/big_volume.dci icons/dcc_volume2.dci icons/dcc_volume3.dci icons/dcc_volume1.dci icons/dark/volume_sound_wave_ani.webp icons/light/volume_sound_wave_ani.webp ================================================ FILE: src/plugin-sound/operation/soundDeviceData.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "soundDeviceData.h" SoundDeviceData::SoundDeviceData() : m_ischecked(false) , m_name("") { } bool SoundDeviceData::ischecked() const { return m_ischecked; } void SoundDeviceData::setIschecked(bool newIschecked) { m_ischecked = newIschecked; } QString SoundDeviceData::name() const { return m_name; } void SoundDeviceData::setName(const QString &newName) { m_name = newName; } QString SoundDeviceData::getPortId() const { return portId; } void SoundDeviceData::setPortId(const QString &newPortId) { portId = newPortId; } uint SoundDeviceData::getCardId() const { return cardId; } void SoundDeviceData::setCardId(uint newCardId) { cardId = newCardId; } ================================================ FILE: src/plugin-sound/operation/soundDeviceData.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef SOUNDDEVICEDATA_H #define SOUNDDEVICEDATA_H #include #include "port.h" class SoundDeviceData { public: explicit SoundDeviceData(); bool ischecked() const; void setIschecked(bool newIschecked); QString name() const; void setName(const QString &newName); QString getPortId() const; void setPortId(const QString &newPortId); uint getCardId() const; void setCardId(uint newCardId); Port *port() const; void setPort(Port *newPort); private: bool m_ischecked; QString m_name; QString portId; uint cardId; }; #endif //SOUNDDEVICEDATA_H ================================================ FILE: src/plugin-sound/operation/soundDeviceModel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "soundDeviceModel.h" SoundDeviceModel::SoundDeviceModel(QObject *parent) : QAbstractListModel{ parent } { } void SoundDeviceModel::clearData() { if (m_ports.count() < 1) { return; } m_ports.clear(); } void SoundDeviceModel::addData(Port *port) { if (m_ports.contains(port)) { return; } beginInsertRows(QModelIndex(), rowCount(), rowCount()); m_ports.append(port); endInsertRows(); } void SoundDeviceModel::removeData(Port *port) { if (!m_ports.contains(port)) { return; } int index = m_ports.indexOf(port); beginRemoveRows(QModelIndex(), index, index); m_ports.remove(index); endRemoveRows(); } int SoundDeviceModel::getRowCount() { return m_ports.count(); } int SoundDeviceModel::getCurrentIndex() const { for (int index = 0; index< m_ports.count(); index++) { if (m_ports.at(index)->isActive() && m_ports.at(index)->isEnabled()) { return index; } } for (int index = 0; index< m_ports.count(); index++) { if (m_ports.at(index)->isEnabled()) { return index; } } return 0; } Port *SoundDeviceModel::getSoundDeviceData(int index) { if (m_ports.count() < index || index < 0) { return nullptr; } return m_ports.at(index); } void SoundDeviceModel::updateSoundDeviceData(Port *port) { for (int index = 0; index < m_ports.count(); index++) { if (m_ports[index]->id() == port->id()) { QModelIndex modelIndex = createIndex(index, 0); emit dataChanged(modelIndex, modelIndex, {}); break; } } } void SoundDeviceModel::updateAllSoundDeviceData() { for (int index = 0; index < m_ports.count(); index++) { QModelIndex modelIndex = createIndex(index, 0); emit dataChanged(modelIndex, modelIndex, {}); } } int SoundDeviceModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); return m_ports.count(); } QVariant SoundDeviceModel::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() >= m_ports.count()) return QVariant(); const Port* port = m_ports[index.row()]; if (role == NameRole) return port->name() + "(" + port->cardName() + ")"; else if (role == IsEnabled) return port->isEnabled(); else if (role == IsActive) return port->isActive(); return QVariant(); } ================================================ FILE: src/plugin-sound/operation/soundDeviceModel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include #ifndef SOUNDDEVICEMODEL_H #define SOUNDDEVICEMODEL_H #include #include "soundDeviceData.h" //#include "soundmodel.h" #include "port.h" class SoundDeviceModel: public QAbstractListModel { Q_OBJECT public: enum SoundEffectsRoles{ NameRole = Qt::UserRole + 1, IsEnabled, IsActive, }; Q_ENUM(SoundEffectsRoles) explicit SoundDeviceModel(QObject *parent = nullptr); void clearData(); void addData(Port* port); void removeData(Port* port); int getRowCount(); int getCurrentIndex() const; Port* getSoundDeviceData(int index); void updateSoundDeviceData(Port* port); void updateAllSoundDeviceData(); protected: int rowCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override { QHash roles; roles[NameRole] = "name"; roles[IsEnabled] = "isEnabled"; roles[IsActive] = "isActive"; return roles; } private: QList m_ports; }; #endif //SOUNDDEVICEMODEL_H ================================================ FILE: src/plugin-sound/operation/soundEffectsData.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "soundEffectsData.h" SoundEffectsData::SoundEffectsData() : m_name("") , m_dispalyText("") , m_aniIconPath("") { } QString SoundEffectsData::dispalyText() const { return m_dispalyText; } void SoundEffectsData::setDispalyText(const QString &newDispalyText) { m_dispalyText = newDispalyText; } QString SoundEffectsData::name() const { return m_name; } void SoundEffectsData::setName(const QString &newName) { m_name = newName; } bool SoundEffectsData::checked() const { return m_checked; } void SoundEffectsData::setChecked(bool newChecked) { m_checked = newChecked; } QString SoundEffectsData::path() const { return m_path; } void SoundEffectsData::setPath(const QString &newPath) { m_path = newPath; } DDesktopServices::SystemSoundEffect SoundEffectsData::systemSoundEffect() const { return m_systemSoundEffect; } void SoundEffectsData::setSystemSoundEffect(DDesktopServices::SystemSoundEffect newSystemSoundEffect) { m_systemSoundEffect = newSystemSoundEffect; } QString SoundEffectsData::aniIconPath() const { return m_aniIconPath; } void SoundEffectsData::setAniIconPath(const QString &newAniIconPath) { m_aniIconPath = newAniIconPath; } ================================================ FILE: src/plugin-sound/operation/soundEffectsData.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef SOUNDEFFECTSDATA_H #define SOUNDEFFECTSDATA_H #include #include DGUI_USE_NAMESPACE class SoundEffectsData { public: explicit SoundEffectsData(); QString dispalyText() const; void setDispalyText(const QString &newDispalyText); QString name() const; void setName(const QString &newName); bool checked() const; void setChecked(bool newChecked); QString path() const; void setPath(const QString &newPath); DDesktopServices::SystemSoundEffect systemSoundEffect() const; void setSystemSoundEffect(DDesktopServices::SystemSoundEffect newSystemSoundEffect); QString aniIconPath() const; void setAniIconPath(const QString &newAniIconPath); signals: private: QString m_name; QString m_dispalyText; QString m_path; DDesktopServices::SystemSoundEffect m_systemSoundEffect; bool m_checked; QString m_aniIconPath; }; #endif // SOUNDEFFECTSDATA_H ================================================ FILE: src/plugin-sound/operation/soundInteraction.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "soundInteraction.h" #include "dccfactory.h" #include using namespace dccV25; soundInteraction::soundInteraction(QObject *parent) : QObject(parent) , m_soundModel(new SoundModel(this)) , m_soundWork(new SoundWorker(m_soundModel,this)) { m_soundWork->activate(); qmlRegisterType("dcc", 1, 0, "SoundWorker"); qmlRegisterType("dcc", 1, 0, "SoundModel"); } soundInteraction::~soundInteraction() { } SoundModel *soundInteraction::model() const { return m_soundModel; } void soundInteraction::setSoundModel(SoundModel *newSoundModel) { m_soundModel = newSoundModel; } SoundWorker *soundInteraction::worker() const { return m_soundWork; } void soundInteraction::setSoundWork(SoundWorker *newSoundWork) { m_soundWork = newSoundWork; } void soundInteraction::setSinkVolume(double value) { m_soundWork->setSinkVolume(value); } DCC_FACTORY_CLASS(soundInteraction) #include "soundInteraction.moc" ================================================ FILE: src/plugin-sound/operation/soundInteraction.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef SOUNDINTERACTION_H #define SOUNDINTERACTION_H #include "soundmodel.h" #include "soundworker.h" // using namespace dccV25; class soundInteraction : public QObject { Q_OBJECT public: explicit soundInteraction(QObject *parent); ~soundInteraction(); // Q_INVOKABLE SoundModel getUiModel(); // Q_INVOKABLE QObject getUiWork(); // QObject *create(QObject * = nullptr) override { return this; } Q_INVOKABLE SoundModel *model() const; void setSoundModel(SoundModel *newSoundModel); Q_INVOKABLE SoundWorker *worker() const; void setSoundWork(SoundWorker *newSoundWork); Q_INVOKABLE void setSinkVolume(double value); private: SoundModel *m_soundModel; SoundWorker *m_soundWork; }; #endif // SOUNDINTERACTION_H ================================================ FILE: src/plugin-sound/operation/sounddbusproxy.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "sounddbusproxy.h" // #include "widgets/dccdbusinterface.h" #include "audioport.h" #include #include #include #include #include const static QString AudioService = QStringLiteral("org.deepin.dde.Audio1"); const static QString AudioPath = QStringLiteral("/org/deepin/dde/Audio1"); const static QString AudioInterface = QStringLiteral("org.deepin.dde.Audio1"); const static QString SoundEffectService = QStringLiteral("org.deepin.dde.SoundEffect1"); const static QString SoundEffectPath = QStringLiteral("/org/deepin/dde/SoundEffect1"); const static QString SoundEffectInterface = QStringLiteral("org.deepin.dde.SoundEffect1"); const static QString PowerService = QStringLiteral("org.deepin.dde.Power1"); const static QString PowerPath = QStringLiteral("/org/deepin/dde/Power1"); const static QString PowerInterface = QStringLiteral("org.deepin.dde.Power1"); const static QString SinkInterface = QStringLiteral("org.deepin.dde.Audio1.Sink"); const static QString SourceInterface = QStringLiteral("org.deepin.dde.Audio1.Source"); const static QString MeterInterface = QStringLiteral("org.deepin.dde.Audio1.Meter"); // using namespace DCC_NAMESPACE; SoundDBusProxy::SoundDBusProxy(QObject *parent) : QObject(parent) , m_audioInter(new DDBusInterface(AudioService, AudioPath, AudioInterface, QDBusConnection::sessionBus(), this)) , m_soundEffectInter(new DDBusInterface(SoundEffectService, SoundEffectPath, SoundEffectInterface, QDBusConnection::sessionBus(), this)) , m_powerInter(new DDBusInterface(PowerService, PowerPath, PowerInterface, QDBusConnection::systemBus(), this)) , m_defaultSink(nullptr) , m_defaultSource(nullptr) , m_sourceMeter(nullptr) { qRegisterMetaType("AudioPort"); qDBusRegisterMetaType(); qRegisterMetaType("SoundEffectQuestions"); qDBusRegisterMetaType(); } QDBusObjectPath SoundDBusProxy::defaultSink() { return qvariant_cast(m_audioInter->property("DefaultSink")); } QDBusObjectPath SoundDBusProxy::defaultSource() { return qvariant_cast(m_audioInter->property("DefaultSource")); } QString SoundDBusProxy::cardsWithoutUnavailable() { return qvariant_cast(m_audioInter->property("CardsWithoutUnavailable")); } QStringList SoundDBusProxy::bluetoothAudioModeOpts() { return qvariant_cast(m_audioInter->property("BluetoothAudioModeOpts")); } QString SoundDBusProxy::bluetoothAudioMode() { return qvariant_cast(m_audioInter->property("BluetoothAudioMode")); } double SoundDBusProxy::maxUIVolume() { return qvariant_cast(m_audioInter->property("MaxUIVolume")); } bool SoundDBusProxy::increaseVolume() { return qvariant_cast(m_audioInter->property("IncreaseVolume")); } void SoundDBusProxy::setIncreaseVolume(bool value) { m_audioInter->setProperty("IncreaseVolume", QVariant::fromValue(value)); } bool SoundDBusProxy::reduceNoise() { return qvariant_cast(m_audioInter->property("ReduceNoise")); } void SoundDBusProxy::setReduceNoise(bool value) { m_audioInter->setProperty("ReduceNoise", QVariant::fromValue(value)); } bool SoundDBusProxy::pausePlayer() { return qvariant_cast(m_audioInter->property("PausePlayer")); } void SoundDBusProxy::setPausePlayer(bool value) { m_audioInter->setProperty("PausePlayer", QVariant::fromValue(value)); } QString SoundDBusProxy::audioServer() { return qvariant_cast(m_audioInter->property("CurrentAudioServer")); } void SoundDBusProxy::SetAudioServer(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); m_audioInter->asyncCallWithArgumentList(QStringLiteral("SetCurrentAudioServer"), argumentList); } bool SoundDBusProxy::audioServerState() { return qvariant_cast(m_audioInter->property("AudioServerState")); } void SoundDBusProxy::SetPortEnabled(uint in0, const QString &in1, bool in2) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1) << QVariant::fromValue(in2); m_audioInter->asyncCallWithArgumentList(QStringLiteral("SetPortEnabled"), argumentList); } void SoundDBusProxy::SetPort(uint in0, const QString &in1, int in2) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1) << QVariant::fromValue(in2); m_audioInter->asyncCallWithArgumentList(QStringLiteral("SetPort"), argumentList); } void SoundDBusProxy::SetBluetoothAudioMode(const QString &in0) { QList argumentList; argumentList << QVariant::fromValue(in0); m_audioInter->asyncCallWithArgumentList(QStringLiteral("SetBluetoothAudioMode"), argumentList); } bool SoundDBusProxy::enabled() { return qvariant_cast(m_soundEffectInter->property("Enabled")); } void SoundDBusProxy::setEnabled(bool value) { m_soundEffectInter->setProperty("Enabled", QVariant::fromValue(value)); } void SoundDBusProxy::GetSoundEnabledMap() { QList argumentList; m_soundEffectInter->callWithCallback(QStringLiteral("GetSoundEnabledMap"), argumentList, this, SIGNAL(pendingCallWatcherFinished(QMap))); } void SoundDBusProxy::EnableSound(const QString &name, bool enabled, QObject *receiver, const char *member, const char *errorSlot) { QList argumentList; argumentList << QVariant::fromValue(name) << QVariant::fromValue(enabled); m_soundEffectInter->callWithCallback(QStringLiteral("EnableSound"), argumentList, receiver, member, errorSlot); } QString SoundDBusProxy::GetSoundFile(const QString &name) { QList argumentList; argumentList << QVariant::fromValue(name); return QDBusPendingReply(m_soundEffectInter->asyncCallWithArgumentList(QStringLiteral("GetSoundFile"), argumentList)); } bool SoundDBusProxy::hasBattery() { return qvariant_cast(m_powerInter->property("HasBattery")); } void SoundDBusProxy::setSinkDevicePath(const QString &path) { if (m_defaultSink) { m_defaultSink->deleteLater(); } m_defaultSink = new DDBusInterface(AudioService, path, SinkInterface, QDBusConnection::sessionBus(), this); m_defaultSink->setSuffix("Sink"); } bool SoundDBusProxy::muteSink() { return qvariant_cast(m_defaultSink->property("MuteSink")); } void SoundDBusProxy::SetMuteSink(bool in0) { if (m_defaultSink) { QList argumentList; argumentList << QVariant::fromValue(in0); m_defaultSink->asyncCallWithArgumentList(QStringLiteral("SetMute"), argumentList); } } double SoundDBusProxy::balanceSink() { return qvariant_cast(m_defaultSink->property("BalanceSink")); } double SoundDBusProxy::baseVolumeSink() { return qvariant_cast(m_defaultSink->property("BaseVolumeSink")); } void SoundDBusProxy::SetBalanceSink(double in0, bool in1) { if (m_defaultSink) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); m_defaultSink->asyncCallWithArgumentList(QStringLiteral("SetBalance"), argumentList); } } double SoundDBusProxy::volumeSink() { return qvariant_cast(m_defaultSink->property("VolumeSink")); } void SoundDBusProxy::SetVolumeSink(double in0, bool in1) { if (m_defaultSink) { QList argumentList; // Round in0 to 2 decimal places to avoid floating point precision issues double roundedIn0 = qRound(in0 * 100.0) / 100.0; argumentList << QVariant::fromValue(roundedIn0) << QVariant::fromValue(in1); m_defaultSink->asyncCallWithArgumentList(QStringLiteral("SetVolume"), argumentList); } } AudioPort SoundDBusProxy::activePortSink() { return qvariant_cast(m_defaultSink->property("ActivePortSink")); } uint SoundDBusProxy::cardSink() { return qvariant_cast(m_defaultSink->property("CardSink")); } void SoundDBusProxy::setSourceDevicePath(const QString &path) { if (m_defaultSource) { m_defaultSource->deleteLater(); } m_defaultSource = new DDBusInterface(AudioService, path, SourceInterface, QDBusConnection::sessionBus(), this); m_defaultSource->setSuffix("Source"); } void SoundDBusProxy::SetSourceMute(bool in0) { if (m_defaultSource) { QList argumentList; argumentList << QVariant::fromValue(in0); m_defaultSource->asyncCallWithArgumentList(QStringLiteral("SetMute"), argumentList); } } double SoundDBusProxy::volumeSource() { return qvariant_cast(m_defaultSource->property("VolumeSource")); } AudioPort SoundDBusProxy::activePortSource() { return qvariant_cast(m_defaultSource->property("ActivePortSource")); } void SoundDBusProxy::SetSourceVolume(double in0, bool in1) { if (m_defaultSource) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); m_defaultSource->asyncCallWithArgumentList(QStringLiteral("SetVolume"), argumentList); } } uint SoundDBusProxy::cardSource() { return qvariant_cast(m_defaultSource->property("CardSource")); } QDBusObjectPath SoundDBusProxy::GetMeter() { QList argumentList; return QDBusPendingReply(m_defaultSource->asyncCallWithArgumentList(QStringLiteral("GetMeter"), argumentList)); } void SoundDBusProxy::setMeterDevicePath(const QString &path) { if (m_sourceMeter) { m_sourceMeter->deleteLater(); } m_sourceMeter = new DDBusInterface(AudioService, path, MeterInterface, QDBusConnection::sessionBus(), this); m_sourceMeter->setSuffix("Meter"); } double SoundDBusProxy::volumeMeter() { return qvariant_cast(m_sourceMeter->property("VolumeMeter")); } void SoundDBusProxy::Tick() { if (m_sourceMeter) { QList argumentList; m_sourceMeter->asyncCallWithArgumentList(QStringLiteral("Tick"), argumentList); } } QList SoundDBusProxy::sinkInputs() { return qvariant_cast>(m_audioInter->property("SinkInputs")); } QList SoundDBusProxy::sinks() { return qvariant_cast>(m_audioInter->property("Sinks")); } QList SoundDBusProxy::sources() { return qvariant_cast>(m_audioInter->property("Sources")); } bool SoundDBusProxy::muteSource() { return qvariant_cast(m_defaultSource->property("MuteSource")); } bool SoundDBusProxy::audioMono() { return qvariant_cast(m_audioInter->property("Mono")); } void SoundDBusProxy::setAudioMono(bool audioMono) { double oldBalance = balanceSink(); QList argumentList; argumentList << QVariant::fromValue(audioMono); QDBusPendingCall call = m_audioInter->asyncCallWithArgumentList(QStringLiteral("SetMono"), argumentList); QDBusPendingCallWatcher *watcher = new QDBusPendingCallWatcher(call, this); connect(watcher, &QDBusPendingCallWatcher::finished, this, [this, call, watcher, oldBalance] { if (call.isError()) { qWarning() << " set Audio Mono error: " << call.error().message(); } Q_EMIT AudioMonoChanged(this->audioMono()); watcher->deleteLater(); SetBalanceSink(oldBalance,false); }); } ================================================ FILE: src/plugin-sound/operation/sounddbusproxy.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef SOUNDDBUSPROXY_H #define SOUNDDBUSPROXY_H #include "audioport.h" #include #include #include typedef QMap SoundEffectQuestions; using Dtk::Core::DDBusInterface; class QDBusMessage; class SoundDBusProxy : public QObject { Q_OBJECT public: explicit SoundDBusProxy(QObject *parent = nullptr); // Audio bool isServiceRegistered(); void SetPortEnabled(uint in0, const QString &in1, bool in2); void SetPort(uint in0, const QString &in1, int in2); void SetBluetoothAudioMode(const QString &in0); // SoundEffect void GetSoundEnabledMap(); void EnableSound(const QString &name, bool enabled, QObject *receiver, const char *member, const char *errorSlot); QString GetSoundFile(const QString &name); // Power // Sink void setSinkDevicePath(const QString &path); void SetMuteSink(bool in0); void SetBalanceSink(double in0, bool in1); void SetVolumeSink(double in0, bool in1); // Source void setSourceDevicePath(const QString &path); void SetSourceMute(bool in0); void SetSourceVolume(double in0, bool in1); QDBusObjectPath GetMeter(); // SourceMeter void setMeterDevicePath(const QString &path); void Tick(); // Audio Q_PROPERTY(double MaxUIVolume READ maxUIVolume NOTIFY MaxUIVolumeChanged) double maxUIVolume(); Q_PROPERTY(bool IncreaseVolume READ increaseVolume WRITE setIncreaseVolume NOTIFY IncreaseVolumeChanged) bool increaseVolume(); void setIncreaseVolume(bool value); Q_PROPERTY(bool ReduceNoise READ reduceNoise WRITE setReduceNoise NOTIFY ReduceNoiseChanged) bool reduceNoise(); void setReduceNoise(bool value); Q_PROPERTY(bool PausePlayer READ pausePlayer WRITE setPausePlayer NOTIFY PausePlayerChanged) bool pausePlayer(); void setPausePlayer(bool value); Q_PROPERTY(QString CurrentAudioServer READ audioServer WRITE SetAudioServer NOTIFY CurrentAudioServerChanged) QString audioServer(); void SetAudioServer(const QString &in0); // 音频切换的状态 Q_PROPERTY(bool AudioServerState READ audioServerState NOTIFY AudioServerStateChanged) bool audioServerState(); Q_PROPERTY(QString BluetoothAudioMode READ bluetoothAudioMode NOTIFY BluetoothAudioModeChanged) QString bluetoothAudioMode(); Q_PROPERTY(QStringList BluetoothAudioModeOpts READ bluetoothAudioModeOpts NOTIFY BluetoothAudioModeOptsChanged) QStringList bluetoothAudioModeOpts(); Q_PROPERTY(QString CardsWithoutUnavailable READ cardsWithoutUnavailable NOTIFY CardsWithoutUnavailableChanged) QString cardsWithoutUnavailable(); Q_PROPERTY(QDBusObjectPath DefaultSource READ defaultSource NOTIFY DefaultSourceChanged) QDBusObjectPath defaultSource(); Q_PROPERTY(QDBusObjectPath DefaultSink READ defaultSink NOTIFY DefaultSinkChanged) QDBusObjectPath defaultSink(); Q_PROPERTY(QList SinkInputs READ sinkInputs NOTIFY SinkInputsChanged) QList sinkInputs(); Q_PROPERTY(QList Sinks READ sinks NOTIFY SinksChanged) QList sinks(); Q_PROPERTY(QList Sources READ sources NOTIFY SourcesChanged) QList sources(); // Sink Q_PROPERTY(bool MuteSink READ muteSink NOTIFY MuteSinkChanged) bool muteSink(); Q_PROPERTY(double BalanceSink READ balanceSink NOTIFY BalanceSinkChanged) double balanceSink(); Q_PROPERTY(double BaseVolumeSink READ baseVolumeSink NOTIFY BaseVolumeSinkChanged) double baseVolumeSink(); Q_PROPERTY(uint CardSink READ cardSink NOTIFY CardSinkChanged) uint cardSink(); Q_PROPERTY(double VolumeSink READ volumeSink NOTIFY VolumeSinkChanged) double volumeSink(); Q_PROPERTY(AudioPort ActivePortSink READ activePortSink NOTIFY ActivePortSinkChanged) AudioPort activePortSink(); // Source Q_PROPERTY(bool MuteSource READ muteSource NOTIFY MuteSourceChanged) bool muteSource(); Q_PROPERTY(uint CardSource READ cardSource NOTIFY CardSourceChanged) uint cardSource(); Q_PROPERTY(double VolumeSource READ volumeSource NOTIFY VolumeSourceChanged) double volumeSource(); Q_PROPERTY(AudioPort ActivePortSource READ activePortSource NOTIFY ActivePortSourceChanged) AudioPort activePortSource(); // Power Q_PROPERTY(bool HasBattery READ hasBattery NOTIFY HasBatteryChanged) bool hasBattery(); // SoundEffect Q_PROPERTY(bool Enabled READ enabled WRITE setEnabled NOTIFY EnabledChanged) bool enabled(); void setEnabled(bool value); // Audio.Meter Q_PROPERTY(double VolumeMeter READ volumeMeter NOTIFY VolumeMeterChanged) double volumeMeter(); // Audio.Mono Q_PROPERTY(bool AudioMono READ audioMono WRITE setAudioMono NOTIFY AudioMonoChanged) bool audioMono(); void setAudioMono(bool audioMono); Q_SIGNALS: // Audio SIGNALS void PortEnabledChanged(uint in0, const QString &in1, bool in2); void BluetoothAudioModeChanged(const QString &value) const; void BluetoothAudioModeOptsChanged(const QStringList &value) const; void CardsChanged(const QString &value) const; void CardsWithoutUnavailableChanged(const QString &value) const; void DefaultSinkChanged(const QDBusObjectPath &value) const; void DefaultSourceChanged(const QDBusObjectPath &value) const; void IncreaseVolumeChanged(bool value) const; void MaxUIVolumeChanged(double value) const; void ReduceNoiseChanged(bool value) const; void PausePlayerChanged(bool value) const; void SinkInputsChanged(const QList &value) const; void SinksChanged(const QList &value) const; void SourcesChanged(const QList &value) const; void CurrentAudioServerChanged(const QString &value) const; void AudioServerStateChanged(const bool state) const; // SoundEffect SIGNALS void EnabledChanged(bool value) const; void pendingCallWatcherFinished(QMap map); // Power SIGNALS void HasBatteryChanged(bool value) const; // Sink SIGNALS void MuteSinkChanged(bool value) const; void BalanceSinkChanged(double value) const; void BaseVolumeSinkChanged(double value) const; void CardSinkChanged(uint value) const; void VolumeSinkChanged(double value) const; void ActivePortSinkChanged(AudioPort value) const; // Source SIGNALS void MuteSourceChanged(bool value) const; void VolumeSourceChanged(double value) const; void ActivePortSourceChanged(AudioPort value) const; void CardSourceChanged(uint value) const; // Meter SIGNALS void VolumeMeterChanged(double value) const; void AudioMonoChanged(bool value) const; private: DDBusInterface *m_audioInter; DDBusInterface *m_soundEffectInter; DDBusInterface *m_powerInter; DDBusInterface *m_defaultSink; DDBusInterface *m_defaultSource; DDBusInterface *m_sourceMeter; }; #endif // SOUNDDBUSPROXY_H ================================================ FILE: src/plugin-sound/operation/soundeffectsmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "soundeffectsmodel.h" SoundEffectsModel::SoundEffectsModel(QObject *parent) : QAbstractListModel{parent} { } SoundEffectsModel::~SoundEffectsModel() { clearData(); } void SoundEffectsModel::addData(SoundEffectsData* data) { m_soundEffectsData.append(data); } void SoundEffectsModel::removeData(SoundEffectsData *data) { m_soundEffectsData.removeAll(data); delete data; data = NULL; } void SoundEffectsModel::clearData() { for (SoundEffectsData* soundEffectsData : m_soundEffectsData) { delete soundEffectsData; } m_soundEffectsData.clear(); } SoundEffectsData* SoundEffectsModel::getSystemSoundEffect(int index) { if (m_soundEffectsData.count() < index || index < 0) { return nullptr; } return m_soundEffectsData.at(index); } int SoundEffectsModel::getRowCount() { return m_soundEffectsData.count(); } void SoundEffectsModel::updateSoundEffectsData(int index, bool enable) { if (index < 0 || index >= m_soundEffectsData.size()) return; m_soundEffectsData[index]->setChecked(enable); QModelIndex modelIndex = createIndex(index, 0); emit dataChanged(modelIndex, modelIndex, { IsEnabled }); } void SoundEffectsModel::updateSoundEffectsAniIcon(int index, QString path) { if (index < 0 || index >= m_soundEffectsData.size() || m_soundEffectsData[index]->aniIconPath() == path) return; m_soundEffectsData[index]->setAniIconPath(path); QModelIndex modelIndex = createIndex(index, 0); emit dataChanged(modelIndex, modelIndex, { AniIconPath }); } int SoundEffectsModel::rowCount(const QModelIndex &parent) const { Q_UNUSED(parent); return m_soundEffectsData.count(); } QVariant SoundEffectsModel::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() >= m_soundEffectsData.count()) return QVariant(); const SoundEffectsData* soundEffectsData = m_soundEffectsData[index.row()]; if (role == NameRole) return soundEffectsData->name(); else if (role == DisplayTextRole) return soundEffectsData->dispalyText(); else if (role == IsEnabled) return soundEffectsData->checked(); else if (role == AniIconPath) { return soundEffectsData->aniIconPath(); } return QVariant(); } ================================================ FILE: src/plugin-sound/operation/soundeffectsmodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef SOUNDEFFECTSMODEL_H #define SOUNDEFFECTSMODEL_H #include #include #include "soundEffectsData.h" #include class SoundEffectsModel : public QAbstractListModel { Q_OBJECT QML_NAMED_ELEMENT(SoundEffectsModel) QML_SINGLETON public: enum soundEffectsRoles{ NameRole = Qt::UserRole + 1, DisplayTextRole, IsEnabled, AniIconPath }; explicit SoundEffectsModel(QObject *parent = nullptr); ~SoundEffectsModel(); void addData(SoundEffectsData* data); void removeData(SoundEffectsData* data); void clearData(); SoundEffectsData* getSystemSoundEffect(int index); int getRowCount(); void updateSoundEffectsData(int index, bool enable); void updateSoundEffectsAniIcon(int index, QString path); protected: int rowCount(const QModelIndex &parent = QModelIndex()) const override; Q_INVOKABLE QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QHash roleNames() const override { QHash roles; roles[NameRole] = "name"; roles[DisplayTextRole] = "dispalyText"; roles[IsEnabled] = "isEnabled"; roles[AniIconPath] = "aniIconPath"; return roles; } private: QList m_soundEffectsData; }; #endif // SOUNDEFFECTSMODEL_H ================================================ FILE: src/plugin-sound/operation/soundmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "soundmodel.h" #include #include #include #include #include #include Q_LOGGING_CATEGORY(DdcSoundModel, "dcc-sound-model") const static Dtk::Core::DSysInfo::UosType UosType = Dtk::Core::DSysInfo::uosType(); const static bool IsServerSystem = (Dtk::Core::DSysInfo::UosServer == UosType); //是否是服务器版 static const QMap SOUND_EFFECT_MAP{ { DDesktopServices::SystemSoundEffect::SSE_Notifications, "message" }, { DDesktopServices::SystemSoundEffect::SEE_Screenshot, "camera-shutter" }, { DDesktopServices::SystemSoundEffect::SSE_EmptyTrash, "trash-empty" }, { DDesktopServices::SystemSoundEffect::SSE_SendFileComplete, "x-deepin-app-sent-to-desktop" }, { DDesktopServices::SystemSoundEffect::SSE_BootUp, "desktop-login" }, { DDesktopServices::SystemSoundEffect::SSE_Shutdown, "system-shutdown" }, { DDesktopServices::SystemSoundEffect::SSE_Logout, "desktop-logout" }, { DDesktopServices::SystemSoundEffect::SSE_WakeUp, "suspend-resume" }, { DDesktopServices::SystemSoundEffect::SSE_VolumeChange, "audio-volume-change" }, { DDesktopServices::SystemSoundEffect::SSE_LowBattery, "power-unplug-battery-low" }, { DDesktopServices::SystemSoundEffect::SSE_PlugIn, "power-plug" }, { DDesktopServices::SystemSoundEffect::SSE_PlugOut, "power-unplug" }, { DDesktopServices::SystemSoundEffect::SSE_DeviceAdded, "device-added" }, { DDesktopServices::SystemSoundEffect::SSE_DeviceRemoved, "device-removed" }, { DDesktopServices::SystemSoundEffect::SSE_Error, "dialog-error" } }; SoundModel::SoundModel(QObject *parent) : QObject(parent) , m_speakerOn(true) , m_microphoneOn(true) , m_enableSoundEffect(false) , m_isLaptop(false) , m_speakerVolume(75) , m_speakerBalance(0) , m_microphoneVolume(75) , m_maxUIVolume(0.0) , m_waitSoundReceiptTime(0) #ifndef DCC_DISABLE_FEEDBACK , m_microphoneFeedback(50) #endif , m_audioCards("") , m_currentBluetoothMode("") , m_inputVisibled(false) , m_outputVisibled(false) , m_outPutPortComboIndex(0) , m_outPutPortComboEnable(true) , m_inPutPortComboIndex(0) , m_inPutPortComboEnable(true) , m_soundEffectsModel(new SoundEffectsModel(this)) , m_soundInputDeviceModel(new SoundDeviceModel(this)) , m_soundOutputDeviceModel(new SoundDeviceModel(this)) , m_audioServerModel(new AudioServerModel(this)) , m_inPutPortCount(0) , m_outPutCount(0) , m_audioMono(false) , m_showBluetoothMode(false) , m_showInputBluetoothMode(false) { m_soundEffectMapBattery = { { tr("Boot up"), DDesktopServices::SSE_BootUp }, { tr("Shut down"), DDesktopServices::SSE_Shutdown }, { tr("Log out"), DDesktopServices::SSE_Logout }, { tr("Wake up"), DDesktopServices::SSE_WakeUp }, { tr("Volume +/-"), DDesktopServices::SSE_VolumeChange }, { tr("Notification"), DDesktopServices::SSE_Notifications }, { tr("Low battery"), DDesktopServices::SSE_LowBattery }, { tr("Send icon in Launcher to Desktop"), DDesktopServices::SSE_SendFileComplete }, { tr("Empty Trash"), DDesktopServices::SSE_EmptyTrash }, { tr("Plug in"), DDesktopServices::SSE_PlugIn }, { tr("Plug out"), DDesktopServices::SSE_PlugOut }, { tr("Removable device connected"), DDesktopServices::SSE_DeviceAdded }, { tr("Removable device removed"), DDesktopServices::SSE_DeviceRemoved }, { tr("Error"), DDesktopServices::SSE_Error }, }; m_soundEffectMapPower = { { tr("Boot up"), DDesktopServices::SSE_BootUp }, { tr("Shut down"), DDesktopServices::SSE_Shutdown }, { tr("Log out"), DDesktopServices::SSE_Logout }, { tr("Wake up"), DDesktopServices::SSE_WakeUp }, { tr("Volume +/-"), DDesktopServices::SSE_VolumeChange }, { tr("Notification"), DDesktopServices::SSE_Notifications }, { tr("Send icon in Launcher to Desktop"), DDesktopServices::SSE_SendFileComplete }, { tr("Empty Trash"), DDesktopServices::SSE_EmptyTrash }, { tr("Removable device connected"), DDesktopServices::SSE_DeviceAdded }, { tr("Removable device removed"), DDesktopServices::SSE_DeviceRemoved }, { tr("Error"), DDesktopServices::SSE_Error }, }; if (IsServerSystem) { m_soundEffectMapBattery.removeOne({ tr("Wake up"), DDesktopServices::SSE_WakeUp }); m_soundEffectMapPower.removeOne({ tr("Wake up"), DDesktopServices::SSE_WakeUp }); } qmlRegisterType("SoundDeviceModel", 1, 0, "SoundDeviceModel"); } SoundModel::~SoundModel() { for (Port *port : m_ports) { if (port) port->deleteLater(); } } void SoundModel::updatePortCombo() { QStringList outPutPortCombo; QStringList inPutPortCombo; for (Port* port : m_ports) { if (port->isEnabled()) { switch (port->direction()) { case Port::In: inPutPortCombo.append(port->name() + "(" + port->cardName() + ")"); break; case Port::Out: outPutPortCombo.append(port->name() + "(" + port->cardName() + ")"); break; } } } setInPutPortCombo(inPutPortCombo); setOutPutPortCombo(outPutPortCombo); } int SoundModel::inPutPortComboIndex() const { return m_inPutPortComboIndex; } void SoundModel::setInPutPortComboIndex(int newInPutPortComboIndex) { if (m_inPutPortComboIndex == newInPutPortComboIndex) return; m_inPutPortComboIndex = newInPutPortComboIndex; emit inPutPortComboIndexChanged(); } QStringList SoundModel::inPutPortCombo() const { return m_inPutPortCombo; } void SoundModel::setInPutPortCombo(const QStringList &newInPutPortCombo) { if (m_inPutPortCombo == newInPutPortCombo) return; m_inPutPortCombo = newInPutPortCombo; emit inPutPortComboChanged(); } int SoundModel::outPutPortComboIndex() const { return m_outPutPortComboIndex; } void SoundModel::setOutPutPortComboIndex(int newOutPutPortComboIndex) { if (newOutPutPortComboIndex < 0 || m_outPutPortComboIndex == newOutPutPortComboIndex) return; m_outPutPortComboIndex = newOutPutPortComboIndex; emit outPutPortComboIndexChanged(); } void SoundModel::setSpeakerOn(bool speakerOn) { if (speakerOn != m_speakerOn) { m_speakerOn = speakerOn; Q_EMIT speakerOnChanged(speakerOn); } } void SoundModel::setPortEnable(bool enable) { if (enable != m_portEnable) m_portEnable = enable; Q_EMIT isPortEnableChanged(enable); } void SoundModel::setReduceNoise(bool reduceNoise) { if (reduceNoise != m_reduceNoise) { m_reduceNoise = reduceNoise; Q_EMIT reduceNoiseChanged(reduceNoise); } } void SoundModel::setPausePlayer(bool pausePlayer) { if (pausePlayer != m_pausePlayer) { m_pausePlayer = pausePlayer; Q_EMIT pausePlayerChanged(pausePlayer); } } void SoundModel::setMicrophoneOn(bool microphoneOn) { if (microphoneOn != m_microphoneOn) { m_microphoneOn = microphoneOn; Q_EMIT microphoneOnChanged(microphoneOn); } } void SoundModel::setSpeakerBalance(double speakerBalance) { if (!qFuzzyCompare(speakerBalance, m_speakerBalance)) { m_speakerBalance = speakerBalance; Q_EMIT speakerBalanceChanged(speakerBalance); } } void SoundModel::setMicrophoneVolume(double microphoneVolume) { if (!qFuzzyCompare(microphoneVolume, m_microphoneVolume)) { m_microphoneVolume = microphoneVolume; Q_EMIT microphoneVolumeChanged(microphoneVolume); } } #ifndef DCC_DISABLE_FEEDBACK void SoundModel::setMicrophoneFeedback(double microphoneFeedback) { if (!qFuzzyCompare(microphoneFeedback, m_microphoneFeedback)) { m_microphoneFeedback = microphoneFeedback; Q_EMIT microphoneFeedbackChanged(microphoneFeedback); } } #endif void SoundModel::setPort(Port *port) { Q_EMIT setPortChanged(port); } void SoundModel::addPort(Port *port) { if (!containsPort(port)) { m_ports.append(port); if (port->direction() == Port::Out) { m_outputPorts.append(port); setOutPutCount(static_cast(m_outputPorts.count())); if (port->isEnabled()) { m_outPutPortCombo.append(port->name() + "(" + port->cardName() + ")"); } m_soundOutputDeviceModel->addData(port); } else { m_inputPorts.append(port); setInPutPortCount(static_cast(m_inputPorts.count())); if (port->isEnabled()) { m_inPutPortCombo.append(port->name() + "(" + port->cardName() + ")"); } m_soundInputDeviceModel->addData(port); emit inPutPortComboChanged(); } Q_EMIT portAdded(port); Q_EMIT soundDeviceStatusChanged(); } } void SoundModel::removePort(const QString &portId, const uint &cardId) { Port *port = findPort(portId, cardId); if (port) { Q_EMIT portRemoved(portId, cardId, port->direction()); m_ports.removeOne(port); if (port->direction() == Port::Out) { m_outputPorts.removeOne(port); setOutPutCount(static_cast(m_outputPorts.count())); m_outPutPortCombo.removeOne(port->name() + "(" + port->cardName() + ")"); m_soundOutputDeviceModel->removeData(port); } else { m_inputPorts.removeOne(port); setInPutPortCount(static_cast(m_inputPorts.count())); m_inPutPortCombo.removeOne(port->name() + "(" + port->cardName() + ")"); m_soundInputDeviceModel->removeData(port); emit inPutPortComboChanged(); } port->deleteLater(); } } bool SoundModel::containsPort(const Port *port) { return findPort(port->id(), port->cardId()) != nullptr; } Port *SoundModel::findPort(const QString &portId, const uint &cardId) const { auto res = std::find_if(m_ports.cbegin(), m_ports.end(), [=](const Port *data) -> bool { return ((data->id() == portId) && (data->cardId() == cardId)); }); if (res != m_ports.cend()) { return *res; } return nullptr; } QList SoundModel::ports() const { return m_ports; } void SoundModel::setSpeakerVolume(double speakerVolume) { if (!qFuzzyCompare(m_speakerVolume, speakerVolume)) { m_speakerVolume = speakerVolume; Q_EMIT speakerVolumeChanged(speakerVolume); } } void SoundModel::setMaxUIVolume(double value) { double val = qRound(value * 10) / 10.0; if (!qFuzzyCompare(val, m_maxUIVolume)) { m_maxUIVolume = val; Q_EMIT maxUIVolumeChanged(val); } } QDBusObjectPath SoundModel::defaultSource() const { return m_defaultSource; } void SoundModel::setDefaultSource(const QDBusObjectPath &defaultSource) { m_defaultSource = defaultSource; Q_EMIT defaultSourceChanged(m_defaultSource); } QDBusObjectPath SoundModel::defaultSink() const { return m_defaultSink; } void SoundModel::setDefaultSink(const QDBusObjectPath &defaultSink) { m_defaultSink = defaultSink; Q_EMIT defaultSinkChanged(m_defaultSink); } QString SoundModel::audioCards() const { return m_audioCards; } void SoundModel::setAudioCards(const QString &audioCards) { m_audioCards = audioCards; Q_EMIT audioCardsChanged(m_audioCards); } SoundEffectList SoundModel::soundEffectMap() const { if (isLaptop()) { // 笔记本 return m_soundEffectMapBattery; } else { // 台式机 return m_soundEffectMapPower; } } void SoundModel::setEffectData(DDesktopServices::SystemSoundEffect effect, const bool enable) { if (m_soundEffectData[effect] == enable) return; m_soundEffectData[effect] = enable; Q_EMIT soundEffectDataChanged(effect, enable); } bool SoundModel::queryEffectData(DDesktopServices::SystemSoundEffect effect) { return m_soundEffectData[effect]; } void SoundModel::setEnableSoundEffect(bool enableSoundEffect) { if (m_enableSoundEffect == enableSoundEffect) return; m_enableSoundEffect = enableSoundEffect; Q_EMIT enableSoundEffectChanged(enableSoundEffect); } void SoundModel::updateSoundEffectPath(DDesktopServices::SystemSoundEffect effect, const QString &path) { m_soundEffectPaths[effect] = path; } const QString SoundModel::soundEffectPathByType(DDesktopServices::SystemSoundEffect effect) { return m_soundEffectPaths[effect]; } const QString SoundModel::getNameByEffectType(DDesktopServices::SystemSoundEffect effect) const { return SOUND_EFFECT_MAP.value(effect); } DDesktopServices::SystemSoundEffect SoundModel::getEffectTypeByGsettingName(const QString &name) { return SOUND_EFFECT_MAP.key(name); } bool SoundModel::checkSEExist(const QString &name) { return SOUND_EFFECT_MAP.values().contains(name); } bool SoundModel::isLaptop() const { return m_isLaptop; } void SoundModel::setIsLaptop(bool isLaptop) { if (isLaptop == m_isLaptop) return; m_isLaptop = isLaptop; Q_EMIT isLaptopChanged(isLaptop); } bool SoundModel::isIncreaseVolume() const { return m_increaseVolume; } void SoundModel::setIncreaseVolume(bool value) { if (m_increaseVolume != value) { m_increaseVolume = value; Q_EMIT increaseVolumeChanged(value); } } void SoundModel::setBluetoothAudioModeOpts(const QStringList &modes) { if (modes != m_bluetoothModeOpts) { m_bluetoothModeOpts = modes; Q_EMIT bluetoothModeOptsChanged(modes); } } void SoundModel::setCurrentBluetoothAudioMode(const QString &mode) { if (mode != m_currentBluetoothMode) { m_currentBluetoothMode = mode; Q_EMIT bluetoothModeChanged(mode); } } void SoundModel::setWaitSoundReceiptTime(const int receiptTime) { // 配置端⼝切换延时时间 if (m_waitSoundReceiptTime != receiptTime) { qCDebug(DdcSoundModel) << "Sound Receopt Time is: " << receiptTime; m_waitSoundReceiptTime = receiptTime; } } void SoundModel::setAudioServerChangedState(const bool state) { if (m_audioServerStatus != state) { m_audioServerStatus = state; Q_EMIT onSetAudioServerFinish(state); } } void SoundModel::updateSoundEffectsModel() { m_soundEffectsModel->clearData(); SoundEffectList list = soundEffectMap(); for (std::pair item : list) { if (m_soundEffectData.contains(item.second) && m_soundEffectPaths.contains(item.second)) { SoundEffectsData* data = new SoundEffectsData; data->setName(item.first); data->setSystemSoundEffect(item.second); data->setChecked(m_soundEffectData[item.second]); data->setPath(m_soundEffectPaths[item.second]); data->setAniIconPath(""); m_soundEffectsModel->addData(data); } } } QString SoundModel::getSoundEffectsType(int index) { SoundEffectsData* data = m_soundEffectsModel->getSystemSoundEffect(index); return data ? getNameByEffectType(data->systemSoundEffect()) : ""; } void SoundModel::setSoundEffectEnable(int index, bool enable) { m_soundEffectsModel->updateSoundEffectsData(index, enable); } void SoundModel::initSoundDeviceModel(Port::Direction direction) { SoundDeviceModel *model = direction == Port::In ? soundInputDeviceModel() : soundOutputDeviceModel(); QList ports = direction == Port::In ? m_inputPorts : m_outputPorts; model->clearData(); for (Port *port : ports) { model->addData(port); } } Port *SoundModel::getSoundDeviceData(int index, int portType) { SoundDeviceModel *soundDeviceModel = portType == Port::In ? soundInputDeviceModel() : soundOutputDeviceModel(); return soundDeviceModel ? soundDeviceModel->getSoundDeviceData(index) : nullptr; } void SoundModel::updateSoundDeviceModel(Port *port) { SoundDeviceModel *soundDeviceModel = port->direction() == Port::In ? soundInputDeviceModel() : soundOutputDeviceModel(); soundDeviceModel->updateSoundDeviceData(port); } void SoundModel::updateAllDeviceModel() { m_soundOutputDeviceModel->updateAllSoundDeviceData(); m_soundInputDeviceModel->updateAllSoundDeviceData(); } void SoundModel::updateActiveComboIndex() { setInPutPortComboIndex(m_soundInputDeviceModel->getCurrentIndex()); setOutPutPortComboIndex(m_soundOutputDeviceModel->getCurrentIndex()); } void SoundModel::setOutPutCount(int newOutPutCount) { if (m_outPutCount == newOutPutCount) return; m_outPutCount = newOutPutCount; emit outPutCountChanged(); } void SoundModel::updatePlayAniIconPath(int index, const QString &newPlayAniIconPath) { m_soundEffectsModel->updateSoundEffectsAniIcon(index, newPlayAniIconPath); } AudioServerModel *SoundModel::audioServerModel() const { return m_audioServerModel; } void SoundModel::setAudioServerModel(AudioServerModel *newAudioServerModel) { m_audioServerModel = newAudioServerModel; } void SoundModel::addAudioServerData(const AudioServerData &newAudioServerData) { m_audioServerModel->addData(newAudioServerData); } bool SoundModel::audioMono() const { return m_audioMono; } void SoundModel::setAudioMono(bool newAudioMono) { m_audioMono = newAudioMono; emit audioMonoChanged(); } bool SoundModel::showBluetoothMode() const { return m_showBluetoothMode; } void SoundModel::setShowBluetoothMode(bool newShowBluetoothMode) { if (m_showBluetoothMode == newShowBluetoothMode) return; m_showBluetoothMode = newShowBluetoothMode; emit showBluetoothModeChanged(); } bool SoundModel::outPutPortComboEnable() const { return m_outPutPortComboEnable; } void SoundModel::setOutPutPortComboEnable(bool newOutPutPortComboEnable) { if (m_outPutPortComboEnable == newOutPutPortComboEnable) return; m_outPutPortComboEnable = newOutPutPortComboEnable; emit outPutPortComboEnableChanged(); } bool SoundModel::inPutPortComboEnable() const { return m_inPutPortComboEnable; } void SoundModel::setInPutPortComboEnable(bool newInPutPortComboEnable) { if (m_inPutPortComboEnable == newInPutPortComboEnable) return; m_inPutPortComboEnable = newInPutPortComboEnable; emit inPutPortComboEnableChanged(); } void SoundModel::setInPutPortCount(int newInPutPortCount) { if (m_inPutPortCount == newInPutPortCount) return; m_inPutPortCount = newInPutPortCount; emit inPutPortCountChanged(); } int SoundModel::outPutCount() const { return m_outPutCount; } int SoundModel::inPutPortCount() const { return m_inPutPortCount; } SoundDeviceModel *SoundModel::soundOutputDeviceModel() const { return m_soundOutputDeviceModel; } void SoundModel::setSoundOutputDeviceModel(SoundDeviceModel *newSoundOutputDeviceModel) { m_soundOutputDeviceModel = newSoundOutputDeviceModel; } int SoundModel::getDeviceManagerRowCount(int portType) const { SoundDeviceModel* soundDeviceModel = portType == Port::In ? soundInputDeviceModel() : soundOutputDeviceModel(); return soundDeviceModel ? soundDeviceModel->getRowCount() : 0; } SoundDeviceModel *SoundModel::soundInputDeviceModel() const { return m_soundInputDeviceModel; } void SoundModel::setSoundInputDeviceModel(SoundDeviceModel *newSoundInputDeviceModel) { m_soundInputDeviceModel = newSoundInputDeviceModel; } SoundEffectsModel* SoundModel::soundEffectsModel() const { return m_soundEffectsModel; } int SoundModel::getSoundEffectsRowCount() const { return m_soundEffectsModel ? m_soundEffectsModel->getRowCount() : 0; } void SoundModel::setAudioServer(const QString &audioServer) { if (m_audioServer != audioServer) { m_audioServer = audioServer; Q_EMIT curAudioServerChanged(audioServer); m_audioServerModel->updateCheckedService(audioServer); } } void SoundModel::setOutPutPortCombo(const QStringList& outPutPort) { m_outPutPortCombo = outPutPort; Q_EMIT outPutPortComboChanged(m_outPutPortCombo); } QString SoundModel::getListName(int index) const { Q_UNUSED(index) return QString(); } bool SoundModel::showInputBluetoothMode() const { return m_showInputBluetoothMode; } void SoundModel::setShowInputBluetoothMode(bool newShowInputBluetoothMode) { if (m_showInputBluetoothMode == newShowInputBluetoothMode) return; m_showInputBluetoothMode = newShowInputBluetoothMode; emit showInputBluetoothModeChanged(); } ================================================ FILE: src/plugin-sound/operation/soundmodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef DCC_SOUND_SOUNDMODEL_H #define DCC_SOUND_SOUNDMODEL_H #include #include #include #include #include #include #include "soundeffectsmodel.h" #include "soundDeviceModel.h" #include "audioservermodel.h" #include "port.h" DGUI_USE_NAMESPACE QT_BEGIN_NAMESPACE class QStandardItemModel; class QString; QT_END_NAMESPACE using SoundEffectList = QList>; class SoundModel : public QObject { Q_OBJECT Q_PROPERTY(double speakerVolume READ speakerVolume NOTIFY speakerVolumeChanged) Q_PROPERTY(bool increaseVolume READ isIncreaseVolume NOTIFY increaseVolumeChanged) Q_PROPERTY(double speakerBalance READ speakerBalance NOTIFY speakerBalanceChanged) Q_PROPERTY(QStringList outPutPortCombo READ outPutPortCombo NOTIFY outPutPortComboChanged) Q_PROPERTY(bool pausePlayer READ pausePlayer NOTIFY pausePlayerChanged) Q_PROPERTY(double microphoneVolume READ microphoneVolume NOTIFY microphoneVolumeChanged) Q_PROPERTY(bool reduceNoise READ reduceNoise NOTIFY reduceNoiseChanged) Q_PROPERTY(int outPutPortComboIndex READ outPutPortComboIndex NOTIFY outPutPortComboIndexChanged FINAL) Q_PROPERTY(double microphoneFeedback READ microphoneFeedback NOTIFY microphoneFeedbackChanged) Q_PROPERTY(bool enableSoundEffect READ enableSoundEffect NOTIFY enableSoundEffectChanged) Q_PROPERTY(QStringList inPutPortCombo READ inPutPortCombo WRITE setInPutPortCombo NOTIFY inPutPortComboChanged FINAL) Q_PROPERTY(int inPutPortComboIndex READ inPutPortComboIndex WRITE setInPutPortComboIndex NOTIFY inPutPortComboIndexChanged FINAL) Q_PROPERTY(int inPutPortCount READ inPutPortCount NOTIFY inPutPortCountChanged FINAL) Q_PROPERTY(int outPutCount READ outPutCount NOTIFY outPutCountChanged FINAL) Q_PROPERTY(bool audioServerStatus READ audioServerChangedState NOTIFY onSetAudioServerFinish FINAL) Q_PROPERTY(QString audioServer READ audioServer NOTIFY curAudioServerChanged FINAL) Q_PROPERTY(bool audioMono READ audioMono NOTIFY audioMonoChanged FINAL) Q_PROPERTY(QStringList bluetoothModeOpts READ bluetoothAudioModeOpts NOTIFY bluetoothModeOptsChanged FINAL) Q_PROPERTY(QString currentBluetoothAudioMode READ currentBluetoothAudioMode NOTIFY bluetoothModeChanged FINAL) Q_PROPERTY(bool showBluetoothMode READ showBluetoothMode NOTIFY showBluetoothModeChanged FINAL) Q_PROPERTY(bool showInputBluetoothMode READ showInputBluetoothMode NOTIFY showInputBluetoothModeChanged FINAL) Q_PROPERTY(bool outPutPortComboEnable READ outPutPortComboEnable NOTIFY outPutPortComboEnableChanged FINAL) Q_PROPERTY(bool inPutPortComboEnable READ inPutPortComboEnable NOTIFY inPutPortComboEnableChanged FINAL) Q_PROPERTY(bool speakerOn READ speakerOn NOTIFY speakerOnChanged FINAL) Q_PROPERTY(bool microphoneOn READ microphoneOn NOTIFY microphoneOnChanged FINAL) QML_NAMED_ELEMENT(SoundModel) QML_SINGLETON public: explicit SoundModel(QObject *parent = 0); ~SoundModel(); bool speakerOn() const { return m_speakerOn; } void setSpeakerOn(bool speakerOn); inline bool isPortEnable() const { return m_portEnable; } void setPortEnable(bool enable); inline bool reduceNoise() const { return m_reduceNoise; } void setReduceNoise(bool reduceNoise); inline bool pausePlayer() const { return m_pausePlayer; } void setPausePlayer(bool reduceNoise); inline bool microphoneOn() const { return m_microphoneOn; } void setMicrophoneOn(bool microphoneOn); inline double speakerBalance() const { return m_speakerBalance ; } void setSpeakerBalance(double speakerBalance); inline double microphoneVolume() const { return m_microphoneVolume; } void setMicrophoneVolume(double microphoneVolume); inline QStringList outPutPortCombo() const { return m_outPutPortCombo;} void setOutPutPortCombo(const QStringList& outPutPort); #ifndef DCC_DISABLE_FEEDBACK inline double microphoneFeedback() const { return m_microphoneFeedback; } void setMicrophoneFeedback(double microphoneFeedback); #endif void setPort(Port *port); void addPort(Port *port); void removePort(const QString &portId, const uint &cardId); bool containsPort(const Port *port); Port *findPort(const QString &portId, const uint &cardId) const; QList ports() const; inline double speakerVolume() const { return m_speakerVolume; } void setSpeakerVolume(double speakerVolume); QDBusObjectPath defaultSource() const; void setDefaultSource(const QDBusObjectPath &defaultSource); QDBusObjectPath defaultSink() const; void setDefaultSink(const QDBusObjectPath &defaultSink); QString audioCards() const; void setAudioCards(const QString &audioCards); inline double MaxUIVolume() const { return m_maxUIVolume; } void setMaxUIVolume(double value); SoundEffectList soundEffectMap() const; void setEffectData(DDesktopServices::SystemSoundEffect effect, const bool enable); bool queryEffectData(DDesktopServices::SystemSoundEffect effect); bool enableSoundEffect() const { return m_enableSoundEffect; } void setEnableSoundEffect(bool enableSoundEffect); void updateSoundEffectPath(DDesktopServices::SystemSoundEffect effect, const QString &path); inline QMap soundEffectPaths() { return m_soundEffectPaths; } const QString soundEffectPathByType(DDesktopServices::SystemSoundEffect effect); const QString getNameByEffectType(DDesktopServices::SystemSoundEffect effect) const; DDesktopServices::SystemSoundEffect getEffectTypeByGsettingName(const QString &name); bool checkSEExist(const QString &name); // SE: Sound Effect bool isLaptop() const; void setIsLaptop(bool isLaptop); bool isIncreaseVolume() const; void setIncreaseVolume(bool value); void initMicroPhone() { Q_EMIT microphoneOnChanged(m_microphoneOn); } void initSpeaker() { Q_EMIT speakerOnChanged(m_speakerOn); } inline QStringList bluetoothAudioModeOpts() { return m_bluetoothModeOpts; } void setBluetoothAudioModeOpts(const QStringList &modes); // 设置当前蓝牙耳机模式 inline QString currentBluetoothAudioMode() { return m_currentBluetoothMode; } void setCurrentBluetoothAudioMode(const QString &mode); // 配置等待 inline int currentWaitSoundReceiptTime() { return m_waitSoundReceiptTime; } void setWaitSoundReceiptTime(const int receiptTime); // 设置音频框架 inline QString audioServer() const { return m_audioServer; } void setAudioServer(const QString &serverName); // 音频框架切换的状态 inline bool audioServerChangedState() const { return m_audioServerStatus; } void setAudioServerChangedState(const bool state); // 更新系统声效ui数据 void updateSoundEffectsModel(); QString getSoundEffectsType(int index); void setSoundEffectEnable(int index, bool enable); // 初始化输入设备ui数据 void initSoundDeviceModel(Port::Direction direction); Port* getSoundDeviceData(int index, int portType); void updateSoundDeviceModel(Port* port); void updateAllDeviceModel(); void updateActiveComboIndex(); int outPutPortComboIndex() const; void setOutPutPortComboIndex(int newOutPutPortComboIndex); QStringList inPutPortCombo() const; void setInPutPortCombo(const QStringList &newInPutPortCombo); int inPutPortComboIndex() const; void setInPutPortComboIndex(int newInPutPortComboIndex); void updatePortCombo(); Q_INVOKABLE SoundEffectsModel* soundEffectsModel() const; Q_INVOKABLE QString getListName(int index) const; Q_INVOKABLE int getSoundEffectsRowCount() const; Q_INVOKABLE SoundDeviceModel *soundInputDeviceModel() const; void setSoundInputDeviceModel(SoundDeviceModel *newSoundInputDeviceModel); Q_INVOKABLE SoundDeviceModel *soundOutputDeviceModel() const; void setSoundOutputDeviceModel(SoundDeviceModel *newSoundOutputDeviceModel); Q_INVOKABLE int getDeviceManagerRowCount(int portType) const; int inPutPortCount() const; int outPutCount() const; void setInPutPortCount(int newInPutPortCount); void setOutPutCount(int newOutPutCount); void updatePlayAniIconPath(int index, const QString &newPlayAniIconPath); Q_INVOKABLE AudioServerModel *audioServerModel() const; void setAudioServerModel(AudioServerModel *newAudioServerModel); void addAudioServerData(const AudioServerData &newAudioServerData); bool audioMono() const; void setAudioMono(bool newAudioMono); bool showBluetoothMode() const; void setShowBluetoothMode(bool newShowBluetoothMode); bool outPutPortComboEnable() const; void setOutPutPortComboEnable(bool newOutPutPortComboEnable); bool inPutPortComboEnable() const; void setInPutPortComboEnable(bool newInPutPortComboEnable); bool showInputBluetoothMode() const; void setShowInputBluetoothMode(bool newShowInputBluetoothMode); private: Q_SIGNALS: void speakerOnChanged(bool speakerOn) const; void microphoneOnChanged(bool microphoneOn) const; void soundEffectOnChanged(bool soundEffectOn) const; void speakerVolumeChanged(double speakerVolume) const; void speakerBalanceChanged(double speakerBalance) const; void microphoneVolumeChanged(double microphoneVolume) const; void defaultSourceChanged(const QDBusObjectPath &defaultSource) const; void defaultSinkChanged(const QDBusObjectPath &defaultSink) const; void audioCardsChanged(const QString &audioCards) const; void maxUIVolumeChanged(double value) const; void increaseVolumeChanged(bool value) const; void reduceNoiseChanged(bool reduceNoise) const; void pausePlayerChanged(bool pausePlayer) const; void isPortEnableChanged(bool enable) const; void bluetoothModeOptsChanged(const QStringList &modeOpts) const; void bluetoothModeChanged(const QString &mode); void setPortChanged(Port* port) const; void outPutPortComboChanged(const QStringList &outPutPort) const; //查询是否可用 void requestSwitchEnable(unsigned int cardId,QString cardName); //声音输入设备是否可见 void inputDevicesVisibleChanged(QString name, bool flag); //声音输出设备是否可见 void outputDevicesVisibleChanged(QString name, bool flag); // 音频框架设置完成 void onSetAudioServerFinish(bool value); // 当前音频框架切换的信号 void curAudioServerChanged(const QString &audioFrame); #ifndef DCC_DISABLE_FEEDBACK void microphoneFeedbackChanged(double microphoneFeedback) const; #endif void portAdded(const Port *port); void portRemoved(const QString & portId, const uint &cardId, const Port::Direction &direction); void soundDeviceStatusChanged(); void soundEffectDataChanged(DDesktopServices::SystemSoundEffect effect, const bool enable); void enableSoundEffectChanged(bool enableSoundEffect); void isLaptopChanged(bool isLaptop); void outPutPortComboIndexChanged(); void inPutPortComboChanged(); void inPutPortComboIndexChanged(); void soundEffectsModelChanged(); void inPutPortCountChanged(); void outPutCountChanged(); void playAniIconPathChanged(); void audioMonoChanged(); void showBluetoothModeChanged(); void outPutPortComboEnableChanged(); void inPutPortComboEnableChanged(); void showInputBluetoothModeChanged(); private: QString m_audioServer; // 当前使用音频框架 bool m_audioServerStatus{true}; // 设置音频时的状态 bool m_speakerOn; bool m_microphoneOn; bool m_enableSoundEffect; bool m_isLaptop; bool m_increaseVolume{false}; bool m_reduceNoise{true}; bool m_pausePlayer{true}; bool m_portEnable{false}; double m_speakerVolume; double m_speakerBalance; double m_microphoneVolume; double m_maxUIVolume; int m_waitSoundReceiptTime; #ifndef DCC_DISABLE_FEEDBACK double m_microphoneFeedback; #endif QList m_ports; QList m_inputPorts; QList m_outputPorts; Port *m_activePort; QDBusObjectPath m_defaultSource; QDBusObjectPath m_defaultSink; QString m_audioCards; QStringList m_bluetoothModeOpts; QString m_currentBluetoothMode; SoundEffectList m_soundEffectMapPower; SoundEffectList m_soundEffectMapBattery; QMap m_soundEffectData; QMap m_soundEffectPaths; bool m_inputVisibled; bool m_outputVisibled; QStringList m_outPutPortCombo; int m_outPutPortComboIndex; bool m_outPutPortComboEnable; QStringList m_inPutPortCombo; int m_inPutPortComboIndex; bool m_inPutPortComboEnable; SoundEffectsModel* m_soundEffectsModel; SoundDeviceModel* m_soundInputDeviceModel; SoundDeviceModel* m_soundOutputDeviceModel; AudioServerModel* m_audioServerModel; int m_inPutPortCount; int m_outPutCount; bool m_audioMono; bool m_showBluetoothMode; bool m_showInputBluetoothMode; }; #endif // DCC_SOUND_SOUNDMODEL_H ================================================ FILE: src/plugin-sound/operation/soundworker.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "soundworker.h" #include #include #include #include #include #include #include #include #include #include Q_LOGGING_CATEGORY(DdcSoundWorker, "dcc-sound-worker") #define GSETTINGS_WAIT_SOUND_RECEIPT "wait-sound-receipt" const QList>& AudioServerNames = {qMakePair(QString("pipewire"),QString("PipeWire")), qMakePair(QString("pulseaudio"),QString("PulseAudio"))}; SoundWorker::SoundWorker(SoundModel *model, QObject *parent) : QObject(parent) , m_model(model) , m_activeOutputCard(UINT_MAX) , m_activeInputCard(UINT_MAX) , m_soundDBusInter(new SoundDBusProxy(this)) , m_pingTimer(new QTimer(this)) , m_inter(QDBusConnection::sessionBus().interface()) , m_sound(nullptr) , m_waitInputReceiptTimer(new QTimer(this)) , m_waitOutputReceiptTimer(new QTimer(this)) , m_mediaDevices(new QMediaDevices(this)) , m_playAnimationTime(new QTimer(this)) { m_pingTimer->setInterval(5000); m_pingTimer->setSingleShot(false); m_waitSoundPortReceipt = 1000; m_playAnimationTime->setInterval(300); m_playAnimationTime->setSingleShot(false); m_waitInputReceiptTimer->setSingleShot(true); m_waitOutputReceiptTimer->setSingleShot(true); updatePlayAniIconPath(); initConnect(); } void SoundWorker::initConnect() { connect(m_playAnimationTime, &QTimer::timeout, this, &SoundWorker::onAniTimerTimeOut); connect(m_model, &SoundModel::defaultSinkChanged, this, &SoundWorker::defaultSinkChanged); connect(m_model, &SoundModel::defaultSourceChanged, this, &SoundWorker::defaultSourceChanged); connect(m_model, &SoundModel::audioCardsChanged, this, &SoundWorker::cardsChanged); connect(m_model, &SoundModel::bluetoothModeChanged, this, &SoundWorker::changeOutputDeviceComboxStatus); connect(m_soundDBusInter, &SoundDBusProxy::DefaultSinkChanged, m_model, &SoundModel::setDefaultSink); connect(m_soundDBusInter, &SoundDBusProxy::DefaultSourceChanged, m_model, &SoundModel::setDefaultSource); connect(m_soundDBusInter, &SoundDBusProxy::MaxUIVolumeChanged, m_model, &SoundModel::setMaxUIVolume); connect(m_soundDBusInter, &SoundDBusProxy::IncreaseVolumeChanged, m_model, &SoundModel::setIncreaseVolume); connect(m_soundDBusInter, &SoundDBusProxy::CardsWithoutUnavailableChanged, m_model, &SoundModel::setAudioCards); connect(m_soundDBusInter, &SoundDBusProxy::ReduceNoiseChanged, m_model, &SoundModel::setReduceNoise); connect(m_soundDBusInter, &SoundDBusProxy::PausePlayerChanged, m_model, &SoundModel::setPausePlayer); connect(m_soundDBusInter, &SoundDBusProxy::BluetoothAudioModeOptsChanged, m_model, &SoundModel::setBluetoothAudioModeOpts); connect(m_soundDBusInter, &SoundDBusProxy::BluetoothAudioModeChanged, m_model, &SoundModel::setCurrentBluetoothAudioMode); connect(m_soundDBusInter, &SoundDBusProxy::EnabledChanged, m_model, &SoundModel::setEnableSoundEffect); connect(m_soundDBusInter, &SoundDBusProxy::pendingCallWatcherFinished, this, &SoundWorker::getSoundEnabledMapFinished); connect(m_pingTimer, &QTimer::timeout, [this] { if (m_soundDBusInter) m_soundDBusInter->Tick(); }); connect(m_soundDBusInter, &SoundDBusProxy::HasBatteryChanged, m_model, &SoundModel::setIsLaptop); connect(m_soundDBusInter, &SoundDBusProxy::CurrentAudioServerChanged, m_model, &SoundModel::setAudioServer); connect(m_soundDBusInter, &SoundDBusProxy::AudioServerStateChanged, m_model, &SoundModel::setAudioServerChangedState); connect(m_soundDBusInter, &SoundDBusProxy::AudioMonoChanged, m_model, &SoundModel::setAudioMono); connect(m_waitInputReceiptTimer, &QTimer::timeout, this, [ this ] { m_model->setInPutPortComboEnable(true); }); connect(m_waitOutputReceiptTimer, &QTimer::timeout, this, [this] { m_model->setOutPutPortComboEnable(true); }); connect(Dtk::Gui::DGuiApplicationHelper::instance(), &Dtk::Gui::DGuiApplicationHelper::themeTypeChanged, this, &SoundWorker::updatePlayAniIconPath); } void SoundWorker::activate() { m_model->setDefaultSink(m_soundDBusInter->defaultSink()); m_model->setDefaultSource(m_soundDBusInter->defaultSource()); m_model->setAudioCards(m_soundDBusInter->cardsWithoutUnavailable()); m_model->setIsLaptop(m_soundDBusInter->hasBattery()); m_model->setMaxUIVolume(m_soundDBusInter->maxUIVolume()); m_model->setIncreaseVolume(m_soundDBusInter->increaseVolume()); m_model->setReduceNoise(m_soundDBusInter->reduceNoise()); m_model->setPausePlayer(m_soundDBusInter->pausePlayer()); m_model->setBluetoothAudioModeOpts(m_soundDBusInter->bluetoothAudioModeOpts()); m_model->setCurrentBluetoothAudioMode(m_soundDBusInter->bluetoothAudioMode()); m_model->setEnableSoundEffect(m_soundDBusInter->enabled()); m_model->setWaitSoundReceiptTime(m_waitSoundPortReceipt); m_model->setAudioServer(m_soundDBusInter->audioServer()); m_model->setAudioServerChangedState(m_soundDBusInter->audioServerState()); m_model->setAudioMono(m_soundDBusInter->audioMono()); initAudioServerData(); refreshSoundEffect(); m_model->updateSoundEffectsModel(); // m_model->initSoundDeviceModel(Port::In); // m_model->initSoundDeviceModel(Port::Out); m_pingTimer->start(); m_soundDBusInter->blockSignals(false); defaultSinkChanged(m_model->defaultSink()); defaultSourceChanged(m_model->defaultSource()); cardsChanged(m_model->audioCards()); } void SoundWorker::deactivate() { m_pingTimer->stop(); m_soundDBusInter->blockSignals(true); } void SoundWorker::refreshSoundEffect() { m_model->setEnableSoundEffect(m_soundDBusInter->enabled()); m_soundDBusInter->GetSoundEnabledMap(); } void SoundWorker::setAudioServer(const QString &value) { m_soundDBusInter->SetAudioServer(value); } void SoundWorker::switchSpeaker(bool on) { m_soundDBusInter->SetMuteSink(!on); } void SoundWorker::switchMicrophone(bool on) { m_soundDBusInter->SetSourceMute(!on); } void SoundWorker::setPortEnabled(unsigned int cardid, QString portName, bool enable) { if (m_soundDBusInter) m_soundDBusInter->SetPortEnabled(cardid, portName, enable); } void SoundWorker::setSinkBalance(double balance) { m_soundDBusInter->SetBalanceSink(balance, true); qCDebug(DdcSoundWorker) << "set balance to " << balance; } void SoundWorker::setActivePort(int index, int portType) { if (portType == Port::Out) { m_model->setOutPutPortComboEnable(false); m_waitOutputReceiptTimer->setInterval(m_model->currentWaitSoundReceiptTime()); m_waitOutputReceiptTimer->start(); } else if(portType == Port::In) { m_model->setInPutPortComboEnable(false); m_waitInputReceiptTimer->setInterval(m_model->currentWaitSoundReceiptTime()); m_waitInputReceiptTimer->start(); } Port* port = m_model->getSoundDeviceData(index, portType); if (port) { setPort(port); } } void SoundWorker::setSoundEffectEnable(int index, bool enable) { m_soundDBusInter->EnableSound(m_model->getSoundEffectsType(index), enable, this , SLOT(refreshSoundEffect()), SLOT(refreshSoundEffect())); // 目前后端没有提供属性,前端先改了,后端增加属性后从后端获取 m_model->setSoundEffectEnable(index, enable); } void SoundWorker::setSourceVolume(double volume) { // Skip if volume is unchanged to avoid unnecessary DBus calls if (qFuzzyCompare(m_soundDBusInter->volumeSource(), volume)) { return; } m_soundDBusInter->SetSourceMute(qFuzzyCompare(0, volume)); m_soundDBusInter->SetSourceVolume(volume, !m_soundDBusInter->muteSource()); qCDebug(DdcSoundWorker) << "set source volume to " << volume; } void SoundWorker::setSinkVolume(double volume) { qWarning()<<__FUNCTION__<SetVolumeSink(volume, true); qCDebug(DdcSoundWorker) << "set sink volume to " << volume; } //切换输入静音状态,flag为false时直接取消静音 void SoundWorker::setSinkMute(bool flag) { if (flag) { m_soundDBusInter->SetMuteSink(!m_soundDBusInter->muteSink()); } else if (m_soundDBusInter->muteSink()) { m_soundDBusInter->SetMuteSink(false); } } //通知后端切换静音状态,flag为false时直接取消静音 void SoundWorker::setSourceMute(bool flag) { if (flag) { m_soundDBusInter->SetSourceMute(!m_soundDBusInter->muteSource()); } else if (m_soundDBusInter->muteSource()) { m_soundDBusInter->SetSourceMute(false); } } void SoundWorker::setIncreaseVolume(bool value) { m_soundDBusInter->setIncreaseVolume(value); } void SoundWorker::setReduceNoise(bool value) { m_soundDBusInter->setReduceNoise(value); } void SoundWorker::setPausePlayer(bool value) { m_soundDBusInter->setPausePlayer(value); } void SoundWorker::setPort(Port *port) { m_soundDBusInter->SetPort(port->cardId(), port->id(), int(port->direction())); qCDebug(DdcSoundWorker) << "cardID:" << port->cardId() << "portName:" << port->name() << " " << port->id() << " " << port->direction(); m_model->setPort(port); } void SoundWorker::setEffectEnable(DDesktopServices::SystemSoundEffect effect, bool enable) { m_soundDBusInter->EnableSound(m_model->getNameByEffectType(effect), enable, this, SLOT(refreshSoundEffect()), SLOT(refreshSoundEffect())); } void SoundWorker::enableAllSoundEffect(bool enable) { m_soundDBusInter->setEnabled(enable); } void SoundWorker::setPortEnableIndex(int index, bool checked, int portType) { Port* data = m_model->getSoundDeviceData(index, portType); if (data) { setPortEnabled(data->cardId(), data->id(), checked); } } void SoundWorker::playSoundEffect(int index) { // Todo 当前QSoundEffect重复设置setSource的时候没有生效,当前先通过重新构造来控制 if (m_sound) { if (m_sound->isPlaying()) { m_model->updatePlayAniIconPath(m_upateSoundEffectsIndex, ""); } delete m_sound; m_sound = nullptr; } m_sound = new QSoundEffect(this); m_sound->setAudioDevice(QMediaDevices::defaultAudioOutput()); connect(m_sound, &QSoundEffect::playingChanged, this, &SoundWorker::onSoundPlayingChanged); auto eff = m_model->soundEffectMap()[index].second; m_upateSoundEffectsIndex = index; qDebug() << " sound play soundEffect :" << QUrl::fromLocalFile(m_model->soundEffectPathByType(eff)); m_sound->setSource(QUrl::fromLocalFile(m_model->soundEffectPathByType(eff))); m_sound->setVolume(1); m_sound->play(); } void SoundWorker::stopSoundEffectPlayback() { if (m_sound) { if (m_sound->isPlaying()) { m_model->updatePlayAniIconPath(m_upateSoundEffectsIndex, ""); } delete m_sound; m_sound = nullptr; } } void SoundWorker::setBluetoothMode(const QString &mode) { m_soundDBusInter->SetBluetoothAudioMode(mode); } void SoundWorker::defaultSinkChanged(const QDBusObjectPath &path) { qCDebug(DdcSoundWorker) << "sink default path:" << path.path(); if (path.path().isEmpty() || path.path() == "/" ) return; //路径为空 m_soundDBusInter->setSinkDevicePath(path.path()); connect(m_soundDBusInter, &SoundDBusProxy::MuteSinkChanged, [this](bool mute) { m_model->setSpeakerOn(mute);}); connect(m_soundDBusInter, &SoundDBusProxy::BalanceSinkChanged, m_model, &SoundModel::setSpeakerBalance); connect(m_soundDBusInter, &SoundDBusProxy::VolumeSinkChanged, m_model, &SoundModel::setSpeakerVolume); connect(m_soundDBusInter, &SoundDBusProxy::ActivePortSinkChanged, this, &SoundWorker::activeSinkPortChanged); connect(m_soundDBusInter, &SoundDBusProxy::CardSinkChanged, this, &SoundWorker::onSinkCardChanged); m_model->setSpeakerOn(m_soundDBusInter->muteSink()); m_model->setSpeakerBalance(m_soundDBusInter->balanceSink()); m_model->setSpeakerVolume(m_soundDBusInter->volumeSink()); activeSinkPortChanged(m_soundDBusInter->activePortSink()); onSinkCardChanged(m_soundDBusInter->cardSink()); } void SoundWorker::defaultSourceChanged(const QDBusObjectPath &path) { qDebug() << "source default path:" << path.path(); if (path.path().isEmpty() || path.path() == "/" ) return; //路径为空 m_soundDBusInter->setSourceDevicePath(path.path()); connect(m_soundDBusInter, &SoundDBusProxy::MuteSourceChanged, [this](bool mute) { m_model->setMicrophoneOn(mute); }); connect(m_soundDBusInter, &SoundDBusProxy::VolumeSourceChanged, m_model, &SoundModel::setMicrophoneVolume); connect(m_soundDBusInter, &SoundDBusProxy::ActivePortSourceChanged, this, &SoundWorker::activeSourcePortChanged); connect(m_soundDBusInter, &SoundDBusProxy::CardSourceChanged, this, &SoundWorker::onSourceCardChanged); m_model->setMicrophoneOn(m_soundDBusInter->muteSource()); m_model->setMicrophoneVolume(m_soundDBusInter->volumeSource()); activeSourcePortChanged(m_soundDBusInter->activePortSource()); onSourceCardChanged(m_soundDBusInter->cardSource()); #ifndef DCC_DISABLE_FEEDBACK QDBusObjectPath meter = m_soundDBusInter->GetMeter(); if (meter.path().isEmpty()) return; m_soundDBusInter->setMeterDevicePath(meter.path()); connect(m_soundDBusInter, &SoundDBusProxy::VolumeMeterChanged, m_model, &SoundModel::setMicrophoneFeedback); m_model->setMicrophoneFeedback(m_soundDBusInter->volumeMeter()); #endif } void SoundWorker::cardsChanged(const QString &cards) { changeOutputDeviceComboxStatus(); changeInputDeviceComboxStatus(); QMap tmpCardIds; QJsonDocument doc = QJsonDocument::fromJson(cards.toUtf8()); QJsonArray jCards = doc.array(); for (QJsonValue cV : jCards) { QJsonObject jCard = cV.toObject(); const uint cardId = static_cast(jCard["Id"].toInt()); const QString cardName = jCard["Name"].toString(); QJsonArray jPorts = jCard["Ports"].toArray(); QStringList tmpPorts; for (QJsonValue pV : jPorts) { QJsonObject jPort = pV.toObject(); const double portAvai = jPort["Available"].toDouble(); if (portAvai == 2.0 || portAvai == 0.0) { // 0 Unknown 1 Not available 2 Available const QString portId = jPort["Name"].toString(); const QString portName = jPort["Description"].toString(); const bool isEnabled = jPort["Enabled"].toBool(); const bool isBluetooth = jPort["Bluetooth"].toBool(); Port *port = m_model->findPort(portId, cardId); const bool include = port != nullptr; if (!include) { port = new Port(m_model); connect(port, &Port::isOutputActiveChanged, this, [this](bool isActive) { if (isActive) { changeOutputDeviceComboxStatus(); } }); connect(port, &Port::isInputActiveChanged, this, [this](bool isActive) { if (isActive) { changeInputDeviceComboxStatus(); } }); } port->setId(portId); port->setName(portName); port->setDirection(Port::Direction(jPort["Direction"].toDouble())); port->setCardId(cardId); port->setCardName(cardName); port->setEnabled(isEnabled); port->setIsBluetoothPort(isBluetooth); const bool isActiveOuputPort = (portId == m_activeSinkPort) && (cardId == m_activeOutputCard); const bool isActiveInputPort = (portId == m_activeSourcePort) && (cardId == m_activeInputCard); port->setIsActive(isActiveInputPort || isActiveOuputPort); if (isActiveOuputPort) { m_model->setShowBluetoothMode(port->isBluetoothPort()); } if (isActiveInputPort) { m_model->setShowInputBluetoothMode(port->isBluetoothPort()); } if (!include) { m_model->addPort(port); } tmpPorts << portId; } } if (!jPorts.isEmpty()) tmpCardIds.insert(cardId, tmpPorts); } for (Port *port : m_model->ports()) { //if the card is not in the list if (!tmpCardIds.contains(port->cardId())) { m_model->removePort(port->id(), port->cardId()); } else if (!tmpCardIds[port->cardId()].contains(port->id())) { m_model->removePort(port->id(), port->cardId()); } } m_model->updatePortCombo(); m_model->updateAllDeviceModel(); m_model->updateActiveComboIndex(); } void SoundWorker::activeSinkPortChanged(const AudioPort &activeSinkPort) { qCDebug(DdcSoundWorker) << "active sink port changed to: " << activeSinkPort.name; m_activeSinkPort = activeSinkPort.name; for (auto port : m_model->ports()) { if (m_activeSinkPort == port->id()) { m_model->setPort(port); } } updatePortActivity(); } void SoundWorker::activeSourcePortChanged(const AudioPort &activeSourcePort) { qCDebug(DdcSoundWorker) << "active source port changed to: " << activeSourcePort.name; m_activeSourcePort = activeSourcePort.name; updatePortActivity(); } void SoundWorker::onSinkCardChanged(const uint &cardId) { m_activeOutputCard = cardId; updatePortActivity(); } void SoundWorker::onSourceCardChanged(const uint &cardId) { m_activeInputCard = cardId; updatePortActivity(); } void SoundWorker::getSoundEnabledMapFinished(QMap map) { for (auto it = map.constBegin(); it != map.constEnd(); ++it) { if (!m_model->checkSEExist(it.key())) continue; DDesktopServices::SystemSoundEffect type = m_model->getEffectTypeByGsettingName(it.key()); m_model->setEffectData(type, it.value()); QString path = m_soundDBusInter->GetSoundFile(it.key()); m_model->updateSoundEffectPath(type, path); } m_model->updateSoundEffectsModel(); } void SoundWorker::getSoundPathFinished(QDBusPendingCallWatcher *watcher) { if (!watcher->isError()) { QDBusReply reply = watcher->reply(); m_model->updateSoundEffectPath( watcher->property("Type").value(), reply.value()); } else { qCDebug(DdcSoundWorker) << "get sound path error." << watcher->error(); } watcher->deleteLater(); } void SoundWorker::onAniTimerTimeOut() { m_model->updatePlayAniIconPath(m_upateSoundEffectsIndex, m_playAniIconPath); } void SoundWorker::onSoundPlayingChanged() { QString path(""); if (m_sound && m_sound->isPlaying()) { path = m_playAniIconPath; m_playAnimationTime->start(); } else { m_playAnimationTime->stop(); } m_model->updatePlayAniIconPath(m_upateSoundEffectsIndex, path); } void SoundWorker::updatePortActivity() { for (Port *port : m_model->ports()) { const bool isActiveOuputPort = (port->id() == m_activeSinkPort) && (port->cardId() == m_activeOutputCard); const bool isActiveInputPort = (port->id() == m_activeSourcePort) && (port->cardId() == m_activeInputCard); port->setIsActive(isActiveInputPort || isActiveOuputPort); m_model->updateSoundDeviceModel(port); if (isActiveOuputPort) { m_model->setShowBluetoothMode(port->isBluetoothPort()); } if (isActiveInputPort) { m_model->setShowInputBluetoothMode(port->isBluetoothPort()); } } m_model->updateActiveComboIndex(); } void SoundWorker::initAudioServerData() { // treeland单独处理,避免后续这里有变动 if (Dtk::Gui::DGuiApplicationHelper::testAttribute(Dtk::Gui::DGuiApplicationHelper::IsWaylandPlatform)) { AudioServerData data; data.name = "PipeWire"; data.serverName = "pipewire"; data.checked = true; m_model->addAudioServerData(data); return; } for (auto item : AudioServerNames) { AudioServerData data; data.name = item.second; data.serverName = item.first; data.checked = false; if (data.serverName == m_model->audioServer()) { data.checked = true; } m_model->addAudioServerData(data); } } void SoundWorker::updatePlayAniIconPath() { auto themeType = Dtk::Gui::DGuiApplicationHelper::instance()->themeType(); auto themeTypeStr = themeType == Dtk::Gui::DGuiApplicationHelper::ColorType::DarkType ? "dark" : "light"; m_playAniIconPath = QString("qrc:/icons/deepin/builtin/icons/%1/volume_sound_wave_ani.webp").arg(themeTypeStr); } void SoundWorker::changeOutputDeviceComboxStatus() { m_model->setOutPutPortComboEnable(false); m_waitOutputReceiptTimer->setInterval(m_model->currentWaitSoundReceiptTime()); m_waitOutputReceiptTimer->start(); } void SoundWorker::changeInputDeviceComboxStatus() { m_model->setInPutPortComboEnable(false); m_waitInputReceiptTimer->setInterval(m_model->currentWaitSoundReceiptTime()); m_waitInputReceiptTimer->start(); } void SoundWorker::setAudioServerIndex(int index) { if (index >= 0 && AudioServerNames.count() > index) { setAudioServer(AudioServerNames.at(index).first); } } void SoundWorker::setAudioMono(bool enable) { if (enable != m_model->audioMono()) { m_soundDBusInter->setAudioMono(enable); } } ================================================ FILE: src/plugin-sound/operation/soundworker.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef SOUNDWORKER_H #define SOUNDWORKER_H #include #include "sounddbusproxy.h" #include "soundmodel.h" #include "audioport.h" #include #include "qdbusconnectioninterface.h" #include #include #include #include class SoundWorker : public QObject { Q_OBJECT QML_NAMED_ELEMENT(SoundWorker) QML_SINGLETON public: explicit SoundWorker(SoundModel *model, QObject * parent = 0); void activate(); void deactivate(); Q_INVOKABLE void setSinkVolume(double volume); Q_INVOKABLE void setReduceNoise(bool value); Q_INVOKABLE void setPausePlayer(bool value); Q_INVOKABLE void setIncreaseVolume(bool value); Q_INVOKABLE void setSinkBalance(double balance); Q_INVOKABLE void setActivePort(int index, int portType); Q_INVOKABLE void setSoundEffectEnable(int index, bool enable); Q_INVOKABLE void setSourceVolume(double volume); Q_INVOKABLE void enableAllSoundEffect(bool enable); Q_INVOKABLE void setPortEnableIndex(int index, bool checked, int portType); Q_INVOKABLE void playSoundEffect(int index); Q_INVOKABLE void stopSoundEffectPlayback(); Q_INVOKABLE void setAudioServerIndex(int index); Q_INVOKABLE void setAudioMono(bool enable); public Q_SLOTS: void switchSpeaker(bool on); void switchMicrophone(bool on); void setPortEnabled(unsigned int cardid,QString portName,bool enable); void setSourceMute(bool flag = true); void setSinkMute(bool flag = true); void setPort(Port *port); void setEffectEnable(DDesktopServices::SystemSoundEffect effect, bool enable); void setBluetoothMode(const QString &mode); void refreshSoundEffect(); void setAudioServer(const QString &value); private Q_SLOTS: void defaultSinkChanged(const QDBusObjectPath &path); void defaultSourceChanged(const QDBusObjectPath &path); void cardsChanged(const QString &cards); void activeSinkPortChanged(const AudioPort &activeSinkPort); void activeSourcePortChanged(const AudioPort &activeSourcePort); void onSinkCardChanged(const uint &cardId); void onSourceCardChanged(const uint &cardId); void getSoundEnabledMapFinished(QMap map); void getSoundPathFinished(QDBusPendingCallWatcher *watcher); void onAniTimerTimeOut(); void onSoundPlayingChanged(); void updatePlayAniIconPath(); void changeOutputDeviceComboxStatus(); void changeInputDeviceComboxStatus(); private: void initConnect(); void updatePortActivity(); void initAudioServerData(); private: SoundModel *m_model; QString m_activeSinkPort; QString m_activeSourcePort; uint m_activeOutputCard; uint m_activeInputCard; SoundDBusProxy *m_soundDBusInter; QTimer *m_pingTimer; QDBusConnectionInterface *m_inter; QSoundEffect* m_sound; int m_waitSoundPortReceipt; QTimer* m_waitInputReceiptTimer; QTimer* m_waitOutputReceiptTimer; QMediaDevices* m_mediaDevices; QTimer* m_playAnimationTime; int m_upateSoundEffectsIndex; QString m_playAniIconPath; }; #endif // SOUNDWORKER_H ================================================ FILE: src/plugin-sound/qml/DeviceListView.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import org.deepin.dtk 1.0 import org.deepin.dcc 1.0 Rectangle { id: root property alias model: repeater.model property bool backgroundVisible: true property bool showPlayBtn: false signal clicked(int index, bool checked) signal playbtnClicked(int index) color: "transparent" implicitHeight: layoutView.height Layout.fillWidth: true anchors.left: parent.left ColumnLayout { id: layoutView width: parent.width clip: true spacing: 0 Repeater { id: repeater delegate: ItemDelegate { id: itemCtl Layout.fillWidth: true leftPadding: 16 rightPadding: 10 implicitHeight: 40 cascadeSelected: true backgroundVisible: root.backgroundVisible contentFlow: true text: model.name hoverEnabled: true focusPolicy: Qt.TabFocus activeFocusOnTab: true corners: getCornersForBackground(index, repeater.count) Keys.onUpPressed: function (event) { var prevIndex = index - 1 if (prevIndex < 0) prevIndex = repeater.count - 1 const prev = repeater.itemAt(prevIndex) if (prev) { prev.forceActiveFocus(Qt.BacktabFocusReason) event.accepted = true } } Keys.onDownPressed: function (event) { var nextIndex = index + 1 if (nextIndex >= repeater.count) nextIndex = 0 const next = repeater.itemAt(nextIndex) if (next) { next.forceActiveFocus(Qt.TabFocusReason) event.accepted = true } } content: RowLayout { Layout.alignment: Qt.AlignVCenter spacing: 0 AnimatedImage { source: model.aniIconPath Layout.alignment: Qt.AlignLeft visible: showPlayBtn && model.aniIconPath.length !== 0 sourceSize.width: 24 sourceSize.height: 24 } RowLayout { spacing: 10 Layout.alignment: Qt.AlignRight IconButton { Layout.alignment: Qt.AlignLeft icon.name: "play_back" flat: true visible: showPlayBtn && itemCtl.hovered focusPolicy: Qt.NoFocus activeFocusOnTab: false implicitHeight: 20 implicitWidth: 20 icon.width: 16 icon.height: 16 background: null onClicked: { console.log("play_back has clicked ") root.playbtnClicked(index) } } DccCheckIcon { checked: model.isEnabled size: 16 onClicked: { root.clicked(index, !model.isEnabled) } } } } background: DccItemBackground { separatorVisible: true } onClicked: { root.clicked(index, !model.isEnabled) } } } } } ================================================ FILE: src/plugin-sound/qml/MicrophonePage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick import QtQuick.Layouts 1.15 import QtQuick.Controls 2.15 import QtQuick.Window 2.15 import QtQuick.Templates as T import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 DccObject { id: root function toPercent(value) { return Number(value * 100).toFixed(0) + "%" } DccTitleObject { name: "inPut" parentName: "sound/inPut" displayName: qsTr("Input") weight: 10 } DccObject { name: "noIntput" parentName: "sound/inPut" weight: 20 pageType: DccObject.Item backgroundType: DccObject.Normal visible: dccData.model().inPutPortCombo.length === 0 page: Column { Label { height: 100 width: parent.width Layout.leftMargin: 10 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font: D.DTK.fontManager.t8 text: qsTr("No input device for sound found") } } } DccObject { name: "inputGroup" parentName: "sound/inPut" weight: 30 pageType: DccObject.Item page: DccGroupView {} visible: dccData.model().inPutPortCombo.length !== 0 DccObject{ name: "inputVolume" parentName: "sound/inPut/inputGroup" displayName: qsTr("Input Volume") weight: 10 pageType: DccObject.Editor page: RowLayout { Layout.alignment: Qt.AlignRight Label { Layout.alignment: Qt.AlignVCenter font: D.DTK.fontManager.t10 color: Qt.rgba(palette.text.r, palette.text.g, palette.text.b, 0.5) text: root.toPercent(voiceTipsSlider1.value) } D.ActionButton { Layout.alignment: Qt.AlignVCenter icon { name: dccData.model().microphoneOn ? "sound_off" : "small_volume" width: 16 height: 16 } palette.windowText: D.ColorSelector.textColor flat: !hovered implicitWidth: 24 implicitHeight: 24 hoverEnabled: enabled background: Rectangle { property D.Palette pressedColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property D.Palette hoveredColor: D.Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? D.ColorSelector.pressedColor : (parent.hovered ? D.ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } onClicked: { dccData.worker().setSourceMute() } } Slider { id: voiceTipsSlider1 Layout.alignment: Qt.AlignVCenter implicitHeight: 24 handleType: Slider.HandleType.NoArrowHorizontal highlightedPassedGroove: true from: 0 stepSize: 0.01 to: 1 value: dccData.model().microphoneVolume onPressedChanged: { if (!pressed) { dccData.worker().setSourceVolume(voiceTipsSlider1.value) } } } D.IconButton { Layout.alignment: Qt.AlignRight | Qt.AlignVCenter icon.name: "big_volume" icon.width: 16 icon.height: 16 implicitWidth: 24 background: Rectangle { color: "transparent" // 背景透明 border.color: "transparent" // 边框透明 border.width: 0 } } } } DccObject{ name: "microphoneFeedback" parentName: "sound/inPut/inputGroup" displayName: qsTr("Input Level") weight: 20 pageType: DccObject.Editor page: RowLayout { Layout.alignment: Qt.AlignRight D.DciIcon { name: "small_volume" palette: D.DTK.makeIconPalette(parent.palette) sourceSize: Qt.size(16, 16) implicitWidth: 24 Layout.rightMargin: 4 } Item { Layout.fillWidth: false implicitHeight: slider.implicitHeight implicitWidth: slider.implicitWidth Slider { id: slider anchors.fill: parent handleType: -2 highlightedPassedGroove: true value: dccData.model().microphoneFeedback } MouseArea { anchors.fill: parent hoverEnabled: true } } D.DciIcon { name: "big_volume" palette: D.DTK.makeIconPalette(parent.palette) sourceSize: Qt.size(16, 16) implicitWidth: 24 Layout.rightMargin: 4 Layout.leftMargin: 4 } } } DccObject { name: "reduceNoise" parentName: "sound/inPut/inputGroup" displayName: qsTr("Automatic Noise Suppression") weight: 30 pageType: DccObject.Editor visible: !dccData.model().showInputBluetoothMode page: Switch { Layout.alignment: Qt.AlignRight | Qt.AlignTop checked: dccData.model().reduceNoise onCheckedChanged: { if (dccData.model().reduceNoise !== checked) { dccData.worker().setReduceNoise(checked) } } } } DccObject { name: "inputDevice" parentName: "sound/inPut/inputGroup" displayName: qsTr("Input Device") weight: 40 pageType: DccObject.Editor page: D.ComboBox { id: control Layout.alignment: Qt.AlignRight Layout.rightMargin: 10 currentIndex: dccData.model().inPutPortComboIndex flat: true textRole: "name" model: dccData.model().soundInputDeviceModel() implicitWidth: 300 contentItem: RowLayout { spacing: DS.Style.comboBox.spacing Loader { property string iconName: (control.iconNameRole && model.get(control.currentIndex)[control.iconNameRole] !== undefined) ? model.get(control.currentIndex)[control.iconNameRole] : null active: iconName sourceComponent: D.DciIcon { palette: DTK.makeIconPalette(control.palette) mode: control.D.ColorSelector.controlState theme: control.D.ColorSelector.controlTheme name: iconName sourceSize: Qt.size(DS.Style.comboBox.iconSize, DS.Style.comboBox.iconSize) fallbackToQIcon: true } } T.TextField { id: textField function getDisplayText() { return control.editable ? control.editText : fm.elidedText(control.displayText, Text.ElideRight, control.implicitWidth - DS.Style.comboBox.iconSize - DS.Style.comboBox.spacing * 4) } FontMetrics { id: fm font: textField.font onFontChanged: { textField.text = textField.getDisplayText() } } Connections { target: control function onDisplayTextChanged() { textField.text = textField.getDisplayText() } } Layout.fillWidth: true implicitHeight: fm.height Layout.rightMargin: DS.Style.comboBox.spacing text: getDisplayText() enabled: control.editable autoScroll: control.editable readOnly: control.down inputMethodHints: control.inputMethodHints validator: control.validator selectByMouse: true color: control.editable ? control.palette.text : control.palette.buttonText selectionColor: control.palette.highlight selectedTextColor: control.palette.highlightedText verticalAlignment: Text.AlignVCenter horizontalAlignment: control.horizontalAlignment ToolTip { visible: !control.editable && textField.text !== control.displayText && textField.hovered text: control.displayText delay: 500 } } } delegate: MenuItem { id: menuItem useIndicatorPadding: true width: control.width text: model.name visible: model.isEnabled icon.name: (control.iconNameRole && model[control.iconNameRole] !== undefined) ? model[control.iconNameRole] : null highlighted: control.isInteractingWithContent ? control.highlightedIndex === index : false hoverEnabled: control.hoverEnabled autoExclusive: true checked: control.currentIndex === index implicitHeight: visible ? DS.Style.control.implicitHeight(menuItem) : 0 readonly property real availableTextWidth: { if (!contentItem) return width - leftPadding - rightPadding let textWidth = contentItem.width - contentItem.leftPadding - contentItem.rightPadding if (icon.name) { textWidth -= DS.Style.menu.item.iconSize.width + spacing } return textWidth } FontMetrics { id: fontMetrics font: menuItem.font } ToolTip { visible: menuItem.hovered && fontMetrics.advanceWidth(model.name) > menuItem.availableTextWidth text: model.name delay: 500 } onClicked: { dccData.worker().setActivePort(index, 2) } } } } } } ================================================ FILE: src/plugin-sound/qml/Sound.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { id: root name: "sound" parentName: "system" displayName: qsTr("Sound") description: qsTr("Output, input, sound effects, devices") icon: "audio" weight: 20 } ================================================ FILE: src/plugin-sound/qml/SoundDevicemanagesPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 import org.deepin.dcc 1.0 DccObject { DccTitleObject { name: "outputDevice" parentName: "sound/deviceManager" displayName: qsTr("Output Devices") description: qsTr("Select whether to enable the devices") visible: dccData.model().outPutCount !== 0 weight: 10 } DccObject { name: "outputDeviceList" parentName: "sound/deviceManager" weight: 20 visible: dccData.model().outPutCount !== 0 backgroundType: DccObject.Normal pageType: DccObject.Item page: DeviceListView { model: dccData.model().soundOutputDeviceModel() onClicked: function (index, checked) { dccData.worker().setPortEnableIndex(index, checked, 1) } } onParentItemChanged: { if (parentItem) { parentItem.bottomInset = 15 } } } DccTitleObject { name: "inputDevice" parentName: "sound/deviceManager" displayName: qsTr("Input Devices") description: qsTr("Select whether to enable the devices") visible: dccData.model().inPutPortCount !== 0 weight: 30 } DccObject { name: "inputDeviceList" parentName: "sound/deviceManager" weight: 40 visible: dccData.model().inPutPortCount !== 0 backgroundType: DccObject.Normal pageType: DccObject.Item page: DeviceListView { model: dccData.model().soundInputDeviceModel() onClicked: function (index, checked) { dccData.worker().setPortEnableIndex(index, checked, 2) } } } } ================================================ FILE: src/plugin-sound/qml/SoundEffectsPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 import org.deepin.dcc 1.0 DccObject { DccObject { name: "soundEffects" parentName: "sound/soundEffectsPage" displayName: qsTr("Sound Effects") weight: 10 pageType: DccObject.Editor page: Switch { checked: dccData.model().enableSoundEffect onCheckedChanged: { dccData.worker().enableAllSoundEffect(checked) } } } DccObject { name: "effectsList" parentName: "sound/soundEffectsPage" weight: 20 visible: dccData.model().enableSoundEffect pageType: DccObject.Item onParentItemChanged: item => { if (item) item.activeFocusOnTab = false } page: DeviceListView { backgroundVisible: false showPlayBtn: true model: dccData.model().soundEffectsModel() onClicked: function (index, checked) { dccData.worker().setSoundEffectEnable(index, checked) } onPlaybtnClicked: function (index) { console.log(" effectsList click play ", index) dccData.worker().playSoundEffect(index) } onVisibleChanged: { if (!visible) { dccData.worker().stopSoundEffectPlayback(); } } } } } ================================================ FILE: src/plugin-sound/qml/SoundMain.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { DccObject { name: "outPut" parentName: "sound" icon: "system" weight: 10 pageType: DccObject.Item page: DccGroupView { isGroup: false } onParentItemChanged: { if (parentItem) { parentItem.bottomInset = 5 } } SpeakerPage {} } DccObject { name: "inPut" parentName: "sound" icon: "system" weight: 20 pageType: DccObject.Item page: DccGroupView { isGroup: false } onParentItemChanged: { if (parentItem) { parentItem.bottomInset = 10 } } MicrophonePage {} } DccTitleObject{ name: "soundSettings" parentName: "sound" displayName: qsTr("Settings") weight: 30 } DccObject { name: "soundEffectsPage" parentName: "sound" displayName: qsTr("Sound Effects") description: qsTr("Enable/disable sound effects") icon: "system_sound" weight: 40 page: DccRightView { isGroup: true } SoundEffectsPage {} } DccObject { name: "deviceManager" parentName: "sound" displayName: qsTr("Devices Management") description: qsTr("Enable/disable audio devices") icon: "equipment_management" visible: (dccData.model().inPutPortCount !== 0 || dccData.model().outPutCount !== 0) && config.showDeviceManager weight: 50 SoundDevicemanagesPage {} D.Config { id: config name: "org.deepin.dde.control-center.sound" property bool showDeviceManager: true } } } ================================================ FILE: src/plugin-sound/qml/SpeakerPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import QtQuick.Templates as T import org.deepin.dtk 1.0 import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 import SoundDeviceModel 1.0 DccObject { id: root function toPercent(value) { return Number(value * 100).toFixed(0) + "%" } DccTitleObject { name: "output" parentName: "sound/outPut" displayName: qsTr("Output") weight: 10 } DccObject { name: "noOutput" parentName: "sound/outPut" weight: 20 pageType: DccObject.Item backgroundType: DccObject.Normal visible: dccData.model().outPutPortCombo.length === 0 page: Column { width: parent.width Label { height: 100 width: parent.width Layout.leftMargin: 10 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter font: DTK.fontManager.t8 text: qsTr("No output device for sound found") } } } DccObject { name: "outputGroup" parentName: "sound/outPut" weight: 30 visible: dccData.model().outPutPortCombo.length !== 0 pageType: DccObject.Item page: DccGroupView { } DccObject { name: "outputVolume" parentName: "sound/outPut/outputGroup" displayName: qsTr("Output Volume") weight: 10 pageType: DccObject.Editor page: RowLayout { Label { font: DTK.fontManager.t10 color: Qt.rgba(palette.text.r, palette.text.g, palette.text.b, 0.5) text: root.toPercent(voiceTipsSlider.value) } ActionButton { Layout.alignment: Qt.AlignVCenter icon { name: dccData.model().speakerOn ? "sound_off" : "small_volume" width: 16 height: 16 } palette.windowText: ColorSelector.textColor flat: !hovered implicitWidth: 24 implicitHeight: 24 hoverEnabled: enabled background: Rectangle { property Palette pressedColor: Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(1, 1, 1, 0.25) } property Palette hoveredColor: Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? ColorSelector.pressedColor : (parent.hovered ? ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } onClicked: { dccData.worker().setSinkMute() } } Slider { id: voiceTipsSlider Layout.alignment: Qt.AlignVCenter implicitHeight: 24 handleType: Slider.HandleType.NoArrowHorizontal highlightedPassedGroove: true value: dccData.model().speakerVolume to: dccData.model().increaseVolume ? 1.5 : 1.0 stepSize: 0.01 onPressedChanged: { if (!pressed) { dccData.worker().setSinkVolume(voiceTipsSlider.value) } } } IconButton { icon { name: "big_volume" width: 16 height: 16 } implicitWidth: 24 background: Rectangle { color: "transparent" // 背景透明 border.color: "transparent" // 边框透明 border.width: 0 } } } } DccObject { name: "volumeEnhancement" parentName: "sound/outPut/outputGroup" displayName: qsTr("Volume Boost") description: qsTr("If the volume is louder than 100%, it may distort audio and be harmful to output devices") weight: 20 pageType: DccObject.Editor page: Switch { Layout.alignment: Qt.AlignRight checked: dccData.model().increaseVolume onCheckedChanged: { if (dccData.model().increaseVolume !== checked) { dccData.worker().setIncreaseVolume(checked) } } } } DccObject { name: "volumeBalance" parentName: "sound/outPut/outputGroup" displayName: qsTr("Left Right Balance") weight: 40 pageType: DccObject.Editor visible: !dccData.model().audioMono && (!dccData.model().showBluetoothMode || !dccData.model().currentBluetoothAudioMode.toLowerCase().startsWith("headset-head")) page: RowLayout { Label { Layout.alignment: Qt.AlignVCenter font: DTK.fontManager.t7 Layout.topMargin: 2 text: qsTr("Left") } Slider { id: balanceSlider Layout.alignment: Qt.AlignVCenter implicitHeight: 24 from: -1 handleType: Slider.HandleType.ArrowBottom highlightedPassedGroove: false stepSize: 0.01 to: 1 value: dccData.model().speakerBalance onPressedChanged: { if (!pressed) { dccData.worker().setSinkBalance(balanceSlider.value) } } } Label { Layout.alignment: Qt.AlignVCenter Layout.topMargin: 2 font: DTK.fontManager.t7 text: qsTr("Right") } } } DccObject { name: "monoAudio" parentName: "sound/outPut/outputGroup" displayName: qsTr("Mono Audio") description: qsTr("Merge left and right channels into a single channel") weight: 30 pageType: DccObject.Editor page: Switch { checked: dccData.model().audioMono onCheckedChanged: { if (dccData.model().audioMono !== checked) { dccData.worker().setAudioMono(checked) } } } } DccObject { name: "plugAndUnplugManagement" parentName: "sound/outPut/outputGroup" displayName: qsTr("Auto Pause") description: qsTr("Whether the audio will be automatically paused when the current audio device is unplugged") weight: 50 pageType: DccObject.Editor page: Switch { checked: dccData.model().pausePlayer onCheckedChanged: { if (dccData.model().pausePlayer !== checked) { dccData.worker().setPausePlayer(checked) } } } } DccObject { name: "outputDevice" parentName: "sound/outPut/outputGroup" displayName: qsTr("Output Device") weight: 60 pageType: DccObject.Editor page: ComboBox { id: control Layout.alignment: Qt.AlignRight Layout.rightMargin: 10 flat: true textRole: "name" currentIndex: dccData.model().outPutPortComboIndex model: dccData.model().soundOutputDeviceModel() implicitWidth: 300 contentItem: RowLayout { spacing: DS.Style.comboBox.spacing Loader { property string iconName: (control.iconNameRole && model.get(control.currentIndex)[control.iconNameRole] !== undefined) ? model.get(control.currentIndex)[control.iconNameRole] : null active: iconName sourceComponent: DciIcon { palette: DTK.makeIconPalette(control.palette) mode: control.D.ColorSelector.controlState theme: control.D.ColorSelector.controlTheme name: iconName sourceSize: Qt.size(DS.Style.comboBox.iconSize, DS.Style.comboBox.iconSize) fallbackToQIcon: true } } T.TextField { id: textField function getDisplayText() { return control.editable ? control.editText : fm.elidedText(control.displayText, Text.ElideRight, control.implicitWidth - DS.Style.comboBox.iconSize - DS.Style.comboBox.spacing * 4) } FontMetrics { id: fm font: textField.font onFontChanged: { textField.text = textField.getDisplayText() } } Connections { target: control function onDisplayTextChanged() { textField.text = textField.getDisplayText() } } Layout.fillWidth: true implicitHeight: fm.height Layout.rightMargin: DS.Style.comboBox.spacing text: getDisplayText() enabled: control.editable autoScroll: control.editable readOnly: control.down inputMethodHints: control.inputMethodHints validator: control.validator selectByMouse: true color: control.editable ? control.palette.text : control.palette.buttonText selectionColor: control.palette.highlight selectedTextColor: control.palette.highlightedText verticalAlignment: Text.AlignVCenter horizontalAlignment: control.horizontalAlignment ToolTip { visible: !control.editable && textField.text !== control.displayText && textField.hovered text: control.displayText delay: 500 } } } property bool isInitialized: false delegate: MenuItem { id: menuItem useIndicatorPadding: true width: control.width text: model.name visible: model.isEnabled icon.name: (control.iconNameRole && model[control.iconNameRole] !== undefined) ? model[control.iconNameRole] : null highlighted: control.isInteractingWithContent ? control.highlightedIndex === index : false hoverEnabled: control.hoverEnabled autoExclusive: true checked: control.currentIndex === index implicitHeight: visible ? DS.Style.control.implicitHeight(menuItem) : 0 readonly property real availableTextWidth: { if (!contentItem) return width - leftPadding - rightPadding let textWidth = contentItem.width - contentItem.leftPadding - contentItem.rightPadding if (icon.name) { textWidth -= DS.Style.menu.item.iconSize.width + spacing } return textWidth } FontMetrics { id: fontMetrics font: menuItem.font } ToolTip { visible: menuItem.hovered && fontMetrics.advanceWidth(model.name) > menuItem.availableTextWidth text: model.name delay: 500 } onClicked: { dccData.worker().setActivePort(index, 1) } } } } DccObject { name: "bluetoothMode" parentName: "sound/outPut/outputGroup" displayName: qsTr("Mode") weight: 60 pageType: DccObject.Editor visible: dccData.model().showBluetoothMode page: ComboBox { id: bluetoothControl Layout.alignment: Qt.AlignRight Layout.rightMargin: 10 flat: true model: dccData.model().bluetoothModeOpts currentIndex: count > 0 ? Math.max(0, indexOfValue(dccData.model().currentBluetoothAudioMode)) : 0 property bool isInitialized: false implicitWidth: 300 contentItem: RowLayout { spacing: DS.Style.comboBox.spacing T.TextField { id: textField function getDisplayText() { return bluetoothControl.editable ? bluetoothControl.editText : fm.elidedText(bluetoothControl.displayText, Text.ElideRight, bluetoothControl.implicitWidth - DS.Style.comboBox.spacing * 4) } FontMetrics { id: fm font: textField.font onFontChanged: { textField.text = textField.getDisplayText() } } Connections { target: bluetoothControl function onDisplayTextChanged() { textField.text = textField.getDisplayText() } } Layout.fillWidth: true implicitHeight: fm.height Layout.rightMargin: DS.Style.comboBox.spacing text: getDisplayText() enabled: bluetoothControl.editable autoScroll: bluetoothControl.editable readOnly: bluetoothControl.down inputMethodHints: bluetoothControl.inputMethodHints validator: bluetoothControl.validator selectByMouse: true color: bluetoothControl.editable ? bluetoothControl.palette.text : bluetoothControl.palette.buttonText selectionColor: bluetoothControl.palette.highlight selectedTextColor: bluetoothControl.palette.highlightedText verticalAlignment: Text.AlignVCenter horizontalAlignment: bluetoothControl.horizontalAlignment ToolTip { visible: !bluetoothControl.editable && textField.text !== bluetoothControl.displayText && textField.hovered text: bluetoothControl.displayText delay: 500 } } } delegate: MenuItem { id: menuItem useIndicatorPadding: true width: bluetoothControl.width text: modelData highlighted: bluetoothControl.isInteractingWithContent ? bluetoothControl.highlightedIndex === index : false hoverEnabled: bluetoothControl.hoverEnabled autoExclusive: true checked: bluetoothControl.currentIndex === index implicitHeight: DS.Style.control.implicitHeight(menuItem) readonly property real availableTextWidth: { if (!contentItem) return width - leftPadding - rightPadding let textWidth = contentItem.width - contentItem.leftPadding - contentItem.rightPadding if (icon.name) { textWidth -= DS.Style.menu.item.iconSize.width + spacing } return textWidth } FontMetrics { id: fontMetrics font: menuItem.font } ToolTip { visible: menuItem.hovered && fontMetrics.advanceWidth(modelData) > menuItem.availableTextWidth text: modelData delay: 500 } } Connections { target: dccData.model() function onBluetoothModeOptsChanged() { bluetoothControl.currentIndex = Math.max(0, bluetoothControl.indexOfValue(dccData.model().currentBluetoothAudioMode)) } function onBluetoothModeChanged() { bluetoothControl.currentIndex = Math.max(0, bluetoothControl.indexOfValue(dccData.model().currentBluetoothAudioMode)) } } Component.onCompleted: { isInitialized = true } onActivated: { if (isInitialized && currentIndex >= 0 && currentIndex < count) { var value = valueAt(currentIndex) if (value !== dccData.model().currentBluetoothAudioMode) { dccData.worker().setBluetoothMode(value) } } } } } } } ================================================ FILE: src/plugin-sound/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-system/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(Plugin_Name system) dcc_install_plugin(NAME ${Plugin_Name} ) ================================================ FILE: src/plugin-system/qml/System.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 DccObject { id: root name: "system" parentName: "root" displayName: qsTr("System") icon: "commoninfo" weight: 10 DccTitleObject { name: "common" parentName: "system" displayName: qsTr("Common settings") weight: 5 onParentItemChanged: { if (parentItem) { parentItem.topPadding = 10 } } } } ================================================ FILE: src/plugin-system/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-systeminfo/CMakeLists.txt ================================================ cmake_minimum_required(VERSION 3.18) set(SystemInfo_Name systemInfo) file(GLOB_RECURSE systemInfo_SRCS "operation/*.cpp" "operation/*.h" "operation/qrc/systeminfo.qrc" ) add_library(${SystemInfo_Name} MODULE ${systemInfo_SRCS} operation/utils.h ) set(SystemInfo_Libraries ${DCC_FRAME_Library} ${QT_NS}::DBus ${DTK_NS}::Gui ) target_link_libraries(${SystemInfo_Name} PRIVATE ${SystemInfo_Libraries} ) dcc_install_plugin(NAME ${SystemInfo_Name} TARGET ${SystemInfo_Name}) ================================================ FILE: src/plugin-systeminfo/operation/qrc/gpl/gpl-3.0-en_US-body.txt ================================================ The notice provides license information of respective open source software contained in this operating system. Open Source Software Licensed under the GPL-3.0-or-later: 1、source package:accountsservice 23.13.9-2 package: accountsservice 2、source package:cifs-utils 6.9.orig package: cifs-utils 3、source package:coreutils 9.1-1 package: coreutils 4、source package:dosfstools 4.2-1 package: dosfstools 5、source package:ffmpeg 7:6.0-3 package: ffmpeg 6、source package:fonts-wqy-microhei 0.2.0-beta-3.1 package: fonts-wqy-microhei 7、source package:gawk 5.0.1+dfsg.orig package: gawk 8、source package:gettext 0.21.1 package: gettext 9、source package:gettext-base 0.19.8.1-9_s390x package: gettext-base 10、source package:gnupg 2.2.19-3_all package: gnupg 11、source package:golang-gir-gobject-2.0-dev 2.2.0-1 package: golang-gir-gobject-2.0-dev 12、source package:gpgv 2.2.20-1~bpo9+1_s390x package: gpgv 13、source package:grub-common 2.06-9 package: grub-common 14、source package:grub2-common 2.04~rc1-3_ppc64el package: grub2-common 15、source package:grub2-theme-vimix c7ab3ce package: grub2-theme-vimix 16、source package:guvcview 2.0.2 package: guvcview 17、source package:hello 2.9-2_kfreebsd-i386 package: hello 18、source package:libparted-dev 3.3-4_s390x package: libparted-dev 19、source package:libparted-fs-resize0 3.3-4_s390x package: libparted-fs-resize0 20、source package:live-boot 5.0~a5-2 package: live-boot 21、source package:live-boot-initramfs-tools 4.0.2-1_all package: live-boot-initramfs-tools 22、source package:live-config 5.20190519_all package: live-config 23、source package:live-config-systemd 5.20190519_all package: live-config-systemd 24、source package:onboard 1.4.1-5_s390x package: onboard 25、source package:parted 3.6-3 package: parted 26、source package:patchelf 0.9.orig package: patchelf 27、source package:pkg-kde-tools 0.9.5 package: pkg-kde-tools 28、source package:python3-samba 4.12.5+dfsg-3_s390x package: python3-samba 29、source package:qtchooser 66.orig package: qtchooser 30、source package:qtremoteobjects v5.11.0-rc2 package: qtremoteobjects 31、source package:redshift 1.9.1-4_s390x package: redshift 32、source package:rsync 3.2.7-1~bpo11+1 package: rsync 33、source package:rsyslog 8.9.0-3 package: rsyslog 34、source package:samba 4.9.5+dfsg-5_mips64el package: samba 35、source package:samba-common-bin 4.9.5+dfsg-5_s390x package: samba-common-bin 36、source package:samba-dsdb-modules 4.9.5+dfsg-5_s390x package: samba-dsdb-modules 37、source package:samba-vfs-modules 4.9.5+dfsg-5_s390x package: samba-vfs-modules 38、source package:sed 4.9-1 package: sed 39、source package:smbclient 4.9.5+dfsg-5_s390x package: smbclient 40、source package:startdde 6.0.6 package: startdde 41、source package:viper v1.3.2 package: viper Open Source Software Licensed under the GPL-3.0-only: 1、source package:blur-effect 1.1.3-2 package: blur-effect 2、source package:distrobox 1.4.2.1-1 package: distrobox 3、source package:libcap-ng-dev 0.7.9-2_s390x package: libcap-ng-dev 4、source package:liblightdm-qt-dev 1.26.0-5_s390x package: liblightdm-qt-dev 5、source package:libpoppler-glib-dev 22.12.0-2 package: libpoppler-glib-dev 6、source package:lightdm 1.9.9-1 package: lightdm 7、source package:lightdm-gtk-greeter 2.0.8-3 package: lightdm-gtk-greeter 8、source package:mtools 4.0.9-1 package: mtools 9、source package:python-is-python3 8 package: python-is-python3 10、source package:tpm2-tools 5.4-1 package: tpm2-tools Open Source Software Licensed under the GPL-2.0-or-later: 1、source package:ColumnsPlusPlus v0.0.1.2-alpha package: ColumnsPlusPlus 2、source package:Grub-Themes a7ec0fd package: Grub-Themes 3、source package:acl 2.3.1-3 package: acl 4、source package:adduser 3.99 package: adduser 5、source package:apt 2.7.1 package: apt 6、source package:apt-utils 2.1.7_mips64el package: apt-utils 7、source package:aptitude 0.8.9-1 package: aptitude 8、source package:aria2 1.9.5-1 package: aria2 9、source package:arj 3.10.22.orig package: arj 10、source package:attr 2.4.48-5_s390x package: attr 11、source package:bash-completion 20080705 package: bash-completion 12、source package:bc 1.07.1-3 package: bc 13、source package:bluez 5.66-1 package: bluez 14、source package:bluez-obexd 5.52-1_s390x package: bluez-obexd 15、source package:ca-certificates 20230311 package: ca-certificates 16、source package:cornrow v0.8.0 package: cornrow 17、source package:cups-filters 1.9.0-2 package: cups-filters 18、source package:cyberduck release-4-9-1 package: cyberduck 19、source package:debhelper 9.20160814 package: debhelper 20、source package:dh-dkms 3.0.9-1 package: dh-dkms 21、source package:dh-golang 1.9 package: dh-golang 22、source package:dkms 3.0.8-3 package: dkms 23、source package:dmidecode 3.5-1 package: dmidecode 24、source package:dnsmasq-base 2.89-1 package: dnsmasq-base 25、source package:dpkg 1.9.21 package: dpkg 26、source package:dpkg-dev 1.9.21 package: dpkg-dev 27、source package:efibootmgr 17-2 package: efibootmgr 28、source package:eject 2.35.2-7_ppc64el package: eject 29、source package:ethtool 6-0 package: ethtool 30、source package:exfat-fuse 1.3.0-2_armel package: exfat-fuse 31、source package:exfatprogs 1.2.1-2 package: exfatprogs 32、source package:ffmpeg 7:6.0-3 package: ffmpeg 33、source package:foomatic-db-compressed-ppds 20230107-1 package: foomatic-db-compressed-ppds 34、source package:fprintd 1.94.2-2 package: fprintd 35、source package:geoclue-2.0 2.7.0-2 package: geoclue-2.0 36、source package:gnome-keyring 42.1-1 package: gnome-keyring 37、source package:hwdata 0.372-1 package: hwdata 38、source package:im-config 0.9 package: im-config 39、source package:imwheel 1.0.0pre12.orig package: imwheel 40、source package:input-leap v2.4.0 package: input-leap 41、source package:ipwatchd 1.3.0 package: ipwatchd 42、source package:jfsutils 1.1.8-1 package: jfsutils 43、source package:kbd 2.5.1-1 package: kbd 44、source package:kscreenlocker-dev 5.8.6-2_s390x package: kscreenlocker-dev 45、source package:lcov 1.9.orig package: lcov 46、source package:libappstreamqt-dev 0.9.8-4_kfreebsd-i386 package: libappstreamqt-dev 47、source package:libblkid-dev 2.35.2-7_mipsel package: libblkid-dev 48、source package:libcryptsetup-dev 2:2.4.0-1 package: libcryptsetup-dev 49、source package:libddcutil-dev 0.9.8-4_s390x package: libddcutil-dev 50、source package:libdpkg-dev 1.20.5_ppc64el package: libdpkg-dev 51、source package:libdvdnav-dev 6.1.0-1_s390x package: libdvdnav-dev 52、source package:libffmpegthumbnailer-dev 2.1.1-0.2_kfreebsd-amd64 package: libffmpegthumbnailer-dev 53、source package:libffmpegthumbnailer4v5 2.1.1-0.2_kfreebsd-amd64 package: libffmpegthumbnailer4v5 54、source package:libltdl-dev 2.4.7-6 package: libltdl-dev 55、source package:libmount-dev 2.35.2-7_s390x package: libmount-dev 56、source package:libmpv-dev 0.9.2-1+ffmpeg package: libmpv-dev 57、source package:libmpv1 0.6.2-2_s390x package: libmpv1 58、source package:libmpv2 0.36.0+git.20230723.60a26324 package: libmpv2 59、source package:libnm-dev 1.6.2-3+deb9u2_s390x package: libnm-dev 60、source package:libpam-fprintd 1.90.1-1_s390x package: libpam-fprintd 61、source package:libvlc-dev 3.0.9.2-1 package: libvlc-dev 62、source package:libvlc5 3.0.8-4_s390x package: libvlc5 63、source package:libvlccore-dev 3.0.8-4_s390x package: libvlccore-dev 64、source package:libvncserver LibVNCServer-0.9.14 package: libvncserver 65、source package:lzop 1.04-2 package: lzop 66、source package:man-db 2.9.4-4 package: man-db 67、source package:net-tools 2.10-0.1 package: net-tools 68、source package:network-manager 1.9.90-1 package: network-manager 69、source package:nilfs-tools 2.2.9-1 package: nilfs-tools 70、source package:ntfs-3g 2017.3.23AR.5.orig package: ntfs-3g 71、source package:packagekit 1.2.6-5 package: packagekit 72、source package:pandoc 2.9.2.1-3 package: pandoc 73、source package:pciutils 3.7.0.orig package: pciutils 74、source package:pinn 0.0 package: pinn 75、source package:pkg-config 0.29.2.orig package: pkg-config 76、source package:pkg-kde-tools 0.9.5 package: pkg-kde-tools 77、source package:plymouth 22.02.122-3 package: plymouth 78、source package:plymouth-label 0.9.4-3_s390x package: plymouth-label 79、source package:pppoe 3.8-3_sparc package: pppoe 80、source package:procps 3.3.9.orig package: procps 81、source package:python3-dbus 1.2.8-3_s390x package: python3-dbus 82、source package:python3-smbc 1.0.23-2 package: python3-smbc 83、source package:rfkill 2.35.2-7_s390x package: rfkill 84、source package:rzip 2.1.orig package: rzip 85、source package:sectpmctl 1.1.3 package: sectpmctl 86、source package:sensible-utils 0.0.9+nmu1 package: sensible-utils 87、source package:socat 2.0.0~beta9-1_ppc64el package: socat 88、source package:squashfs-tools 4.4-2_s390x package: squashfs-tools 89、source package:syslinux 6.04~git20190206.bf6db5b4+dfsg1.orig package: syslinux 90、source package:syslinux-common 6.04~git20190206.bf6db5b4+dfsg1-2_all package: syslinux-common 91、source package:udisks2 2.9.4-4 package: udisks2 92、source package:unace 1.2b-9 package: unace 93、source package:upower 1.90.2-3 package: upower 94、source package:usb-modeswitch 2.6.1.orig package: usb-modeswitch 95、source package:usbmuxd 1.1.1~git20191130.9af2b12-1_s390x package: usbmuxd 96、source package:usbutils 1:015-1 package: usbutils 97、source package:user-setup 1.95 package: user-setup 98、source package:uuid-dev 2.35.2-7_ppc64el package: uuid-dev 99、source package:vlc-plugin-base 3.0.8-4_s390x package: vlc-plugin-base 100、source package:xdg-user-dirs 0.9-1 package: xdg-user-dirs 101、source package:xserver-xorg-input-wacom 1.2.0-1~exp1 package: xserver-xorg-input-wacom 102、source package:zssh 1.5c.debian.1-8 package: zssh Open Source Software Licensed under the GPL-2.0-only: 1、source package:GitQlient v1.4.3 package: GitQlient 2、source package:alsa-utils 1.2.9-1 package: alsa-utils 3、source package:btrfs-progs 6.3.2-1 package: btrfs-progs 4、source package:checkstyle checkstyle-10.3.4 package: checkstyle 5、source package:dmsetup 1.02.90-2.2+deb8u1_s390x package: dmsetup 6、source package:doxygen 1.9.4-4 package: doxygen 7、source package:e2fsprogs 1.47.0-2 package: e2fsprogs 8、source package:gcc 9.2.1-4.1_mips64el package: gcc 9、source package:genisoimage 9:1.1.11-3.4 package: genisoimage 10、source package:git 4.3.20-9 package: git 11、source package:grub-efi-amd64-signed 1+2.06+8.1 package: grub-efi-amd64-signed 12、source package:grub-efi-arm64-signed 1+2.06+8.1 package: grub-efi-arm64-signed 13、source package:gtk2-engines 2.20.2.orig package: gtk2-engines 14、source package:gtk2-engines-murrine 0.98.2.orig package: gtk2-engines-murrine 15、source package:iio-sensor-proxy 3.4-2 package: iio-sensor-proxy 16、source package:initramfs-tools-core 0.137_all package: initramfs-tools-core 17、source package:kwin v5.27.2 package: kwin 18、source package:libcap-ng-dev 0.7.9-2_s390x package: libcap-ng-dev 19、source package:libdjvulibre-dev 3.5.28-2 package: libdjvulibre-dev 20、source package:libglib2.0-dev 2.64.4-1_s390x package: libglib2.0-dev 21、source package:liblightdm-qt-dev 1.26.0-5_s390x package: liblightdm-qt-dev 22、source package:libnm-qt 0.9.8.2.orig package: libnm-qt 23、source package:libpoppler-glib-dev 22.12.0-2 package: libpoppler-glib-dev 24、source package:libraw-dev 0.9.1-1+deb6u1 package: libraw-dev 25、source package:lightdm 1.9.9-1 package: lightdm 26、source package:lsb-base 9.20161125_all package: lsb-base 27、source package:lshw 02.19.git.2021.06.19.996aaad9c7-2~bpo11+1 package: lshw 28、source package:lvm2 2.03.16-1.1 package: lvm2 29、source package:mawk 1.3.4.20230525-1~exp1 package: mawk 30、source package:modemmanager 1.8.2.orig package: modemmanager 31、source package:networkmanager-qt 5.54.0.orig package: networkmanager-qt 32、source package:openprinting-ppds 20200427-1_all package: openprinting-ppds 33、source package:proxychains4 4.14-3_s390x package: proxychains4 34、source package:qt-creator tqtc/v2.6.0-rc package: qt-creator 35、source package:qtciphersqliteplugin 0.6 package: qtciphersqliteplugin 36、source package:qtermwidget 0.7.1.orig package: qtermwidget 37、source package:reiserfsprogs 3.x.1b-1 package: reiserfsprogs 38、source package:sane-airscan 0.99.8-2 package: sane-airscan 39、source package:slirp4netns 1.2.0-1 package: slirp4netns 40、source package:smartmontools 7.3-1 package: smartmontools 41、source package:synergy-stable-builds 1.8.2-stable package: synergy-stable-builds 42、source package:systemd 8-2 package: systemd 43、source package:ttf-unifont 9.0.06-2_all package: ttf-unifont 44、source package:wireless-tools 30~pre9.orig package: wireless-tools 45、source package:xfonts-wqy 1.0.0~rc1-7 package: xfonts-wqy 46、source package:xfsprogs 6.3.0-1 package: xfsprogs Open Source Software Licensed under the LGPL-3.0-or-later: 1、source package:kdecoration 4:5.26.90-2 package: kdecoration 2、source package:libheif-dev 1.6.1-1_s390x package: libheif-dev 3、source package:libzmq3-dev 4.3.2-2_s390x package: libzmq3-dev 4、source package:python3-ldb 2.1.4-2_s390x package: python3-ldb 5、source package:python3-tdb 1.4.3-1_s390x package: python3-tdb 6、source package:tdb-tools 1.4.3-1_s390x package: tdb-tools Open Source Software Licensed under the LGPL-3.0-only: 1、source package:QtZeroConf pre_Android_api30 package: QtZeroConf 2、source package:cryfs 0.9.9-2 package: cryfs 3、source package:libgsettings-qt-dev 0.2-1_s390x package: libgsettings-qt-dev 4、source package:qt5integration 5.6.3 package: qt5integration 5、source package:qtwebengine-opensource-src 5.14.2+dfsg1.orig package: qtwebengine-opensource-src Open Source Software Licensed under the LGPL-2.1-or-later: 1、source package:fcitx5 5.0.9-2 package: fcitx5 2、source package:fcitx5-chinese-addons 5.0.9-2 package: fcitx5-chinese-addons 3、source package:fcitx5-frontend-gtk2 5.0.9-1 package: fcitx5-frontend-gtk2 4、source package:fcitx5-frontend-qt5 0.0~git20200615.b6f2ef3-1_s390x package: fcitx5-frontend-qt5 5、source package:fcitx5-module-xorg 0~20191021+ds1-1_s390x package: fcitx5-module-xorg 6、source package:fcitx5-modules 0~20191021+ds1-1_s390x package: fcitx5-modules 7、source package:fcitx5-modules-dev 5.0.23-2~exp1 package: fcitx5-modules-dev 8、source package:ffmpeg 7:6.0-3 package: ffmpeg 9、source package:gcr 3.8.2-4 package: gcr 10、source package:iso-codes 4.9.0-1 package: iso-codes 11、source package:kcm-fcitx5 5.0.13-1 package: kcm-fcitx5 12、source package:libappstreamqt-dev 0.9.8-4_kfreebsd-i386 package: libappstreamqt-dev 13、source package:libavcodec-dev 4.3-3+b1_s390x package: libavcodec-dev 14、source package:libavcodec58 4.3-3+b1_ppc64el package: libavcodec58 15、source package:libavdevice-dev 4.3-3+b1_ppc64el package: libavdevice-dev 16、source package:libavfilter-dev 4.3-3+b1_mips64el package: libavfilter-dev 17、source package:libavformat-dev 4.3-3+b1_ppc64el package: libavformat-dev 18、source package:libavformat58 4.3-3+b1_i386 package: libavformat58 19、source package:libavutil-dev 4.3-3+b1_s390x package: libavutil-dev 20、source package:libavutil56 4.3-3+b1_s390x package: libavutil56 21、source package:libblockdev-crypto2 2.24-2_mipsel package: libblockdev-crypto2 22、source package:libdbusextended-qt5-dev 0.0.3-4_s390x package: libdbusextended-qt5-dev 23、source package:libfcitx5-qt-dev 0.0~git20200615.b6f2ef3-1_ppc64el package: libfcitx5-qt-dev 24、source package:libfcitx5core-dev 0~20191021+ds1-1_s390x package: libfcitx5core-dev 25、source package:libfcitx5utils-dev 0~20191021+ds1-1_s390x package: libfcitx5utils-dev 26、source package:libgxps-dev 0.3.1-1_s390x package: libgxps-dev 27、source package:libime-bin 0.0~git20200626.2c85668-1_s390x package: libime-bin 28、source package:libimobiledevice-utils 1.3.0-3_s390x package: libimobiledevice-utils 29、source package:libnss-myhostname 245.6-2_s390x package: libnss-myhostname 30、source package:libprocps-dev 3.3.16-5_s390x package: libprocps-dev 31、source package:libpulse-dev 7.1-2~bpo8+1_s390x package: libpulse-dev 32、source package:libpulse-mainloop-glib0 9.0-5 package: libpulse-mainloop-glib0 33、source package:libpulse0 7.1-2~bpo8+1_s390x package: libpulse0 34、source package:libqrencode-dev 4.0.2-2_s390x package: libqrencode-dev 35、source package:libqrencode4 4.1.1-1 package: libqrencode4 36、source package:libsecret-1-dev 0.20.5-3 package: libsecret-1-dev 37、source package:libswresample-dev 4.3-3+b1_ppc64el package: libswresample-dev 38、source package:libswscale-dev 4.3-3+b1_s390x package: libswscale-dev 39、source package:libsystemd-dev 245.6-2_i386 package: libsystemd-dev 40、source package:libsystemd0 245.6-2_s390x package: libsystemd0 41、source package:libudev-dev 245.6-2_s390x package: libudev-dev 42、source package:packagekit 1.2.6-5 package: packagekit 43、source package:pulseaudio 9.99.1-1 package: pulseaudio 44、source package:pulseaudio-module-bluetooth 7.1-2~bpo8+1_s390x package: pulseaudio-module-bluetooth 45、source package:pulseaudio-utils 7.1-2~bpo8+1_s390x package: pulseaudio-utils 46、source package:python3-gi 3.43.1-1 package: python3-gi 47、source package:systemd-coredump 245.6-2_mipsel package: systemd-coredump 48、source package:systemd-timesyncd 245.6-2_ppc64el package: systemd-timesyncd 49、source package:udev 245.6-2_s390x package: udev 50、source package:unar 1.9.1-1 package: unar Open Source Software Licensed under the LGPL-2.1-only: 1、source package:GitQlient v1.4.3 package: GitQlient 2、source package:cgroup-tools 0.41-8.1_s390x package: cgroup-tools 3、source package:checkstyle checkstyle-10.3.4 package: checkstyle 4、source package:cracklib-runtime 2.9.6-3_s390x package: cracklib-runtime 5、source package:dialog 1.3-20230209-1 package: dialog 6、source package:dmsetup 1.02.90-2.2+deb8u1_s390x package: dmsetup 7、source package:gettext-base 0.19.8.1-9_s390x package: gettext-base 8、source package:gstreamer1.0-libav 1.9.90-1 package: gstreamer1.0-libav 9、source package:gstreamer1.0-plugins-base 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-base 10、source package:gstreamer1.0-plugins-good 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-good 11、source package:gstreamer1.0-plugins-ugly 1.9.90-1 package: gstreamer1.0-plugins-ugly 12、source package:gstreamer1.0-pulseaudio 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-pulseaudio 13、source package:gstreamer1.0-x 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-x 14、source package:gtk2-engines 2.20.2.orig package: gtk2-engines 15、source package:gtk2-engines-murrine 0.98.2.orig package: gtk2-engines-murrine 16、source package:gtk2-engines-pixbuf 2.8.9-2 package: gtk2-engines-pixbuf 17、source package:kmod 9-3_sparc package: kmod 18、source package:libcairo2-dev 1.16.0-4_s390x package: libcairo2-dev 19、source package:libcap-ng-dev 0.7.9-2_s390x package: libcap-ng-dev 20、source package:libcrack2-dev 2.9.6-5 package: libcrack2-dev 21、source package:libfprint 20110418git-2 package: libfprint 22、source package:libfprint-2-2 1.90.1-2_s390x package: libfprint-2-2 23、source package:libfprint0 1.0-1_s390x package: libfprint0 24、source package:libglib2.0-dev 2.64.4-1_s390x package: libglib2.0-dev 25、source package:libgstreamer-plugins-base1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-0 26、source package:libgstreamer-plugins-base1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-dev 27、source package:libgstreamer1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer1.0-0 28、source package:libgstreamer1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer1.0-dev 29、source package:libgtk-3-dev 3.4.2-7+deb7u1_sparc package: libgtk-3-dev 30、source package:liblog4cpp5-dev 1.1.3-3_s390x package: liblog4cpp5-dev 31、source package:liblog4cpp5v5 1.1.3-3_ppc64el package: liblog4cpp5v5 32、source package:libnm-qt 0.9.8.2.orig package: libnm-qt 33、source package:libnotify-bin 0.7.9-1_s390x package: libnotify-bin 34、source package:libraw-dev 0.9.1-1+deb6u1 package: libraw-dev 35、source package:librsvg2-dev 2.9.5-6 package: librsvg2-dev 36、source package:libsdl1.2debian 1.2.15-5_sparc package: libsdl1.2debian 37、source package:libseccomp-dev 2.4.3-1_s390x package: libseccomp-dev 38、source package:libtag1-dev 1.9.1-2~bpo70+1_sparc package: libtag1-dev 39、source package:libusb-1.0-0-dev 1.0.23-2_s390x package: libusb-1.0-0-dev 40、source package:modemmanager 1.8.2.orig package: modemmanager 41、source package:networkmanager-qt 5.54.0.orig package: networkmanager-qt 42、source package:p7zip 9.20.1~dfsg.1-5 package: p7zip 43、source package:p7zip-full 9.20.1~dfsg.1-4.1_kfreebsd-i386 package: p7zip-full 44、source package:qrencode 4.0.2.orig package: qrencode 45、source package:qt-creator tqtc/v2.6.0-rc package: qt-creator 46、source package:qtciphersqliteplugin 0.6 package: qtciphersqliteplugin 47、source package:smartmontools 7.3-1 package: smartmontools Open Source Software Licensed under the LGPL-3 or GPL-2: 1、source package:libqt5core5a 5.7.1+dfsg-3+deb9u2_s390x package: libqt5core5a 2、source package:libqt5opengl5-dev 5.7.1+dfsg-3+deb9u2_s390x package: libqt5opengl5-dev 3、source package:libqt5sql5-sqlite 5.7.1+dfsg-3+deb9u2_s390x package: libqt5sql5-sqlite 4、source package:libqt5svg5-dev 5.7.1~20161021-2+b2_s390x package: libqt5svg5-dev 5、source package:libqt5x11extras5-dev 5.9.2-1 package: libqt5x11extras5-dev 6、source package:libqt6multimedia6 6.4.2-6 package: libqt6multimedia6 7、source package:libqt6opengl6 6.4.2+dfsg~rc1-3+alpha.1 package: libqt6opengl6 8、source package:qml-module-qt-labs-platform 5.9.2-2_kfreebsd-amd64 package: qml-module-qt-labs-platform 9、source package:qml-module-qtquick-controls2 5.9.2-2_kfreebsd-amd64 package: qml-module-qtquick-controls2 10、source package:qml-module-qtquick-dialogs 5.7.1~20161021-2_s390x package: qml-module-qtquick-dialogs 11、source package:qml-module-qtquick-templates2 5.9.2-2_kfreebsd-amd64 package: qml-module-qtquick-templates2 12、source package:qt5-qmake 5.7.1+dfsg-3+deb9u2_s390x package: qt5-qmake 13、source package:qt6-svg-dev 6.4.2~rc1-3 package: qt6-svg-dev 14、source package:qt6-wayland 6.4.2~rc1-2 package: qt6-wayland 15、source package:qtbase5-dev 5.7.1+dfsg-3+deb9u2_s390x package: qtbase5-dev 16、source package:qtbase5-private-dev 5.7.1+dfsg-3+deb9u2_s390x package: qtbase5-private-dev 17、source package:qtmultimedia5-dev 5.7.1~20161021-2_s390x package: qtmultimedia5-dev 18、source package:qtquickcontrols2-5-dev 5.9.2-2_kfreebsd-amd64 package: qtquickcontrols2-5-dev Open Source Software Licensed under the LGPL-3 or GPL-2+: 1、source package:qml-module-qtqml-models2 5.7.1-2+b2_s390x package: qml-module-qtqml-models2 2、source package:qml-module-qtquick-layouts 5.7.1-2+b2_s390x package: qml-module-qtquick-layouts 3、source package:qml-module-qtquick2 5.7.1-2+b2_s390x package: qml-module-qtquick2 4、source package:qtdeclarative5-dev 5.7.1-2+b2_s390x package: qtdeclarative5-dev Open Source Software Licensed under the Apache-2.0: 1、source package:AndroidProject-Kotlin 13.2 package: AndroidProject-Kotlin 2、source package:JSONStream 1.3.5 package: JSONStream 3、source package:acorn-node 1.8.2 package: acorn-node 4、source package:android-pdfium a56ccce4 package: android-pdfium 5、source package:androidsvg 1.4 package: androidsvg 6、source package:atob 2.1.2 package: atob 7、source package:aws-sign2 0.7.0 package: aws-sign2 8、source package:caseless 0.12.0 package: caseless 9、source package:cilium 1.14.3 package: cilium 10、source package:circleindicator 2.1.6 package: circleindicator 11、source package:cobra v0.0.3 package: cobra 12、source package:compiler 4.12.0 package: compiler 13、source package:concurrent 1.0.0 package: concurrent 14、source package:coost v3.0.0 package: coost 15、source package:core 1.7.0 package: core 16、source package:cppdap 87f8b4a package: cppdap 17、source package:crypto v0.23.0 package: crypto 18、source package:dash-ast 1.0.0 package: dash-ast 19、source package:diff-match-patch 1.0.5 package: diff-match-patch 20、source package:dompurify 2.4.1 package: dompurify 21、source package:external/github.com/google/benchmark v1.4.1 package: external/github.com/google/benchmark 22、source package:ffmpeg 7:6.0-3 package: ffmpeg 23、source package:fonts-noto-color-emoji 2.038-1 package: fonts-noto-color-emoji 24、source package:forever-agent 0.6.1 package: forever-agent 25、source package:get-assigned-identifiers 1.2.0 package: get-assigned-identifiers 26、source package:git 4.3.20-9 package: git 27、source package:glide 4.12.0 package: glide 28、source package:gofuzz v1.0.0 package: gofuzz 29、source package:golang-github-golang-groupcache-dev 0.0~git20200121.8c9f03a-2 package: golang-github-golang-groupcache-dev 30、source package:golang-gopkg-yaml.v2-dev 2.4.0-3 package: golang-gopkg-yaml.v2-dev 31、source package:golang-gopkg-yaml.v3-dev 3.0.1-3 package: golang-gopkg-yaml.v3-dev 32、source package:gradle 7.4.2 package: gradle 33、source package:gson 2.10.1 package: gson 34、source package:imgbrd-grabber v6.0.2 package: imgbrd-grabber 35、source package:infratask_scheduler v0.1.0 package: infratask_scheduler 36、source package:junit 1.1.5 package: junit 37、source package:kata-containers CC-0.7.0 package: kata-containers 38、source package:kotlin-gradle-plugin package: kotlin-gradle-plugin 39、source package:kotlin-stdlib-jdk7 package: kotlin-stdlib-jdk7 40、source package:kotlinx-serialization-json 1.5.1 package: kotlinx-serialization-json 41、source package:libcups2-dev 2.3~rc1-1_s390x package: libcups2-dev 42、source package:libcupsimage2 2.3~rc1-1_s390x package: libcupsimage2 43、source package:libpoppler-cpp-dev 0.85.0-1_s390x package: libpoppler-cpp-dev 44、source package:libpoppler-cpp0v5 0.85.0-1_s390x package: libpoppler-cpp0v5 45、source package:libssl-dev 3.0.0~~alpha4-1_s390x package: libssl-dev 46、source package:libssl3 3.0.0~~alpha4-1_s390x package: libssl3 47、source package:libwebrtc-bin 86.4240.20.0 package: libwebrtc-bin 48、source package:libxerces-c-dev 3.2.3+debian-1_s390x package: libxerces-c-dev 49、source package:lottie 4.1.0 package: lottie 50、source package:ms365 v2.0.5 package: ms365 51、source package:oauth-sign 0.9.0 package: oauth-sign 52、source package:okhttp 3.12.13 package: okhttp 53、source package:podman 1.6.4+dfsg1-4_armel package: podman 54、source package:preference 1.2.1 package: preference 55、source package:request 2.88.0 package: request 56、source package:rsyslog 8.9.0-3 package: rsyslog 57、source package:sass 1.55.0 package: sass 58、source package:spdx-correct 3.1.1 package: spdx-correct 59、source package:sse v0.1.0 package: sse 60、source package:sync v0.10.0 package: sync 61、source package:through 2.3.8 package: through 62、source package:timber 4.7.1 package: timber 63、source package:tinyrpc 2130294 package: tinyrpc 64、source package:tools_oat 373f560 package: tools_oat 65、source package:true-case-path 1.0.3 package: true-case-path 66、source package:tunnel-agent 0.6.0 package: tunnel-agent 67、source package:typescript 4.8.4 package: typescript 68、source package:undeclared-identifiers 1.1.3 package: undeclared-identifiers 69、source package:validate-npm-package-license 3.0.4 package: validate-npm-package-license 70、source package:vimspector 2938438041 package: vimspector Open Source Software Licensed under the MIT: 1、source package:@antfu/utils 0.7.7 package: @antfu/utils 2、source package:@babel/runtime 7.6.0 package: @babel/runtime 3、source package:@babel/standalone 7.20.15 package: @babel/standalone 4、source package:@ctrl/tinycolor 3.4.1 package: @ctrl/tinycolor 5、source package:@element-plus/icons-vue 2.0.9 package: @element-plus/icons-vue 6、source package:@esbuild/android-arm 0.15.9 package: @esbuild/android-arm 7、source package:@esbuild/linux-loong64 0.15.9 package: @esbuild/linux-loong64 8、source package:@floating-ui/core 1.0.1 package: @floating-ui/core 9、source package:@floating-ui/dom 1.0.2 package: @floating-ui/dom 10、source package:@jridgewell/gen-mapping 0.3.2 package: @jridgewell/gen-mapping 11、source package:@jridgewell/resolve-uri 3.1.0 package: @jridgewell/resolve-uri 12、source package:@jridgewell/set-array 1.1.2 package: @jridgewell/set-array 13、source package:@jridgewell/source-map 0.3.2 package: @jridgewell/source-map 14、source package:@jridgewell/sourcemap-codec 1.4.14 package: @jridgewell/sourcemap-codec 15、source package:@jridgewell/trace-mapping 0.3.16 package: @jridgewell/trace-mapping 16、source package:@nodelib/fs.scandir 2.1.5 package: @nodelib/fs.scandir 17、source package:@nodelib/fs.stat 2.0.5 package: @nodelib/fs.stat 18、source package:@nodelib/fs.walk 1.2.8 package: @nodelib/fs.walk 19、source package:@popperjs/core 2.11.7 package: @popperjs/core 20、source package:@rollup/pluginutils 5.1.0 package: @rollup/pluginutils 21、source package:@smake/co 1.0.1 package: @smake/co 22、source package:@types/estree 1.0.5 package: @types/estree 23、source package:@types/json-schema 7.0.6 package: @types/json-schema 24、source package:@types/lodash 4.14.185 package: @types/lodash 25、source package:@types/lodash-es 4.17.6 package: @types/lodash-es 26、source package:@types/node 14.14.6 package: @types/node 27、source package:@types/web-bluetooth 0.0.15 package: @types/web-bluetooth 28、source package:@vitejs/plugin-legacy 2.3.1 package: @vitejs/plugin-legacy 29、source package:@vitejs/plugin-vue 3.1.0 package: @vitejs/plugin-vue 30、source package:@vue/devtools-api 6.4.1 package: @vue/devtools-api 31、source package:@vueuse/core 9.3.0 package: @vueuse/core 32、source package:@vueuse/metadata 9.3.0 package: @vueuse/metadata 33、source package:@vueuse/shared 9.3.0 package: @vueuse/shared 34、source package:CppLogging 1.0.1.0 package: CppLogging 35、source package:abbrev 1.1.1 package: abbrev 36、source package:acorn 7.0.0 package: acorn 37、source package:acorn-dynamic-import 2.0.2 package: acorn-dynamic-import 38、source package:acorn-node 1.8.2 package: acorn-node 39、source package:acorn-walk 7.0.0 package: acorn-walk 40、source package:add-px-to-style 1.0.0 package: add-px-to-style 41、source package:ajv 6.12.6 package: ajv 42、source package:ajv-keywords 3.5.2 package: ajv-keywords 43、source package:align-text 0.1.4 package: align-text 44、source package:amdefine 1.0.1 package: amdefine 45、source package:ansi-gray 0.1.1 package: ansi-gray 46、source package:ansi-regex 3.0.0 package: ansi-regex 47、source package:ansi-styles 2.2.1 package: ansi-styles 48、source package:ansi-wrap 0.1.0 package: ansi-wrap 49、source package:anyks-lm 2.1.5 package: anyks-lm 50、source package:apt 2.7.1 package: apt 51、source package:archy 1.0.0 package: archy 52、source package:arr-diff 4.0.0 package: arr-diff 53、source package:arr-flatten 1.1.0 package: arr-flatten 54、source package:arr-union 3.1.0 package: arr-union 55、source package:array-differ 1.0.0 package: array-differ 56、source package:array-each 1.0.1 package: array-each 57、source package:array-find-index 1.0.2 package: array-find-index 58、source package:array-slice 1.1.0 package: array-slice 59、source package:array-uniq 1.0.3 package: array-uniq 60、source package:array-unique 0.3.2 package: array-unique 61、source package:asn1 0.2.4 package: asn1 62、source package:asn1.js 5.4.1 package: asn1.js 63、source package:assert 1.5.0 package: assert 64、source package:assert-plus 1.0.0 package: assert-plus 65、source package:assign-symbols 1.0.0 package: assign-symbols 66、source package:async 2.6.3 package: async 67、source package:async-each 1.0.3 package: async-each 68、source package:async-foreach 0.1.3 package: async-foreach 69、source package:async-validator 4.2.5 package: async-validator 70、source package:asynckit 0.4.0 package: asynckit 71、source package:atob 2.1.2 package: atob 72、source package:aws4 1.8.0 package: aws4 73、source package:babel-code-frame 6.26.0 package: babel-code-frame 74、source package:babel-core 6.26.3 package: babel-core 75、source package:babel-generator 6.26.1 package: babel-generator 76、source package:babel-helper-builder-binary-assignment-operator-visitor 6.24.1 package: babel-helper-builder-binary-assignment-operator-visitor 77、source package:babel-helper-builder-react-jsx 6.26.0 package: babel-helper-builder-react-jsx 78、source package:babel-helper-call-delegate 6.24.1 package: babel-helper-call-delegate 79、source package:babel-helper-define-map 6.26.0 package: babel-helper-define-map 80、source package:babel-helper-explode-assignable-expression 6.24.1 package: babel-helper-explode-assignable-expression 81、source package:babel-helper-function-name 6.24.1 package: babel-helper-function-name 82、source package:babel-helper-get-function-arity 6.24.1 package: babel-helper-get-function-arity 83、source package:babel-helper-hoist-variables 6.24.1 package: babel-helper-hoist-variables 84、source package:babel-helper-optimise-call-expression 6.24.1 package: babel-helper-optimise-call-expression 85、source package:babel-helper-regex 6.26.0 package: babel-helper-regex 86、source package:babel-helper-remap-async-to-generator 6.24.1 package: babel-helper-remap-async-to-generator 87、source package:babel-helper-replace-supers 6.24.1 package: babel-helper-replace-supers 88、source package:babel-helpers 6.24.1 package: babel-helpers 89、source package:babel-messages 6.23.0 package: babel-messages 90、source package:babel-plugin-check-es2015-constants 6.22.0 package: babel-plugin-check-es2015-constants 91、source package:babel-plugin-syntax-async-functions 6.13.0 package: babel-plugin-syntax-async-functions 92、source package:babel-plugin-syntax-exponentiation-operator 6.13.0 package: babel-plugin-syntax-exponentiation-operator 93、source package:babel-plugin-syntax-flow 6.18.0 package: babel-plugin-syntax-flow 94、source package:babel-plugin-syntax-jsx 6.18.0 package: babel-plugin-syntax-jsx 95、source package:babel-plugin-syntax-trailing-function-commas 6.22.0 package: babel-plugin-syntax-trailing-function-commas 96、source package:babel-plugin-transform-async-to-generator 6.24.1 package: babel-plugin-transform-async-to-generator 97、source package:babel-plugin-transform-es2015-arrow-functions 6.22.0 package: babel-plugin-transform-es2015-arrow-functions 98、source package:babel-plugin-transform-es2015-block-scoped-functions 6.22.0 package: babel-plugin-transform-es2015-block-scoped-functions 99、source package:babel-plugin-transform-es2015-block-scoping 6.26.0 package: babel-plugin-transform-es2015-block-scoping 100、source package:babel-plugin-transform-es2015-classes 6.24.1 package: babel-plugin-transform-es2015-classes 101、source package:babel-plugin-transform-es2015-computed-properties 6.24.1 package: babel-plugin-transform-es2015-computed-properties 102、source package:babel-plugin-transform-es2015-destructuring 6.23.0 package: babel-plugin-transform-es2015-destructuring 103、source package:babel-plugin-transform-es2015-duplicate-keys 6.24.1 package: babel-plugin-transform-es2015-duplicate-keys 104、source package:babel-plugin-transform-es2015-for-of 6.23.0 package: babel-plugin-transform-es2015-for-of 105、source package:babel-plugin-transform-es2015-function-name 6.24.1 package: babel-plugin-transform-es2015-function-name 106、source package:babel-plugin-transform-es2015-literals 6.22.0 package: babel-plugin-transform-es2015-literals 107、source package:babel-plugin-transform-es2015-modules-amd 6.24.1 package: babel-plugin-transform-es2015-modules-amd 108、source package:babel-plugin-transform-es2015-modules-commonjs 6.26.2 package: babel-plugin-transform-es2015-modules-commonjs 109、source package:babel-plugin-transform-es2015-modules-systemjs 6.24.1 package: babel-plugin-transform-es2015-modules-systemjs 110、source package:babel-plugin-transform-es2015-modules-umd 6.24.1 package: babel-plugin-transform-es2015-modules-umd 111、source package:babel-plugin-transform-es2015-object-super 6.24.1 package: babel-plugin-transform-es2015-object-super 112、source package:babel-plugin-transform-es2015-parameters 6.24.1 package: babel-plugin-transform-es2015-parameters 113、source package:babel-plugin-transform-es2015-shorthand-properties 6.24.1 package: babel-plugin-transform-es2015-shorthand-properties 114、source package:babel-plugin-transform-es2015-spread 6.22.0 package: babel-plugin-transform-es2015-spread 115、source package:babel-plugin-transform-es2015-sticky-regex 6.24.1 package: babel-plugin-transform-es2015-sticky-regex 116、source package:babel-plugin-transform-es2015-template-literals 6.22.0 package: babel-plugin-transform-es2015-template-literals 117、source package:babel-plugin-transform-es2015-typeof-symbol 6.23.0 package: babel-plugin-transform-es2015-typeof-symbol 118、source package:babel-plugin-transform-es2015-unicode-regex 6.24.1 package: babel-plugin-transform-es2015-unicode-regex 119、source package:babel-plugin-transform-exponentiation-operator 6.24.1 package: babel-plugin-transform-exponentiation-operator 120、source package:babel-plugin-transform-flow-strip-types 6.22.0 package: babel-plugin-transform-flow-strip-types 121、source package:babel-plugin-transform-react-display-name 6.25.0 package: babel-plugin-transform-react-display-name 122、source package:babel-plugin-transform-react-jsx 6.24.1 package: babel-plugin-transform-react-jsx 123、source package:babel-plugin-transform-react-jsx-self 6.22.0 package: babel-plugin-transform-react-jsx-self 124、source package:babel-plugin-transform-react-jsx-source 6.22.0 package: babel-plugin-transform-react-jsx-source 125、source package:babel-plugin-transform-regenerator 6.26.0 package: babel-plugin-transform-regenerator 126、source package:babel-plugin-transform-strict-mode 6.24.1 package: babel-plugin-transform-strict-mode 127、source package:babel-polyfill 6.26.0 package: babel-polyfill 128、source package:babel-preset-env 1.7.0 package: babel-preset-env 129、source package:babel-preset-flow 6.23.0 package: babel-preset-flow 130、source package:babel-preset-react 6.24.1 package: babel-preset-react 131、source package:babel-register 6.26.0 package: babel-register 132、source package:babel-runtime 6.26.0 package: babel-runtime 133、source package:babel-template 6.26.0 package: babel-template 134、source package:babel-traverse 6.26.0 package: babel-traverse 135、source package:babel-types 6.26.0 package: babel-types 136、source package:babelify 8.0.0 package: babelify 137、source package:babylon 6.18.0 package: babylon 138、source package:balanced-match 1.0.2 package: balanced-match 139、source package:base 0.11.2 package: base 140、source package:base64-js 1.3.1 package: base64-js 141、source package:beeper 1.1.1 package: beeper 142、source package:big.js 5.2.2 package: big.js 143、source package:binary-extensions 2.2.0 package: binary-extensions 144、source package:bl 1.2.2 package: bl 145、source package:bn.js 5.1.3 package: bn.js 146、source package:brace-expansion 2.0.1 package: brace-expansion 147、source package:braces 3.0.2 package: braces 148、source package:brorand 1.1.0 package: brorand 149、source package:browser-pack 6.1.0 package: browser-pack 150、source package:browser-resolve 1.11.3 package: browser-resolve 151、source package:browserify 14.5.0 package: browserify 152、source package:browserify-aes 1.2.0 package: browserify-aes 153、source package:browserify-cipher 1.0.1 package: browserify-cipher 154、source package:browserify-des 1.0.2 package: browserify-des 155、source package:browserify-rsa 4.0.1 package: browserify-rsa 156、source package:browserify-zlib 0.2.0 package: browserify-zlib 157、source package:browserslist 3.2.8 package: browserslist 158、source package:buffer 5.4.2 package: buffer 159、source package:buffer-from 1.1.2 package: buffer-from 160、source package:buffer-xor 1.0.3 package: buffer-xor 161、source package:builtin-status-codes 3.0.0 package: builtin-status-codes 162、source package:cache-base 1.0.1 package: cache-base 163、source package:cached-path-relative 1.0.2 package: cached-path-relative 164、source package:camelcase 4.1.0 package: camelcase 165、source package:camelcase-keys 2.1.0 package: camelcase-keys 166、source package:center-align 0.1.3 package: center-align 167、source package:chalk 1.1.3 package: chalk 168、source package:cheerio 1.0.0-rc.3 package: cheerio 169、source package:chokidar 3.4.3 package: chokidar 170、source package:cipher-base 1.0.4 package: cipher-base 171、source package:class-utils 0.3.6 package: class-utils 172、source package:clone 2.1.2 package: clone 173、source package:clone-buffer 1.0.0 package: clone-buffer 174、source package:clone-stats 1.0.0 package: clone-stats 175、source package:cloneable-readable 1.1.3 package: cloneable-readable 176、source package:code-point-at 1.1.0 package: code-point-at 177、source package:collection-visit 1.0.0 package: collection-visit 178、source package:combine-source-map 0.8.0 package: combine-source-map 179、source package:combined-stream 1.0.8 package: combined-stream 180、source package:commander 2.20.3 package: commander 181、source package:component-emitter 1.3.0 package: component-emitter 182、source package:compute-scroll-into-view 1.0.11 package: compute-scroll-into-view 183、source package:concat-map 0.0.1 package: concat-map 184、source package:concat-stream 1.6.2 package: concat-stream 185、source package:console-browserify 1.2.0 package: console-browserify 186、source package:constants-browserify 1.0.0 package: constants-browserify 187、source package:convert-source-map 1.6.0 package: convert-source-map 188、source package:cookiecutter-golang d372aa0 package: cookiecutter-golang 189、source package:coost v3.0.0 package: coost 190、source package:copy-descriptor 0.1.1 package: copy-descriptor 191、source package:core-js 3.27.2 package: core-js 192、source package:core-util-is 1.0.2 package: core-util-is 193、source package:create-ecdh 4.0.4 package: create-ecdh 194、source package:create-hash 1.2.0 package: create-hash 195、source package:create-hmac 1.1.7 package: create-hmac 196、source package:crelt 1.0.6 package: crelt 197、source package:cross-spawn 5.1.0 package: cross-spawn 198、source package:crypto-browserify 3.12.0 package: crypto-browserify 199、source package:currently-unhandled 0.4.1 package: currently-unhandled 200、source package:dashdash 1.14.1 package: dashdash 201、source package:date-now 0.1.4 package: date-now 202、source package:dateformat 2.2.0 package: dateformat 203、source package:dayjs 1.11.5 package: dayjs 204、source package:debug 4.3.4 package: debug 205、source package:decamelize 1.2.0 package: decamelize 206、source package:decode-uri-component 0.2.0 package: decode-uri-component 207、source package:defaults 1.0.3 package: defaults 208、source package:define-property 2.0.2 package: define-property 209、source package:defined 1.0.0 package: defined 210、source package:delayed-stream 1.0.0 package: delayed-stream 211、source package:delegates 1.0.0 package: delegates 212、source package:deprecated 0.0.1 package: deprecated 213、source package:deps-sort 2.0.0 package: deps-sort 214、source package:des.js 1.0.1 package: des.js 215、source package:detect-file 1.0.0 package: detect-file 216、source package:detect-indent 4.0.0 package: detect-indent 217、source package:detective 4.7.1 package: detective 218、source package:diffie-hellman 5.0.3 package: diffie-hellman 219、source package:dom-css 2.1.0 package: dom-css 220、source package:dom-serializer 0.1.1 package: dom-serializer 221、source package:domain-browser 1.2.0 package: domain-browser 222、source package:ecc-jsbn 0.1.2 package: ecc-jsbn 223、source package:element-plus 2.2.17 package: element-plus 224、source package:elliptic 6.5.3 package: elliptic 225、source package:emojis-list 3.0.0 package: emojis-list 226、source package:end-of-stream 0.1.5 package: end-of-stream 227、source package:enhanced-resolve 3.4.1 package: enhanced-resolve 228、source package:errno 0.1.7 package: errno 229、source package:error-ex 1.3.2 package: error-ex 230、source package:es6-iterator 2.0.3 package: es6-iterator 231、source package:es6-map 0.1.5 package: es6-map 232、source package:es6-set 0.1.5 package: es6-set 233、source package:es6-symbol 3.1.1 package: es6-symbol 234、source package:esbuild 0.15.9 package: esbuild 235、source package:esbuild-android-64 0.15.9 package: esbuild-android-64 236、source package:esbuild-android-arm64 0.15.9 package: esbuild-android-arm64 237、source package:esbuild-darwin-64 0.15.9 package: esbuild-darwin-64 238、source package:esbuild-darwin-arm64 0.15.9 package: esbuild-darwin-arm64 239、source package:esbuild-freebsd-64 0.15.9 package: esbuild-freebsd-64 240、source package:esbuild-freebsd-arm64 0.15.9 package: esbuild-freebsd-arm64 241、source package:esbuild-linux-32 0.15.9 package: esbuild-linux-32 242、source package:esbuild-linux-64 0.15.9 package: esbuild-linux-64 243、source package:esbuild-linux-arm 0.15.9 package: esbuild-linux-arm 244、source package:esbuild-linux-arm64 0.15.9 package: esbuild-linux-arm64 245、source package:esbuild-linux-mips64le 0.15.9 package: esbuild-linux-mips64le 246、source package:esbuild-linux-ppc64le 0.15.9 package: esbuild-linux-ppc64le 247、source package:esbuild-linux-riscv64 0.15.9 package: esbuild-linux-riscv64 248、source package:esbuild-linux-s390x 0.15.9 package: esbuild-linux-s390x 249、source package:esbuild-netbsd-64 0.15.9 package: esbuild-netbsd-64 250、source package:esbuild-openbsd-64 0.15.9 package: esbuild-openbsd-64 251、source package:esbuild-sunos-64 0.15.9 package: esbuild-sunos-64 252、source package:esbuild-windows-32 0.15.9 package: esbuild-windows-32 253、source package:esbuild-windows-64 0.15.9 package: esbuild-windows-64 254、source package:esbuild-windows-arm64 0.15.9 package: esbuild-windows-arm64 255、source package:escape-html 1.0.3 package: escape-html 256、source package:escape-string-regexp 5.0.0 package: escape-string-regexp 257、source package:estree-walker 2.0.2 package: estree-walker 258、source package:event-emitter 0.3.5 package: event-emitter 259、source package:events 3.2.0 package: events 260、source package:evp_bytestokey 1.0.3 package: evp_bytestokey 261、source package:execa 0.7.0 package: execa 262、source package:expand-brackets 2.1.4 package: expand-brackets 263、source package:expand-tilde 2.0.2 package: expand-tilde 264、source package:expose-loader 1.0.1 package: expose-loader 265、source package:extend 3.0.2 package: extend 266、source package:extend-shallow 3.0.2 package: extend-shallow 267、source package:extglob 2.0.4 package: extglob 268、source package:extsprintf 1.3.0 package: extsprintf 269、source package:fancy-log 1.3.3 package: fancy-log 270、source package:fast-deep-equal 3.1.3 package: fast-deep-equal 271、source package:fast-glob 3.2.12 package: fast-glob 272、source package:fast-json-stable-stringify 2.1.0 package: fast-json-stable-stringify 273、source package:ffmpeg 7:6.0-3 package: ffmpeg 274、source package:fill-range 7.0.1 package: fill-range 275、source package:find-index 0.1.1 package: find-index 276、source package:find-up 2.1.0 package: find-up 277、source package:findup-sync 2.0.0 package: findup-sync 278、source package:fined 1.2.0 package: fined 279、source package:first-chunk-stream 1.0.0 package: first-chunk-stream 280、source package:flagged-respawn 1.0.1 package: flagged-respawn 281、source package:for-in 1.0.2 package: for-in 282、source package:for-own 1.0.0 package: for-own 283、source package:form-data 2.3.3 package: form-data 284、source package:fragment-cache 0.2.1 package: fragment-cache 285、source package:fs.realpath 1.0.0 package: fs.realpath 286、source package:fsevents 2.3.2 package: fsevents 287、source package:function-bind 1.1.1 package: function-bind 288、source package:gaze 1.1.3 package: gaze 289、source package:get-stdin 4.0.1 package: get-stdin 290、source package:get-stream 3.0.0 package: get-stream 291、source package:get-value 2.0.6 package: get-value 292、source package:getpass 0.1.7 package: getpass 293、source package:gg v1.3.0 package: gg 294、source package:gin v1.5.0 package: gin 295、source package:git 4.3.20-9 package: git 296、source package:gitea v1.19.3 package: gitea 297、source package:glob-stream 3.1.18 package: glob-stream 298、source package:glob-watcher 0.0.6 package: glob-watcher 299、source package:glob2base 0.0.12 package: glob2base 300、source package:global-modules 1.0.0 package: global-modules 301、source package:global-prefix 1.0.2 package: global-prefix 302、source package:globals 9.18.0 package: globals 303、source package:globule 1.2.1 package: globule 304、source package:glogg 1.0.2 package: glogg 305、source package:go v1.1.7 package: go 306、source package:go-isatty v0.0.9 package: go-isatty 307、source package:go-pinyin v0.19.0 package: go-pinyin 308、source package:go-wav v0.3.2 package: go-wav 309、source package:go-windows-terminal-sequences v1.0.1 package: go-windows-terminal-sequences 310、source package:goconvey v1.8.1 package: goconvey 311、source package:golang-github-gosexy-gettext-dev 0~git20130221-2.1_all package: golang-github-gosexy-gettext-dev 312、source package:gstreamer1.0-fluendo-mp3 0.10.32.debian-1_s390x package: gstreamer1.0-fluendo-mp3 313、source package:gstreamer1.0-plugins-base 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-base 314、source package:gstreamer1.0-plugins-good 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-good 315、source package:gstreamer1.0-plugins-ugly 1.9.90-1 package: gstreamer1.0-plugins-ugly 316、source package:gstreamer1.0-pulseaudio 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-pulseaudio 317、source package:gstreamer1.0-x 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-x 318、source package:gulp 3.9.1 package: gulp 319、source package:gulp-concat 2.6.1 package: gulp-concat 320、source package:gulp-rename 1.4.0 package: gulp-rename 321、source package:gulp-sass 3.2.1 package: gulp-sass 322、source package:gulp-util 3.0.8 package: gulp-util 323、source package:gulplog 1.0.0 package: gulplog 324、source package:har-validator 5.1.3 package: har-validator 325、source package:has 1.0.3 package: has 326、source package:has-ansi 2.0.0 package: has-ansi 327、source package:has-flag 2.0.0 package: has-flag 328、source package:has-gulplog 0.1.0 package: has-gulplog 329、source package:has-value 1.0.0 package: has-value 330、source package:has-values 1.0.0 package: has-values 331、source package:hash-base 3.1.0 package: hash-base 332、source package:hash.js 1.1.7 package: hash.js 333、source package:history 4.9.0 package: history 334、source package:hmac-drbg 1.0.1 package: hmac-drbg 335、source package:home-or-tmp 2.0.0 package: home-or-tmp 336、source package:homedir-polyfill 1.0.3 package: homedir-polyfill 337、source package:htmlescape 1.1.1 package: htmlescape 338、source package:htmlparser2 3.10.1 package: htmlparser2 339、source package:http-signature 1.2.0 package: http-signature 340、source package:https-browserify 1.0.0 package: https-browserify 341、source package:image v0.10.0 package: image 342、source package:immutable 4.1.0 package: immutable 343、source package:indent-string 2.1.0 package: indent-string 344、source package:indexof 0.0.1 package: indexof 345、source package:inline-source-map 0.6.2 package: inline-source-map 346、source package:insert-module-globals 7.2.0 package: insert-module-globals 347、source package:interpret 1.4.0 package: interpret 348、source package:invariant 2.2.4 package: invariant 349、source package:invert-kv 1.0.0 package: invert-kv 350、source package:is-absolute 1.0.0 package: is-absolute 351、source package:is-accessor-descriptor 1.0.0 package: is-accessor-descriptor 352、source package:is-arrayish 0.2.1 package: is-arrayish 353、source package:is-binary-path 2.1.0 package: is-binary-path 354、source package:is-buffer 1.1.6 package: is-buffer 355、source package:is-core-module 2.10.0 package: is-core-module 356、source package:is-data-descriptor 1.0.0 package: is-data-descriptor 357、source package:is-descriptor 1.0.2 package: is-descriptor 358、source package:is-extendable 1.0.1 package: is-extendable 359、source package:is-extglob 2.1.1 package: is-extglob 360、source package:is-finite 1.0.2 package: is-finite 361、source package:is-fullwidth-code-point 2.0.0 package: is-fullwidth-code-point 362、source package:is-glob 4.0.3 package: is-glob 363、source package:is-number 7.0.0 package: is-number 364、source package:is-plain-object 2.0.4 package: is-plain-object 365、source package:is-relative 1.0.0 package: is-relative 366、source package:is-stream 1.1.0 package: is-stream 367、source package:is-typedarray 1.0.0 package: is-typedarray 368、source package:is-unc-path 1.0.0 package: is-unc-path 369、source package:is-utf8 0.2.1 package: is-utf8 370、source package:is-windows 1.0.2 package: is-windows 371、source package:isarray 1.0.0 package: isarray 372、source package:isobject 3.0.1 package: isobject 373、source package:isstream 0.1.2 package: isstream 374、source package:java_fpe_test 0.1.2 package: java_fpe_test 375、source package:jq 1.6-2.1 package: jq 376、source package:jquery 3.6.1 package: jquery 377、source package:js 0.1.0 package: js 378、source package:js-tokens 3.0.2 package: js-tokens 379、source package:jsbn 0.1.1 package: jsbn 380、source package:jsesc 1.3.0 package: jsesc 381、source package:json v3.7.0 package: json 382、source package:json-loader 0.5.7 package: json-loader 383、source package:json-schema-traverse 0.4.1 package: json-schema-traverse 384、source package:json-stable-stringify 0.0.1 package: json-stable-stringify 385、source package:json5 2.1.3 package: json5 386、source package:jsonc-parser 3.2.0 package: jsonc-parser 387、source package:jsonparse 1.3.1 package: jsonparse 388、source package:jsprim 1.4.1 package: jsprim 389、source package:jwt-cpp v0.5.0 package: jwt-cpp 390、source package:keypress 0.1.0 package: keypress 391、source package:kind-of 6.0.3 package: kind-of 392、source package:labeled-stream-splicer 2.0.2 package: labeled-stream-splicer 393、source package:lazy-cache 1.0.4 package: lazy-cache 394、source package:lcid 1.0.0 package: lcid 395、source package:libappimage-dev 0.1.9+dfsg-1_s390x package: libappimage-dev 396、source package:libboost-dev 1.71.0.3_s390x package: libboost-dev 397、source package:libboost-filesystem-dev 1.71.0.3_s390x package: libboost-filesystem-dev 398、source package:libboost-serialization-dev 1.71.0.3_s390x package: libboost-serialization-dev 399、source package:libboost-system-dev 1.71.0.3_s390x package: libboost-system-dev 400、source package:libdrm-dev 2.4.99-1_s390x package: libdrm-dev 401、source package:libegl1-mesa-dev 8.0.5-4+deb7u2_sparc package: libegl1-mesa-dev 402、source package:libgbm-dev 8.0.5-4+deb7u2_sparc package: libgbm-dev 403、source package:libglib2.0-dev 2.64.4-1_s390x package: libglib2.0-dev 404、source package:libgstreamer-plugins-base1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-0 405、source package:libgstreamer-plugins-base1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-dev 406、source package:libjson-c3 0.12.1-1.3_s390x package: libjson-c3 407、source package:libjson-rpc-cpp v1.4.1 package: libjson-rpc-cpp 408、source package:liblcms2-dev 2.9-4_s390x package: liblcms2-dev 409、source package:libportaudio2 19.6.0-1_s390x package: libportaudio2 410、source package:libx11-dev 2:1.8.4-2+deb12u1 package: libx11-dev 411、source package:libx11-xcb-dev 1.6.9-2_s390x package: libx11-xcb-dev 412、source package:libxcb-composite0-dev 1.8.1-2+deb7u1_sparc package: libxcb-composite0-dev 413、source package:libxcb-cursor-dev 0.1.1-4_s390x package: libxcb-cursor-dev 414、source package:libxcb-damage0-dev 1.8.1-2+deb7u1_sparc package: libxcb-damage0-dev 415、source package:libxcb-ewmh-dev 0.4.1-1_s390x package: libxcb-ewmh-dev 416、source package:libxcb-image0-dev 0.4.0-1_s390x package: libxcb-image0-dev 417、source package:libxcb-keysyms1-dev 0.4.0-1_s390x package: libxcb-keysyms1-dev 418、source package:libxcb-randr0-dev 1.8.1-2+deb7u1_sparc package: libxcb-randr0-dev 419、source package:libxcb-record0-dev 1.8.1-2+deb7u1_sparc package: libxcb-record0-dev 420、source package:libxcb-render-util0-dev 0.3.9-1_s390x package: libxcb-render-util0-dev 421、source package:libxcb-render0-dev 1.8.1-2+deb7u1_sparc package: libxcb-render0-dev 422、source package:libxcb-res0-dev 1.8.1-2+deb7u1_sparc package: libxcb-res0-dev 423、source package:libxcb-shape0-dev 1.8.1-2+deb7u1_sparc package: libxcb-shape0-dev 424、source package:libxcb-sync-dev 1.14-2_s390x package: libxcb-sync-dev 425、source package:libxcb-util0 0.3.8-3_s390x package: libxcb-util0 426、source package:libxcb-util0-dev 0.3.8-3_s390x package: libxcb-util0-dev 427、source package:libxcb-util1 0.4.0-1 package: libxcb-util1 428、source package:libxcb-xfixes0-dev 1.8.1-2+deb7u1_sparc package: libxcb-xfixes0-dev 429、source package:libxcb-xinerama0-dev 1.8.1-2+deb7u1_sparc package: libxcb-xinerama0-dev 430、source package:libxcb-xinput-dev 1.14-2_s390x package: libxcb-xinput-dev 431、source package:libxcb-xkb-dev 1.14-2_s390x package: libxcb-xkb-dev 432、source package:libxcb-xtest0-dev 1.8.1-2+deb7u1_sparc package: libxcb-xtest0-dev 433、source package:libxcb1-dev 1.8.1-2+deb7u1_sparc package: libxcb1-dev 434、source package:libxext-dev 1.3.3-1_s390x package: libxext-dev 435、source package:libxfixes-dev 5.0.3-2_s390x package: libxfixes-dev 436、source package:libxinerama-dev 2:1.1.4-3 package: libxinerama-dev 437、source package:libxkbcommon-dev 0.9.1-1_s390x package: libxkbcommon-dev 438、source package:libxkbcommon-x11-dev 0.9.1-1_s390x package: libxkbcommon-x11-dev 439、source package:libxss-dev 1.2.3-1_s390x package: libxss-dev 440、source package:libxss1 1.2.3-1_s390x package: libxss1 441、source package:libxtst-dev 1.2.3-1_s390x package: libxtst-dev 442、source package:liftoff 2.5.0 package: liftoff 443、source package:load-json-file 2.0.0 package: load-json-file 444、source package:loader-runner 2.4.0 package: loader-runner 445、source package:loader-utils 2.0.0 package: loader-utils 446、source package:local-pkg 0.4.3 package: local-pkg 447、source package:locales v0.12.1 package: locales 448、source package:locate-path 2.0.0 package: locate-path 449、source package:lodash 4.17.21 package: lodash 450、source package:lodash-es 4.17.21 package: lodash-es 451、source package:lodash-unified 1.0.2 package: lodash-unified 452、source package:lodash._basecopy 3.0.1 package: lodash._basecopy 453、source package:lodash._basetostring 3.0.1 package: lodash._basetostring 454、source package:lodash._basevalues 3.0.0 package: lodash._basevalues 455、source package:lodash._getnative 3.9.1 package: lodash._getnative 456、source package:lodash._isiterateecall 3.0.9 package: lodash._isiterateecall 457、source package:lodash._reescape 3.0.0 package: lodash._reescape 458、source package:lodash._reevaluate 3.0.0 package: lodash._reevaluate 459、source package:lodash._reinterpolate 3.0.0 package: lodash._reinterpolate 460、source package:lodash._root 3.0.1 package: lodash._root 461、source package:lodash.clonedeep 4.5.0 package: lodash.clonedeep 462、source package:lodash.escape 3.2.0 package: lodash.escape 463、source package:lodash.isarguments 3.1.0 package: lodash.isarguments 464、source package:lodash.isarray 3.0.4 package: lodash.isarray 465、source package:lodash.keys 3.1.2 package: lodash.keys 466、source package:lodash.memoize 3.0.4 package: lodash.memoize 467、source package:lodash.restparam 3.6.1 package: lodash.restparam 468、source package:lodash.template 3.6.2 package: lodash.template 469、source package:lodash.templatesettings 3.1.1 package: lodash.templatesettings 470、source package:logrus v1.9.3 package: logrus 471、source package:longest 1.0.1 package: longest 472、source package:loose-envify 1.4.0 package: loose-envify 473、source package:loud-rejection 1.6.0 package: loud-rejection 474、source package:magic-string 0.27.0 package: magic-string 475、source package:make-iterator 1.0.1 package: make-iterator 476、source package:map-cache 0.2.2 package: map-cache 477、source package:map-obj 1.0.1 package: map-obj 478、source package:map-visit 1.0.0 package: map-visit 479、source package:marked 1.2.3 package: marked 480、source package:md5.js 1.3.5 package: md5.js 481、source package:mem 1.1.0 package: mem 482、source package:memoize-one 6.0.0 package: memoize-one 483、source package:memory-fs 0.4.1 package: memory-fs 484、source package:meow 3.7.0 package: meow 485、source package:merge2 1.4.1 package: merge2 486、source package:mesa-utils 9.0.0-1 package: mesa-utils 487、source package:mesa-va-drivers 20.1.2-1_armel package: mesa-va-drivers 488、source package:mesa-vdpau-drivers 20.1.2-1_mipsel package: mesa-vdpau-drivers 489、source package:mesa-vulkan-drivers 20.1.2-1_mips64el package: mesa-vulkan-drivers 490、source package:micromatch 3.1.10 package: micromatch 491、source package:miller-rabin 4.0.1 package: miller-rabin 492、source package:mime-db 1.40.0 package: mime-db 493、source package:mime-types 2.1.24 package: mime-types 494、source package:mimic-fn 1.2.0 package: mimic-fn 495、source package:minimalistic-crypto-utils 1.0.1 package: minimalistic-crypto-utils 496、source package:minimatch 0.2.14 package: minimatch 497、source package:minimist 1.2.5 package: minimist 498、source package:mitt 3.0.0 package: mitt 499、source package:mixin-deep 1.3.2 package: mixin-deep 500、source package:mkdirp 0.5.5 package: mkdirp 501、source package:mlly 1.4.2 package: mlly 502、source package:module-deps 4.1.1 package: module-deps 503、source package:moment 2.29.4 package: moment 504、source package:mqt.qfr 1.10.0 package: mqt.qfr 505、source package:ms 2.1.2 package: ms 506、source package:multipipe 0.1.2 package: multipipe 507、source package:nan 2.14.0 package: nan 508、source package:nanomatch 1.2.13 package: nanomatch 509、source package:native v1.1.0 package: native 510、source package:ncurses-base 6.2-1_all package: ncurses-base 511、source package:neo-async 2.6.2 package: neo-async 512、source package:netlink v1.7.2 package: netlink 513、source package:next-tick 1.0.0 package: next-tick 514、source package:nlohmann_json nlohmann_json-3.7.3 package: nlohmann_json 515、source package:node 8.16.1 package: node 516、source package:node-gyp 3.8.0 package: node-gyp 517、source package:node-libs-browser 2.2.1 package: node-libs-browser 518、source package:node-sass 4.12.0 package: node-sass 519、source package:normalize-path 3.0.0 package: normalize-path 520、source package:npm-run-path 2.0.2 package: npm-run-path 521、source package:number-is-nan 1.0.1 package: number-is-nan 522、source package:object-assign 4.1.1 package: object-assign 523、source package:object-copy 0.1.0 package: object-copy 524、source package:object-visit 1.0.1 package: object-visit 525、source package:object.defaults 1.1.0 package: object.defaults 526、source package:object.map 1.0.1 package: object.map 527、source package:object.pick 1.3.0 package: object.pick 528、source package:objx v0.5.2 package: objx 529、source package:orchestrator 0.3.8 package: orchestrator 530、source package:ordered-read-streams 0.1.0 package: ordered-read-streams 531、source package:os-browserify 0.3.0 package: os-browserify 532、source package:os-config 0.2.3 package: os-config 533、source package:os-homedir 1.0.2 package: os-homedir 534、source package:os-locale 2.1.0 package: os-locale 535、source package:os-tmpdir 1.0.2 package: os-tmpdir 536、source package:p-finally 1.0.0 package: p-finally 537、source package:p-limit 1.3.0 package: p-limit 538、source package:p-locate 2.0.0 package: p-locate 539、source package:p-try 1.0.0 package: p-try 540、source package:pako 1.0.11 package: pako 541、source package:parents 1.0.1 package: parents 542、source package:parse-filepath 1.0.2 package: parse-filepath 543、source package:parse-json 2.2.0 package: parse-json 544、source package:parse-node-version 1.0.1 package: parse-node-version 545、source package:parse-passwd 1.0.0 package: parse-passwd 546、source package:parse5 3.0.3 package: parse5 547、source package:pascalcase 0.1.1 package: pascalcase 548、source package:path-browserify 0.0.1 package: path-browserify 549、source package:path-dirname 1.0.2 package: path-dirname 550、source package:path-exists 3.0.0 package: path-exists 551、source package:path-is-absolute 1.0.1 package: path-is-absolute 552、source package:path-key 2.0.1 package: path-key 553、source package:path-parse 1.0.7 package: path-parse 554、source package:path-platform 0.11.15 package: path-platform 555、source package:path-root 0.1.1 package: path-root 556、source package:path-root-regex 0.1.2 package: path-root-regex 557、source package:path-to-regexp 1.7.0 package: path-to-regexp 558、source package:path-type 2.0.0 package: path-type 559、source package:pathe 1.1.1 package: pathe 560、source package:pbkdf2 3.1.1 package: pbkdf2 561、source package:performance-now 2.1.0 package: performance-now 562、source package:picomatch 2.3.1 package: picomatch 563、source package:pify 2.3.0 package: pify 564、source package:pinia 2.0.22 package: pinia 565、source package:pinkie 2.0.4 package: pinkie 566、source package:pinkie-promise 2.0.1 package: pinkie-promise 567、source package:pipewire-pulse 0.3.71 package: pipewire-pulse 568、source package:pkg-types 1.0.3 package: pkg-types 569、source package:platform/external/fmtlib upstream-master package: platform/external/fmtlib 570、source package:portaudio19-dev 19.6.0-1_s390x package: portaudio19-dev 571、source package:posix-character-classes 0.1.1 package: posix-character-classes 572、source package:prefix-style 2.0.1 package: prefix-style 573、source package:pretty v0.2.1 package: pretty 574、source package:pretty-hrtime 1.0.3 package: pretty-hrtime 575、source package:private 0.1.8 package: private 576、source package:process 0.11.10 package: process 577、source package:process-nextick-args 2.0.1 package: process-nextick-args 578、source package:promxy v0.0.81 package: promxy 579、source package:prop-types 15.7.2 package: prop-types 580、source package:prr 1.0.1 package: prr 581、source package:psl 1.4.0 package: psl 582、source package:public-encrypt 4.0.3 package: public-encrypt 583、source package:punycode 2.1.1 package: punycode 584、source package:python3 3.8.2-3_s390x package: python3 585、source package:python3-dbus 1.2.8-3_s390x package: python3-dbus 586、source package:querystring 0.2.0 package: querystring 587、source package:querystring-es3 0.2.1 package: querystring-es3 588、source package:queue-microtask 1.2.3 package: queue-microtask 589、source package:raf 3.4.1 package: raf 590、source package:randombytes 2.1.0 package: randombytes 591、source package:randomfill 1.0.4 package: randomfill 592、source package:react 16.9.0 package: react 593、source package:react-custom-scrollbars 4.2.1 package: react-custom-scrollbars 594、source package:react-dom 16.9.0 package: react-dom 595、source package:react-is 16.9.0 package: react-is 596、source package:react-router 4.3.1 package: react-router 597、source package:react-router-dom 4.3.1 package: react-router-dom 598、source package:read-only-stream 2.0.0 package: read-only-stream 599、source package:read-pkg 2.0.0 package: read-pkg 600、source package:read-pkg-up 2.0.0 package: read-pkg-up 601、source package:readable-stream 3.6.0 package: readable-stream 602、source package:readdirp 3.6.0 package: readdirp 603、source package:rechoir 0.6.2 package: rechoir 604、source package:redent 1.0.0 package: redent 605、source package:regenerate 1.4.0 package: regenerate 606、source package:regenerator-runtime 0.13.3 package: regenerator-runtime 607、source package:regex-not 1.0.2 package: regex-not 608、source package:regexpu-core 2.0.0 package: regexpu-core 609、source package:regjsgen 0.2.0 package: regjsgen 610、source package:repeat-element 1.1.3 package: repeat-element 611、source package:repeat-string 1.6.1 package: repeat-string 612、source package:repeating 2.0.1 package: repeating 613、source package:replace-ext 1.0.0 package: replace-ext 614、source package:require-directory 2.1.1 package: require-directory 615、source package:resolve 1.22.1 package: resolve 616、source package:resolve-dir 1.0.1 package: resolve-dir 617、source package:resolve-pathname 2.2.0 package: resolve-pathname 618、source package:resolve-url 0.2.1 package: resolve-url 619、source package:ret 0.1.15 package: ret 620、source package:reusify 1.0.4 package: reusify 621、source package:right-align 0.1.3 package: right-align 622、source package:ripemd160 2.0.2 package: ripemd160 623、source package:rollup 2.79.1 package: rollup 624、source package:run-parallel 1.2.0 package: run-parallel 625、source package:safe-buffer 5.2.1 package: safe-buffer 626、source package:safe-regex 1.1.0 package: safe-regex 627、source package:safer-buffer 2.1.2 package: safer-buffer 628、source package:sass 1.55.0 package: sass 629、source package:sass-graph 2.2.4 package: sass-graph 630、source package:scheduler 0.15.0 package: scheduler 631、source package:schema-utils 3.0.0 package: schema-utils 632、source package:scroll-into-view-if-needed 2.2.20 package: scroll-into-view-if-needed 633、source package:scss-tokenizer 0.2.3 package: scss-tokenizer 634、source package:scule 1.1.1 package: scule 635、source package:sequencify 0.0.7 package: sequencify 636、source package:set-value 2.0.1 package: set-value 637、source package:setimmediate 1.0.5 package: setimmediate 638、source package:sha.js 2.4.11 package: sha.js 639、source package:shadered v1.5.3 package: shadered 640、source package:shasum 1.0.2 package: shasum 641、source package:shebang-command 1.2.0 package: shebang-command 642、source package:shebang-regex 1.0.0 package: shebang-regex 643、source package:shell-quote 1.7.2 package: shell-quote 644、source package:simple-concat 1.0.0 package: simple-concat 645、source package:slash 1.0.0 package: slash 646、source package:slirp4netns 1.2.0-1 package: slirp4netns 647、source package:smooth-scroll-into-view-if-needed 1.1.23 package: smooth-scroll-into-view-if-needed 648、source package:snapdragon 0.8.2 package: snapdragon 649、source package:snapdragon-node 2.1.1 package: snapdragon-node 650、source package:snapdragon-util 3.0.1 package: snapdragon-util 651、source package:source-list-map 2.0.1 package: source-list-map 652、source package:source-map-resolve 0.5.3 package: source-map-resolve 653、source package:source-map-support 0.5.21 package: source-map-support 654、source package:source-map-url 0.4.0 package: source-map-url 655、source package:sourcemap-codec 1.4.8 package: sourcemap-codec 656、source package:sparkles 1.0.1 package: sparkles 657、source package:spdx-expression-parse 3.0.1 package: spdx-expression-parse 658、source package:split-string 3.1.0 package: split-string 659、source package:sqlclosecheck v0.5.0 package: sqlclosecheck 660、source package:sse v0.1.0 package: sse 661、source package:sshpk 1.16.1 package: sshpk 662、source package:static-extend 0.1.2 package: static-extend 663、source package:stdout-stream 1.4.1 package: stdout-stream 664、source package:stream-browserify 2.0.2 package: stream-browserify 665、source package:stream-combiner2 1.1.1 package: stream-combiner2 666、source package:stream-consume 0.1.1 package: stream-consume 667、source package:stream-http 2.8.3 package: stream-http 668、source package:stream-splicer 2.0.1 package: stream-splicer 669、source package:string-width 2.1.1 package: string-width 670、source package:string_decoder 1.3.0 package: string_decoder 671、source package:strip-ansi 4.0.0 package: strip-ansi 672、source package:strip-bom 3.0.0 package: strip-bom 673、source package:strip-eof 1.0.0 package: strip-eof 674、source package:strip-indent 1.0.1 package: strip-indent 675、source package:strip-literal 1.3.0 package: strip-literal 676、source package:subarg 1.0.0 package: subarg 677、source package:sudo 1.9.8p2-1~exp1 package: sudo 678、source package:supports-color 4.5.0 package: supports-color 679、source package:supports-preserve-symlinks-flag 1.0.0 package: supports-preserve-symlinks-flag 680、source package:syntax-error 1.4.0 package: syntax-error 681、source package:sys v0.5.0 package: sys 682、source package:systemjs 6.13.0 package: systemjs 683、source package:tapable 0.2.9 package: tapable 684、source package:testify v1.9.0 package: testify 685、source package:text v0.1.0 package: text 686、source package:through2 2.0.5 package: through2 687、source package:tildify 1.2.0 package: tildify 688、source package:time-stamp 1.1.0 package: time-stamp 689、source package:timers-browserify 2.0.12 package: timers-browserify 690、source package:tiny-invariant 1.0.6 package: tiny-invariant 691、source package:tiny-warning 1.0.3 package: tiny-warning 692、source package:tinyaes 1.0.4rc1 package: tinyaes 693、source package:tlp 1.5.0-1~bpo11+1 package: tlp 694、source package:to-arraybuffer 1.0.1 package: to-arraybuffer 695、source package:to-camel-case 1.0.0 package: to-camel-case 696、source package:to-fast-properties 1.0.3 package: to-fast-properties 697、source package:to-no-case 1.0.2 package: to-no-case 698、source package:to-object-path 0.3.0 package: to-object-path 699、source package:to-regex 3.0.2 package: to-regex 700、source package:to-regex-range 5.0.1 package: to-regex-range 701、source package:to-space-case 1.0.0 package: to-space-case 702、source package:toml v1.3.2 package: toml 703、source package:tools v0.6.0 package: tools 704、source package:tortellini 4f6795a package: tortellini 705、source package:trim-newlines 1.0.0 package: trim-newlines 706、source package:trim-right 1.0.1 package: trim-right 707、source package:tty-browserify 0.0.1 package: tty-browserify 708、source package:typedarray 0.0.6 package: typedarray 709、source package:uglify-to-browserify 1.0.2 package: uglify-to-browserify 710、source package:uglifyjs-webpack-plugin 0.4.6 package: uglifyjs-webpack-plugin 711、source package:umd 3.0.3 package: umd 712、source package:unc-path-regex 0.1.2 package: unc-path-regex 713、source package:unimport 1.3.0 package: unimport 714、source package:union-value 1.0.1 package: union-value 715、source package:unique-stream 1.0.0 package: unique-stream 716、source package:universal-translator v0.16.0 package: universal-translator 717、source package:unplugin-auto-import 0.11.5 package: unplugin-auto-import 718、source package:unplugin-vue-components 0.22.12 package: unplugin-vue-components 719、source package:unset-value 1.0.0 package: unset-value 720、source package:upath 1.2.0 package: upath 721、source package:urix 0.1.0 package: urix 722、source package:url 0.11.0 package: url 723、source package:use 3.1.1 package: use 724、source package:user-home 1.1.1 package: user-home 725、source package:util 0.11.1 package: util 726、source package:util-deprecate 1.0.2 package: util-deprecate 727、source package:uuid 3.3.3 package: uuid 728、source package:v-drag 3.0.9 package: v-drag 729、source package:v8flags 2.1.1 package: v8flags 730、source package:value-equal 0.4.0 package: value-equal 731、source package:verror 1.10.0 package: verror 732、source package:vinyl 2.2.0 package: vinyl 733、source package:vinyl-buffer 1.0.1 package: vinyl-buffer 734、source package:vinyl-fs 0.3.14 package: vinyl-fs 735、source package:vinyl-source-stream 2.0.0 package: vinyl-source-stream 736、source package:vm-browserify 1.1.2 package: vm-browserify 737、source package:vue-codemirror 6.1.1 package: vue-codemirror 738、source package:vue-demi 0.13.11 package: vue-demi 739、source package:vue-router 4.1.5 package: vue-router 740、source package:w3c-keyname 2.2.8 package: w3c-keyname 741、source package:warning 4.0.3 package: warning 742、source package:watchpack 1.7.4 package: watchpack 743、source package:watchpack-chokidar2 2.0.0 package: watchpack-chokidar2 744、source package:webpack 3.12.0 package: webpack 745、source package:webpack-sources 3.2.3 package: webpack-sources 746、source package:webpack-virtual-modules 0.6.1 package: webpack-virtual-modules 747、source package:window-size 0.1.0 package: window-size 748、source package:wireplumber 0.4.9-1 package: wireplumber 749、source package:wordwrap 0.0.2 package: wordwrap 750、source package:wrap-ansi 2.1.0 package: wrap-ansi 751、source package:x11-utils 7.7~1_sparc package: x11-utils 752、source package:x11-xserver-utils 7.7~3_sparc package: x11-xserver-utils 753、source package:x11proto-record-dev 2020.1-1_all package: x11proto-record-dev 754、source package:x11proto-xext-dev 7.3.0-1_all package: x11proto-xext-dev 755、source package:xcb-proto 1.7.1.orig package: xcb-proto 756、source package:xdg-utils 1.1.3-4.1 package: xdg-utils 757、source package:xkb-data 2.5.1-3_all package: xkb-data 758、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 759、source package:xserver-xorg-input-all 7.7+7_s390x package: xserver-xorg-input-all 760、source package:xserver-xorg-video-all 7.7+7_s390x package: xserver-xorg-video-all 761、source package:xtend 4.0.2 package: xtend 762、source package:xwayland 2:23.1.1-1 package: xwayland 763、source package:yargs 8.0.2 package: yargs Open Source Software Licensed under the Expat: 1、source package:golang-github-adrg-xdg-dev 0.4.0-2 package: golang-github-adrg-xdg-dev 2、source package:golang-github-disintegration-imaging-dev 1.6.2-2 package: golang-github-disintegration-imaging-dev 3、source package:golang-github-smartystreets-goconvey-dev 1.6.4+dfsg-1_all package: golang-github-smartystreets-goconvey-dev 4、source package:golang-github-stretchr-testify-dev 1.8.0-1~bpo11+1 package: golang-github-stretchr-testify-dev 5、source package:golang-github-teambition-rrule-go-dev 1.8.1-1 package: golang-github-teambition-rrule-go-dev 6、source package:golang-gopkg-alecthomas-kingpin.v2-dev 2.2.6-4 package: golang-gopkg-alecthomas-kingpin.v2-dev 7、source package:intel-media-va-driver-non-free 23.2.3+ds1-1 package: intel-media-va-driver-non-free 8、source package:libepoxy-dev 1.5.9-2 package: libepoxy-dev 9、source package:libiniparser-dev 4.1-4_s390x package: libiniparser-dev 10、source package:libinput-dev 1.6.3-1_s390x package: libinput-dev 11、source package:libjson-c-dev 0.16-2 package: libjson-c-dev 12、source package:libmtdev-dev 1.1.6-1_s390x package: libmtdev-dev 13、source package:libsass-dev 3.6.4-4~exp_s390x package: libsass-dev 14、source package:libspdlog-dev 1:1.3.1-1 package: libspdlog-dev 15、source package:libutf8proc-dev 2.7.0-4 package: libutf8proc-dev 16、source package:libva-dev 2.8.0-1_s390x package: libva-dev 17、source package:nlohmann-json3-dev 3.9.1-1 package: nlohmann-json3-dev 18、source package:rapidjson-dev 1.1.0-1 package: rapidjson-dev 19、source package:va-driver-all 2.8.0-1_s390x package: va-driver-all 20、source package:wayland-protocols 1.9-1 package: wayland-protocols Open Source Software Licensed under the BSD-3-Clause: 1、source package:DocxFactory 91131f28 package: DocxFactory 2、source package:alsa-topology-conf 1.2.5.1-2 package: alsa-topology-conf 3、source package:alsa-ucm-conf 1.2.9-1 package: alsa-ucm-conf 4、source package:amdefine 1.0.1 package: amdefine 5、source package:android-pdfium a56ccce4 package: android-pdfium 6、source package:apt 2.7.1 package: apt 7、source package:bcrypt-pbkdf 1.0.2 package: bcrypt-pbkdf 8、source package:browserify 14.5.0 package: browserify 9、source package:charenc 0.0.2 package: charenc 10、source package:chromium 87.0.4280.88-0.4 package: chromium 11、source package:cmake v3.27.0-rc5 package: cmake 12、source package:coost v3.0.0 package: coost 13、source package:crypt 0.0.2 package: crypt 14、source package:crypto v0.13.0 package: crypto 15、source package:css-select 1.2.0 package: css-select 16、source package:css-what 2.1.3 package: css-what 17、source package:dns v1.1.52 package: dns 18、source package:dnsutils 970203-0.1 package: dnsutils 19、source package:duplexer2 0.1.4 package: duplexer2 20、source package:entities 1.1.2 package: entities 21、source package:errwrap v1.5.0 package: errwrap 22、source package:external/github.com/protocolbuffers/protobuf v3.7.0-rc.3 package: external/github.com/protocolbuffers/protobuf 23、source package:extra-cmake-modules 5.98.0-2 package: extra-cmake-modules 24、source package:ffmpeg 7:6.0-3 package: ffmpeg 25、source package:fsnotify v1.6.0 package: fsnotify 26、source package:go-cmp v0.6.0 package: go-cmp 27、source package:golang 2:1.7~5~bpo8+1 package: golang 28、source package:golang-any 1.7~5~bpo8+1_s390x package: golang-any 29、source package:golang-github-fsnotify-fsnotify-dev 1.6.0-1 package: golang-github-fsnotify-fsnotify-dev 30、source package:golang-github-miekg-dns-dev 1.1.50-2 package: golang-github-miekg-dns-dev 31、source package:golang-github-rickb777-date-dev 1.20.1-1 package: golang-github-rickb777-date-dev 32、source package:golang-go 1.7~5~bpo8+1_ppc64el package: golang-go 33、source package:golang-golang-x-sys-dev 0.3.0-1+hurd.1 package: golang-golang-x-sys-dev 34、source package:golang-golang-x-xerrors-dev 0.0~git20191204.9bdfabe-1~bpo10+1 package: golang-golang-x-xerrors-dev 35、source package:golang-google-protobuf-dev 1.28.1-3 package: golang-google-protobuf-dev 36、source package:gstreamer1.0-plugins-base 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-base 37、source package:gstreamer1.0-plugins-good 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-good 38、source package:gstreamer1.0-pulseaudio 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-pulseaudio 39、source package:gstreamer1.0-x 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-x 40、source package:hoist-non-react-statics 2.5.5 package: hoist-non-react-statics 41、source package:ieee754 1.2.1 package: ieee754 42、source package:init 1.65~exp2 package: init 43、source package:iputils-ping 20190709-3_s390x package: iputils-ping 44、source package:js-base64 2.5.1 package: js-base64 45、source package:json-schema 0.2.3 package: json-schema 46、source package:libcli11-dev 2.1.2+ds-1 package: libcli11-dev 47、source package:libgmock-dev 1.9.0.20190831-3 package: libgmock-dev 48、source package:libgoogle-glog-dev 0.4.0-1_s390x package: libgoogle-glog-dev 49、source package:libgstreamer-plugins-base1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-0 50、source package:libgstreamer-plugins-base1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-dev 51、source package:libgtest-dev 1.9.0.20190831-1_s390x package: libgtest-dev 52、source package:libjpeg-dev 2.0.5-1_all package: libjpeg-dev 53、source package:libnl-3-dev 3.4.0-1~bpo9+1_s390x package: libnl-3-dev 54、source package:libnl-genl-3-dev 3.4.0-1~bpo9+1_s390x package: libnl-genl-3-dev 55、source package:libnl-route-3-dev 3.4.0-1~bpo9+1_s390x package: libnl-route-3-dev 56、source package:libpcap-dev 1.9.1-4~bpo10+1_s390x package: libpcap-dev 57、source package:libtirpc-common 1.2.6-1_all package: libtirpc-common 58、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 59、source package:locales 2.31-0experimental0_all package: locales 60、source package:lxqt-build-tools 0.8.0-1 package: lxqt-build-tools 61、source package:marked 1.2.3 package: marked 62、source package:md5 2.2.1 package: md5 63、source package:mmkv-static 1.2.10 package: mmkv-static 64、source package:mod v0.8.0 package: mod 65、source package:mount 2.9g-6 package: mount 66、source package:net v0.15.0 package: net 67、source package:node 8.16.1 package: node 68、source package:normalize-wheel-es 1.2.0 package: normalize-wheel-es 69、source package:nth-check 1.0.2 package: nth-check 70、source package:onboard 1.4.1-5_s390x package: onboard 71、source package:passwd 980403-0.3 package: passwd 72、source package:pflag v1.0.5 package: pflag 73、source package:protobuf v1.3.2 package: protobuf 74、source package:python3-click 8.1.6-1 package: python3-click 75、source package:qml-module-qtgraphicaleffects 5.7.1~20161021-3_s390x package: qml-module-qtgraphicaleffects 76、source package:qs 6.5.2 package: qs 77、source package:qtermwidget 0.14.1 package: qtermwidget 78、source package:regenerator-transform 0.10.1 package: regenerator-transform 79、source package:regjsparser 0.1.5 package: regjsparser 80、source package:sass 1.55.0 package: sass 81、source package:sha.js 2.4.11 package: sha.js 82、source package:source-map 0.6.1 package: source-map 83、source package:spdx-license-ids 3.0.6 package: spdx-license-ids 84、source package:sys v0.6.0 package: sys 85、source package:syscall_intercept 4b3a3b5 package: syscall_intercept 86、source package:term v0.13.0 package: term 87、source package:terser 5.15.1 package: terser 88、source package:text v0.13.0 package: text 89、source package:tough-cookie 2.4.3 package: tough-cookie 90、source package:uglify-js 2.8.29 package: uglify-js 91、source package:util-linux 2.5-12 package: util-linux 92、source package:uuid v1.3.0 package: uuid 93、source package:wpasupplicant 2.9.0-12_s390x package: wpasupplicant 94、source package:xdotool 3.20160805.1-4_s390x package: xdotool 95、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 96、source package:xsettingsd 1.0.2-1 package: xsettingsd 97、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the BSD-2-Clause: 1、source package:DocxFactory 91131f28 package: DocxFactory 2、source package:block-stream 0.0.9 package: block-stream 3、source package:coost v3.0.0 package: coost 4、source package:domelementtype 1.3.1 package: domelementtype 5、source package:domhandler 2.4.2 package: domhandler 6、source package:domutils 1.5.1 package: domutils 7、source package:doxyqml 0.3.0-1.1.debian package: doxyqml 8、source package:escope 3.6.0 package: escope 9、source package:esrecurse 4.3.0 package: esrecurse 10、source package:estraverse 5.2.0 package: estraverse 11、source package:esutils 2.0.3 package: esutils 12、source package:ffmpeg 7:6.0-3 package: ffmpeg 13、source package:glob 3.1.21 package: glob 14、source package:golang-dbus-dev 5.1.0-1~bpo11+1 package: golang-dbus-dev 15、source package:golang-github-msteinert-pam-dev 1.1.0-1 package: golang-github-msteinert-pam-dev 16、source package:golang-gopkg-check.v1-dev 0.0+git20200902.038fdea-1 package: golang-gopkg-check.v1-dev 17、source package:graceful-fs 1.2.3 package: graceful-fs 18、source package:libarchive-dev 3.4.0-2~bpo9+1_amd64 package: libarchive-dev 19、source package:libtag1-dev 1.9.1-2~bpo70+1_sparc package: libtag1-dev 20、source package:libtss2-dev 2.4.0-1_s390x package: libtss2-dev 21、source package:libtss2-tcti-tabrmd0 3.0.0-1 package: libtss2-tcti-tabrmd0 22、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 23、source package:normalize-package-data 2.5.0 package: normalize-package-data 24、source package:sdparm 1.12-1 package: sdparm 25、source package:shim-signed 1.39~1+deb11u1 package: shim-signed 26、source package:shim-unsigned 15+1533136590.3beb971-9_i386 package: shim-unsigned 27、source package:smartmontools 7.3-1 package: smartmontools 28、source package:tpm2-abrmd 3.0.0-1 package: tpm2-abrmd 29、source package:tt v1.0.1 package: tt 30、source package:uri-js 4.4.0 package: uri-js 31、source package:usb-modeswitch 2.6.1.orig package: usb-modeswitch Open Source Software Licensed under the MPL-2.0: 1、source package:browser-desktop 87.0-729282885 package: browser-desktop 2、source package:dompurify 2.4.1 package: dompurify 3、source package:libjwt-dev 1.9.0-4_mips64el package: libjwt-dev 4、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter Open Source Software Licensed under the MPL-1.1: 1、source package:libcairo2-dev 1.16.0-4_s390x package: libcairo2-dev 2、source package:libchardet 1.0.3 package: libchardet 3、source package:libpam-gnome-keyring 3.4.1-5_sparc package: libpam-gnome-keyring 4、source package:libtag1-dev 1.9.1-2~bpo70+1_sparc package: libtag1-dev Open Source Software Licensed under the AFL-2.1: 1、source package:python3-dbus 1.2.8-3_s390x package: python3-dbus Open Source Software Licensed under the AGPL-1.0-only: 1、source package:spdx-license-ids 3.0.6 package: spdx-license-ids Open Source Software Licensed under the AGPL-3.0-only: 1、source package:nging v3.5.2 package: nging 2、source package:sobjectizer 1.2.3 package: sobjectizer Open Source Software Licensed under the Apache-2.0 or LGPL-3+: 1、source package:liblucene++-dev 3.0.7-8+b2_s390x package: liblucene++-dev Open Source Software Licensed under the Apache-2.0-with-GPL2-LGPL2-Exception: 1、source package:cups 2.4.2-3+deb12u1 package: cups Open Source Software Licensed under the Artistic or GPL-1+: 1、source package:libfile-mimeinfo-perl 0.33-1 package: libfile-mimeinfo-perl 2、source package:perl-openssl-defaults 7 package: perl-openssl-defaults Open Source Software Licensed under the Artistic-2.0: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the BSD: 1、source package:compiler 4.12.0 package: compiler 2、source package:ffmpeg 7:6.0-3 package: ffmpeg 3、source package:glide 4.12.0 package: glide 4、source package:libnet-dev 1.2-rc3 package: libnet-dev 5、source package:libvncserver LibVNCServer-0.9.14 package: libvncserver 6、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 7、source package:node 8.16.1 package: node 8、source package:smartmontools 7.3-1 package: smartmontools 9、source package:zip 3.0-9 package: zip Open Source Software Licensed under the BSD-1-Clause: 1、source package:ffmpeg 7:6.0-3 package: ffmpeg Open Source Software Licensed under the BSD-3-clause: 1、source package:tpm2-tools 5.4-1 package: tpm2-tools Open Source Software Licensed under the BSD-3-clause or GPL-2: 1、source package:libcap-dev 2.36-1_mips64el package: libcap-dev 2、source package:libcap2-bin 2.36-1_s390x package: libcap2-bin Open Source Software Licensed under the BSD-4-Clause: 1、source package:unalz 0.65-9 package: unalz Open Source Software Licensed under the BSD-Source-Code: 1、source package:iputils-ping 20190709-3_s390x package: iputils-ping Open Source Software Licensed under the BSL-1.0: 1、source package:ffmpeg 7:6.0-3 package: ffmpeg Open Source Software Licensed under the Bitstream-Vera: 1、source package:fontconfig 2.9.0.orig package: fontconfig Open Source Software Licensed under the Brian-Gladman-3-Clause: 1、source package:libzip-dev 1.6.1-3_s390x package: libzip-dev 2、source package:libzip4 1.6.1-3_s390x package: libzip4 Open Source Software Licensed under the CC-BY-3.0: 1、source package:spdx-exceptions 2.3.0 package: spdx-exceptions Open Source Software Licensed under the CC-BY-4.0: 1、source package:caniuse-lite 1.0.30000989 package: caniuse-lite Open Source Software Licensed under the CC-BY-SA-4.0: 1、source package:glob 7.1.4 package: glob Open Source Software Licensed under the CC0-1.0: 1、source package:spdx-license-ids 3.0.6 package: spdx-license-ids Open Source Software Licensed under the CDDL-1.0: 1、source package:libraw-dev 0.9.1-1+deb6u1 package: libraw-dev Open Source Software Licensed under the CPL-1.0: 1、source package:graphviz 2.8-3+etch1 package: graphviz 2、source package:junit 4.11 package: junit Open Source Software Licensed under the EPL-1.0: 1、source package:aspectjrt 1.9.6 package: aspectjrt 2、source package:junit 4.13.2 package: junit Open Source Software Licensed under the FTL: 1、source package:freetype VER-2-10-3 package: freetype 2、source package:libfreetype-dev 2.13.0+dfsg-1 package: libfreetype-dev Open Source Software Licensed under the Font-exception-2.0: 1、source package:ttf-unifont 9.0.06-2_all package: ttf-unifont 2、source package:xfonts-wqy 1.0.0~rc1-7 package: xfonts-wqy Open Source Software Licensed under the GFDL-1.2-only: 1、source package:kdevelop v22.11.80 package: kdevelop Open Source Software Licensed under the GPL+ and GPLv2+ and MIT and Redistributable no modification permitted: 1、source package:linux-firmware 20230824 package: linux-firmware Open Source Software Licensed under the GPL-2 or GPL-2+: 1、source package:ipheth-utils 1.0-5_s390x package: ipheth-utils Open Source Software Licensed under the GPL-2 with Font embedding exception and M+ FONTS License: 1、source package:fonts-wqy-zenhei 0.9.45-8 package: fonts-wqy-zenhei Open Source Software Licensed under the GPL-2 with OpenSSL exception: 1、source package:barrier 2.4.0+dfsg-2 package: barrier Open Source Software Licensed under the GPL-2+ and LGPL-2+: 1、source package:xdg-desktop-portal-gtk 1.8.0-1~bpo10+1 package: xdg-desktop-portal-gtk Open Source Software Licensed under the GPL-2+ or AFL-2.1: 1、source package:dbus 1.9.8-1 package: dbus 2、source package:dbus-user-session 1.13.8-1_s390x package: dbus-user-session 3、source package:dbus-x11 1.8.22-0+deb8u1_s390x package: dbus-x11 4、source package:libdbus-1-dev 1.8.22-0+deb8u1_s390x package: libdbus-1-dev Open Source Software Licensed under the GPL-2+ or FTL: 1、source package:libfreetype6-dev 2.9.1-4_s390x package: libfreetype6-dev Open Source Software Licensed under the GPL-2+ or LGPL-2.1 or LGPL-3.0: 1、source package:libquazip5-dev 0.7.6-6_s390x package: libquazip5-dev Open Source Software Licensed under the GPL-2+ with OpenSSL exception: 1、source package:cryptsetup 2:2.6.1-4 package: cryptsetup 2、source package:cryptsetup-initramfs 2.3.1-1_all package: cryptsetup-initramfs 3、source package:libcryptsetup12 2.3.1-1_s390x package: libcryptsetup12 Open Source Software Licensed under the GPL-2+ with SSL exception: 1、source package:remmina 1.4.8+dfsg-2~bpo10+2 package: remmina 2、source package:remmina-plugin-rdp 1.4.7+dfsg-1_s390x package: remmina-plugin-rdp 3、source package:remmina-plugin-vnc 1.4.7+dfsg-1_s390x package: remmina-plugin-vnc Open Source Software Licensed under the GPL-2+ with sane exception: 1、source package:libsane-dev 1.2.1-4 package: libsane-dev Open Source Software Licensed under the GPL-2.0 or GPL-3.0 or FIPL-1.0: 1、source package:libfreeimage-dev 3.18.0+ds2-3_s390x package: libfreeimage-dev Open Source Software Licensed under the GPL-2.0+ or LGPL-2.1+: 1、source package:fcitx5-frontend-gtk3 0.0~git20200606.fc335f1-2_s390x package: fcitx5-frontend-gtk3 Open Source Software Licensed under the GPL-3 with Qt-1.0 exception: 1、source package:qttools5-dev 5.9.2-4_kfreebsd-i386 package: qttools5-dev 2、source package:qttools5-dev-tools 5.9.2-4_kfreebsd-i386 package: qttools5-dev-tools 3、source package:qttranslations5-l10n 5.9.2-1 package: qttranslations5-l10n Open Source Software Licensed under the GPL-3+ or Less: 1、source package:less 590-2 package: less Open Source Software Licensed under the GPL-3+ with OpenSSL exception: 1、source package:libdmr-dev 5.7.6.147-1 package: libdmr-dev Open Source Software Licensed under the GPL-3.0-with-Qt-1.0-exception: 1、source package:libqt5webchannel5-dev 5.7.1-2_s390x package: libqt5webchannel5-dev 2、source package:qml-module-qtwebchannel 5.9.2-3 package: qml-module-qtwebchannel Open Source Software Licensed under the GPL-any: 1、source package:command-not-found 23.04.0-1 package: command-not-found Open Source Software Licensed under the Hylafax: 1、source package:libtiff-dev 4.1.0+git191117-2~deb10u1_s390x package: libtiff-dev Open Source Software Licensed under the ICU: 1、source package:node 8.16.1 package: node 2、source package:x11-xserver-utils 7.7~3_sparc package: x11-xserver-utils 3、source package:xkb-data 2.5.1-3_all package: xkb-data 4、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 5、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the ISC: 1、source package:abbrev 1.1.1 package: abbrev 2、source package:anymatch 3.1.2 package: anymatch 3、source package:aproba 1.2.0 package: aproba 4、source package:are-we-there-yet 1.1.5 package: are-we-there-yet 5、source package:boolbase 1.0.0 package: boolbase 6、source package:browserify-sign 4.2.1 package: browserify-sign 7、source package:cliui 4.1.0 package: cliui 8、source package:color-support 1.1.3 package: color-support 9、source package:concat-with-sourcemaps 1.1.0 package: concat-with-sourcemaps 10、source package:console-control-strings 1.1.0 package: console-control-strings 11、source package:crda 4.14+git20191112.9856751.orig package: crda 12、source package:d 1.0.1 package: d 13、source package:distro-info-data 0.9~bpo60+1 package: distro-info-data 14、source package:electron-to-chromium 1.3.254 package: electron-to-chromium 15、source package:es5-ext 0.10.53 package: es5-ext 16、source package:es6-symbol 3.1.3 package: es6-symbol 17、source package:es6-weak-map 2.0.3 package: es6-weak-map 18、source package:ext 1.4.0 package: ext 19、source package:fastq 1.13.0 package: fastq 20、source package:ffmpeg 7:6.0-3 package: ffmpeg 21、source package:fs 0.0.1-security package: fs 22、source package:fs.realpath 1.0.0 package: fs.realpath 23、source package:fstream 1.0.12 package: fstream 24、source package:gauge 2.7.4 package: gauge 25、source package:get-caller-file 1.0.3 package: get-caller-file 26、source package:glob 7.1.4 package: glob 27、source package:glob-parent 5.1.2 package: glob-parent 28、source package:go-spew v1.1.1 package: go-spew 29、source package:go-wav v0.3.2 package: go-wav 30、source package:golang-github-nfnt-resize-dev 0.0~git20180221.83c6a99-2_all package: golang-github-nfnt-resize-dev 31、source package:graceful-fs 4.2.4 package: graceful-fs 32、source package:har-schema 2.0.0 package: har-schema 33、source package:has-unicode 2.0.1 package: has-unicode 34、source package:hosted-git-info 2.8.8 package: hosted-git-info 35、source package:in-publish 2.0.0 package: in-publish 36、source package:inflight 1.0.6 package: inflight 37、source package:inherits 2.0.4 package: inherits 38、source package:ini 1.3.5 package: ini 39、source package:isexe 2.0.0 package: isexe 40、source package:json-stringify-safe 5.0.1 package: json-stringify-safe 41、source package:lru-cache 4.1.5 package: lru-cache 42、source package:minimalistic-assert 1.0.1 package: minimalistic-assert 43、source package:minimatch 5.1.6 package: minimatch 44、source package:natives 1.1.6 package: natives 45、source package:node 8.16.1 package: node 46、source package:node-bin-setup 1.0.6 package: node-bin-setup 47、source package:nopt 3.0.6 package: nopt 48、source package:npmlog 4.1.2 package: npmlog 49、source package:once 1.4.0 package: once 50、source package:osenv 0.1.5 package: osenv 51、source package:parse-asn1 5.1.6 package: parse-asn1 52、source package:pkgconf 1.8.1-2 package: pkgconf 53、source package:pseudomap 1.0.2 package: pseudomap 54、source package:python3-dnspython 2.4.0~rc1-1 package: python3-dnspython 55、source package:remove-trailing-separator 1.1.0 package: remove-trailing-separator 56、source package:require-main-filename 1.0.1 package: require-main-filename 57、source package:rimraf 2.7.1 package: rimraf 58、source package:rollup 2.79.1 package: rollup 59、source package:semver 5.7.1 package: semver 60、source package:set-blocking 2.0.0 package: set-blocking 61、source package:sigmund 1.0.1 package: sigmund 62、source package:signal-exit 3.0.3 package: signal-exit 63、source package:tar 2.2.2 package: tar 64、source package:type 2.1.0 package: type 65、source package:vinyl-sourcemaps-apply 0.2.1 package: vinyl-sourcemaps-apply 66、source package:which 1.3.1 package: which 67、source package:which-module 2.0.0 package: which-module 68、source package:wide-align 1.1.3 package: wide-align 69、source package:wrappy 1.0.2 package: wrappy 70、source package:y18n 3.2.1 package: y18n 71、source package:yallist 2.1.2 package: yallist 72、source package:yargs-parser 8.1.0 package: yargs-parser Open Source Software Licensed under the ImageMagick: 1、source package:DocxFactory 91131f28 package: DocxFactory Open Source Software Licensed under the Info-ZIP: 1、source package:unzip 6.0.orig package: unzip Open Source Software Licensed under the LGPL: 1、source package:ffmpeg 7:6.0-3 package: ffmpeg 2、source package:libatspi2.0-dev 2.5.3-2_sparc package: libatspi2.0-dev 3、source package:liblightdm-qt-dev 1.26.0-5_s390x package: liblightdm-qt-dev 4、source package:lightdm 1.9.9-1 package: lightdm 5、source package:slirp4netns 1.2.0-1 package: slirp4netns 6、source package:smartmontools 7.3-1 package: smartmontools Open Source Software Licensed under the LGPL-2+ and LGPL-2.1+: 1、source package:ostree 2023.3-2 package: ostree Open Source Software Licensed under the LGPL-2+ and LGPL-2.1+ and FSFULLR and CC0-1.0 and Janik-permissive and Iconv-PD and Mingw-PD and Old-GLib-Tests-permissive: 1、source package:libglib2.0-bin 2.76.4-1 package: libglib2.0-bin Open Source Software Licensed under the LGPL-2.0+ and Expat: 1、source package:policykit-1 122-4 package: policykit-1 Open Source Software Licensed under the LGPL-2.0-or-later: 1、source package:bubblewrap 0~git160513-2 package: bubblewrap 2、source package:gvfs-backends 1.44.1-1_s390x package: gvfs-backends 3、source package:gvfs-bin 1.44.1-1_s390x package: gvfs-bin 4、source package:gvfs-fuse 1.44.1-1_s390x package: gvfs-fuse 5、source package:kcalcore 5:5.85.0-2 package: kcalcore 6、source package:kdeclarative 5.100.0-1 package: kdeclarative 7、source package:libasound2-dev 1.2.2-2.3_ppc64el package: libasound2-dev 8、source package:libgdk-pixbuf2.0-0 2.40.2-3 package: libgdk-pixbuf2.0-0 9、source package:libgdk-pixbuf2.0-dev 2.40.0+dfsg-5_s390x package: libgdk-pixbuf2.0-dev 10、source package:libkf5itemviews-dev 5.70.0-1_s390x package: libkf5itemviews-dev 11、source package:libkf5widgetsaddons-dev 5.70.0-1_s390x package: libkf5widgetsaddons-dev 12、source package:libmtp-runtime 1.1.9-3~bpo8+1 package: libmtp-runtime 13、source package:libpolkit-agent-1-dev 0.116-2_s390x package: libpolkit-agent-1-dev 14、source package:libpolkit-qt5-1-dev 0.112.0-7_s390x package: libpolkit-qt5-1-dev 15、source package:librsvg2-bin 2.48.7-1_ppc64el package: librsvg2-bin 16、source package:platform/external/e2fsprogs lollipop-dev package: platform/external/e2fsprogs 17、source package:xdg-desktop-portal 1.8.1-1~bpo10+1 package: xdg-desktop-portal Open Source Software Licensed under the LGPL-2.1 or MPL-2.0: 1、source package:libical-dev 3.0.8-2_mipsel package: libical-dev Open Source Software Licensed under the LGPL-3 or GPL-2-or-3 with KDE Exception: 1、source package:qml6-module-qtwebchannel 6.4.2~rc1-3 package: qml6-module-qtwebchannel Open Source Software Licensed under the LGPL-3Qt-1.1Exception or GPL-2Qt-1.1Exception: 1、source package:qml-module-qtwebengine 5.7.1+dfsg-6.1_mipsel package: qml-module-qtwebengine 2、source package:qtwebengine5-dev 5.7.1+dfsg-6.1_mipsel package: qtwebengine5-dev Open Source Software Licensed under the LGPLv2 with exceptions or GPLv3 with exceptions and GFDL: 1、source package:libqt6svg6 6.4.1 package: libqt6svg6 Open Source Software Licensed under the Libpng: 1、source package:libpng-dev 1.6.37-2_s390x package: libpng-dev 2、source package:libsdl2-dev 2.0.9+dfsg1-1_s390x package: libsdl2-dev Open Source Software Licensed under the Linux-syscall-note: 1、source package:pinn 0.0 package: pinn Open Source Software Licensed under the MITNFA: 1、source package:through2 0.6.5 package: through2 Open Source Software Licensed under the MPL-1.1 or GPL-2+ or LGPL-2.1+: 1、source package:libchardet-dev 1.0.4-1_s390x package: libchardet-dev 2、source package:libchardet1 1.0.4-1_s390x package: libchardet1 3、source package:libuchardet-dev 0.0.7-1_s390x package: libuchardet-dev 4、source package:libuchardet0 0.0.7-1_s390x package: libuchardet0 Open Source Software Licensed under the NAIST-2003: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the Net-SNMP: 1、source package:sudo 1.9.8p2-1~exp1 package: sudo Open Source Software Licensed under the OFL-1.1: 1、source package:fonts-intel-one-mono 1.2.1-2 package: fonts-intel-one-mono 2、source package:fonts-lohit-deva 2.95.4.orig package: fonts-lohit-deva 3、source package:fonts-noto 20201225-1 package: fonts-noto 4、source package:fonts-noto-mono 20200323-1_all package: fonts-noto-mono Open Source Software Licensed under the OpenSSL: 1、source package:libssl1.1 1.1.1~~pre9-1 package: libssl1.1 2、source package:node 8.16.1 package: node Open Source Software Licensed under the PD: 1、source package:xz-utils 5.4.1-0.2 package: xz-utils Open Source Software Licensed under the Public Domain: 1、source package:debianutils 5.8-1 package: debianutils 2、source package:ffmpeg 7:6.0-3 package: ffmpeg 3、source package:grub-efi-amd64-signed 1+2.06+8.1 package: grub-efi-amd64-signed 4、source package:grub-efi-arm64-signed 1+2.06+8.1 package: grub-efi-arm64-signed 5、source package:jsonify 0.0.0 package: jsonify 6、source package:libatspi2.0-dev 2.5.3-2_sparc package: libatspi2.0-dev 7、source package:libsqlite3-0 3.8.7.1-1_kfreebsd-i386 package: libsqlite3-0 8、source package:libsqlite3-dev 3.8.7.1-1_kfreebsd-i386 package: libsqlite3-dev 9、source package:sqlite3 3.9.2-1 package: sqlite3 10、source package:tzdata 2023c-7 package: tzdata Open Source Software Licensed under the Python-2.0: 1、source package:python3 3.8.2-3_s390x package: python3 Open Source Software Licensed under the Qt-GPL-exception-1.0: 1、source package:qtremoteobjects v5.11.0-rc2 package: qtremoteobjects Open Source Software Licensed under the Rdisc: 1、source package:iputils-ping 20190709-3_s390x package: iputils-ping Open Source Software Licensed under the SGI-B-1.1: 1、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 2、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the SGI-B-2.0: 1、source package:libegl1-mesa-dev 8.0.5-4+deb7u2_sparc package: libegl1-mesa-dev 2、source package:libgbm-dev 8.0.5-4+deb7u2_sparc package: libgbm-dev 3、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 4、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the SIL-1.1: 1、source package:fonts-noto-cjk 20190410+repack1-2.debian package: fonts-noto-cjk Open Source Software Licensed under the SSLeay: 1、source package:libssl1.1 1.1.1~~pre9-1 package: libssl1.1 Open Source Software Licensed under the Sleepycat: 1、source package:go-difflib v1.0.0 package: go-difflib Open Source Software Licensed under the The Bugly Software License Version 1.0: 1、source package:crashreport 3.4.4 package: crashreport 2、source package:nativecrashreport 3.9.2 package: nativecrashreport Open Source Software Licensed under the Unicode-DFS-2015: 1、source package:DocxFactory 91131f28 package: DocxFactory Open Source Software Licensed under the Unicode-DFS-2016: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the Unicode-TOU: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the Unlicense: 1、source package:ncompress 4.2.4.6.orig package: ncompress 2、source package:tortellini 4f6795a package: tortellini 3、source package:tweetnacl 0.14.5 package: tweetnacl Open Source Software Licensed under the Vim: 1、source package:vim 8.2.0716.orig package: vim Open Source Software Licensed under the X11: 1、source package:libwayland-dev 1.6.0-2_s390x package: libwayland-dev 2、source package:libxcb-image0-dev 0.4.0-1_s390x package: libxcb-image0-dev 3、source package:libxcb-keysyms1-dev 0.4.0-1_s390x package: libxcb-keysyms1-dev 4、source package:libyaml-cpp-dev 0.6.3-9_s390x package: libyaml-cpp-dev 5、source package:ncurses-base 6.2-1_all package: ncurses-base 6、source package:wordwrap 0.0.2 package: wordwrap Open Source Software Licensed under the Xnet: 1、source package:onboard 1.4.1-5_s390x package: onboard Open Source Software Licensed under the Zlib: 1、source package:avfs 1.1.4-2 package: avfs 2、source package:ffmpeg 7:6.0-3 package: ffmpeg 3、source package:libminizip-dev 1.1-8_hurd-i386 package: libminizip-dev 4、source package:libsdl2-dev 2.0.9+dfsg1-1_s390x package: libsdl2-dev 5、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 6、source package:node 8.16.1 package: node 7、source package:pako 1.0.11 package: pako 8、source package:pigz 2.6-1 package: pigz 9、source package:unalz 0.65-9 package: unalz 10、source package:zlib1g 1.2.8.dfsg-5_s390x package: zlib1g 11、source package:zlib1g-dev 1:1.2.3.3.dfsg-1 package: zlib1g-dev Open Source Software Licensed under the copyleft-next-0.3.0: 1、source package:crda 4.14+git20191112.9856751.orig package: crda Open Source Software Licensed under the cryptsetup-OpenSSL-exception: 1、source package:aria2 1.9.5-1 package: aria2 2、source package:libcryptsetup-dev 2:2.4.0-1 package: libcryptsetup-dev Open Source Software Licensed under the curl: 1、source package:curl 8.0.1-1~exp1 package: curl 2、source package:libcurl4-openssl-dev 7.68.0-1_s390x package: libcurl4-openssl-dev Open Source Software Licensed under the hdparm: 1、source package:hdparm 9.65+ds-1 package: hdparm Open Source Software Licensed under the nolicense: 1、source package:FreeBSD-Electron v9.0.3 package: FreeBSD-Electron 2、source package:LTSLAM 94d7e0f package: LTSLAM 3、source package:TSFileEditor 0.2.1 package: TSFileEditor 4、source package:asio asio-1-29-0 package: asio 5、source package:chromium-source-tarball 59.0.3071.57 package: chromium-source-tarball 6、source package:geek-navigation 5a521f2 package: geek-navigation 7、source package:gentoo 202 package: gentoo 8、source package:go-urn v1.1.0 package: go-urn 9、source package:imaging v1.6.2 package: imaging 10、source package:kcrash 5.103.0-1 package: kcrash 11、source package:ncnn_paddleocr 9c054d3 package: ncnn_paddleocr 12、source package:plasma-workspace v5.25.90 package: plasma-workspace 13、source package:platform/external/qt emu-29.0-release package: platform/external/qt 14、source package:qtbase v6.5.1 package: qtbase 15、source package:qtxlsxwriter v0.3.0 package: qtxlsxwriter 16、source package:scriptcommunicator_serial-terminal Release_06_02 package: scriptcommunicator_serial-terminal 17、source package:socket v0.4.1 package: socket 18、source package:strace v4.14 package: strace 19、source package:v5 v5.1.0 package: v5 20、source package:wlr-protocols d278d20 package: wlr-protocols Copy of Licenses 【GPL-2.0】 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. 【GPL-3.0】 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. https://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see https://www.gnu.org/licenses/. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read https://www.gnu.org/licenses/why-not-lgpl.html. 【LGPL-2.1】 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. one line to give the library's name and an idea of what it does. Copyright (C) year name of author This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. signature of Ty Coon, 1 April 1990 Ty Coon, President of Vice That's all there is to it! 【LGPL-3.0】 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. https://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. 【BSD-2-clause】 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 【BSD-3-clause】 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Apple Inc. ("Apple") nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 【The Qt Company GPL Exception 1.0】 Exception 1: As a special exception you may create a larger work which contains the output of this application and distribute that work under terms of your choice, so long as the work is not otherwise derived from or based on this application and so long as the work does not in itself generate output that contains the output from this application in its original or modified form. Exception 2: As a special exception, you have permission to combine this application with Plugins licensed under the terms of your choice, to produce an executable, and to copy and distribute the resulting executable under the terms of your choice. However, the executable must be accompanied by a prominent notice offering all users of the executable the entire source code to this application, excluding the source code of the independent modules, but including any changes you have made to this application, under the terms of this license. 【The Qt Company LGPL Exception version 1.1】 As an additional permission to the GNU Lesser General Public License version 2.1, the object code form of a "work that uses the Library" may incorporate material from a header file that is part of the Library. You may distribute such object code under terms of your choice, provided that: (i) the header files of the Library have not been modified; and (ii) the incorporated material is limited to numerical parameters, data structure layouts, accessors, macros, inline functions and templates; and (iii) you comply with the terms of Section 6 of the GNU Lesser General Public License version 2.1. Moreover, you may apply this exception to a modified version of the Library, provided that such modification does not involve copying material from the Library into the modified Library's header files unless such material is limited to (i) numerical parameters; (ii) data structure layouts; (iii) accessors; and (iv) small macros, templates and inline functions of five lines or less in length. Furthermore, you are not required to apply this additional permission to a modified version of the Library. ================================================ FILE: src/plugin-systeminfo/operation/qrc/gpl/gpl-3.0-en_US-title.txt ================================================ Open Source Software Notice ================================================ FILE: src/plugin-systeminfo/operation/qrc/gpl/gpl-3.0-zh_CN-body.txt ================================================ The notice provides license information of respective open source software contained in this operating system. Open Source Software Licensed under the GPL-3.0-or-later: 1、source package:accountsservice 23.13.9-2 package: accountsservice 2、source package:cifs-utils 6.9.orig package: cifs-utils 3、source package:coreutils 9.1-1 package: coreutils 4、source package:dosfstools 4.2-1 package: dosfstools 5、source package:ffmpeg 7:6.0-3 package: ffmpeg 6、source package:fonts-wqy-microhei 0.2.0-beta-3.1 package: fonts-wqy-microhei 7、source package:gawk 5.0.1+dfsg.orig package: gawk 8、source package:gettext 0.21.1 package: gettext 9、source package:gettext-base 0.19.8.1-9_s390x package: gettext-base 10、source package:gnupg 2.2.19-3_all package: gnupg 11、source package:golang-gir-gobject-2.0-dev 2.2.0-1 package: golang-gir-gobject-2.0-dev 12、source package:gpgv 2.2.20-1~bpo9+1_s390x package: gpgv 13、source package:grub-common 2.06-9 package: grub-common 14、source package:grub2-common 2.04~rc1-3_ppc64el package: grub2-common 15、source package:grub2-theme-vimix c7ab3ce package: grub2-theme-vimix 16、source package:guvcview 2.0.2 package: guvcview 17、source package:hello 2.9-2_kfreebsd-i386 package: hello 18、source package:libparted-dev 3.3-4_s390x package: libparted-dev 19、source package:libparted-fs-resize0 3.3-4_s390x package: libparted-fs-resize0 20、source package:live-boot 5.0~a5-2 package: live-boot 21、source package:live-boot-initramfs-tools 4.0.2-1_all package: live-boot-initramfs-tools 22、source package:live-config 5.20190519_all package: live-config 23、source package:live-config-systemd 5.20190519_all package: live-config-systemd 24、source package:onboard 1.4.1-5_s390x package: onboard 25、source package:parted 3.6-3 package: parted 26、source package:patchelf 0.9.orig package: patchelf 27、source package:pkg-kde-tools 0.9.5 package: pkg-kde-tools 28、source package:python3-samba 4.12.5+dfsg-3_s390x package: python3-samba 29、source package:qtchooser 66.orig package: qtchooser 30、source package:qtremoteobjects v5.11.0-rc2 package: qtremoteobjects 31、source package:redshift 1.9.1-4_s390x package: redshift 32、source package:rsync 3.2.7-1~bpo11+1 package: rsync 33、source package:rsyslog 8.9.0-3 package: rsyslog 34、source package:samba 4.9.5+dfsg-5_mips64el package: samba 35、source package:samba-common-bin 4.9.5+dfsg-5_s390x package: samba-common-bin 36、source package:samba-dsdb-modules 4.9.5+dfsg-5_s390x package: samba-dsdb-modules 37、source package:samba-vfs-modules 4.9.5+dfsg-5_s390x package: samba-vfs-modules 38、source package:sed 4.9-1 package: sed 39、source package:smbclient 4.9.5+dfsg-5_s390x package: smbclient 40、source package:startdde 6.0.6 package: startdde 41、source package:viper v1.3.2 package: viper Open Source Software Licensed under the GPL-3.0-only: 1、source package:blur-effect 1.1.3-2 package: blur-effect 2、source package:distrobox 1.4.2.1-1 package: distrobox 3、source package:libcap-ng-dev 0.7.9-2_s390x package: libcap-ng-dev 4、source package:liblightdm-qt-dev 1.26.0-5_s390x package: liblightdm-qt-dev 5、source package:libpoppler-glib-dev 22.12.0-2 package: libpoppler-glib-dev 6、source package:lightdm 1.9.9-1 package: lightdm 7、source package:lightdm-gtk-greeter 2.0.8-3 package: lightdm-gtk-greeter 8、source package:mtools 4.0.9-1 package: mtools 9、source package:python-is-python3 8 package: python-is-python3 10、source package:tpm2-tools 5.4-1 package: tpm2-tools Open Source Software Licensed under the GPL-2.0-or-later: 1、source package:ColumnsPlusPlus v0.0.1.2-alpha package: ColumnsPlusPlus 2、source package:Grub-Themes a7ec0fd package: Grub-Themes 3、source package:acl 2.3.1-3 package: acl 4、source package:adduser 3.99 package: adduser 5、source package:apt 2.7.1 package: apt 6、source package:apt-utils 2.1.7_mips64el package: apt-utils 7、source package:aptitude 0.8.9-1 package: aptitude 8、source package:aria2 1.9.5-1 package: aria2 9、source package:arj 3.10.22.orig package: arj 10、source package:attr 2.4.48-5_s390x package: attr 11、source package:bash-completion 20080705 package: bash-completion 12、source package:bc 1.07.1-3 package: bc 13、source package:bluez 5.66-1 package: bluez 14、source package:bluez-obexd 5.52-1_s390x package: bluez-obexd 15、source package:ca-certificates 20230311 package: ca-certificates 16、source package:cornrow v0.8.0 package: cornrow 17、source package:cups-filters 1.9.0-2 package: cups-filters 18、source package:cyberduck release-4-9-1 package: cyberduck 19、source package:debhelper 9.20160814 package: debhelper 20、source package:dh-dkms 3.0.9-1 package: dh-dkms 21、source package:dh-golang 1.9 package: dh-golang 22、source package:dkms 3.0.8-3 package: dkms 23、source package:dmidecode 3.5-1 package: dmidecode 24、source package:dnsmasq-base 2.89-1 package: dnsmasq-base 25、source package:dpkg 1.9.21 package: dpkg 26、source package:dpkg-dev 1.9.21 package: dpkg-dev 27、source package:efibootmgr 17-2 package: efibootmgr 28、source package:eject 2.35.2-7_ppc64el package: eject 29、source package:ethtool 6-0 package: ethtool 30、source package:exfat-fuse 1.3.0-2_armel package: exfat-fuse 31、source package:exfatprogs 1.2.1-2 package: exfatprogs 32、source package:ffmpeg 7:6.0-3 package: ffmpeg 33、source package:foomatic-db-compressed-ppds 20230107-1 package: foomatic-db-compressed-ppds 34、source package:fprintd 1.94.2-2 package: fprintd 35、source package:geoclue-2.0 2.7.0-2 package: geoclue-2.0 36、source package:gnome-keyring 42.1-1 package: gnome-keyring 37、source package:hwdata 0.372-1 package: hwdata 38、source package:im-config 0.9 package: im-config 39、source package:imwheel 1.0.0pre12.orig package: imwheel 40、source package:input-leap v2.4.0 package: input-leap 41、source package:ipwatchd 1.3.0 package: ipwatchd 42、source package:jfsutils 1.1.8-1 package: jfsutils 43、source package:kbd 2.5.1-1 package: kbd 44、source package:kscreenlocker-dev 5.8.6-2_s390x package: kscreenlocker-dev 45、source package:lcov 1.9.orig package: lcov 46、source package:libappstreamqt-dev 0.9.8-4_kfreebsd-i386 package: libappstreamqt-dev 47、source package:libblkid-dev 2.35.2-7_mipsel package: libblkid-dev 48、source package:libcryptsetup-dev 2:2.4.0-1 package: libcryptsetup-dev 49、source package:libddcutil-dev 0.9.8-4_s390x package: libddcutil-dev 50、source package:libdpkg-dev 1.20.5_ppc64el package: libdpkg-dev 51、source package:libdvdnav-dev 6.1.0-1_s390x package: libdvdnav-dev 52、source package:libffmpegthumbnailer-dev 2.1.1-0.2_kfreebsd-amd64 package: libffmpegthumbnailer-dev 53、source package:libffmpegthumbnailer4v5 2.1.1-0.2_kfreebsd-amd64 package: libffmpegthumbnailer4v5 54、source package:libltdl-dev 2.4.7-6 package: libltdl-dev 55、source package:libmount-dev 2.35.2-7_s390x package: libmount-dev 56、source package:libmpv-dev 0.9.2-1+ffmpeg package: libmpv-dev 57、source package:libmpv1 0.6.2-2_s390x package: libmpv1 58、source package:libmpv2 0.36.0+git.20230723.60a26324 package: libmpv2 59、source package:libnm-dev 1.6.2-3+deb9u2_s390x package: libnm-dev 60、source package:libpam-fprintd 1.90.1-1_s390x package: libpam-fprintd 61、source package:libvlc-dev 3.0.9.2-1 package: libvlc-dev 62、source package:libvlc5 3.0.8-4_s390x package: libvlc5 63、source package:libvlccore-dev 3.0.8-4_s390x package: libvlccore-dev 64、source package:libvncserver LibVNCServer-0.9.14 package: libvncserver 65、source package:lzop 1.04-2 package: lzop 66、source package:man-db 2.9.4-4 package: man-db 67、source package:net-tools 2.10-0.1 package: net-tools 68、source package:network-manager 1.9.90-1 package: network-manager 69、source package:nilfs-tools 2.2.9-1 package: nilfs-tools 70、source package:ntfs-3g 2017.3.23AR.5.orig package: ntfs-3g 71、source package:packagekit 1.2.6-5 package: packagekit 72、source package:pandoc 2.9.2.1-3 package: pandoc 73、source package:pciutils 3.7.0.orig package: pciutils 74、source package:pinn 0.0 package: pinn 75、source package:pkg-config 0.29.2.orig package: pkg-config 76、source package:pkg-kde-tools 0.9.5 package: pkg-kde-tools 77、source package:plymouth 22.02.122-3 package: plymouth 78、source package:plymouth-label 0.9.4-3_s390x package: plymouth-label 79、source package:pppoe 3.8-3_sparc package: pppoe 80、source package:procps 3.3.9.orig package: procps 81、source package:python3-dbus 1.2.8-3_s390x package: python3-dbus 82、source package:python3-smbc 1.0.23-2 package: python3-smbc 83、source package:rfkill 2.35.2-7_s390x package: rfkill 84、source package:rzip 2.1.orig package: rzip 85、source package:sectpmctl 1.1.3 package: sectpmctl 86、source package:sensible-utils 0.0.9+nmu1 package: sensible-utils 87、source package:socat 2.0.0~beta9-1_ppc64el package: socat 88、source package:squashfs-tools 4.4-2_s390x package: squashfs-tools 89、source package:syslinux 6.04~git20190206.bf6db5b4+dfsg1.orig package: syslinux 90、source package:syslinux-common 6.04~git20190206.bf6db5b4+dfsg1-2_all package: syslinux-common 91、source package:udisks2 2.9.4-4 package: udisks2 92、source package:unace 1.2b-9 package: unace 93、source package:upower 1.90.2-3 package: upower 94、source package:usb-modeswitch 2.6.1.orig package: usb-modeswitch 95、source package:usbmuxd 1.1.1~git20191130.9af2b12-1_s390x package: usbmuxd 96、source package:usbutils 1:015-1 package: usbutils 97、source package:user-setup 1.95 package: user-setup 98、source package:uuid-dev 2.35.2-7_ppc64el package: uuid-dev 99、source package:vlc-plugin-base 3.0.8-4_s390x package: vlc-plugin-base 100、source package:xdg-user-dirs 0.9-1 package: xdg-user-dirs 101、source package:xserver-xorg-input-wacom 1.2.0-1~exp1 package: xserver-xorg-input-wacom 102、source package:zssh 1.5c.debian.1-8 package: zssh Open Source Software Licensed under the GPL-2.0-only: 1、source package:GitQlient v1.4.3 package: GitQlient 2、source package:alsa-utils 1.2.9-1 package: alsa-utils 3、source package:btrfs-progs 6.3.2-1 package: btrfs-progs 4、source package:checkstyle checkstyle-10.3.4 package: checkstyle 5、source package:dmsetup 1.02.90-2.2+deb8u1_s390x package: dmsetup 6、source package:doxygen 1.9.4-4 package: doxygen 7、source package:e2fsprogs 1.47.0-2 package: e2fsprogs 8、source package:gcc 9.2.1-4.1_mips64el package: gcc 9、source package:genisoimage 9:1.1.11-3.4 package: genisoimage 10、source package:git 4.3.20-9 package: git 11、source package:grub-efi-amd64-signed 1+2.06+8.1 package: grub-efi-amd64-signed 12、source package:grub-efi-arm64-signed 1+2.06+8.1 package: grub-efi-arm64-signed 13、source package:gtk2-engines 2.20.2.orig package: gtk2-engines 14、source package:gtk2-engines-murrine 0.98.2.orig package: gtk2-engines-murrine 15、source package:iio-sensor-proxy 3.4-2 package: iio-sensor-proxy 16、source package:initramfs-tools-core 0.137_all package: initramfs-tools-core 17、source package:kwin v5.27.2 package: kwin 18、source package:libcap-ng-dev 0.7.9-2_s390x package: libcap-ng-dev 19、source package:libdjvulibre-dev 3.5.28-2 package: libdjvulibre-dev 20、source package:libglib2.0-dev 2.64.4-1_s390x package: libglib2.0-dev 21、source package:liblightdm-qt-dev 1.26.0-5_s390x package: liblightdm-qt-dev 22、source package:libnm-qt 0.9.8.2.orig package: libnm-qt 23、source package:libpoppler-glib-dev 22.12.0-2 package: libpoppler-glib-dev 24、source package:libraw-dev 0.9.1-1+deb6u1 package: libraw-dev 25、source package:lightdm 1.9.9-1 package: lightdm 26、source package:lsb-base 9.20161125_all package: lsb-base 27、source package:lshw 02.19.git.2021.06.19.996aaad9c7-2~bpo11+1 package: lshw 28、source package:lvm2 2.03.16-1.1 package: lvm2 29、source package:mawk 1.3.4.20230525-1~exp1 package: mawk 30、source package:modemmanager 1.8.2.orig package: modemmanager 31、source package:networkmanager-qt 5.54.0.orig package: networkmanager-qt 32、source package:openprinting-ppds 20200427-1_all package: openprinting-ppds 33、source package:proxychains4 4.14-3_s390x package: proxychains4 34、source package:qt-creator tqtc/v2.6.0-rc package: qt-creator 35、source package:qtciphersqliteplugin 0.6 package: qtciphersqliteplugin 36、source package:qtermwidget 0.7.1.orig package: qtermwidget 37、source package:reiserfsprogs 3.x.1b-1 package: reiserfsprogs 38、source package:sane-airscan 0.99.8-2 package: sane-airscan 39、source package:slirp4netns 1.2.0-1 package: slirp4netns 40、source package:smartmontools 7.3-1 package: smartmontools 41、source package:synergy-stable-builds 1.8.2-stable package: synergy-stable-builds 42、source package:systemd 8-2 package: systemd 43、source package:ttf-unifont 9.0.06-2_all package: ttf-unifont 44、source package:wireless-tools 30~pre9.orig package: wireless-tools 45、source package:xfonts-wqy 1.0.0~rc1-7 package: xfonts-wqy 46、source package:xfsprogs 6.3.0-1 package: xfsprogs Open Source Software Licensed under the LGPL-3.0-or-later: 1、source package:kdecoration 4:5.26.90-2 package: kdecoration 2、source package:libheif-dev 1.6.1-1_s390x package: libheif-dev 3、source package:libzmq3-dev 4.3.2-2_s390x package: libzmq3-dev 4、source package:python3-ldb 2.1.4-2_s390x package: python3-ldb 5、source package:python3-tdb 1.4.3-1_s390x package: python3-tdb 6、source package:tdb-tools 1.4.3-1_s390x package: tdb-tools Open Source Software Licensed under the LGPL-3.0-only: 1、source package:QtZeroConf pre_Android_api30 package: QtZeroConf 2、source package:cryfs 0.9.9-2 package: cryfs 3、source package:libgsettings-qt-dev 0.2-1_s390x package: libgsettings-qt-dev 4、source package:qt5integration 5.6.3 package: qt5integration 5、source package:qtwebengine-opensource-src 5.14.2+dfsg1.orig package: qtwebengine-opensource-src Open Source Software Licensed under the LGPL-2.1-or-later: 1、source package:fcitx5 5.0.9-2 package: fcitx5 2、source package:fcitx5-chinese-addons 5.0.9-2 package: fcitx5-chinese-addons 3、source package:fcitx5-frontend-gtk2 5.0.9-1 package: fcitx5-frontend-gtk2 4、source package:fcitx5-frontend-qt5 0.0~git20200615.b6f2ef3-1_s390x package: fcitx5-frontend-qt5 5、source package:fcitx5-module-xorg 0~20191021+ds1-1_s390x package: fcitx5-module-xorg 6、source package:fcitx5-modules 0~20191021+ds1-1_s390x package: fcitx5-modules 7、source package:fcitx5-modules-dev 5.0.23-2~exp1 package: fcitx5-modules-dev 8、source package:ffmpeg 7:6.0-3 package: ffmpeg 9、source package:gcr 3.8.2-4 package: gcr 10、source package:iso-codes 4.9.0-1 package: iso-codes 11、source package:kcm-fcitx5 5.0.13-1 package: kcm-fcitx5 12、source package:libappstreamqt-dev 0.9.8-4_kfreebsd-i386 package: libappstreamqt-dev 13、source package:libavcodec-dev 4.3-3+b1_s390x package: libavcodec-dev 14、source package:libavcodec58 4.3-3+b1_ppc64el package: libavcodec58 15、source package:libavdevice-dev 4.3-3+b1_ppc64el package: libavdevice-dev 16、source package:libavfilter-dev 4.3-3+b1_mips64el package: libavfilter-dev 17、source package:libavformat-dev 4.3-3+b1_ppc64el package: libavformat-dev 18、source package:libavformat58 4.3-3+b1_i386 package: libavformat58 19、source package:libavutil-dev 4.3-3+b1_s390x package: libavutil-dev 20、source package:libavutil56 4.3-3+b1_s390x package: libavutil56 21、source package:libblockdev-crypto2 2.24-2_mipsel package: libblockdev-crypto2 22、source package:libdbusextended-qt5-dev 0.0.3-4_s390x package: libdbusextended-qt5-dev 23、source package:libfcitx5-qt-dev 0.0~git20200615.b6f2ef3-1_ppc64el package: libfcitx5-qt-dev 24、source package:libfcitx5core-dev 0~20191021+ds1-1_s390x package: libfcitx5core-dev 25、source package:libfcitx5utils-dev 0~20191021+ds1-1_s390x package: libfcitx5utils-dev 26、source package:libgxps-dev 0.3.1-1_s390x package: libgxps-dev 27、source package:libime-bin 0.0~git20200626.2c85668-1_s390x package: libime-bin 28、source package:libimobiledevice-utils 1.3.0-3_s390x package: libimobiledevice-utils 29、source package:libnss-myhostname 245.6-2_s390x package: libnss-myhostname 30、source package:libprocps-dev 3.3.16-5_s390x package: libprocps-dev 31、source package:libpulse-dev 7.1-2~bpo8+1_s390x package: libpulse-dev 32、source package:libpulse-mainloop-glib0 9.0-5 package: libpulse-mainloop-glib0 33、source package:libpulse0 7.1-2~bpo8+1_s390x package: libpulse0 34、source package:libqrencode-dev 4.0.2-2_s390x package: libqrencode-dev 35、source package:libqrencode4 4.1.1-1 package: libqrencode4 36、source package:libsecret-1-dev 0.20.5-3 package: libsecret-1-dev 37、source package:libswresample-dev 4.3-3+b1_ppc64el package: libswresample-dev 38、source package:libswscale-dev 4.3-3+b1_s390x package: libswscale-dev 39、source package:libsystemd-dev 245.6-2_i386 package: libsystemd-dev 40、source package:libsystemd0 245.6-2_s390x package: libsystemd0 41、source package:libudev-dev 245.6-2_s390x package: libudev-dev 42、source package:packagekit 1.2.6-5 package: packagekit 43、source package:pulseaudio 9.99.1-1 package: pulseaudio 44、source package:pulseaudio-module-bluetooth 7.1-2~bpo8+1_s390x package: pulseaudio-module-bluetooth 45、source package:pulseaudio-utils 7.1-2~bpo8+1_s390x package: pulseaudio-utils 46、source package:python3-gi 3.43.1-1 package: python3-gi 47、source package:systemd-coredump 245.6-2_mipsel package: systemd-coredump 48、source package:systemd-timesyncd 245.6-2_ppc64el package: systemd-timesyncd 49、source package:udev 245.6-2_s390x package: udev 50、source package:unar 1.9.1-1 package: unar Open Source Software Licensed under the LGPL-2.1-only: 1、source package:GitQlient v1.4.3 package: GitQlient 2、source package:cgroup-tools 0.41-8.1_s390x package: cgroup-tools 3、source package:checkstyle checkstyle-10.3.4 package: checkstyle 4、source package:cracklib-runtime 2.9.6-3_s390x package: cracklib-runtime 5、source package:dialog 1.3-20230209-1 package: dialog 6、source package:dmsetup 1.02.90-2.2+deb8u1_s390x package: dmsetup 7、source package:gettext-base 0.19.8.1-9_s390x package: gettext-base 8、source package:gstreamer1.0-libav 1.9.90-1 package: gstreamer1.0-libav 9、source package:gstreamer1.0-plugins-base 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-base 10、source package:gstreamer1.0-plugins-good 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-good 11、source package:gstreamer1.0-plugins-ugly 1.9.90-1 package: gstreamer1.0-plugins-ugly 12、source package:gstreamer1.0-pulseaudio 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-pulseaudio 13、source package:gstreamer1.0-x 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-x 14、source package:gtk2-engines 2.20.2.orig package: gtk2-engines 15、source package:gtk2-engines-murrine 0.98.2.orig package: gtk2-engines-murrine 16、source package:gtk2-engines-pixbuf 2.8.9-2 package: gtk2-engines-pixbuf 17、source package:kmod 9-3_sparc package: kmod 18、source package:libcairo2-dev 1.16.0-4_s390x package: libcairo2-dev 19、source package:libcap-ng-dev 0.7.9-2_s390x package: libcap-ng-dev 20、source package:libcrack2-dev 2.9.6-5 package: libcrack2-dev 21、source package:libfprint 20110418git-2 package: libfprint 22、source package:libfprint-2-2 1.90.1-2_s390x package: libfprint-2-2 23、source package:libfprint0 1.0-1_s390x package: libfprint0 24、source package:libglib2.0-dev 2.64.4-1_s390x package: libglib2.0-dev 25、source package:libgstreamer-plugins-base1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-0 26、source package:libgstreamer-plugins-base1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-dev 27、source package:libgstreamer1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer1.0-0 28、source package:libgstreamer1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer1.0-dev 29、source package:libgtk-3-dev 3.4.2-7+deb7u1_sparc package: libgtk-3-dev 30、source package:liblog4cpp5-dev 1.1.3-3_s390x package: liblog4cpp5-dev 31、source package:liblog4cpp5v5 1.1.3-3_ppc64el package: liblog4cpp5v5 32、source package:libnm-qt 0.9.8.2.orig package: libnm-qt 33、source package:libnotify-bin 0.7.9-1_s390x package: libnotify-bin 34、source package:libraw-dev 0.9.1-1+deb6u1 package: libraw-dev 35、source package:librsvg2-dev 2.9.5-6 package: librsvg2-dev 36、source package:libsdl1.2debian 1.2.15-5_sparc package: libsdl1.2debian 37、source package:libseccomp-dev 2.4.3-1_s390x package: libseccomp-dev 38、source package:libtag1-dev 1.9.1-2~bpo70+1_sparc package: libtag1-dev 39、source package:libusb-1.0-0-dev 1.0.23-2_s390x package: libusb-1.0-0-dev 40、source package:modemmanager 1.8.2.orig package: modemmanager 41、source package:networkmanager-qt 5.54.0.orig package: networkmanager-qt 42、source package:p7zip 9.20.1~dfsg.1-5 package: p7zip 43、source package:p7zip-full 9.20.1~dfsg.1-4.1_kfreebsd-i386 package: p7zip-full 44、source package:qrencode 4.0.2.orig package: qrencode 45、source package:qt-creator tqtc/v2.6.0-rc package: qt-creator 46、source package:qtciphersqliteplugin 0.6 package: qtciphersqliteplugin 47、source package:smartmontools 7.3-1 package: smartmontools Open Source Software Licensed under the LGPL-3 or GPL-2: 1、source package:libqt5core5a 5.7.1+dfsg-3+deb9u2_s390x package: libqt5core5a 2、source package:libqt5opengl5-dev 5.7.1+dfsg-3+deb9u2_s390x package: libqt5opengl5-dev 3、source package:libqt5sql5-sqlite 5.7.1+dfsg-3+deb9u2_s390x package: libqt5sql5-sqlite 4、source package:libqt5svg5-dev 5.7.1~20161021-2+b2_s390x package: libqt5svg5-dev 5、source package:libqt5x11extras5-dev 5.9.2-1 package: libqt5x11extras5-dev 6、source package:libqt6multimedia6 6.4.2-6 package: libqt6multimedia6 7、source package:libqt6opengl6 6.4.2+dfsg~rc1-3+alpha.1 package: libqt6opengl6 8、source package:qml-module-qt-labs-platform 5.9.2-2_kfreebsd-amd64 package: qml-module-qt-labs-platform 9、source package:qml-module-qtquick-controls2 5.9.2-2_kfreebsd-amd64 package: qml-module-qtquick-controls2 10、source package:qml-module-qtquick-dialogs 5.7.1~20161021-2_s390x package: qml-module-qtquick-dialogs 11、source package:qml-module-qtquick-templates2 5.9.2-2_kfreebsd-amd64 package: qml-module-qtquick-templates2 12、source package:qt5-qmake 5.7.1+dfsg-3+deb9u2_s390x package: qt5-qmake 13、source package:qt6-svg-dev 6.4.2~rc1-3 package: qt6-svg-dev 14、source package:qt6-wayland 6.4.2~rc1-2 package: qt6-wayland 15、source package:qtbase5-dev 5.7.1+dfsg-3+deb9u2_s390x package: qtbase5-dev 16、source package:qtbase5-private-dev 5.7.1+dfsg-3+deb9u2_s390x package: qtbase5-private-dev 17、source package:qtmultimedia5-dev 5.7.1~20161021-2_s390x package: qtmultimedia5-dev 18、source package:qtquickcontrols2-5-dev 5.9.2-2_kfreebsd-amd64 package: qtquickcontrols2-5-dev Open Source Software Licensed under the LGPL-3 or GPL-2+: 1、source package:qml-module-qtqml-models2 5.7.1-2+b2_s390x package: qml-module-qtqml-models2 2、source package:qml-module-qtquick-layouts 5.7.1-2+b2_s390x package: qml-module-qtquick-layouts 3、source package:qml-module-qtquick2 5.7.1-2+b2_s390x package: qml-module-qtquick2 4、source package:qtdeclarative5-dev 5.7.1-2+b2_s390x package: qtdeclarative5-dev Open Source Software Licensed under the Apache-2.0: 1、source package:AndroidProject-Kotlin 13.2 package: AndroidProject-Kotlin 2、source package:JSONStream 1.3.5 package: JSONStream 3、source package:acorn-node 1.8.2 package: acorn-node 4、source package:android-pdfium a56ccce4 package: android-pdfium 5、source package:androidsvg 1.4 package: androidsvg 6、source package:atob 2.1.2 package: atob 7、source package:aws-sign2 0.7.0 package: aws-sign2 8、source package:caseless 0.12.0 package: caseless 9、source package:cilium 1.14.3 package: cilium 10、source package:circleindicator 2.1.6 package: circleindicator 11、source package:cobra v0.0.3 package: cobra 12、source package:compiler 4.12.0 package: compiler 13、source package:concurrent 1.0.0 package: concurrent 14、source package:coost v3.0.0 package: coost 15、source package:core 1.7.0 package: core 16、source package:cppdap 87f8b4a package: cppdap 17、source package:crypto v0.23.0 package: crypto 18、source package:dash-ast 1.0.0 package: dash-ast 19、source package:diff-match-patch 1.0.5 package: diff-match-patch 20、source package:dompurify 2.4.1 package: dompurify 21、source package:external/github.com/google/benchmark v1.4.1 package: external/github.com/google/benchmark 22、source package:ffmpeg 7:6.0-3 package: ffmpeg 23、source package:fonts-noto-color-emoji 2.038-1 package: fonts-noto-color-emoji 24、source package:forever-agent 0.6.1 package: forever-agent 25、source package:get-assigned-identifiers 1.2.0 package: get-assigned-identifiers 26、source package:git 4.3.20-9 package: git 27、source package:glide 4.12.0 package: glide 28、source package:gofuzz v1.0.0 package: gofuzz 29、source package:golang-github-golang-groupcache-dev 0.0~git20200121.8c9f03a-2 package: golang-github-golang-groupcache-dev 30、source package:golang-gopkg-yaml.v2-dev 2.4.0-3 package: golang-gopkg-yaml.v2-dev 31、source package:golang-gopkg-yaml.v3-dev 3.0.1-3 package: golang-gopkg-yaml.v3-dev 32、source package:gradle 7.4.2 package: gradle 33、source package:gson 2.10.1 package: gson 34、source package:imgbrd-grabber v6.0.2 package: imgbrd-grabber 35、source package:infratask_scheduler v0.1.0 package: infratask_scheduler 36、source package:junit 1.1.5 package: junit 37、source package:kata-containers CC-0.7.0 package: kata-containers 38、source package:kotlin-gradle-plugin package: kotlin-gradle-plugin 39、source package:kotlin-stdlib-jdk7 package: kotlin-stdlib-jdk7 40、source package:kotlinx-serialization-json 1.5.1 package: kotlinx-serialization-json 41、source package:libcups2-dev 2.3~rc1-1_s390x package: libcups2-dev 42、source package:libcupsimage2 2.3~rc1-1_s390x package: libcupsimage2 43、source package:libpoppler-cpp-dev 0.85.0-1_s390x package: libpoppler-cpp-dev 44、source package:libpoppler-cpp0v5 0.85.0-1_s390x package: libpoppler-cpp0v5 45、source package:libssl-dev 3.0.0~~alpha4-1_s390x package: libssl-dev 46、source package:libssl3 3.0.0~~alpha4-1_s390x package: libssl3 47、source package:libwebrtc-bin 86.4240.20.0 package: libwebrtc-bin 48、source package:libxerces-c-dev 3.2.3+debian-1_s390x package: libxerces-c-dev 49、source package:lottie 4.1.0 package: lottie 50、source package:ms365 v2.0.5 package: ms365 51、source package:oauth-sign 0.9.0 package: oauth-sign 52、source package:okhttp 3.12.13 package: okhttp 53、source package:podman 1.6.4+dfsg1-4_armel package: podman 54、source package:preference 1.2.1 package: preference 55、source package:request 2.88.0 package: request 56、source package:rsyslog 8.9.0-3 package: rsyslog 57、source package:sass 1.55.0 package: sass 58、source package:spdx-correct 3.1.1 package: spdx-correct 59、source package:sse v0.1.0 package: sse 60、source package:sync v0.10.0 package: sync 61、source package:through 2.3.8 package: through 62、source package:timber 4.7.1 package: timber 63、source package:tinyrpc 2130294 package: tinyrpc 64、source package:tools_oat 373f560 package: tools_oat 65、source package:true-case-path 1.0.3 package: true-case-path 66、source package:tunnel-agent 0.6.0 package: tunnel-agent 67、source package:typescript 4.8.4 package: typescript 68、source package:undeclared-identifiers 1.1.3 package: undeclared-identifiers 69、source package:validate-npm-package-license 3.0.4 package: validate-npm-package-license 70、source package:vimspector 2938438041 package: vimspector Open Source Software Licensed under the MIT: 1、source package:@antfu/utils 0.7.7 package: @antfu/utils 2、source package:@babel/runtime 7.6.0 package: @babel/runtime 3、source package:@babel/standalone 7.20.15 package: @babel/standalone 4、source package:@ctrl/tinycolor 3.4.1 package: @ctrl/tinycolor 5、source package:@element-plus/icons-vue 2.0.9 package: @element-plus/icons-vue 6、source package:@esbuild/android-arm 0.15.9 package: @esbuild/android-arm 7、source package:@esbuild/linux-loong64 0.15.9 package: @esbuild/linux-loong64 8、source package:@floating-ui/core 1.0.1 package: @floating-ui/core 9、source package:@floating-ui/dom 1.0.2 package: @floating-ui/dom 10、source package:@jridgewell/gen-mapping 0.3.2 package: @jridgewell/gen-mapping 11、source package:@jridgewell/resolve-uri 3.1.0 package: @jridgewell/resolve-uri 12、source package:@jridgewell/set-array 1.1.2 package: @jridgewell/set-array 13、source package:@jridgewell/source-map 0.3.2 package: @jridgewell/source-map 14、source package:@jridgewell/sourcemap-codec 1.4.14 package: @jridgewell/sourcemap-codec 15、source package:@jridgewell/trace-mapping 0.3.16 package: @jridgewell/trace-mapping 16、source package:@nodelib/fs.scandir 2.1.5 package: @nodelib/fs.scandir 17、source package:@nodelib/fs.stat 2.0.5 package: @nodelib/fs.stat 18、source package:@nodelib/fs.walk 1.2.8 package: @nodelib/fs.walk 19、source package:@popperjs/core 2.11.7 package: @popperjs/core 20、source package:@rollup/pluginutils 5.1.0 package: @rollup/pluginutils 21、source package:@smake/co 1.0.1 package: @smake/co 22、source package:@types/estree 1.0.5 package: @types/estree 23、source package:@types/json-schema 7.0.6 package: @types/json-schema 24、source package:@types/lodash 4.14.185 package: @types/lodash 25、source package:@types/lodash-es 4.17.6 package: @types/lodash-es 26、source package:@types/node 14.14.6 package: @types/node 27、source package:@types/web-bluetooth 0.0.15 package: @types/web-bluetooth 28、source package:@vitejs/plugin-legacy 2.3.1 package: @vitejs/plugin-legacy 29、source package:@vitejs/plugin-vue 3.1.0 package: @vitejs/plugin-vue 30、source package:@vue/devtools-api 6.4.1 package: @vue/devtools-api 31、source package:@vueuse/core 9.3.0 package: @vueuse/core 32、source package:@vueuse/metadata 9.3.0 package: @vueuse/metadata 33、source package:@vueuse/shared 9.3.0 package: @vueuse/shared 34、source package:CppLogging 1.0.1.0 package: CppLogging 35、source package:abbrev 1.1.1 package: abbrev 36、source package:acorn 7.0.0 package: acorn 37、source package:acorn-dynamic-import 2.0.2 package: acorn-dynamic-import 38、source package:acorn-node 1.8.2 package: acorn-node 39、source package:acorn-walk 7.0.0 package: acorn-walk 40、source package:add-px-to-style 1.0.0 package: add-px-to-style 41、source package:ajv 6.12.6 package: ajv 42、source package:ajv-keywords 3.5.2 package: ajv-keywords 43、source package:align-text 0.1.4 package: align-text 44、source package:amdefine 1.0.1 package: amdefine 45、source package:ansi-gray 0.1.1 package: ansi-gray 46、source package:ansi-regex 3.0.0 package: ansi-regex 47、source package:ansi-styles 2.2.1 package: ansi-styles 48、source package:ansi-wrap 0.1.0 package: ansi-wrap 49、source package:anyks-lm 2.1.5 package: anyks-lm 50、source package:apt 2.7.1 package: apt 51、source package:archy 1.0.0 package: archy 52、source package:arr-diff 4.0.0 package: arr-diff 53、source package:arr-flatten 1.1.0 package: arr-flatten 54、source package:arr-union 3.1.0 package: arr-union 55、source package:array-differ 1.0.0 package: array-differ 56、source package:array-each 1.0.1 package: array-each 57、source package:array-find-index 1.0.2 package: array-find-index 58、source package:array-slice 1.1.0 package: array-slice 59、source package:array-uniq 1.0.3 package: array-uniq 60、source package:array-unique 0.3.2 package: array-unique 61、source package:asn1 0.2.4 package: asn1 62、source package:asn1.js 5.4.1 package: asn1.js 63、source package:assert 1.5.0 package: assert 64、source package:assert-plus 1.0.0 package: assert-plus 65、source package:assign-symbols 1.0.0 package: assign-symbols 66、source package:async 2.6.3 package: async 67、source package:async-each 1.0.3 package: async-each 68、source package:async-foreach 0.1.3 package: async-foreach 69、source package:async-validator 4.2.5 package: async-validator 70、source package:asynckit 0.4.0 package: asynckit 71、source package:atob 2.1.2 package: atob 72、source package:aws4 1.8.0 package: aws4 73、source package:babel-code-frame 6.26.0 package: babel-code-frame 74、source package:babel-core 6.26.3 package: babel-core 75、source package:babel-generator 6.26.1 package: babel-generator 76、source package:babel-helper-builder-binary-assignment-operator-visitor 6.24.1 package: babel-helper-builder-binary-assignment-operator-visitor 77、source package:babel-helper-builder-react-jsx 6.26.0 package: babel-helper-builder-react-jsx 78、source package:babel-helper-call-delegate 6.24.1 package: babel-helper-call-delegate 79、source package:babel-helper-define-map 6.26.0 package: babel-helper-define-map 80、source package:babel-helper-explode-assignable-expression 6.24.1 package: babel-helper-explode-assignable-expression 81、source package:babel-helper-function-name 6.24.1 package: babel-helper-function-name 82、source package:babel-helper-get-function-arity 6.24.1 package: babel-helper-get-function-arity 83、source package:babel-helper-hoist-variables 6.24.1 package: babel-helper-hoist-variables 84、source package:babel-helper-optimise-call-expression 6.24.1 package: babel-helper-optimise-call-expression 85、source package:babel-helper-regex 6.26.0 package: babel-helper-regex 86、source package:babel-helper-remap-async-to-generator 6.24.1 package: babel-helper-remap-async-to-generator 87、source package:babel-helper-replace-supers 6.24.1 package: babel-helper-replace-supers 88、source package:babel-helpers 6.24.1 package: babel-helpers 89、source package:babel-messages 6.23.0 package: babel-messages 90、source package:babel-plugin-check-es2015-constants 6.22.0 package: babel-plugin-check-es2015-constants 91、source package:babel-plugin-syntax-async-functions 6.13.0 package: babel-plugin-syntax-async-functions 92、source package:babel-plugin-syntax-exponentiation-operator 6.13.0 package: babel-plugin-syntax-exponentiation-operator 93、source package:babel-plugin-syntax-flow 6.18.0 package: babel-plugin-syntax-flow 94、source package:babel-plugin-syntax-jsx 6.18.0 package: babel-plugin-syntax-jsx 95、source package:babel-plugin-syntax-trailing-function-commas 6.22.0 package: babel-plugin-syntax-trailing-function-commas 96、source package:babel-plugin-transform-async-to-generator 6.24.1 package: babel-plugin-transform-async-to-generator 97、source package:babel-plugin-transform-es2015-arrow-functions 6.22.0 package: babel-plugin-transform-es2015-arrow-functions 98、source package:babel-plugin-transform-es2015-block-scoped-functions 6.22.0 package: babel-plugin-transform-es2015-block-scoped-functions 99、source package:babel-plugin-transform-es2015-block-scoping 6.26.0 package: babel-plugin-transform-es2015-block-scoping 100、source package:babel-plugin-transform-es2015-classes 6.24.1 package: babel-plugin-transform-es2015-classes 101、source package:babel-plugin-transform-es2015-computed-properties 6.24.1 package: babel-plugin-transform-es2015-computed-properties 102、source package:babel-plugin-transform-es2015-destructuring 6.23.0 package: babel-plugin-transform-es2015-destructuring 103、source package:babel-plugin-transform-es2015-duplicate-keys 6.24.1 package: babel-plugin-transform-es2015-duplicate-keys 104、source package:babel-plugin-transform-es2015-for-of 6.23.0 package: babel-plugin-transform-es2015-for-of 105、source package:babel-plugin-transform-es2015-function-name 6.24.1 package: babel-plugin-transform-es2015-function-name 106、source package:babel-plugin-transform-es2015-literals 6.22.0 package: babel-plugin-transform-es2015-literals 107、source package:babel-plugin-transform-es2015-modules-amd 6.24.1 package: babel-plugin-transform-es2015-modules-amd 108、source package:babel-plugin-transform-es2015-modules-commonjs 6.26.2 package: babel-plugin-transform-es2015-modules-commonjs 109、source package:babel-plugin-transform-es2015-modules-systemjs 6.24.1 package: babel-plugin-transform-es2015-modules-systemjs 110、source package:babel-plugin-transform-es2015-modules-umd 6.24.1 package: babel-plugin-transform-es2015-modules-umd 111、source package:babel-plugin-transform-es2015-object-super 6.24.1 package: babel-plugin-transform-es2015-object-super 112、source package:babel-plugin-transform-es2015-parameters 6.24.1 package: babel-plugin-transform-es2015-parameters 113、source package:babel-plugin-transform-es2015-shorthand-properties 6.24.1 package: babel-plugin-transform-es2015-shorthand-properties 114、source package:babel-plugin-transform-es2015-spread 6.22.0 package: babel-plugin-transform-es2015-spread 115、source package:babel-plugin-transform-es2015-sticky-regex 6.24.1 package: babel-plugin-transform-es2015-sticky-regex 116、source package:babel-plugin-transform-es2015-template-literals 6.22.0 package: babel-plugin-transform-es2015-template-literals 117、source package:babel-plugin-transform-es2015-typeof-symbol 6.23.0 package: babel-plugin-transform-es2015-typeof-symbol 118、source package:babel-plugin-transform-es2015-unicode-regex 6.24.1 package: babel-plugin-transform-es2015-unicode-regex 119、source package:babel-plugin-transform-exponentiation-operator 6.24.1 package: babel-plugin-transform-exponentiation-operator 120、source package:babel-plugin-transform-flow-strip-types 6.22.0 package: babel-plugin-transform-flow-strip-types 121、source package:babel-plugin-transform-react-display-name 6.25.0 package: babel-plugin-transform-react-display-name 122、source package:babel-plugin-transform-react-jsx 6.24.1 package: babel-plugin-transform-react-jsx 123、source package:babel-plugin-transform-react-jsx-self 6.22.0 package: babel-plugin-transform-react-jsx-self 124、source package:babel-plugin-transform-react-jsx-source 6.22.0 package: babel-plugin-transform-react-jsx-source 125、source package:babel-plugin-transform-regenerator 6.26.0 package: babel-plugin-transform-regenerator 126、source package:babel-plugin-transform-strict-mode 6.24.1 package: babel-plugin-transform-strict-mode 127、source package:babel-polyfill 6.26.0 package: babel-polyfill 128、source package:babel-preset-env 1.7.0 package: babel-preset-env 129、source package:babel-preset-flow 6.23.0 package: babel-preset-flow 130、source package:babel-preset-react 6.24.1 package: babel-preset-react 131、source package:babel-register 6.26.0 package: babel-register 132、source package:babel-runtime 6.26.0 package: babel-runtime 133、source package:babel-template 6.26.0 package: babel-template 134、source package:babel-traverse 6.26.0 package: babel-traverse 135、source package:babel-types 6.26.0 package: babel-types 136、source package:babelify 8.0.0 package: babelify 137、source package:babylon 6.18.0 package: babylon 138、source package:balanced-match 1.0.2 package: balanced-match 139、source package:base 0.11.2 package: base 140、source package:base64-js 1.3.1 package: base64-js 141、source package:beeper 1.1.1 package: beeper 142、source package:big.js 5.2.2 package: big.js 143、source package:binary-extensions 2.2.0 package: binary-extensions 144、source package:bl 1.2.2 package: bl 145、source package:bn.js 5.1.3 package: bn.js 146、source package:brace-expansion 2.0.1 package: brace-expansion 147、source package:braces 3.0.2 package: braces 148、source package:brorand 1.1.0 package: brorand 149、source package:browser-pack 6.1.0 package: browser-pack 150、source package:browser-resolve 1.11.3 package: browser-resolve 151、source package:browserify 14.5.0 package: browserify 152、source package:browserify-aes 1.2.0 package: browserify-aes 153、source package:browserify-cipher 1.0.1 package: browserify-cipher 154、source package:browserify-des 1.0.2 package: browserify-des 155、source package:browserify-rsa 4.0.1 package: browserify-rsa 156、source package:browserify-zlib 0.2.0 package: browserify-zlib 157、source package:browserslist 3.2.8 package: browserslist 158、source package:buffer 5.4.2 package: buffer 159、source package:buffer-from 1.1.2 package: buffer-from 160、source package:buffer-xor 1.0.3 package: buffer-xor 161、source package:builtin-status-codes 3.0.0 package: builtin-status-codes 162、source package:cache-base 1.0.1 package: cache-base 163、source package:cached-path-relative 1.0.2 package: cached-path-relative 164、source package:camelcase 4.1.0 package: camelcase 165、source package:camelcase-keys 2.1.0 package: camelcase-keys 166、source package:center-align 0.1.3 package: center-align 167、source package:chalk 1.1.3 package: chalk 168、source package:cheerio 1.0.0-rc.3 package: cheerio 169、source package:chokidar 3.4.3 package: chokidar 170、source package:cipher-base 1.0.4 package: cipher-base 171、source package:class-utils 0.3.6 package: class-utils 172、source package:clone 2.1.2 package: clone 173、source package:clone-buffer 1.0.0 package: clone-buffer 174、source package:clone-stats 1.0.0 package: clone-stats 175、source package:cloneable-readable 1.1.3 package: cloneable-readable 176、source package:code-point-at 1.1.0 package: code-point-at 177、source package:collection-visit 1.0.0 package: collection-visit 178、source package:combine-source-map 0.8.0 package: combine-source-map 179、source package:combined-stream 1.0.8 package: combined-stream 180、source package:commander 2.20.3 package: commander 181、source package:component-emitter 1.3.0 package: component-emitter 182、source package:compute-scroll-into-view 1.0.11 package: compute-scroll-into-view 183、source package:concat-map 0.0.1 package: concat-map 184、source package:concat-stream 1.6.2 package: concat-stream 185、source package:console-browserify 1.2.0 package: console-browserify 186、source package:constants-browserify 1.0.0 package: constants-browserify 187、source package:convert-source-map 1.6.0 package: convert-source-map 188、source package:cookiecutter-golang d372aa0 package: cookiecutter-golang 189、source package:coost v3.0.0 package: coost 190、source package:copy-descriptor 0.1.1 package: copy-descriptor 191、source package:core-js 3.27.2 package: core-js 192、source package:core-util-is 1.0.2 package: core-util-is 193、source package:create-ecdh 4.0.4 package: create-ecdh 194、source package:create-hash 1.2.0 package: create-hash 195、source package:create-hmac 1.1.7 package: create-hmac 196、source package:crelt 1.0.6 package: crelt 197、source package:cross-spawn 5.1.0 package: cross-spawn 198、source package:crypto-browserify 3.12.0 package: crypto-browserify 199、source package:currently-unhandled 0.4.1 package: currently-unhandled 200、source package:dashdash 1.14.1 package: dashdash 201、source package:date-now 0.1.4 package: date-now 202、source package:dateformat 2.2.0 package: dateformat 203、source package:dayjs 1.11.5 package: dayjs 204、source package:debug 4.3.4 package: debug 205、source package:decamelize 1.2.0 package: decamelize 206、source package:decode-uri-component 0.2.0 package: decode-uri-component 207、source package:defaults 1.0.3 package: defaults 208、source package:define-property 2.0.2 package: define-property 209、source package:defined 1.0.0 package: defined 210、source package:delayed-stream 1.0.0 package: delayed-stream 211、source package:delegates 1.0.0 package: delegates 212、source package:deprecated 0.0.1 package: deprecated 213、source package:deps-sort 2.0.0 package: deps-sort 214、source package:des.js 1.0.1 package: des.js 215、source package:detect-file 1.0.0 package: detect-file 216、source package:detect-indent 4.0.0 package: detect-indent 217、source package:detective 4.7.1 package: detective 218、source package:diffie-hellman 5.0.3 package: diffie-hellman 219、source package:dom-css 2.1.0 package: dom-css 220、source package:dom-serializer 0.1.1 package: dom-serializer 221、source package:domain-browser 1.2.0 package: domain-browser 222、source package:ecc-jsbn 0.1.2 package: ecc-jsbn 223、source package:element-plus 2.2.17 package: element-plus 224、source package:elliptic 6.5.3 package: elliptic 225、source package:emojis-list 3.0.0 package: emojis-list 226、source package:end-of-stream 0.1.5 package: end-of-stream 227、source package:enhanced-resolve 3.4.1 package: enhanced-resolve 228、source package:errno 0.1.7 package: errno 229、source package:error-ex 1.3.2 package: error-ex 230、source package:es6-iterator 2.0.3 package: es6-iterator 231、source package:es6-map 0.1.5 package: es6-map 232、source package:es6-set 0.1.5 package: es6-set 233、source package:es6-symbol 3.1.1 package: es6-symbol 234、source package:esbuild 0.15.9 package: esbuild 235、source package:esbuild-android-64 0.15.9 package: esbuild-android-64 236、source package:esbuild-android-arm64 0.15.9 package: esbuild-android-arm64 237、source package:esbuild-darwin-64 0.15.9 package: esbuild-darwin-64 238、source package:esbuild-darwin-arm64 0.15.9 package: esbuild-darwin-arm64 239、source package:esbuild-freebsd-64 0.15.9 package: esbuild-freebsd-64 240、source package:esbuild-freebsd-arm64 0.15.9 package: esbuild-freebsd-arm64 241、source package:esbuild-linux-32 0.15.9 package: esbuild-linux-32 242、source package:esbuild-linux-64 0.15.9 package: esbuild-linux-64 243、source package:esbuild-linux-arm 0.15.9 package: esbuild-linux-arm 244、source package:esbuild-linux-arm64 0.15.9 package: esbuild-linux-arm64 245、source package:esbuild-linux-mips64le 0.15.9 package: esbuild-linux-mips64le 246、source package:esbuild-linux-ppc64le 0.15.9 package: esbuild-linux-ppc64le 247、source package:esbuild-linux-riscv64 0.15.9 package: esbuild-linux-riscv64 248、source package:esbuild-linux-s390x 0.15.9 package: esbuild-linux-s390x 249、source package:esbuild-netbsd-64 0.15.9 package: esbuild-netbsd-64 250、source package:esbuild-openbsd-64 0.15.9 package: esbuild-openbsd-64 251、source package:esbuild-sunos-64 0.15.9 package: esbuild-sunos-64 252、source package:esbuild-windows-32 0.15.9 package: esbuild-windows-32 253、source package:esbuild-windows-64 0.15.9 package: esbuild-windows-64 254、source package:esbuild-windows-arm64 0.15.9 package: esbuild-windows-arm64 255、source package:escape-html 1.0.3 package: escape-html 256、source package:escape-string-regexp 5.0.0 package: escape-string-regexp 257、source package:estree-walker 2.0.2 package: estree-walker 258、source package:event-emitter 0.3.5 package: event-emitter 259、source package:events 3.2.0 package: events 260、source package:evp_bytestokey 1.0.3 package: evp_bytestokey 261、source package:execa 0.7.0 package: execa 262、source package:expand-brackets 2.1.4 package: expand-brackets 263、source package:expand-tilde 2.0.2 package: expand-tilde 264、source package:expose-loader 1.0.1 package: expose-loader 265、source package:extend 3.0.2 package: extend 266、source package:extend-shallow 3.0.2 package: extend-shallow 267、source package:extglob 2.0.4 package: extglob 268、source package:extsprintf 1.3.0 package: extsprintf 269、source package:fancy-log 1.3.3 package: fancy-log 270、source package:fast-deep-equal 3.1.3 package: fast-deep-equal 271、source package:fast-glob 3.2.12 package: fast-glob 272、source package:fast-json-stable-stringify 2.1.0 package: fast-json-stable-stringify 273、source package:ffmpeg 7:6.0-3 package: ffmpeg 274、source package:fill-range 7.0.1 package: fill-range 275、source package:find-index 0.1.1 package: find-index 276、source package:find-up 2.1.0 package: find-up 277、source package:findup-sync 2.0.0 package: findup-sync 278、source package:fined 1.2.0 package: fined 279、source package:first-chunk-stream 1.0.0 package: first-chunk-stream 280、source package:flagged-respawn 1.0.1 package: flagged-respawn 281、source package:for-in 1.0.2 package: for-in 282、source package:for-own 1.0.0 package: for-own 283、source package:form-data 2.3.3 package: form-data 284、source package:fragment-cache 0.2.1 package: fragment-cache 285、source package:fs.realpath 1.0.0 package: fs.realpath 286、source package:fsevents 2.3.2 package: fsevents 287、source package:function-bind 1.1.1 package: function-bind 288、source package:gaze 1.1.3 package: gaze 289、source package:get-stdin 4.0.1 package: get-stdin 290、source package:get-stream 3.0.0 package: get-stream 291、source package:get-value 2.0.6 package: get-value 292、source package:getpass 0.1.7 package: getpass 293、source package:gg v1.3.0 package: gg 294、source package:gin v1.5.0 package: gin 295、source package:git 4.3.20-9 package: git 296、source package:gitea v1.19.3 package: gitea 297、source package:glob-stream 3.1.18 package: glob-stream 298、source package:glob-watcher 0.0.6 package: glob-watcher 299、source package:glob2base 0.0.12 package: glob2base 300、source package:global-modules 1.0.0 package: global-modules 301、source package:global-prefix 1.0.2 package: global-prefix 302、source package:globals 9.18.0 package: globals 303、source package:globule 1.2.1 package: globule 304、source package:glogg 1.0.2 package: glogg 305、source package:go v1.1.7 package: go 306、source package:go-isatty v0.0.9 package: go-isatty 307、source package:go-pinyin v0.19.0 package: go-pinyin 308、source package:go-wav v0.3.2 package: go-wav 309、source package:go-windows-terminal-sequences v1.0.1 package: go-windows-terminal-sequences 310、source package:goconvey v1.8.1 package: goconvey 311、source package:golang-github-gosexy-gettext-dev 0~git20130221-2.1_all package: golang-github-gosexy-gettext-dev 312、source package:gstreamer1.0-fluendo-mp3 0.10.32.debian-1_s390x package: gstreamer1.0-fluendo-mp3 313、source package:gstreamer1.0-plugins-base 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-base 314、source package:gstreamer1.0-plugins-good 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-good 315、source package:gstreamer1.0-plugins-ugly 1.9.90-1 package: gstreamer1.0-plugins-ugly 316、source package:gstreamer1.0-pulseaudio 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-pulseaudio 317、source package:gstreamer1.0-x 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-x 318、source package:gulp 3.9.1 package: gulp 319、source package:gulp-concat 2.6.1 package: gulp-concat 320、source package:gulp-rename 1.4.0 package: gulp-rename 321、source package:gulp-sass 3.2.1 package: gulp-sass 322、source package:gulp-util 3.0.8 package: gulp-util 323、source package:gulplog 1.0.0 package: gulplog 324、source package:har-validator 5.1.3 package: har-validator 325、source package:has 1.0.3 package: has 326、source package:has-ansi 2.0.0 package: has-ansi 327、source package:has-flag 2.0.0 package: has-flag 328、source package:has-gulplog 0.1.0 package: has-gulplog 329、source package:has-value 1.0.0 package: has-value 330、source package:has-values 1.0.0 package: has-values 331、source package:hash-base 3.1.0 package: hash-base 332、source package:hash.js 1.1.7 package: hash.js 333、source package:history 4.9.0 package: history 334、source package:hmac-drbg 1.0.1 package: hmac-drbg 335、source package:home-or-tmp 2.0.0 package: home-or-tmp 336、source package:homedir-polyfill 1.0.3 package: homedir-polyfill 337、source package:htmlescape 1.1.1 package: htmlescape 338、source package:htmlparser2 3.10.1 package: htmlparser2 339、source package:http-signature 1.2.0 package: http-signature 340、source package:https-browserify 1.0.0 package: https-browserify 341、source package:image v0.10.0 package: image 342、source package:immutable 4.1.0 package: immutable 343、source package:indent-string 2.1.0 package: indent-string 344、source package:indexof 0.0.1 package: indexof 345、source package:inline-source-map 0.6.2 package: inline-source-map 346、source package:insert-module-globals 7.2.0 package: insert-module-globals 347、source package:interpret 1.4.0 package: interpret 348、source package:invariant 2.2.4 package: invariant 349、source package:invert-kv 1.0.0 package: invert-kv 350、source package:is-absolute 1.0.0 package: is-absolute 351、source package:is-accessor-descriptor 1.0.0 package: is-accessor-descriptor 352、source package:is-arrayish 0.2.1 package: is-arrayish 353、source package:is-binary-path 2.1.0 package: is-binary-path 354、source package:is-buffer 1.1.6 package: is-buffer 355、source package:is-core-module 2.10.0 package: is-core-module 356、source package:is-data-descriptor 1.0.0 package: is-data-descriptor 357、source package:is-descriptor 1.0.2 package: is-descriptor 358、source package:is-extendable 1.0.1 package: is-extendable 359、source package:is-extglob 2.1.1 package: is-extglob 360、source package:is-finite 1.0.2 package: is-finite 361、source package:is-fullwidth-code-point 2.0.0 package: is-fullwidth-code-point 362、source package:is-glob 4.0.3 package: is-glob 363、source package:is-number 7.0.0 package: is-number 364、source package:is-plain-object 2.0.4 package: is-plain-object 365、source package:is-relative 1.0.0 package: is-relative 366、source package:is-stream 1.1.0 package: is-stream 367、source package:is-typedarray 1.0.0 package: is-typedarray 368、source package:is-unc-path 1.0.0 package: is-unc-path 369、source package:is-utf8 0.2.1 package: is-utf8 370、source package:is-windows 1.0.2 package: is-windows 371、source package:isarray 1.0.0 package: isarray 372、source package:isobject 3.0.1 package: isobject 373、source package:isstream 0.1.2 package: isstream 374、source package:java_fpe_test 0.1.2 package: java_fpe_test 375、source package:jq 1.6-2.1 package: jq 376、source package:jquery 3.6.1 package: jquery 377、source package:js 0.1.0 package: js 378、source package:js-tokens 3.0.2 package: js-tokens 379、source package:jsbn 0.1.1 package: jsbn 380、source package:jsesc 1.3.0 package: jsesc 381、source package:json v3.7.0 package: json 382、source package:json-loader 0.5.7 package: json-loader 383、source package:json-schema-traverse 0.4.1 package: json-schema-traverse 384、source package:json-stable-stringify 0.0.1 package: json-stable-stringify 385、source package:json5 2.1.3 package: json5 386、source package:jsonc-parser 3.2.0 package: jsonc-parser 387、source package:jsonparse 1.3.1 package: jsonparse 388、source package:jsprim 1.4.1 package: jsprim 389、source package:jwt-cpp v0.5.0 package: jwt-cpp 390、source package:keypress 0.1.0 package: keypress 391、source package:kind-of 6.0.3 package: kind-of 392、source package:labeled-stream-splicer 2.0.2 package: labeled-stream-splicer 393、source package:lazy-cache 1.0.4 package: lazy-cache 394、source package:lcid 1.0.0 package: lcid 395、source package:libappimage-dev 0.1.9+dfsg-1_s390x package: libappimage-dev 396、source package:libboost-dev 1.71.0.3_s390x package: libboost-dev 397、source package:libboost-filesystem-dev 1.71.0.3_s390x package: libboost-filesystem-dev 398、source package:libboost-serialization-dev 1.71.0.3_s390x package: libboost-serialization-dev 399、source package:libboost-system-dev 1.71.0.3_s390x package: libboost-system-dev 400、source package:libdrm-dev 2.4.99-1_s390x package: libdrm-dev 401、source package:libegl1-mesa-dev 8.0.5-4+deb7u2_sparc package: libegl1-mesa-dev 402、source package:libgbm-dev 8.0.5-4+deb7u2_sparc package: libgbm-dev 403、source package:libglib2.0-dev 2.64.4-1_s390x package: libglib2.0-dev 404、source package:libgstreamer-plugins-base1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-0 405、source package:libgstreamer-plugins-base1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-dev 406、source package:libjson-c3 0.12.1-1.3_s390x package: libjson-c3 407、source package:libjson-rpc-cpp v1.4.1 package: libjson-rpc-cpp 408、source package:liblcms2-dev 2.9-4_s390x package: liblcms2-dev 409、source package:libportaudio2 19.6.0-1_s390x package: libportaudio2 410、source package:libx11-dev 2:1.8.4-2+deb12u1 package: libx11-dev 411、source package:libx11-xcb-dev 1.6.9-2_s390x package: libx11-xcb-dev 412、source package:libxcb-composite0-dev 1.8.1-2+deb7u1_sparc package: libxcb-composite0-dev 413、source package:libxcb-cursor-dev 0.1.1-4_s390x package: libxcb-cursor-dev 414、source package:libxcb-damage0-dev 1.8.1-2+deb7u1_sparc package: libxcb-damage0-dev 415、source package:libxcb-ewmh-dev 0.4.1-1_s390x package: libxcb-ewmh-dev 416、source package:libxcb-image0-dev 0.4.0-1_s390x package: libxcb-image0-dev 417、source package:libxcb-keysyms1-dev 0.4.0-1_s390x package: libxcb-keysyms1-dev 418、source package:libxcb-randr0-dev 1.8.1-2+deb7u1_sparc package: libxcb-randr0-dev 419、source package:libxcb-record0-dev 1.8.1-2+deb7u1_sparc package: libxcb-record0-dev 420、source package:libxcb-render-util0-dev 0.3.9-1_s390x package: libxcb-render-util0-dev 421、source package:libxcb-render0-dev 1.8.1-2+deb7u1_sparc package: libxcb-render0-dev 422、source package:libxcb-res0-dev 1.8.1-2+deb7u1_sparc package: libxcb-res0-dev 423、source package:libxcb-shape0-dev 1.8.1-2+deb7u1_sparc package: libxcb-shape0-dev 424、source package:libxcb-sync-dev 1.14-2_s390x package: libxcb-sync-dev 425、source package:libxcb-util0 0.3.8-3_s390x package: libxcb-util0 426、source package:libxcb-util0-dev 0.3.8-3_s390x package: libxcb-util0-dev 427、source package:libxcb-util1 0.4.0-1 package: libxcb-util1 428、source package:libxcb-xfixes0-dev 1.8.1-2+deb7u1_sparc package: libxcb-xfixes0-dev 429、source package:libxcb-xinerama0-dev 1.8.1-2+deb7u1_sparc package: libxcb-xinerama0-dev 430、source package:libxcb-xinput-dev 1.14-2_s390x package: libxcb-xinput-dev 431、source package:libxcb-xkb-dev 1.14-2_s390x package: libxcb-xkb-dev 432、source package:libxcb-xtest0-dev 1.8.1-2+deb7u1_sparc package: libxcb-xtest0-dev 433、source package:libxcb1-dev 1.8.1-2+deb7u1_sparc package: libxcb1-dev 434、source package:libxext-dev 1.3.3-1_s390x package: libxext-dev 435、source package:libxfixes-dev 5.0.3-2_s390x package: libxfixes-dev 436、source package:libxinerama-dev 2:1.1.4-3 package: libxinerama-dev 437、source package:libxkbcommon-dev 0.9.1-1_s390x package: libxkbcommon-dev 438、source package:libxkbcommon-x11-dev 0.9.1-1_s390x package: libxkbcommon-x11-dev 439、source package:libxss-dev 1.2.3-1_s390x package: libxss-dev 440、source package:libxss1 1.2.3-1_s390x package: libxss1 441、source package:libxtst-dev 1.2.3-1_s390x package: libxtst-dev 442、source package:liftoff 2.5.0 package: liftoff 443、source package:load-json-file 2.0.0 package: load-json-file 444、source package:loader-runner 2.4.0 package: loader-runner 445、source package:loader-utils 2.0.0 package: loader-utils 446、source package:local-pkg 0.4.3 package: local-pkg 447、source package:locales v0.12.1 package: locales 448、source package:locate-path 2.0.0 package: locate-path 449、source package:lodash 4.17.21 package: lodash 450、source package:lodash-es 4.17.21 package: lodash-es 451、source package:lodash-unified 1.0.2 package: lodash-unified 452、source package:lodash._basecopy 3.0.1 package: lodash._basecopy 453、source package:lodash._basetostring 3.0.1 package: lodash._basetostring 454、source package:lodash._basevalues 3.0.0 package: lodash._basevalues 455、source package:lodash._getnative 3.9.1 package: lodash._getnative 456、source package:lodash._isiterateecall 3.0.9 package: lodash._isiterateecall 457、source package:lodash._reescape 3.0.0 package: lodash._reescape 458、source package:lodash._reevaluate 3.0.0 package: lodash._reevaluate 459、source package:lodash._reinterpolate 3.0.0 package: lodash._reinterpolate 460、source package:lodash._root 3.0.1 package: lodash._root 461、source package:lodash.clonedeep 4.5.0 package: lodash.clonedeep 462、source package:lodash.escape 3.2.0 package: lodash.escape 463、source package:lodash.isarguments 3.1.0 package: lodash.isarguments 464、source package:lodash.isarray 3.0.4 package: lodash.isarray 465、source package:lodash.keys 3.1.2 package: lodash.keys 466、source package:lodash.memoize 3.0.4 package: lodash.memoize 467、source package:lodash.restparam 3.6.1 package: lodash.restparam 468、source package:lodash.template 3.6.2 package: lodash.template 469、source package:lodash.templatesettings 3.1.1 package: lodash.templatesettings 470、source package:logrus v1.9.3 package: logrus 471、source package:longest 1.0.1 package: longest 472、source package:loose-envify 1.4.0 package: loose-envify 473、source package:loud-rejection 1.6.0 package: loud-rejection 474、source package:magic-string 0.27.0 package: magic-string 475、source package:make-iterator 1.0.1 package: make-iterator 476、source package:map-cache 0.2.2 package: map-cache 477、source package:map-obj 1.0.1 package: map-obj 478、source package:map-visit 1.0.0 package: map-visit 479、source package:marked 1.2.3 package: marked 480、source package:md5.js 1.3.5 package: md5.js 481、source package:mem 1.1.0 package: mem 482、source package:memoize-one 6.0.0 package: memoize-one 483、source package:memory-fs 0.4.1 package: memory-fs 484、source package:meow 3.7.0 package: meow 485、source package:merge2 1.4.1 package: merge2 486、source package:mesa-utils 9.0.0-1 package: mesa-utils 487、source package:mesa-va-drivers 20.1.2-1_armel package: mesa-va-drivers 488、source package:mesa-vdpau-drivers 20.1.2-1_mipsel package: mesa-vdpau-drivers 489、source package:mesa-vulkan-drivers 20.1.2-1_mips64el package: mesa-vulkan-drivers 490、source package:micromatch 3.1.10 package: micromatch 491、source package:miller-rabin 4.0.1 package: miller-rabin 492、source package:mime-db 1.40.0 package: mime-db 493、source package:mime-types 2.1.24 package: mime-types 494、source package:mimic-fn 1.2.0 package: mimic-fn 495、source package:minimalistic-crypto-utils 1.0.1 package: minimalistic-crypto-utils 496、source package:minimatch 0.2.14 package: minimatch 497、source package:minimist 1.2.5 package: minimist 498、source package:mitt 3.0.0 package: mitt 499、source package:mixin-deep 1.3.2 package: mixin-deep 500、source package:mkdirp 0.5.5 package: mkdirp 501、source package:mlly 1.4.2 package: mlly 502、source package:module-deps 4.1.1 package: module-deps 503、source package:moment 2.29.4 package: moment 504、source package:mqt.qfr 1.10.0 package: mqt.qfr 505、source package:ms 2.1.2 package: ms 506、source package:multipipe 0.1.2 package: multipipe 507、source package:nan 2.14.0 package: nan 508、source package:nanomatch 1.2.13 package: nanomatch 509、source package:native v1.1.0 package: native 510、source package:ncurses-base 6.2-1_all package: ncurses-base 511、source package:neo-async 2.6.2 package: neo-async 512、source package:netlink v1.7.2 package: netlink 513、source package:next-tick 1.0.0 package: next-tick 514、source package:nlohmann_json nlohmann_json-3.7.3 package: nlohmann_json 515、source package:node 8.16.1 package: node 516、source package:node-gyp 3.8.0 package: node-gyp 517、source package:node-libs-browser 2.2.1 package: node-libs-browser 518、source package:node-sass 4.12.0 package: node-sass 519、source package:normalize-path 3.0.0 package: normalize-path 520、source package:npm-run-path 2.0.2 package: npm-run-path 521、source package:number-is-nan 1.0.1 package: number-is-nan 522、source package:object-assign 4.1.1 package: object-assign 523、source package:object-copy 0.1.0 package: object-copy 524、source package:object-visit 1.0.1 package: object-visit 525、source package:object.defaults 1.1.0 package: object.defaults 526、source package:object.map 1.0.1 package: object.map 527、source package:object.pick 1.3.0 package: object.pick 528、source package:objx v0.5.2 package: objx 529、source package:orchestrator 0.3.8 package: orchestrator 530、source package:ordered-read-streams 0.1.0 package: ordered-read-streams 531、source package:os-browserify 0.3.0 package: os-browserify 532、source package:os-config 0.2.3 package: os-config 533、source package:os-homedir 1.0.2 package: os-homedir 534、source package:os-locale 2.1.0 package: os-locale 535、source package:os-tmpdir 1.0.2 package: os-tmpdir 536、source package:p-finally 1.0.0 package: p-finally 537、source package:p-limit 1.3.0 package: p-limit 538、source package:p-locate 2.0.0 package: p-locate 539、source package:p-try 1.0.0 package: p-try 540、source package:pako 1.0.11 package: pako 541、source package:parents 1.0.1 package: parents 542、source package:parse-filepath 1.0.2 package: parse-filepath 543、source package:parse-json 2.2.0 package: parse-json 544、source package:parse-node-version 1.0.1 package: parse-node-version 545、source package:parse-passwd 1.0.0 package: parse-passwd 546、source package:parse5 3.0.3 package: parse5 547、source package:pascalcase 0.1.1 package: pascalcase 548、source package:path-browserify 0.0.1 package: path-browserify 549、source package:path-dirname 1.0.2 package: path-dirname 550、source package:path-exists 3.0.0 package: path-exists 551、source package:path-is-absolute 1.0.1 package: path-is-absolute 552、source package:path-key 2.0.1 package: path-key 553、source package:path-parse 1.0.7 package: path-parse 554、source package:path-platform 0.11.15 package: path-platform 555、source package:path-root 0.1.1 package: path-root 556、source package:path-root-regex 0.1.2 package: path-root-regex 557、source package:path-to-regexp 1.7.0 package: path-to-regexp 558、source package:path-type 2.0.0 package: path-type 559、source package:pathe 1.1.1 package: pathe 560、source package:pbkdf2 3.1.1 package: pbkdf2 561、source package:performance-now 2.1.0 package: performance-now 562、source package:picomatch 2.3.1 package: picomatch 563、source package:pify 2.3.0 package: pify 564、source package:pinia 2.0.22 package: pinia 565、source package:pinkie 2.0.4 package: pinkie 566、source package:pinkie-promise 2.0.1 package: pinkie-promise 567、source package:pipewire-pulse 0.3.71 package: pipewire-pulse 568、source package:pkg-types 1.0.3 package: pkg-types 569、source package:platform/external/fmtlib upstream-master package: platform/external/fmtlib 570、source package:portaudio19-dev 19.6.0-1_s390x package: portaudio19-dev 571、source package:posix-character-classes 0.1.1 package: posix-character-classes 572、source package:prefix-style 2.0.1 package: prefix-style 573、source package:pretty v0.2.1 package: pretty 574、source package:pretty-hrtime 1.0.3 package: pretty-hrtime 575、source package:private 0.1.8 package: private 576、source package:process 0.11.10 package: process 577、source package:process-nextick-args 2.0.1 package: process-nextick-args 578、source package:promxy v0.0.81 package: promxy 579、source package:prop-types 15.7.2 package: prop-types 580、source package:prr 1.0.1 package: prr 581、source package:psl 1.4.0 package: psl 582、source package:public-encrypt 4.0.3 package: public-encrypt 583、source package:punycode 2.1.1 package: punycode 584、source package:python3 3.8.2-3_s390x package: python3 585、source package:python3-dbus 1.2.8-3_s390x package: python3-dbus 586、source package:querystring 0.2.0 package: querystring 587、source package:querystring-es3 0.2.1 package: querystring-es3 588、source package:queue-microtask 1.2.3 package: queue-microtask 589、source package:raf 3.4.1 package: raf 590、source package:randombytes 2.1.0 package: randombytes 591、source package:randomfill 1.0.4 package: randomfill 592、source package:react 16.9.0 package: react 593、source package:react-custom-scrollbars 4.2.1 package: react-custom-scrollbars 594、source package:react-dom 16.9.0 package: react-dom 595、source package:react-is 16.9.0 package: react-is 596、source package:react-router 4.3.1 package: react-router 597、source package:react-router-dom 4.3.1 package: react-router-dom 598、source package:read-only-stream 2.0.0 package: read-only-stream 599、source package:read-pkg 2.0.0 package: read-pkg 600、source package:read-pkg-up 2.0.0 package: read-pkg-up 601、source package:readable-stream 3.6.0 package: readable-stream 602、source package:readdirp 3.6.0 package: readdirp 603、source package:rechoir 0.6.2 package: rechoir 604、source package:redent 1.0.0 package: redent 605、source package:regenerate 1.4.0 package: regenerate 606、source package:regenerator-runtime 0.13.3 package: regenerator-runtime 607、source package:regex-not 1.0.2 package: regex-not 608、source package:regexpu-core 2.0.0 package: regexpu-core 609、source package:regjsgen 0.2.0 package: regjsgen 610、source package:repeat-element 1.1.3 package: repeat-element 611、source package:repeat-string 1.6.1 package: repeat-string 612、source package:repeating 2.0.1 package: repeating 613、source package:replace-ext 1.0.0 package: replace-ext 614、source package:require-directory 2.1.1 package: require-directory 615、source package:resolve 1.22.1 package: resolve 616、source package:resolve-dir 1.0.1 package: resolve-dir 617、source package:resolve-pathname 2.2.0 package: resolve-pathname 618、source package:resolve-url 0.2.1 package: resolve-url 619、source package:ret 0.1.15 package: ret 620、source package:reusify 1.0.4 package: reusify 621、source package:right-align 0.1.3 package: right-align 622、source package:ripemd160 2.0.2 package: ripemd160 623、source package:rollup 2.79.1 package: rollup 624、source package:run-parallel 1.2.0 package: run-parallel 625、source package:safe-buffer 5.2.1 package: safe-buffer 626、source package:safe-regex 1.1.0 package: safe-regex 627、source package:safer-buffer 2.1.2 package: safer-buffer 628、source package:sass 1.55.0 package: sass 629、source package:sass-graph 2.2.4 package: sass-graph 630、source package:scheduler 0.15.0 package: scheduler 631、source package:schema-utils 3.0.0 package: schema-utils 632、source package:scroll-into-view-if-needed 2.2.20 package: scroll-into-view-if-needed 633、source package:scss-tokenizer 0.2.3 package: scss-tokenizer 634、source package:scule 1.1.1 package: scule 635、source package:sequencify 0.0.7 package: sequencify 636、source package:set-value 2.0.1 package: set-value 637、source package:setimmediate 1.0.5 package: setimmediate 638、source package:sha.js 2.4.11 package: sha.js 639、source package:shadered v1.5.3 package: shadered 640、source package:shasum 1.0.2 package: shasum 641、source package:shebang-command 1.2.0 package: shebang-command 642、source package:shebang-regex 1.0.0 package: shebang-regex 643、source package:shell-quote 1.7.2 package: shell-quote 644、source package:simple-concat 1.0.0 package: simple-concat 645、source package:slash 1.0.0 package: slash 646、source package:slirp4netns 1.2.0-1 package: slirp4netns 647、source package:smooth-scroll-into-view-if-needed 1.1.23 package: smooth-scroll-into-view-if-needed 648、source package:snapdragon 0.8.2 package: snapdragon 649、source package:snapdragon-node 2.1.1 package: snapdragon-node 650、source package:snapdragon-util 3.0.1 package: snapdragon-util 651、source package:source-list-map 2.0.1 package: source-list-map 652、source package:source-map-resolve 0.5.3 package: source-map-resolve 653、source package:source-map-support 0.5.21 package: source-map-support 654、source package:source-map-url 0.4.0 package: source-map-url 655、source package:sourcemap-codec 1.4.8 package: sourcemap-codec 656、source package:sparkles 1.0.1 package: sparkles 657、source package:spdx-expression-parse 3.0.1 package: spdx-expression-parse 658、source package:split-string 3.1.0 package: split-string 659、source package:sqlclosecheck v0.5.0 package: sqlclosecheck 660、source package:sse v0.1.0 package: sse 661、source package:sshpk 1.16.1 package: sshpk 662、source package:static-extend 0.1.2 package: static-extend 663、source package:stdout-stream 1.4.1 package: stdout-stream 664、source package:stream-browserify 2.0.2 package: stream-browserify 665、source package:stream-combiner2 1.1.1 package: stream-combiner2 666、source package:stream-consume 0.1.1 package: stream-consume 667、source package:stream-http 2.8.3 package: stream-http 668、source package:stream-splicer 2.0.1 package: stream-splicer 669、source package:string-width 2.1.1 package: string-width 670、source package:string_decoder 1.3.0 package: string_decoder 671、source package:strip-ansi 4.0.0 package: strip-ansi 672、source package:strip-bom 3.0.0 package: strip-bom 673、source package:strip-eof 1.0.0 package: strip-eof 674、source package:strip-indent 1.0.1 package: strip-indent 675、source package:strip-literal 1.3.0 package: strip-literal 676、source package:subarg 1.0.0 package: subarg 677、source package:sudo 1.9.8p2-1~exp1 package: sudo 678、source package:supports-color 4.5.0 package: supports-color 679、source package:supports-preserve-symlinks-flag 1.0.0 package: supports-preserve-symlinks-flag 680、source package:syntax-error 1.4.0 package: syntax-error 681、source package:sys v0.5.0 package: sys 682、source package:systemjs 6.13.0 package: systemjs 683、source package:tapable 0.2.9 package: tapable 684、source package:testify v1.9.0 package: testify 685、source package:text v0.1.0 package: text 686、source package:through2 2.0.5 package: through2 687、source package:tildify 1.2.0 package: tildify 688、source package:time-stamp 1.1.0 package: time-stamp 689、source package:timers-browserify 2.0.12 package: timers-browserify 690、source package:tiny-invariant 1.0.6 package: tiny-invariant 691、source package:tiny-warning 1.0.3 package: tiny-warning 692、source package:tinyaes 1.0.4rc1 package: tinyaes 693、source package:tlp 1.5.0-1~bpo11+1 package: tlp 694、source package:to-arraybuffer 1.0.1 package: to-arraybuffer 695、source package:to-camel-case 1.0.0 package: to-camel-case 696、source package:to-fast-properties 1.0.3 package: to-fast-properties 697、source package:to-no-case 1.0.2 package: to-no-case 698、source package:to-object-path 0.3.0 package: to-object-path 699、source package:to-regex 3.0.2 package: to-regex 700、source package:to-regex-range 5.0.1 package: to-regex-range 701、source package:to-space-case 1.0.0 package: to-space-case 702、source package:toml v1.3.2 package: toml 703、source package:tools v0.6.0 package: tools 704、source package:tortellini 4f6795a package: tortellini 705、source package:trim-newlines 1.0.0 package: trim-newlines 706、source package:trim-right 1.0.1 package: trim-right 707、source package:tty-browserify 0.0.1 package: tty-browserify 708、source package:typedarray 0.0.6 package: typedarray 709、source package:uglify-to-browserify 1.0.2 package: uglify-to-browserify 710、source package:uglifyjs-webpack-plugin 0.4.6 package: uglifyjs-webpack-plugin 711、source package:umd 3.0.3 package: umd 712、source package:unc-path-regex 0.1.2 package: unc-path-regex 713、source package:unimport 1.3.0 package: unimport 714、source package:union-value 1.0.1 package: union-value 715、source package:unique-stream 1.0.0 package: unique-stream 716、source package:universal-translator v0.16.0 package: universal-translator 717、source package:unplugin-auto-import 0.11.5 package: unplugin-auto-import 718、source package:unplugin-vue-components 0.22.12 package: unplugin-vue-components 719、source package:unset-value 1.0.0 package: unset-value 720、source package:upath 1.2.0 package: upath 721、source package:urix 0.1.0 package: urix 722、source package:url 0.11.0 package: url 723、source package:use 3.1.1 package: use 724、source package:user-home 1.1.1 package: user-home 725、source package:util 0.11.1 package: util 726、source package:util-deprecate 1.0.2 package: util-deprecate 727、source package:uuid 3.3.3 package: uuid 728、source package:v-drag 3.0.9 package: v-drag 729、source package:v8flags 2.1.1 package: v8flags 730、source package:value-equal 0.4.0 package: value-equal 731、source package:verror 1.10.0 package: verror 732、source package:vinyl 2.2.0 package: vinyl 733、source package:vinyl-buffer 1.0.1 package: vinyl-buffer 734、source package:vinyl-fs 0.3.14 package: vinyl-fs 735、source package:vinyl-source-stream 2.0.0 package: vinyl-source-stream 736、source package:vm-browserify 1.1.2 package: vm-browserify 737、source package:vue-codemirror 6.1.1 package: vue-codemirror 738、source package:vue-demi 0.13.11 package: vue-demi 739、source package:vue-router 4.1.5 package: vue-router 740、source package:w3c-keyname 2.2.8 package: w3c-keyname 741、source package:warning 4.0.3 package: warning 742、source package:watchpack 1.7.4 package: watchpack 743、source package:watchpack-chokidar2 2.0.0 package: watchpack-chokidar2 744、source package:webpack 3.12.0 package: webpack 745、source package:webpack-sources 3.2.3 package: webpack-sources 746、source package:webpack-virtual-modules 0.6.1 package: webpack-virtual-modules 747、source package:window-size 0.1.0 package: window-size 748、source package:wireplumber 0.4.9-1 package: wireplumber 749、source package:wordwrap 0.0.2 package: wordwrap 750、source package:wrap-ansi 2.1.0 package: wrap-ansi 751、source package:x11-utils 7.7~1_sparc package: x11-utils 752、source package:x11-xserver-utils 7.7~3_sparc package: x11-xserver-utils 753、source package:x11proto-record-dev 2020.1-1_all package: x11proto-record-dev 754、source package:x11proto-xext-dev 7.3.0-1_all package: x11proto-xext-dev 755、source package:xcb-proto 1.7.1.orig package: xcb-proto 756、source package:xdg-utils 1.1.3-4.1 package: xdg-utils 757、source package:xkb-data 2.5.1-3_all package: xkb-data 758、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 759、source package:xserver-xorg-input-all 7.7+7_s390x package: xserver-xorg-input-all 760、source package:xserver-xorg-video-all 7.7+7_s390x package: xserver-xorg-video-all 761、source package:xtend 4.0.2 package: xtend 762、source package:xwayland 2:23.1.1-1 package: xwayland 763、source package:yargs 8.0.2 package: yargs Open Source Software Licensed under the Expat: 1、source package:golang-github-adrg-xdg-dev 0.4.0-2 package: golang-github-adrg-xdg-dev 2、source package:golang-github-disintegration-imaging-dev 1.6.2-2 package: golang-github-disintegration-imaging-dev 3、source package:golang-github-smartystreets-goconvey-dev 1.6.4+dfsg-1_all package: golang-github-smartystreets-goconvey-dev 4、source package:golang-github-stretchr-testify-dev 1.8.0-1~bpo11+1 package: golang-github-stretchr-testify-dev 5、source package:golang-github-teambition-rrule-go-dev 1.8.1-1 package: golang-github-teambition-rrule-go-dev 6、source package:golang-gopkg-alecthomas-kingpin.v2-dev 2.2.6-4 package: golang-gopkg-alecthomas-kingpin.v2-dev 7、source package:intel-media-va-driver-non-free 23.2.3+ds1-1 package: intel-media-va-driver-non-free 8、source package:libepoxy-dev 1.5.9-2 package: libepoxy-dev 9、source package:libiniparser-dev 4.1-4_s390x package: libiniparser-dev 10、source package:libinput-dev 1.6.3-1_s390x package: libinput-dev 11、source package:libjson-c-dev 0.16-2 package: libjson-c-dev 12、source package:libmtdev-dev 1.1.6-1_s390x package: libmtdev-dev 13、source package:libsass-dev 3.6.4-4~exp_s390x package: libsass-dev 14、source package:libspdlog-dev 1:1.3.1-1 package: libspdlog-dev 15、source package:libutf8proc-dev 2.7.0-4 package: libutf8proc-dev 16、source package:libva-dev 2.8.0-1_s390x package: libva-dev 17、source package:nlohmann-json3-dev 3.9.1-1 package: nlohmann-json3-dev 18、source package:rapidjson-dev 1.1.0-1 package: rapidjson-dev 19、source package:va-driver-all 2.8.0-1_s390x package: va-driver-all 20、source package:wayland-protocols 1.9-1 package: wayland-protocols Open Source Software Licensed under the BSD-3-Clause: 1、source package:DocxFactory 91131f28 package: DocxFactory 2、source package:alsa-topology-conf 1.2.5.1-2 package: alsa-topology-conf 3、source package:alsa-ucm-conf 1.2.9-1 package: alsa-ucm-conf 4、source package:amdefine 1.0.1 package: amdefine 5、source package:android-pdfium a56ccce4 package: android-pdfium 6、source package:apt 2.7.1 package: apt 7、source package:bcrypt-pbkdf 1.0.2 package: bcrypt-pbkdf 8、source package:browserify 14.5.0 package: browserify 9、source package:charenc 0.0.2 package: charenc 10、source package:chromium 87.0.4280.88-0.4 package: chromium 11、source package:cmake v3.27.0-rc5 package: cmake 12、source package:coost v3.0.0 package: coost 13、source package:crypt 0.0.2 package: crypt 14、source package:crypto v0.13.0 package: crypto 15、source package:css-select 1.2.0 package: css-select 16、source package:css-what 2.1.3 package: css-what 17、source package:dns v1.1.52 package: dns 18、source package:dnsutils 970203-0.1 package: dnsutils 19、source package:duplexer2 0.1.4 package: duplexer2 20、source package:entities 1.1.2 package: entities 21、source package:errwrap v1.5.0 package: errwrap 22、source package:external/github.com/protocolbuffers/protobuf v3.7.0-rc.3 package: external/github.com/protocolbuffers/protobuf 23、source package:extra-cmake-modules 5.98.0-2 package: extra-cmake-modules 24、source package:ffmpeg 7:6.0-3 package: ffmpeg 25、source package:fsnotify v1.6.0 package: fsnotify 26、source package:go-cmp v0.6.0 package: go-cmp 27、source package:golang 2:1.7~5~bpo8+1 package: golang 28、source package:golang-any 1.7~5~bpo8+1_s390x package: golang-any 29、source package:golang-github-fsnotify-fsnotify-dev 1.6.0-1 package: golang-github-fsnotify-fsnotify-dev 30、source package:golang-github-miekg-dns-dev 1.1.50-2 package: golang-github-miekg-dns-dev 31、source package:golang-github-rickb777-date-dev 1.20.1-1 package: golang-github-rickb777-date-dev 32、source package:golang-go 1.7~5~bpo8+1_ppc64el package: golang-go 33、source package:golang-golang-x-sys-dev 0.3.0-1+hurd.1 package: golang-golang-x-sys-dev 34、source package:golang-golang-x-xerrors-dev 0.0~git20191204.9bdfabe-1~bpo10+1 package: golang-golang-x-xerrors-dev 35、source package:golang-google-protobuf-dev 1.28.1-3 package: golang-google-protobuf-dev 36、source package:gstreamer1.0-plugins-base 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-base 37、source package:gstreamer1.0-plugins-good 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-good 38、source package:gstreamer1.0-pulseaudio 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-pulseaudio 39、source package:gstreamer1.0-x 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-x 40、source package:hoist-non-react-statics 2.5.5 package: hoist-non-react-statics 41、source package:ieee754 1.2.1 package: ieee754 42、source package:init 1.65~exp2 package: init 43、source package:iputils-ping 20190709-3_s390x package: iputils-ping 44、source package:js-base64 2.5.1 package: js-base64 45、source package:json-schema 0.2.3 package: json-schema 46、source package:libcli11-dev 2.1.2+ds-1 package: libcli11-dev 47、source package:libgmock-dev 1.9.0.20190831-3 package: libgmock-dev 48、source package:libgoogle-glog-dev 0.4.0-1_s390x package: libgoogle-glog-dev 49、source package:libgstreamer-plugins-base1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-0 50、source package:libgstreamer-plugins-base1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-dev 51、source package:libgtest-dev 1.9.0.20190831-1_s390x package: libgtest-dev 52、source package:libjpeg-dev 2.0.5-1_all package: libjpeg-dev 53、source package:libnl-3-dev 3.4.0-1~bpo9+1_s390x package: libnl-3-dev 54、source package:libnl-genl-3-dev 3.4.0-1~bpo9+1_s390x package: libnl-genl-3-dev 55、source package:libnl-route-3-dev 3.4.0-1~bpo9+1_s390x package: libnl-route-3-dev 56、source package:libpcap-dev 1.9.1-4~bpo10+1_s390x package: libpcap-dev 57、source package:libtirpc-common 1.2.6-1_all package: libtirpc-common 58、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 59、source package:locales 2.31-0experimental0_all package: locales 60、source package:lxqt-build-tools 0.8.0-1 package: lxqt-build-tools 61、source package:marked 1.2.3 package: marked 62、source package:md5 2.2.1 package: md5 63、source package:mmkv-static 1.2.10 package: mmkv-static 64、source package:mod v0.8.0 package: mod 65、source package:mount 2.9g-6 package: mount 66、source package:net v0.15.0 package: net 67、source package:node 8.16.1 package: node 68、source package:normalize-wheel-es 1.2.0 package: normalize-wheel-es 69、source package:nth-check 1.0.2 package: nth-check 70、source package:onboard 1.4.1-5_s390x package: onboard 71、source package:passwd 980403-0.3 package: passwd 72、source package:pflag v1.0.5 package: pflag 73、source package:protobuf v1.3.2 package: protobuf 74、source package:python3-click 8.1.6-1 package: python3-click 75、source package:qml-module-qtgraphicaleffects 5.7.1~20161021-3_s390x package: qml-module-qtgraphicaleffects 76、source package:qs 6.5.2 package: qs 77、source package:qtermwidget 0.14.1 package: qtermwidget 78、source package:regenerator-transform 0.10.1 package: regenerator-transform 79、source package:regjsparser 0.1.5 package: regjsparser 80、source package:sass 1.55.0 package: sass 81、source package:sha.js 2.4.11 package: sha.js 82、source package:source-map 0.6.1 package: source-map 83、source package:spdx-license-ids 3.0.6 package: spdx-license-ids 84、source package:sys v0.6.0 package: sys 85、source package:syscall_intercept 4b3a3b5 package: syscall_intercept 86、source package:term v0.13.0 package: term 87、source package:terser 5.15.1 package: terser 88、source package:text v0.13.0 package: text 89、source package:tough-cookie 2.4.3 package: tough-cookie 90、source package:uglify-js 2.8.29 package: uglify-js 91、source package:util-linux 2.5-12 package: util-linux 92、source package:uuid v1.3.0 package: uuid 93、source package:wpasupplicant 2.9.0-12_s390x package: wpasupplicant 94、source package:xdotool 3.20160805.1-4_s390x package: xdotool 95、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 96、source package:xsettingsd 1.0.2-1 package: xsettingsd 97、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the BSD-2-Clause: 1、source package:DocxFactory 91131f28 package: DocxFactory 2、source package:block-stream 0.0.9 package: block-stream 3、source package:coost v3.0.0 package: coost 4、source package:domelementtype 1.3.1 package: domelementtype 5、source package:domhandler 2.4.2 package: domhandler 6、source package:domutils 1.5.1 package: domutils 7、source package:doxyqml 0.3.0-1.1.debian package: doxyqml 8、source package:escope 3.6.0 package: escope 9、source package:esrecurse 4.3.0 package: esrecurse 10、source package:estraverse 5.2.0 package: estraverse 11、source package:esutils 2.0.3 package: esutils 12、source package:ffmpeg 7:6.0-3 package: ffmpeg 13、source package:glob 3.1.21 package: glob 14、source package:golang-dbus-dev 5.1.0-1~bpo11+1 package: golang-dbus-dev 15、source package:golang-github-msteinert-pam-dev 1.1.0-1 package: golang-github-msteinert-pam-dev 16、source package:golang-gopkg-check.v1-dev 0.0+git20200902.038fdea-1 package: golang-gopkg-check.v1-dev 17、source package:graceful-fs 1.2.3 package: graceful-fs 18、source package:libarchive-dev 3.4.0-2~bpo9+1_amd64 package: libarchive-dev 19、source package:libtag1-dev 1.9.1-2~bpo70+1_sparc package: libtag1-dev 20、source package:libtss2-dev 2.4.0-1_s390x package: libtss2-dev 21、source package:libtss2-tcti-tabrmd0 3.0.0-1 package: libtss2-tcti-tabrmd0 22、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 23、source package:normalize-package-data 2.5.0 package: normalize-package-data 24、source package:sdparm 1.12-1 package: sdparm 25、source package:shim-signed 1.39~1+deb11u1 package: shim-signed 26、source package:shim-unsigned 15+1533136590.3beb971-9_i386 package: shim-unsigned 27、source package:smartmontools 7.3-1 package: smartmontools 28、source package:tpm2-abrmd 3.0.0-1 package: tpm2-abrmd 29、source package:tt v1.0.1 package: tt 30、source package:uri-js 4.4.0 package: uri-js 31、source package:usb-modeswitch 2.6.1.orig package: usb-modeswitch Open Source Software Licensed under the MPL-2.0: 1、source package:browser-desktop 87.0-729282885 package: browser-desktop 2、source package:dompurify 2.4.1 package: dompurify 3、source package:libjwt-dev 1.9.0-4_mips64el package: libjwt-dev 4、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter Open Source Software Licensed under the MPL-1.1: 1、source package:libcairo2-dev 1.16.0-4_s390x package: libcairo2-dev 2、source package:libchardet 1.0.3 package: libchardet 3、source package:libpam-gnome-keyring 3.4.1-5_sparc package: libpam-gnome-keyring 4、source package:libtag1-dev 1.9.1-2~bpo70+1_sparc package: libtag1-dev Open Source Software Licensed under the AFL-2.1: 1、source package:python3-dbus 1.2.8-3_s390x package: python3-dbus Open Source Software Licensed under the AGPL-1.0-only: 1、source package:spdx-license-ids 3.0.6 package: spdx-license-ids Open Source Software Licensed under the AGPL-3.0-only: 1、source package:nging v3.5.2 package: nging 2、source package:sobjectizer 1.2.3 package: sobjectizer Open Source Software Licensed under the Apache-2.0 or LGPL-3+: 1、source package:liblucene++-dev 3.0.7-8+b2_s390x package: liblucene++-dev Open Source Software Licensed under the Apache-2.0-with-GPL2-LGPL2-Exception: 1、source package:cups 2.4.2-3+deb12u1 package: cups Open Source Software Licensed under the Artistic or GPL-1+: 1、source package:libfile-mimeinfo-perl 0.33-1 package: libfile-mimeinfo-perl 2、source package:perl-openssl-defaults 7 package: perl-openssl-defaults Open Source Software Licensed under the Artistic-2.0: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the BSD: 1、source package:compiler 4.12.0 package: compiler 2、source package:ffmpeg 7:6.0-3 package: ffmpeg 3、source package:glide 4.12.0 package: glide 4、source package:libnet-dev 1.2-rc3 package: libnet-dev 5、source package:libvncserver LibVNCServer-0.9.14 package: libvncserver 6、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 7、source package:node 8.16.1 package: node 8、source package:smartmontools 7.3-1 package: smartmontools 9、source package:zip 3.0-9 package: zip Open Source Software Licensed under the BSD-1-Clause: 1、source package:ffmpeg 7:6.0-3 package: ffmpeg Open Source Software Licensed under the BSD-3-clause: 1、source package:tpm2-tools 5.4-1 package: tpm2-tools Open Source Software Licensed under the BSD-3-clause or GPL-2: 1、source package:libcap-dev 2.36-1_mips64el package: libcap-dev 2、source package:libcap2-bin 2.36-1_s390x package: libcap2-bin Open Source Software Licensed under the BSD-4-Clause: 1、source package:unalz 0.65-9 package: unalz Open Source Software Licensed under the BSD-Source-Code: 1、source package:iputils-ping 20190709-3_s390x package: iputils-ping Open Source Software Licensed under the BSL-1.0: 1、source package:ffmpeg 7:6.0-3 package: ffmpeg Open Source Software Licensed under the Bitstream-Vera: 1、source package:fontconfig 2.9.0.orig package: fontconfig Open Source Software Licensed under the Brian-Gladman-3-Clause: 1、source package:libzip-dev 1.6.1-3_s390x package: libzip-dev 2、source package:libzip4 1.6.1-3_s390x package: libzip4 Open Source Software Licensed under the CC-BY-3.0: 1、source package:spdx-exceptions 2.3.0 package: spdx-exceptions Open Source Software Licensed under the CC-BY-4.0: 1、source package:caniuse-lite 1.0.30000989 package: caniuse-lite Open Source Software Licensed under the CC-BY-SA-4.0: 1、source package:glob 7.1.4 package: glob Open Source Software Licensed under the CC0-1.0: 1、source package:spdx-license-ids 3.0.6 package: spdx-license-ids Open Source Software Licensed under the CDDL-1.0: 1、source package:libraw-dev 0.9.1-1+deb6u1 package: libraw-dev Open Source Software Licensed under the CPL-1.0: 1、source package:graphviz 2.8-3+etch1 package: graphviz 2、source package:junit 4.11 package: junit Open Source Software Licensed under the EPL-1.0: 1、source package:aspectjrt 1.9.6 package: aspectjrt 2、source package:junit 4.13.2 package: junit Open Source Software Licensed under the FTL: 1、source package:freetype VER-2-10-3 package: freetype 2、source package:libfreetype-dev 2.13.0+dfsg-1 package: libfreetype-dev Open Source Software Licensed under the Font-exception-2.0: 1、source package:ttf-unifont 9.0.06-2_all package: ttf-unifont 2、source package:xfonts-wqy 1.0.0~rc1-7 package: xfonts-wqy Open Source Software Licensed under the GFDL-1.2-only: 1、source package:kdevelop v22.11.80 package: kdevelop Open Source Software Licensed under the GPL+ and GPLv2+ and MIT and Redistributable no modification permitted: 1、source package:linux-firmware 20230824 package: linux-firmware Open Source Software Licensed under the GPL-2 or GPL-2+: 1、source package:ipheth-utils 1.0-5_s390x package: ipheth-utils Open Source Software Licensed under the GPL-2 with Font embedding exception and M+ FONTS License: 1、source package:fonts-wqy-zenhei 0.9.45-8 package: fonts-wqy-zenhei Open Source Software Licensed under the GPL-2 with OpenSSL exception: 1、source package:barrier 2.4.0+dfsg-2 package: barrier Open Source Software Licensed under the GPL-2+ and LGPL-2+: 1、source package:xdg-desktop-portal-gtk 1.8.0-1~bpo10+1 package: xdg-desktop-portal-gtk Open Source Software Licensed under the GPL-2+ or AFL-2.1: 1、source package:dbus 1.9.8-1 package: dbus 2、source package:dbus-user-session 1.13.8-1_s390x package: dbus-user-session 3、source package:dbus-x11 1.8.22-0+deb8u1_s390x package: dbus-x11 4、source package:libdbus-1-dev 1.8.22-0+deb8u1_s390x package: libdbus-1-dev Open Source Software Licensed under the GPL-2+ or FTL: 1、source package:libfreetype6-dev 2.9.1-4_s390x package: libfreetype6-dev Open Source Software Licensed under the GPL-2+ or LGPL-2.1 or LGPL-3.0: 1、source package:libquazip5-dev 0.7.6-6_s390x package: libquazip5-dev Open Source Software Licensed under the GPL-2+ with OpenSSL exception: 1、source package:cryptsetup 2:2.6.1-4 package: cryptsetup 2、source package:cryptsetup-initramfs 2.3.1-1_all package: cryptsetup-initramfs 3、source package:libcryptsetup12 2.3.1-1_s390x package: libcryptsetup12 Open Source Software Licensed under the GPL-2+ with SSL exception: 1、source package:remmina 1.4.8+dfsg-2~bpo10+2 package: remmina 2、source package:remmina-plugin-rdp 1.4.7+dfsg-1_s390x package: remmina-plugin-rdp 3、source package:remmina-plugin-vnc 1.4.7+dfsg-1_s390x package: remmina-plugin-vnc Open Source Software Licensed under the GPL-2+ with sane exception: 1、source package:libsane-dev 1.2.1-4 package: libsane-dev Open Source Software Licensed under the GPL-2.0 or GPL-3.0 or FIPL-1.0: 1、source package:libfreeimage-dev 3.18.0+ds2-3_s390x package: libfreeimage-dev Open Source Software Licensed under the GPL-2.0+ or LGPL-2.1+: 1、source package:fcitx5-frontend-gtk3 0.0~git20200606.fc335f1-2_s390x package: fcitx5-frontend-gtk3 Open Source Software Licensed under the GPL-3 with Qt-1.0 exception: 1、source package:qttools5-dev 5.9.2-4_kfreebsd-i386 package: qttools5-dev 2、source package:qttools5-dev-tools 5.9.2-4_kfreebsd-i386 package: qttools5-dev-tools 3、source package:qttranslations5-l10n 5.9.2-1 package: qttranslations5-l10n Open Source Software Licensed under the GPL-3+ or Less: 1、source package:less 590-2 package: less Open Source Software Licensed under the GPL-3+ with OpenSSL exception: 1、source package:libdmr-dev 5.7.6.147-1 package: libdmr-dev Open Source Software Licensed under the GPL-3.0-with-Qt-1.0-exception: 1、source package:libqt5webchannel5-dev 5.7.1-2_s390x package: libqt5webchannel5-dev 2、source package:qml-module-qtwebchannel 5.9.2-3 package: qml-module-qtwebchannel Open Source Software Licensed under the GPL-any: 1、source package:command-not-found 23.04.0-1 package: command-not-found Open Source Software Licensed under the Hylafax: 1、source package:libtiff-dev 4.1.0+git191117-2~deb10u1_s390x package: libtiff-dev Open Source Software Licensed under the ICU: 1、source package:node 8.16.1 package: node 2、source package:x11-xserver-utils 7.7~3_sparc package: x11-xserver-utils 3、source package:xkb-data 2.5.1-3_all package: xkb-data 4、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 5、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the ISC: 1、source package:abbrev 1.1.1 package: abbrev 2、source package:anymatch 3.1.2 package: anymatch 3、source package:aproba 1.2.0 package: aproba 4、source package:are-we-there-yet 1.1.5 package: are-we-there-yet 5、source package:boolbase 1.0.0 package: boolbase 6、source package:browserify-sign 4.2.1 package: browserify-sign 7、source package:cliui 4.1.0 package: cliui 8、source package:color-support 1.1.3 package: color-support 9、source package:concat-with-sourcemaps 1.1.0 package: concat-with-sourcemaps 10、source package:console-control-strings 1.1.0 package: console-control-strings 11、source package:crda 4.14+git20191112.9856751.orig package: crda 12、source package:d 1.0.1 package: d 13、source package:distro-info-data 0.9~bpo60+1 package: distro-info-data 14、source package:electron-to-chromium 1.3.254 package: electron-to-chromium 15、source package:es5-ext 0.10.53 package: es5-ext 16、source package:es6-symbol 3.1.3 package: es6-symbol 17、source package:es6-weak-map 2.0.3 package: es6-weak-map 18、source package:ext 1.4.0 package: ext 19、source package:fastq 1.13.0 package: fastq 20、source package:ffmpeg 7:6.0-3 package: ffmpeg 21、source package:fs 0.0.1-security package: fs 22、source package:fs.realpath 1.0.0 package: fs.realpath 23、source package:fstream 1.0.12 package: fstream 24、source package:gauge 2.7.4 package: gauge 25、source package:get-caller-file 1.0.3 package: get-caller-file 26、source package:glob 7.1.4 package: glob 27、source package:glob-parent 5.1.2 package: glob-parent 28、source package:go-spew v1.1.1 package: go-spew 29、source package:go-wav v0.3.2 package: go-wav 30、source package:golang-github-nfnt-resize-dev 0.0~git20180221.83c6a99-2_all package: golang-github-nfnt-resize-dev 31、source package:graceful-fs 4.2.4 package: graceful-fs 32、source package:har-schema 2.0.0 package: har-schema 33、source package:has-unicode 2.0.1 package: has-unicode 34、source package:hosted-git-info 2.8.8 package: hosted-git-info 35、source package:in-publish 2.0.0 package: in-publish 36、source package:inflight 1.0.6 package: inflight 37、source package:inherits 2.0.4 package: inherits 38、source package:ini 1.3.5 package: ini 39、source package:isexe 2.0.0 package: isexe 40、source package:json-stringify-safe 5.0.1 package: json-stringify-safe 41、source package:lru-cache 4.1.5 package: lru-cache 42、source package:minimalistic-assert 1.0.1 package: minimalistic-assert 43、source package:minimatch 5.1.6 package: minimatch 44、source package:natives 1.1.6 package: natives 45、source package:node 8.16.1 package: node 46、source package:node-bin-setup 1.0.6 package: node-bin-setup 47、source package:nopt 3.0.6 package: nopt 48、source package:npmlog 4.1.2 package: npmlog 49、source package:once 1.4.0 package: once 50、source package:osenv 0.1.5 package: osenv 51、source package:parse-asn1 5.1.6 package: parse-asn1 52、source package:pkgconf 1.8.1-2 package: pkgconf 53、source package:pseudomap 1.0.2 package: pseudomap 54、source package:python3-dnspython 2.4.0~rc1-1 package: python3-dnspython 55、source package:remove-trailing-separator 1.1.0 package: remove-trailing-separator 56、source package:require-main-filename 1.0.1 package: require-main-filename 57、source package:rimraf 2.7.1 package: rimraf 58、source package:rollup 2.79.1 package: rollup 59、source package:semver 5.7.1 package: semver 60、source package:set-blocking 2.0.0 package: set-blocking 61、source package:sigmund 1.0.1 package: sigmund 62、source package:signal-exit 3.0.3 package: signal-exit 63、source package:tar 2.2.2 package: tar 64、source package:type 2.1.0 package: type 65、source package:vinyl-sourcemaps-apply 0.2.1 package: vinyl-sourcemaps-apply 66、source package:which 1.3.1 package: which 67、source package:which-module 2.0.0 package: which-module 68、source package:wide-align 1.1.3 package: wide-align 69、source package:wrappy 1.0.2 package: wrappy 70、source package:y18n 3.2.1 package: y18n 71、source package:yallist 2.1.2 package: yallist 72、source package:yargs-parser 8.1.0 package: yargs-parser Open Source Software Licensed under the ImageMagick: 1、source package:DocxFactory 91131f28 package: DocxFactory Open Source Software Licensed under the Info-ZIP: 1、source package:unzip 6.0.orig package: unzip Open Source Software Licensed under the LGPL: 1、source package:ffmpeg 7:6.0-3 package: ffmpeg 2、source package:libatspi2.0-dev 2.5.3-2_sparc package: libatspi2.0-dev 3、source package:liblightdm-qt-dev 1.26.0-5_s390x package: liblightdm-qt-dev 4、source package:lightdm 1.9.9-1 package: lightdm 5、source package:slirp4netns 1.2.0-1 package: slirp4netns 6、source package:smartmontools 7.3-1 package: smartmontools Open Source Software Licensed under the LGPL-2+ and LGPL-2.1+: 1、source package:ostree 2023.3-2 package: ostree Open Source Software Licensed under the LGPL-2+ and LGPL-2.1+ and FSFULLR and CC0-1.0 and Janik-permissive and Iconv-PD and Mingw-PD and Old-GLib-Tests-permissive: 1、source package:libglib2.0-bin 2.76.4-1 package: libglib2.0-bin Open Source Software Licensed under the LGPL-2.0+ and Expat: 1、source package:policykit-1 122-4 package: policykit-1 Open Source Software Licensed under the LGPL-2.0-or-later: 1、source package:bubblewrap 0~git160513-2 package: bubblewrap 2、source package:gvfs-backends 1.44.1-1_s390x package: gvfs-backends 3、source package:gvfs-bin 1.44.1-1_s390x package: gvfs-bin 4、source package:gvfs-fuse 1.44.1-1_s390x package: gvfs-fuse 5、source package:kcalcore 5:5.85.0-2 package: kcalcore 6、source package:kdeclarative 5.100.0-1 package: kdeclarative 7、source package:libasound2-dev 1.2.2-2.3_ppc64el package: libasound2-dev 8、source package:libgdk-pixbuf2.0-0 2.40.2-3 package: libgdk-pixbuf2.0-0 9、source package:libgdk-pixbuf2.0-dev 2.40.0+dfsg-5_s390x package: libgdk-pixbuf2.0-dev 10、source package:libkf5itemviews-dev 5.70.0-1_s390x package: libkf5itemviews-dev 11、source package:libkf5widgetsaddons-dev 5.70.0-1_s390x package: libkf5widgetsaddons-dev 12、source package:libmtp-runtime 1.1.9-3~bpo8+1 package: libmtp-runtime 13、source package:libpolkit-agent-1-dev 0.116-2_s390x package: libpolkit-agent-1-dev 14、source package:libpolkit-qt5-1-dev 0.112.0-7_s390x package: libpolkit-qt5-1-dev 15、source package:librsvg2-bin 2.48.7-1_ppc64el package: librsvg2-bin 16、source package:platform/external/e2fsprogs lollipop-dev package: platform/external/e2fsprogs 17、source package:xdg-desktop-portal 1.8.1-1~bpo10+1 package: xdg-desktop-portal Open Source Software Licensed under the LGPL-2.1 or MPL-2.0: 1、source package:libical-dev 3.0.8-2_mipsel package: libical-dev Open Source Software Licensed under the LGPL-3 or GPL-2-or-3 with KDE Exception: 1、source package:qml6-module-qtwebchannel 6.4.2~rc1-3 package: qml6-module-qtwebchannel Open Source Software Licensed under the LGPL-3Qt-1.1Exception or GPL-2Qt-1.1Exception: 1、source package:qml-module-qtwebengine 5.7.1+dfsg-6.1_mipsel package: qml-module-qtwebengine 2、source package:qtwebengine5-dev 5.7.1+dfsg-6.1_mipsel package: qtwebengine5-dev Open Source Software Licensed under the LGPLv2 with exceptions or GPLv3 with exceptions and GFDL: 1、source package:libqt6svg6 6.4.1 package: libqt6svg6 Open Source Software Licensed under the Libpng: 1、source package:libpng-dev 1.6.37-2_s390x package: libpng-dev 2、source package:libsdl2-dev 2.0.9+dfsg1-1_s390x package: libsdl2-dev Open Source Software Licensed under the Linux-syscall-note: 1、source package:pinn 0.0 package: pinn Open Source Software Licensed under the MITNFA: 1、source package:through2 0.6.5 package: through2 Open Source Software Licensed under the MPL-1.1 or GPL-2+ or LGPL-2.1+: 1、source package:libchardet-dev 1.0.4-1_s390x package: libchardet-dev 2、source package:libchardet1 1.0.4-1_s390x package: libchardet1 3、source package:libuchardet-dev 0.0.7-1_s390x package: libuchardet-dev 4、source package:libuchardet0 0.0.7-1_s390x package: libuchardet0 Open Source Software Licensed under the NAIST-2003: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the Net-SNMP: 1、source package:sudo 1.9.8p2-1~exp1 package: sudo Open Source Software Licensed under the OFL-1.1: 1、source package:fonts-intel-one-mono 1.2.1-2 package: fonts-intel-one-mono 2、source package:fonts-lohit-deva 2.95.4.orig package: fonts-lohit-deva 3、source package:fonts-noto 20201225-1 package: fonts-noto 4、source package:fonts-noto-mono 20200323-1_all package: fonts-noto-mono Open Source Software Licensed under the OpenSSL: 1、source package:libssl1.1 1.1.1~~pre9-1 package: libssl1.1 2、source package:node 8.16.1 package: node Open Source Software Licensed under the PD: 1、source package:xz-utils 5.4.1-0.2 package: xz-utils Open Source Software Licensed under the Public Domain: 1、source package:debianutils 5.8-1 package: debianutils 2、source package:ffmpeg 7:6.0-3 package: ffmpeg 3、source package:grub-efi-amd64-signed 1+2.06+8.1 package: grub-efi-amd64-signed 4、source package:grub-efi-arm64-signed 1+2.06+8.1 package: grub-efi-arm64-signed 5、source package:jsonify 0.0.0 package: jsonify 6、source package:libatspi2.0-dev 2.5.3-2_sparc package: libatspi2.0-dev 7、source package:libsqlite3-0 3.8.7.1-1_kfreebsd-i386 package: libsqlite3-0 8、source package:libsqlite3-dev 3.8.7.1-1_kfreebsd-i386 package: libsqlite3-dev 9、source package:sqlite3 3.9.2-1 package: sqlite3 10、source package:tzdata 2023c-7 package: tzdata Open Source Software Licensed under the Python-2.0: 1、source package:python3 3.8.2-3_s390x package: python3 Open Source Software Licensed under the Qt-GPL-exception-1.0: 1、source package:qtremoteobjects v5.11.0-rc2 package: qtremoteobjects Open Source Software Licensed under the Rdisc: 1、source package:iputils-ping 20190709-3_s390x package: iputils-ping Open Source Software Licensed under the SGI-B-1.1: 1、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 2、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the SGI-B-2.0: 1、source package:libegl1-mesa-dev 8.0.5-4+deb7u2_sparc package: libegl1-mesa-dev 2、source package:libgbm-dev 8.0.5-4+deb7u2_sparc package: libgbm-dev 3、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 4、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the SIL-1.1: 1、source package:fonts-noto-cjk 20190410+repack1-2.debian package: fonts-noto-cjk Open Source Software Licensed under the SSLeay: 1、source package:libssl1.1 1.1.1~~pre9-1 package: libssl1.1 Open Source Software Licensed under the Sleepycat: 1、source package:go-difflib v1.0.0 package: go-difflib Open Source Software Licensed under the The Bugly Software License Version 1.0: 1、source package:crashreport 3.4.4 package: crashreport 2、source package:nativecrashreport 3.9.2 package: nativecrashreport Open Source Software Licensed under the Unicode-DFS-2015: 1、source package:DocxFactory 91131f28 package: DocxFactory Open Source Software Licensed under the Unicode-DFS-2016: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the Unicode-TOU: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the Unlicense: 1、source package:ncompress 4.2.4.6.orig package: ncompress 2、source package:tortellini 4f6795a package: tortellini 3、source package:tweetnacl 0.14.5 package: tweetnacl Open Source Software Licensed under the Vim: 1、source package:vim 8.2.0716.orig package: vim Open Source Software Licensed under the X11: 1、source package:libwayland-dev 1.6.0-2_s390x package: libwayland-dev 2、source package:libxcb-image0-dev 0.4.0-1_s390x package: libxcb-image0-dev 3、source package:libxcb-keysyms1-dev 0.4.0-1_s390x package: libxcb-keysyms1-dev 4、source package:libyaml-cpp-dev 0.6.3-9_s390x package: libyaml-cpp-dev 5、source package:ncurses-base 6.2-1_all package: ncurses-base 6、source package:wordwrap 0.0.2 package: wordwrap Open Source Software Licensed under the Xnet: 1、source package:onboard 1.4.1-5_s390x package: onboard Open Source Software Licensed under the Zlib: 1、source package:avfs 1.1.4-2 package: avfs 2、source package:ffmpeg 7:6.0-3 package: ffmpeg 3、source package:libminizip-dev 1.1-8_hurd-i386 package: libminizip-dev 4、source package:libsdl2-dev 2.0.9+dfsg1-1_s390x package: libsdl2-dev 5、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 6、source package:node 8.16.1 package: node 7、source package:pako 1.0.11 package: pako 8、source package:pigz 2.6-1 package: pigz 9、source package:unalz 0.65-9 package: unalz 10、source package:zlib1g 1.2.8.dfsg-5_s390x package: zlib1g 11、source package:zlib1g-dev 1:1.2.3.3.dfsg-1 package: zlib1g-dev Open Source Software Licensed under the copyleft-next-0.3.0: 1、source package:crda 4.14+git20191112.9856751.orig package: crda Open Source Software Licensed under the cryptsetup-OpenSSL-exception: 1、source package:aria2 1.9.5-1 package: aria2 2、source package:libcryptsetup-dev 2:2.4.0-1 package: libcryptsetup-dev Open Source Software Licensed under the curl: 1、source package:curl 8.0.1-1~exp1 package: curl 2、source package:libcurl4-openssl-dev 7.68.0-1_s390x package: libcurl4-openssl-dev Open Source Software Licensed under the hdparm: 1、source package:hdparm 9.65+ds-1 package: hdparm Open Source Software Licensed under the nolicense: 1、source package:FreeBSD-Electron v9.0.3 package: FreeBSD-Electron 2、source package:LTSLAM 94d7e0f package: LTSLAM 3、source package:TSFileEditor 0.2.1 package: TSFileEditor 4、source package:asio asio-1-29-0 package: asio 5、source package:chromium-source-tarball 59.0.3071.57 package: chromium-source-tarball 6、source package:geek-navigation 5a521f2 package: geek-navigation 7、source package:gentoo 202 package: gentoo 8、source package:go-urn v1.1.0 package: go-urn 9、source package:imaging v1.6.2 package: imaging 10、source package:kcrash 5.103.0-1 package: kcrash 11、source package:ncnn_paddleocr 9c054d3 package: ncnn_paddleocr 12、source package:plasma-workspace v5.25.90 package: plasma-workspace 13、source package:platform/external/qt emu-29.0-release package: platform/external/qt 14、source package:qtbase v6.5.1 package: qtbase 15、source package:qtxlsxwriter v0.3.0 package: qtxlsxwriter 16、source package:scriptcommunicator_serial-terminal Release_06_02 package: scriptcommunicator_serial-terminal 17、source package:socket v0.4.1 package: socket 18、source package:strace v4.14 package: strace 19、source package:v5 v5.1.0 package: v5 20、source package:wlr-protocols d278d20 package: wlr-protocols Copy of Licenses 【GPL-2.0】 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. 【GPL-3.0】 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. https://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see https://www.gnu.org/licenses/. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read https://www.gnu.org/licenses/why-not-lgpl.html. 【LGPL-2.1】 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. one line to give the library's name and an idea of what it does. Copyright (C) year name of author This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. signature of Ty Coon, 1 April 1990 Ty Coon, President of Vice That's all there is to it! 【LGPL-3.0】 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. https://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. 【BSD-2-clause】 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 【BSD-3-clause】 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Apple Inc. ("Apple") nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 【The Qt Company GPL Exception 1.0】 Exception 1: As a special exception you may create a larger work which contains the output of this application and distribute that work under terms of your choice, so long as the work is not otherwise derived from or based on this application and so long as the work does not in itself generate output that contains the output from this application in its original or modified form. Exception 2: As a special exception, you have permission to combine this application with Plugins licensed under the terms of your choice, to produce an executable, and to copy and distribute the resulting executable under the terms of your choice. However, the executable must be accompanied by a prominent notice offering all users of the executable the entire source code to this application, excluding the source code of the independent modules, but including any changes you have made to this application, under the terms of this license. 【The Qt Company LGPL Exception version 1.1】 As an additional permission to the GNU Lesser General Public License version 2.1, the object code form of a "work that uses the Library" may incorporate material from a header file that is part of the Library. You may distribute such object code under terms of your choice, provided that: (i) the header files of the Library have not been modified; and (ii) the incorporated material is limited to numerical parameters, data structure layouts, accessors, macros, inline functions and templates; and (iii) you comply with the terms of Section 6 of the GNU Lesser General Public License version 2.1. Moreover, you may apply this exception to a modified version of the Library, provided that such modification does not involve copying material from the Library into the modified Library's header files unless such material is limited to (i) numerical parameters; (ii) data structure layouts; (iii) accessors; and (iv) small macros, templates and inline functions of five lines or less in length. Furthermore, you are not required to apply this additional permission to a modified version of the Library. ================================================ FILE: src/plugin-systeminfo/operation/qrc/gpl/gpl-3.0-zh_CN-title.txt ================================================ Open Source Software Notice ================================================ FILE: src/plugin-systeminfo/operation/qrc/gpl/gpl-3.0-zh_TW-body.txt ================================================ The notice provides license information of respective open source software contained in this operating system. Open Source Software Licensed under the GPL-3.0-or-later: 1、source package:accountsservice 23.13.9-2 package: accountsservice 2、source package:cifs-utils 6.9.orig package: cifs-utils 3、source package:coreutils 9.1-1 package: coreutils 4、source package:dosfstools 4.2-1 package: dosfstools 5、source package:ffmpeg 7:6.0-3 package: ffmpeg 6、source package:fonts-wqy-microhei 0.2.0-beta-3.1 package: fonts-wqy-microhei 7、source package:gawk 5.0.1+dfsg.orig package: gawk 8、source package:gettext 0.21.1 package: gettext 9、source package:gettext-base 0.19.8.1-9_s390x package: gettext-base 10、source package:gnupg 2.2.19-3_all package: gnupg 11、source package:golang-gir-gobject-2.0-dev 2.2.0-1 package: golang-gir-gobject-2.0-dev 12、source package:gpgv 2.2.20-1~bpo9+1_s390x package: gpgv 13、source package:grub-common 2.06-9 package: grub-common 14、source package:grub2-common 2.04~rc1-3_ppc64el package: grub2-common 15、source package:grub2-theme-vimix c7ab3ce package: grub2-theme-vimix 16、source package:guvcview 2.0.2 package: guvcview 17、source package:hello 2.9-2_kfreebsd-i386 package: hello 18、source package:libparted-dev 3.3-4_s390x package: libparted-dev 19、source package:libparted-fs-resize0 3.3-4_s390x package: libparted-fs-resize0 20、source package:live-boot 5.0~a5-2 package: live-boot 21、source package:live-boot-initramfs-tools 4.0.2-1_all package: live-boot-initramfs-tools 22、source package:live-config 5.20190519_all package: live-config 23、source package:live-config-systemd 5.20190519_all package: live-config-systemd 24、source package:onboard 1.4.1-5_s390x package: onboard 25、source package:parted 3.6-3 package: parted 26、source package:patchelf 0.9.orig package: patchelf 27、source package:pkg-kde-tools 0.9.5 package: pkg-kde-tools 28、source package:python3-samba 4.12.5+dfsg-3_s390x package: python3-samba 29、source package:qtchooser 66.orig package: qtchooser 30、source package:qtremoteobjects v5.11.0-rc2 package: qtremoteobjects 31、source package:redshift 1.9.1-4_s390x package: redshift 32、source package:rsync 3.2.7-1~bpo11+1 package: rsync 33、source package:rsyslog 8.9.0-3 package: rsyslog 34、source package:samba 4.9.5+dfsg-5_mips64el package: samba 35、source package:samba-common-bin 4.9.5+dfsg-5_s390x package: samba-common-bin 36、source package:samba-dsdb-modules 4.9.5+dfsg-5_s390x package: samba-dsdb-modules 37、source package:samba-vfs-modules 4.9.5+dfsg-5_s390x package: samba-vfs-modules 38、source package:sed 4.9-1 package: sed 39、source package:smbclient 4.9.5+dfsg-5_s390x package: smbclient 40、source package:startdde 6.0.6 package: startdde 41、source package:viper v1.3.2 package: viper Open Source Software Licensed under the GPL-3.0-only: 1、source package:blur-effect 1.1.3-2 package: blur-effect 2、source package:distrobox 1.4.2.1-1 package: distrobox 3、source package:libcap-ng-dev 0.7.9-2_s390x package: libcap-ng-dev 4、source package:liblightdm-qt-dev 1.26.0-5_s390x package: liblightdm-qt-dev 5、source package:libpoppler-glib-dev 22.12.0-2 package: libpoppler-glib-dev 6、source package:lightdm 1.9.9-1 package: lightdm 7、source package:lightdm-gtk-greeter 2.0.8-3 package: lightdm-gtk-greeter 8、source package:mtools 4.0.9-1 package: mtools 9、source package:python-is-python3 8 package: python-is-python3 10、source package:tpm2-tools 5.4-1 package: tpm2-tools Open Source Software Licensed under the GPL-2.0-or-later: 1、source package:ColumnsPlusPlus v0.0.1.2-alpha package: ColumnsPlusPlus 2、source package:Grub-Themes a7ec0fd package: Grub-Themes 3、source package:acl 2.3.1-3 package: acl 4、source package:adduser 3.99 package: adduser 5、source package:apt 2.7.1 package: apt 6、source package:apt-utils 2.1.7_mips64el package: apt-utils 7、source package:aptitude 0.8.9-1 package: aptitude 8、source package:aria2 1.9.5-1 package: aria2 9、source package:arj 3.10.22.orig package: arj 10、source package:attr 2.4.48-5_s390x package: attr 11、source package:bash-completion 20080705 package: bash-completion 12、source package:bc 1.07.1-3 package: bc 13、source package:bluez 5.66-1 package: bluez 14、source package:bluez-obexd 5.52-1_s390x package: bluez-obexd 15、source package:ca-certificates 20230311 package: ca-certificates 16、source package:cornrow v0.8.0 package: cornrow 17、source package:cups-filters 1.9.0-2 package: cups-filters 18、source package:cyberduck release-4-9-1 package: cyberduck 19、source package:debhelper 9.20160814 package: debhelper 20、source package:dh-dkms 3.0.9-1 package: dh-dkms 21、source package:dh-golang 1.9 package: dh-golang 22、source package:dkms 3.0.8-3 package: dkms 23、source package:dmidecode 3.5-1 package: dmidecode 24、source package:dnsmasq-base 2.89-1 package: dnsmasq-base 25、source package:dpkg 1.9.21 package: dpkg 26、source package:dpkg-dev 1.9.21 package: dpkg-dev 27、source package:efibootmgr 17-2 package: efibootmgr 28、source package:eject 2.35.2-7_ppc64el package: eject 29、source package:ethtool 6-0 package: ethtool 30、source package:exfat-fuse 1.3.0-2_armel package: exfat-fuse 31、source package:exfatprogs 1.2.1-2 package: exfatprogs 32、source package:ffmpeg 7:6.0-3 package: ffmpeg 33、source package:foomatic-db-compressed-ppds 20230107-1 package: foomatic-db-compressed-ppds 34、source package:fprintd 1.94.2-2 package: fprintd 35、source package:geoclue-2.0 2.7.0-2 package: geoclue-2.0 36、source package:gnome-keyring 42.1-1 package: gnome-keyring 37、source package:hwdata 0.372-1 package: hwdata 38、source package:im-config 0.9 package: im-config 39、source package:imwheel 1.0.0pre12.orig package: imwheel 40、source package:input-leap v2.4.0 package: input-leap 41、source package:ipwatchd 1.3.0 package: ipwatchd 42、source package:jfsutils 1.1.8-1 package: jfsutils 43、source package:kbd 2.5.1-1 package: kbd 44、source package:kscreenlocker-dev 5.8.6-2_s390x package: kscreenlocker-dev 45、source package:lcov 1.9.orig package: lcov 46、source package:libappstreamqt-dev 0.9.8-4_kfreebsd-i386 package: libappstreamqt-dev 47、source package:libblkid-dev 2.35.2-7_mipsel package: libblkid-dev 48、source package:libcryptsetup-dev 2:2.4.0-1 package: libcryptsetup-dev 49、source package:libddcutil-dev 0.9.8-4_s390x package: libddcutil-dev 50、source package:libdpkg-dev 1.20.5_ppc64el package: libdpkg-dev 51、source package:libdvdnav-dev 6.1.0-1_s390x package: libdvdnav-dev 52、source package:libffmpegthumbnailer-dev 2.1.1-0.2_kfreebsd-amd64 package: libffmpegthumbnailer-dev 53、source package:libffmpegthumbnailer4v5 2.1.1-0.2_kfreebsd-amd64 package: libffmpegthumbnailer4v5 54、source package:libltdl-dev 2.4.7-6 package: libltdl-dev 55、source package:libmount-dev 2.35.2-7_s390x package: libmount-dev 56、source package:libmpv-dev 0.9.2-1+ffmpeg package: libmpv-dev 57、source package:libmpv1 0.6.2-2_s390x package: libmpv1 58、source package:libmpv2 0.36.0+git.20230723.60a26324 package: libmpv2 59、source package:libnm-dev 1.6.2-3+deb9u2_s390x package: libnm-dev 60、source package:libpam-fprintd 1.90.1-1_s390x package: libpam-fprintd 61、source package:libvlc-dev 3.0.9.2-1 package: libvlc-dev 62、source package:libvlc5 3.0.8-4_s390x package: libvlc5 63、source package:libvlccore-dev 3.0.8-4_s390x package: libvlccore-dev 64、source package:libvncserver LibVNCServer-0.9.14 package: libvncserver 65、source package:lzop 1.04-2 package: lzop 66、source package:man-db 2.9.4-4 package: man-db 67、source package:net-tools 2.10-0.1 package: net-tools 68、source package:network-manager 1.9.90-1 package: network-manager 69、source package:nilfs-tools 2.2.9-1 package: nilfs-tools 70、source package:ntfs-3g 2017.3.23AR.5.orig package: ntfs-3g 71、source package:packagekit 1.2.6-5 package: packagekit 72、source package:pandoc 2.9.2.1-3 package: pandoc 73、source package:pciutils 3.7.0.orig package: pciutils 74、source package:pinn 0.0 package: pinn 75、source package:pkg-config 0.29.2.orig package: pkg-config 76、source package:pkg-kde-tools 0.9.5 package: pkg-kde-tools 77、source package:plymouth 22.02.122-3 package: plymouth 78、source package:plymouth-label 0.9.4-3_s390x package: plymouth-label 79、source package:pppoe 3.8-3_sparc package: pppoe 80、source package:procps 3.3.9.orig package: procps 81、source package:python3-dbus 1.2.8-3_s390x package: python3-dbus 82、source package:python3-smbc 1.0.23-2 package: python3-smbc 83、source package:rfkill 2.35.2-7_s390x package: rfkill 84、source package:rzip 2.1.orig package: rzip 85、source package:sectpmctl 1.1.3 package: sectpmctl 86、source package:sensible-utils 0.0.9+nmu1 package: sensible-utils 87、source package:socat 2.0.0~beta9-1_ppc64el package: socat 88、source package:squashfs-tools 4.4-2_s390x package: squashfs-tools 89、source package:syslinux 6.04~git20190206.bf6db5b4+dfsg1.orig package: syslinux 90、source package:syslinux-common 6.04~git20190206.bf6db5b4+dfsg1-2_all package: syslinux-common 91、source package:udisks2 2.9.4-4 package: udisks2 92、source package:unace 1.2b-9 package: unace 93、source package:upower 1.90.2-3 package: upower 94、source package:usb-modeswitch 2.6.1.orig package: usb-modeswitch 95、source package:usbmuxd 1.1.1~git20191130.9af2b12-1_s390x package: usbmuxd 96、source package:usbutils 1:015-1 package: usbutils 97、source package:user-setup 1.95 package: user-setup 98、source package:uuid-dev 2.35.2-7_ppc64el package: uuid-dev 99、source package:vlc-plugin-base 3.0.8-4_s390x package: vlc-plugin-base 100、source package:xdg-user-dirs 0.9-1 package: xdg-user-dirs 101、source package:xserver-xorg-input-wacom 1.2.0-1~exp1 package: xserver-xorg-input-wacom 102、source package:zssh 1.5c.debian.1-8 package: zssh Open Source Software Licensed under the GPL-2.0-only: 1、source package:GitQlient v1.4.3 package: GitQlient 2、source package:alsa-utils 1.2.9-1 package: alsa-utils 3、source package:btrfs-progs 6.3.2-1 package: btrfs-progs 4、source package:checkstyle checkstyle-10.3.4 package: checkstyle 5、source package:dmsetup 1.02.90-2.2+deb8u1_s390x package: dmsetup 6、source package:doxygen 1.9.4-4 package: doxygen 7、source package:e2fsprogs 1.47.0-2 package: e2fsprogs 8、source package:gcc 9.2.1-4.1_mips64el package: gcc 9、source package:genisoimage 9:1.1.11-3.4 package: genisoimage 10、source package:git 4.3.20-9 package: git 11、source package:grub-efi-amd64-signed 1+2.06+8.1 package: grub-efi-amd64-signed 12、source package:grub-efi-arm64-signed 1+2.06+8.1 package: grub-efi-arm64-signed 13、source package:gtk2-engines 2.20.2.orig package: gtk2-engines 14、source package:gtk2-engines-murrine 0.98.2.orig package: gtk2-engines-murrine 15、source package:iio-sensor-proxy 3.4-2 package: iio-sensor-proxy 16、source package:initramfs-tools-core 0.137_all package: initramfs-tools-core 17、source package:kwin v5.27.2 package: kwin 18、source package:libcap-ng-dev 0.7.9-2_s390x package: libcap-ng-dev 19、source package:libdjvulibre-dev 3.5.28-2 package: libdjvulibre-dev 20、source package:libglib2.0-dev 2.64.4-1_s390x package: libglib2.0-dev 21、source package:liblightdm-qt-dev 1.26.0-5_s390x package: liblightdm-qt-dev 22、source package:libnm-qt 0.9.8.2.orig package: libnm-qt 23、source package:libpoppler-glib-dev 22.12.0-2 package: libpoppler-glib-dev 24、source package:libraw-dev 0.9.1-1+deb6u1 package: libraw-dev 25、source package:lightdm 1.9.9-1 package: lightdm 26、source package:lsb-base 9.20161125_all package: lsb-base 27、source package:lshw 02.19.git.2021.06.19.996aaad9c7-2~bpo11+1 package: lshw 28、source package:lvm2 2.03.16-1.1 package: lvm2 29、source package:mawk 1.3.4.20230525-1~exp1 package: mawk 30、source package:modemmanager 1.8.2.orig package: modemmanager 31、source package:networkmanager-qt 5.54.0.orig package: networkmanager-qt 32、source package:openprinting-ppds 20200427-1_all package: openprinting-ppds 33、source package:proxychains4 4.14-3_s390x package: proxychains4 34、source package:qt-creator tqtc/v2.6.0-rc package: qt-creator 35、source package:qtciphersqliteplugin 0.6 package: qtciphersqliteplugin 36、source package:qtermwidget 0.7.1.orig package: qtermwidget 37、source package:reiserfsprogs 3.x.1b-1 package: reiserfsprogs 38、source package:sane-airscan 0.99.8-2 package: sane-airscan 39、source package:slirp4netns 1.2.0-1 package: slirp4netns 40、source package:smartmontools 7.3-1 package: smartmontools 41、source package:synergy-stable-builds 1.8.2-stable package: synergy-stable-builds 42、source package:systemd 8-2 package: systemd 43、source package:ttf-unifont 9.0.06-2_all package: ttf-unifont 44、source package:wireless-tools 30~pre9.orig package: wireless-tools 45、source package:xfonts-wqy 1.0.0~rc1-7 package: xfonts-wqy 46、source package:xfsprogs 6.3.0-1 package: xfsprogs Open Source Software Licensed under the LGPL-3.0-or-later: 1、source package:kdecoration 4:5.26.90-2 package: kdecoration 2、source package:libheif-dev 1.6.1-1_s390x package: libheif-dev 3、source package:libzmq3-dev 4.3.2-2_s390x package: libzmq3-dev 4、source package:python3-ldb 2.1.4-2_s390x package: python3-ldb 5、source package:python3-tdb 1.4.3-1_s390x package: python3-tdb 6、source package:tdb-tools 1.4.3-1_s390x package: tdb-tools Open Source Software Licensed under the LGPL-3.0-only: 1、source package:QtZeroConf pre_Android_api30 package: QtZeroConf 2、source package:cryfs 0.9.9-2 package: cryfs 3、source package:libgsettings-qt-dev 0.2-1_s390x package: libgsettings-qt-dev 4、source package:qt5integration 5.6.3 package: qt5integration 5、source package:qtwebengine-opensource-src 5.14.2+dfsg1.orig package: qtwebengine-opensource-src Open Source Software Licensed under the LGPL-2.1-or-later: 1、source package:fcitx5 5.0.9-2 package: fcitx5 2、source package:fcitx5-chinese-addons 5.0.9-2 package: fcitx5-chinese-addons 3、source package:fcitx5-frontend-gtk2 5.0.9-1 package: fcitx5-frontend-gtk2 4、source package:fcitx5-frontend-qt5 0.0~git20200615.b6f2ef3-1_s390x package: fcitx5-frontend-qt5 5、source package:fcitx5-module-xorg 0~20191021+ds1-1_s390x package: fcitx5-module-xorg 6、source package:fcitx5-modules 0~20191021+ds1-1_s390x package: fcitx5-modules 7、source package:fcitx5-modules-dev 5.0.23-2~exp1 package: fcitx5-modules-dev 8、source package:ffmpeg 7:6.0-3 package: ffmpeg 9、source package:gcr 3.8.2-4 package: gcr 10、source package:iso-codes 4.9.0-1 package: iso-codes 11、source package:kcm-fcitx5 5.0.13-1 package: kcm-fcitx5 12、source package:libappstreamqt-dev 0.9.8-4_kfreebsd-i386 package: libappstreamqt-dev 13、source package:libavcodec-dev 4.3-3+b1_s390x package: libavcodec-dev 14、source package:libavcodec58 4.3-3+b1_ppc64el package: libavcodec58 15、source package:libavdevice-dev 4.3-3+b1_ppc64el package: libavdevice-dev 16、source package:libavfilter-dev 4.3-3+b1_mips64el package: libavfilter-dev 17、source package:libavformat-dev 4.3-3+b1_ppc64el package: libavformat-dev 18、source package:libavformat58 4.3-3+b1_i386 package: libavformat58 19、source package:libavutil-dev 4.3-3+b1_s390x package: libavutil-dev 20、source package:libavutil56 4.3-3+b1_s390x package: libavutil56 21、source package:libblockdev-crypto2 2.24-2_mipsel package: libblockdev-crypto2 22、source package:libdbusextended-qt5-dev 0.0.3-4_s390x package: libdbusextended-qt5-dev 23、source package:libfcitx5-qt-dev 0.0~git20200615.b6f2ef3-1_ppc64el package: libfcitx5-qt-dev 24、source package:libfcitx5core-dev 0~20191021+ds1-1_s390x package: libfcitx5core-dev 25、source package:libfcitx5utils-dev 0~20191021+ds1-1_s390x package: libfcitx5utils-dev 26、source package:libgxps-dev 0.3.1-1_s390x package: libgxps-dev 27、source package:libime-bin 0.0~git20200626.2c85668-1_s390x package: libime-bin 28、source package:libimobiledevice-utils 1.3.0-3_s390x package: libimobiledevice-utils 29、source package:libnss-myhostname 245.6-2_s390x package: libnss-myhostname 30、source package:libprocps-dev 3.3.16-5_s390x package: libprocps-dev 31、source package:libpulse-dev 7.1-2~bpo8+1_s390x package: libpulse-dev 32、source package:libpulse-mainloop-glib0 9.0-5 package: libpulse-mainloop-glib0 33、source package:libpulse0 7.1-2~bpo8+1_s390x package: libpulse0 34、source package:libqrencode-dev 4.0.2-2_s390x package: libqrencode-dev 35、source package:libqrencode4 4.1.1-1 package: libqrencode4 36、source package:libsecret-1-dev 0.20.5-3 package: libsecret-1-dev 37、source package:libswresample-dev 4.3-3+b1_ppc64el package: libswresample-dev 38、source package:libswscale-dev 4.3-3+b1_s390x package: libswscale-dev 39、source package:libsystemd-dev 245.6-2_i386 package: libsystemd-dev 40、source package:libsystemd0 245.6-2_s390x package: libsystemd0 41、source package:libudev-dev 245.6-2_s390x package: libudev-dev 42、source package:packagekit 1.2.6-5 package: packagekit 43、source package:pulseaudio 9.99.1-1 package: pulseaudio 44、source package:pulseaudio-module-bluetooth 7.1-2~bpo8+1_s390x package: pulseaudio-module-bluetooth 45、source package:pulseaudio-utils 7.1-2~bpo8+1_s390x package: pulseaudio-utils 46、source package:python3-gi 3.43.1-1 package: python3-gi 47、source package:systemd-coredump 245.6-2_mipsel package: systemd-coredump 48、source package:systemd-timesyncd 245.6-2_ppc64el package: systemd-timesyncd 49、source package:udev 245.6-2_s390x package: udev 50、source package:unar 1.9.1-1 package: unar Open Source Software Licensed under the LGPL-2.1-only: 1、source package:GitQlient v1.4.3 package: GitQlient 2、source package:cgroup-tools 0.41-8.1_s390x package: cgroup-tools 3、source package:checkstyle checkstyle-10.3.4 package: checkstyle 4、source package:cracklib-runtime 2.9.6-3_s390x package: cracklib-runtime 5、source package:dialog 1.3-20230209-1 package: dialog 6、source package:dmsetup 1.02.90-2.2+deb8u1_s390x package: dmsetup 7、source package:gettext-base 0.19.8.1-9_s390x package: gettext-base 8、source package:gstreamer1.0-libav 1.9.90-1 package: gstreamer1.0-libav 9、source package:gstreamer1.0-plugins-base 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-base 10、source package:gstreamer1.0-plugins-good 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-good 11、source package:gstreamer1.0-plugins-ugly 1.9.90-1 package: gstreamer1.0-plugins-ugly 12、source package:gstreamer1.0-pulseaudio 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-pulseaudio 13、source package:gstreamer1.0-x 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-x 14、source package:gtk2-engines 2.20.2.orig package: gtk2-engines 15、source package:gtk2-engines-murrine 0.98.2.orig package: gtk2-engines-murrine 16、source package:gtk2-engines-pixbuf 2.8.9-2 package: gtk2-engines-pixbuf 17、source package:kmod 9-3_sparc package: kmod 18、source package:libcairo2-dev 1.16.0-4_s390x package: libcairo2-dev 19、source package:libcap-ng-dev 0.7.9-2_s390x package: libcap-ng-dev 20、source package:libcrack2-dev 2.9.6-5 package: libcrack2-dev 21、source package:libfprint 20110418git-2 package: libfprint 22、source package:libfprint-2-2 1.90.1-2_s390x package: libfprint-2-2 23、source package:libfprint0 1.0-1_s390x package: libfprint0 24、source package:libglib2.0-dev 2.64.4-1_s390x package: libglib2.0-dev 25、source package:libgstreamer-plugins-base1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-0 26、source package:libgstreamer-plugins-base1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-dev 27、source package:libgstreamer1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer1.0-0 28、source package:libgstreamer1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer1.0-dev 29、source package:libgtk-3-dev 3.4.2-7+deb7u1_sparc package: libgtk-3-dev 30、source package:liblog4cpp5-dev 1.1.3-3_s390x package: liblog4cpp5-dev 31、source package:liblog4cpp5v5 1.1.3-3_ppc64el package: liblog4cpp5v5 32、source package:libnm-qt 0.9.8.2.orig package: libnm-qt 33、source package:libnotify-bin 0.7.9-1_s390x package: libnotify-bin 34、source package:libraw-dev 0.9.1-1+deb6u1 package: libraw-dev 35、source package:librsvg2-dev 2.9.5-6 package: librsvg2-dev 36、source package:libsdl1.2debian 1.2.15-5_sparc package: libsdl1.2debian 37、source package:libseccomp-dev 2.4.3-1_s390x package: libseccomp-dev 38、source package:libtag1-dev 1.9.1-2~bpo70+1_sparc package: libtag1-dev 39、source package:libusb-1.0-0-dev 1.0.23-2_s390x package: libusb-1.0-0-dev 40、source package:modemmanager 1.8.2.orig package: modemmanager 41、source package:networkmanager-qt 5.54.0.orig package: networkmanager-qt 42、source package:p7zip 9.20.1~dfsg.1-5 package: p7zip 43、source package:p7zip-full 9.20.1~dfsg.1-4.1_kfreebsd-i386 package: p7zip-full 44、source package:qrencode 4.0.2.orig package: qrencode 45、source package:qt-creator tqtc/v2.6.0-rc package: qt-creator 46、source package:qtciphersqliteplugin 0.6 package: qtciphersqliteplugin 47、source package:smartmontools 7.3-1 package: smartmontools Open Source Software Licensed under the LGPL-3 or GPL-2: 1、source package:libqt5core5a 5.7.1+dfsg-3+deb9u2_s390x package: libqt5core5a 2、source package:libqt5opengl5-dev 5.7.1+dfsg-3+deb9u2_s390x package: libqt5opengl5-dev 3、source package:libqt5sql5-sqlite 5.7.1+dfsg-3+deb9u2_s390x package: libqt5sql5-sqlite 4、source package:libqt5svg5-dev 5.7.1~20161021-2+b2_s390x package: libqt5svg5-dev 5、source package:libqt5x11extras5-dev 5.9.2-1 package: libqt5x11extras5-dev 6、source package:libqt6multimedia6 6.4.2-6 package: libqt6multimedia6 7、source package:libqt6opengl6 6.4.2+dfsg~rc1-3+alpha.1 package: libqt6opengl6 8、source package:qml-module-qt-labs-platform 5.9.2-2_kfreebsd-amd64 package: qml-module-qt-labs-platform 9、source package:qml-module-qtquick-controls2 5.9.2-2_kfreebsd-amd64 package: qml-module-qtquick-controls2 10、source package:qml-module-qtquick-dialogs 5.7.1~20161021-2_s390x package: qml-module-qtquick-dialogs 11、source package:qml-module-qtquick-templates2 5.9.2-2_kfreebsd-amd64 package: qml-module-qtquick-templates2 12、source package:qt5-qmake 5.7.1+dfsg-3+deb9u2_s390x package: qt5-qmake 13、source package:qt6-svg-dev 6.4.2~rc1-3 package: qt6-svg-dev 14、source package:qt6-wayland 6.4.2~rc1-2 package: qt6-wayland 15、source package:qtbase5-dev 5.7.1+dfsg-3+deb9u2_s390x package: qtbase5-dev 16、source package:qtbase5-private-dev 5.7.1+dfsg-3+deb9u2_s390x package: qtbase5-private-dev 17、source package:qtmultimedia5-dev 5.7.1~20161021-2_s390x package: qtmultimedia5-dev 18、source package:qtquickcontrols2-5-dev 5.9.2-2_kfreebsd-amd64 package: qtquickcontrols2-5-dev Open Source Software Licensed under the LGPL-3 or GPL-2+: 1、source package:qml-module-qtqml-models2 5.7.1-2+b2_s390x package: qml-module-qtqml-models2 2、source package:qml-module-qtquick-layouts 5.7.1-2+b2_s390x package: qml-module-qtquick-layouts 3、source package:qml-module-qtquick2 5.7.1-2+b2_s390x package: qml-module-qtquick2 4、source package:qtdeclarative5-dev 5.7.1-2+b2_s390x package: qtdeclarative5-dev Open Source Software Licensed under the Apache-2.0: 1、source package:AndroidProject-Kotlin 13.2 package: AndroidProject-Kotlin 2、source package:JSONStream 1.3.5 package: JSONStream 3、source package:acorn-node 1.8.2 package: acorn-node 4、source package:android-pdfium a56ccce4 package: android-pdfium 5、source package:androidsvg 1.4 package: androidsvg 6、source package:atob 2.1.2 package: atob 7、source package:aws-sign2 0.7.0 package: aws-sign2 8、source package:caseless 0.12.0 package: caseless 9、source package:cilium 1.14.3 package: cilium 10、source package:circleindicator 2.1.6 package: circleindicator 11、source package:cobra v0.0.3 package: cobra 12、source package:compiler 4.12.0 package: compiler 13、source package:concurrent 1.0.0 package: concurrent 14、source package:coost v3.0.0 package: coost 15、source package:core 1.7.0 package: core 16、source package:cppdap 87f8b4a package: cppdap 17、source package:crypto v0.23.0 package: crypto 18、source package:dash-ast 1.0.0 package: dash-ast 19、source package:diff-match-patch 1.0.5 package: diff-match-patch 20、source package:dompurify 2.4.1 package: dompurify 21、source package:external/github.com/google/benchmark v1.4.1 package: external/github.com/google/benchmark 22、source package:ffmpeg 7:6.0-3 package: ffmpeg 23、source package:fonts-noto-color-emoji 2.038-1 package: fonts-noto-color-emoji 24、source package:forever-agent 0.6.1 package: forever-agent 25、source package:get-assigned-identifiers 1.2.0 package: get-assigned-identifiers 26、source package:git 4.3.20-9 package: git 27、source package:glide 4.12.0 package: glide 28、source package:gofuzz v1.0.0 package: gofuzz 29、source package:golang-github-golang-groupcache-dev 0.0~git20200121.8c9f03a-2 package: golang-github-golang-groupcache-dev 30、source package:golang-gopkg-yaml.v2-dev 2.4.0-3 package: golang-gopkg-yaml.v2-dev 31、source package:golang-gopkg-yaml.v3-dev 3.0.1-3 package: golang-gopkg-yaml.v3-dev 32、source package:gradle 7.4.2 package: gradle 33、source package:gson 2.10.1 package: gson 34、source package:imgbrd-grabber v6.0.2 package: imgbrd-grabber 35、source package:infratask_scheduler v0.1.0 package: infratask_scheduler 36、source package:junit 1.1.5 package: junit 37、source package:kata-containers CC-0.7.0 package: kata-containers 38、source package:kotlin-gradle-plugin package: kotlin-gradle-plugin 39、source package:kotlin-stdlib-jdk7 package: kotlin-stdlib-jdk7 40、source package:kotlinx-serialization-json 1.5.1 package: kotlinx-serialization-json 41、source package:libcups2-dev 2.3~rc1-1_s390x package: libcups2-dev 42、source package:libcupsimage2 2.3~rc1-1_s390x package: libcupsimage2 43、source package:libpoppler-cpp-dev 0.85.0-1_s390x package: libpoppler-cpp-dev 44、source package:libpoppler-cpp0v5 0.85.0-1_s390x package: libpoppler-cpp0v5 45、source package:libssl-dev 3.0.0~~alpha4-1_s390x package: libssl-dev 46、source package:libssl3 3.0.0~~alpha4-1_s390x package: libssl3 47、source package:libwebrtc-bin 86.4240.20.0 package: libwebrtc-bin 48、source package:libxerces-c-dev 3.2.3+debian-1_s390x package: libxerces-c-dev 49、source package:lottie 4.1.0 package: lottie 50、source package:ms365 v2.0.5 package: ms365 51、source package:oauth-sign 0.9.0 package: oauth-sign 52、source package:okhttp 3.12.13 package: okhttp 53、source package:podman 1.6.4+dfsg1-4_armel package: podman 54、source package:preference 1.2.1 package: preference 55、source package:request 2.88.0 package: request 56、source package:rsyslog 8.9.0-3 package: rsyslog 57、source package:sass 1.55.0 package: sass 58、source package:spdx-correct 3.1.1 package: spdx-correct 59、source package:sse v0.1.0 package: sse 60、source package:sync v0.10.0 package: sync 61、source package:through 2.3.8 package: through 62、source package:timber 4.7.1 package: timber 63、source package:tinyrpc 2130294 package: tinyrpc 64、source package:tools_oat 373f560 package: tools_oat 65、source package:true-case-path 1.0.3 package: true-case-path 66、source package:tunnel-agent 0.6.0 package: tunnel-agent 67、source package:typescript 4.8.4 package: typescript 68、source package:undeclared-identifiers 1.1.3 package: undeclared-identifiers 69、source package:validate-npm-package-license 3.0.4 package: validate-npm-package-license 70、source package:vimspector 2938438041 package: vimspector Open Source Software Licensed under the MIT: 1、source package:@antfu/utils 0.7.7 package: @antfu/utils 2、source package:@babel/runtime 7.6.0 package: @babel/runtime 3、source package:@babel/standalone 7.20.15 package: @babel/standalone 4、source package:@ctrl/tinycolor 3.4.1 package: @ctrl/tinycolor 5、source package:@element-plus/icons-vue 2.0.9 package: @element-plus/icons-vue 6、source package:@esbuild/android-arm 0.15.9 package: @esbuild/android-arm 7、source package:@esbuild/linux-loong64 0.15.9 package: @esbuild/linux-loong64 8、source package:@floating-ui/core 1.0.1 package: @floating-ui/core 9、source package:@floating-ui/dom 1.0.2 package: @floating-ui/dom 10、source package:@jridgewell/gen-mapping 0.3.2 package: @jridgewell/gen-mapping 11、source package:@jridgewell/resolve-uri 3.1.0 package: @jridgewell/resolve-uri 12、source package:@jridgewell/set-array 1.1.2 package: @jridgewell/set-array 13、source package:@jridgewell/source-map 0.3.2 package: @jridgewell/source-map 14、source package:@jridgewell/sourcemap-codec 1.4.14 package: @jridgewell/sourcemap-codec 15、source package:@jridgewell/trace-mapping 0.3.16 package: @jridgewell/trace-mapping 16、source package:@nodelib/fs.scandir 2.1.5 package: @nodelib/fs.scandir 17、source package:@nodelib/fs.stat 2.0.5 package: @nodelib/fs.stat 18、source package:@nodelib/fs.walk 1.2.8 package: @nodelib/fs.walk 19、source package:@popperjs/core 2.11.7 package: @popperjs/core 20、source package:@rollup/pluginutils 5.1.0 package: @rollup/pluginutils 21、source package:@smake/co 1.0.1 package: @smake/co 22、source package:@types/estree 1.0.5 package: @types/estree 23、source package:@types/json-schema 7.0.6 package: @types/json-schema 24、source package:@types/lodash 4.14.185 package: @types/lodash 25、source package:@types/lodash-es 4.17.6 package: @types/lodash-es 26、source package:@types/node 14.14.6 package: @types/node 27、source package:@types/web-bluetooth 0.0.15 package: @types/web-bluetooth 28、source package:@vitejs/plugin-legacy 2.3.1 package: @vitejs/plugin-legacy 29、source package:@vitejs/plugin-vue 3.1.0 package: @vitejs/plugin-vue 30、source package:@vue/devtools-api 6.4.1 package: @vue/devtools-api 31、source package:@vueuse/core 9.3.0 package: @vueuse/core 32、source package:@vueuse/metadata 9.3.0 package: @vueuse/metadata 33、source package:@vueuse/shared 9.3.0 package: @vueuse/shared 34、source package:CppLogging 1.0.1.0 package: CppLogging 35、source package:abbrev 1.1.1 package: abbrev 36、source package:acorn 7.0.0 package: acorn 37、source package:acorn-dynamic-import 2.0.2 package: acorn-dynamic-import 38、source package:acorn-node 1.8.2 package: acorn-node 39、source package:acorn-walk 7.0.0 package: acorn-walk 40、source package:add-px-to-style 1.0.0 package: add-px-to-style 41、source package:ajv 6.12.6 package: ajv 42、source package:ajv-keywords 3.5.2 package: ajv-keywords 43、source package:align-text 0.1.4 package: align-text 44、source package:amdefine 1.0.1 package: amdefine 45、source package:ansi-gray 0.1.1 package: ansi-gray 46、source package:ansi-regex 3.0.0 package: ansi-regex 47、source package:ansi-styles 2.2.1 package: ansi-styles 48、source package:ansi-wrap 0.1.0 package: ansi-wrap 49、source package:anyks-lm 2.1.5 package: anyks-lm 50、source package:apt 2.7.1 package: apt 51、source package:archy 1.0.0 package: archy 52、source package:arr-diff 4.0.0 package: arr-diff 53、source package:arr-flatten 1.1.0 package: arr-flatten 54、source package:arr-union 3.1.0 package: arr-union 55、source package:array-differ 1.0.0 package: array-differ 56、source package:array-each 1.0.1 package: array-each 57、source package:array-find-index 1.0.2 package: array-find-index 58、source package:array-slice 1.1.0 package: array-slice 59、source package:array-uniq 1.0.3 package: array-uniq 60、source package:array-unique 0.3.2 package: array-unique 61、source package:asn1 0.2.4 package: asn1 62、source package:asn1.js 5.4.1 package: asn1.js 63、source package:assert 1.5.0 package: assert 64、source package:assert-plus 1.0.0 package: assert-plus 65、source package:assign-symbols 1.0.0 package: assign-symbols 66、source package:async 2.6.3 package: async 67、source package:async-each 1.0.3 package: async-each 68、source package:async-foreach 0.1.3 package: async-foreach 69、source package:async-validator 4.2.5 package: async-validator 70、source package:asynckit 0.4.0 package: asynckit 71、source package:atob 2.1.2 package: atob 72、source package:aws4 1.8.0 package: aws4 73、source package:babel-code-frame 6.26.0 package: babel-code-frame 74、source package:babel-core 6.26.3 package: babel-core 75、source package:babel-generator 6.26.1 package: babel-generator 76、source package:babel-helper-builder-binary-assignment-operator-visitor 6.24.1 package: babel-helper-builder-binary-assignment-operator-visitor 77、source package:babel-helper-builder-react-jsx 6.26.0 package: babel-helper-builder-react-jsx 78、source package:babel-helper-call-delegate 6.24.1 package: babel-helper-call-delegate 79、source package:babel-helper-define-map 6.26.0 package: babel-helper-define-map 80、source package:babel-helper-explode-assignable-expression 6.24.1 package: babel-helper-explode-assignable-expression 81、source package:babel-helper-function-name 6.24.1 package: babel-helper-function-name 82、source package:babel-helper-get-function-arity 6.24.1 package: babel-helper-get-function-arity 83、source package:babel-helper-hoist-variables 6.24.1 package: babel-helper-hoist-variables 84、source package:babel-helper-optimise-call-expression 6.24.1 package: babel-helper-optimise-call-expression 85、source package:babel-helper-regex 6.26.0 package: babel-helper-regex 86、source package:babel-helper-remap-async-to-generator 6.24.1 package: babel-helper-remap-async-to-generator 87、source package:babel-helper-replace-supers 6.24.1 package: babel-helper-replace-supers 88、source package:babel-helpers 6.24.1 package: babel-helpers 89、source package:babel-messages 6.23.0 package: babel-messages 90、source package:babel-plugin-check-es2015-constants 6.22.0 package: babel-plugin-check-es2015-constants 91、source package:babel-plugin-syntax-async-functions 6.13.0 package: babel-plugin-syntax-async-functions 92、source package:babel-plugin-syntax-exponentiation-operator 6.13.0 package: babel-plugin-syntax-exponentiation-operator 93、source package:babel-plugin-syntax-flow 6.18.0 package: babel-plugin-syntax-flow 94、source package:babel-plugin-syntax-jsx 6.18.0 package: babel-plugin-syntax-jsx 95、source package:babel-plugin-syntax-trailing-function-commas 6.22.0 package: babel-plugin-syntax-trailing-function-commas 96、source package:babel-plugin-transform-async-to-generator 6.24.1 package: babel-plugin-transform-async-to-generator 97、source package:babel-plugin-transform-es2015-arrow-functions 6.22.0 package: babel-plugin-transform-es2015-arrow-functions 98、source package:babel-plugin-transform-es2015-block-scoped-functions 6.22.0 package: babel-plugin-transform-es2015-block-scoped-functions 99、source package:babel-plugin-transform-es2015-block-scoping 6.26.0 package: babel-plugin-transform-es2015-block-scoping 100、source package:babel-plugin-transform-es2015-classes 6.24.1 package: babel-plugin-transform-es2015-classes 101、source package:babel-plugin-transform-es2015-computed-properties 6.24.1 package: babel-plugin-transform-es2015-computed-properties 102、source package:babel-plugin-transform-es2015-destructuring 6.23.0 package: babel-plugin-transform-es2015-destructuring 103、source package:babel-plugin-transform-es2015-duplicate-keys 6.24.1 package: babel-plugin-transform-es2015-duplicate-keys 104、source package:babel-plugin-transform-es2015-for-of 6.23.0 package: babel-plugin-transform-es2015-for-of 105、source package:babel-plugin-transform-es2015-function-name 6.24.1 package: babel-plugin-transform-es2015-function-name 106、source package:babel-plugin-transform-es2015-literals 6.22.0 package: babel-plugin-transform-es2015-literals 107、source package:babel-plugin-transform-es2015-modules-amd 6.24.1 package: babel-plugin-transform-es2015-modules-amd 108、source package:babel-plugin-transform-es2015-modules-commonjs 6.26.2 package: babel-plugin-transform-es2015-modules-commonjs 109、source package:babel-plugin-transform-es2015-modules-systemjs 6.24.1 package: babel-plugin-transform-es2015-modules-systemjs 110、source package:babel-plugin-transform-es2015-modules-umd 6.24.1 package: babel-plugin-transform-es2015-modules-umd 111、source package:babel-plugin-transform-es2015-object-super 6.24.1 package: babel-plugin-transform-es2015-object-super 112、source package:babel-plugin-transform-es2015-parameters 6.24.1 package: babel-plugin-transform-es2015-parameters 113、source package:babel-plugin-transform-es2015-shorthand-properties 6.24.1 package: babel-plugin-transform-es2015-shorthand-properties 114、source package:babel-plugin-transform-es2015-spread 6.22.0 package: babel-plugin-transform-es2015-spread 115、source package:babel-plugin-transform-es2015-sticky-regex 6.24.1 package: babel-plugin-transform-es2015-sticky-regex 116、source package:babel-plugin-transform-es2015-template-literals 6.22.0 package: babel-plugin-transform-es2015-template-literals 117、source package:babel-plugin-transform-es2015-typeof-symbol 6.23.0 package: babel-plugin-transform-es2015-typeof-symbol 118、source package:babel-plugin-transform-es2015-unicode-regex 6.24.1 package: babel-plugin-transform-es2015-unicode-regex 119、source package:babel-plugin-transform-exponentiation-operator 6.24.1 package: babel-plugin-transform-exponentiation-operator 120、source package:babel-plugin-transform-flow-strip-types 6.22.0 package: babel-plugin-transform-flow-strip-types 121、source package:babel-plugin-transform-react-display-name 6.25.0 package: babel-plugin-transform-react-display-name 122、source package:babel-plugin-transform-react-jsx 6.24.1 package: babel-plugin-transform-react-jsx 123、source package:babel-plugin-transform-react-jsx-self 6.22.0 package: babel-plugin-transform-react-jsx-self 124、source package:babel-plugin-transform-react-jsx-source 6.22.0 package: babel-plugin-transform-react-jsx-source 125、source package:babel-plugin-transform-regenerator 6.26.0 package: babel-plugin-transform-regenerator 126、source package:babel-plugin-transform-strict-mode 6.24.1 package: babel-plugin-transform-strict-mode 127、source package:babel-polyfill 6.26.0 package: babel-polyfill 128、source package:babel-preset-env 1.7.0 package: babel-preset-env 129、source package:babel-preset-flow 6.23.0 package: babel-preset-flow 130、source package:babel-preset-react 6.24.1 package: babel-preset-react 131、source package:babel-register 6.26.0 package: babel-register 132、source package:babel-runtime 6.26.0 package: babel-runtime 133、source package:babel-template 6.26.0 package: babel-template 134、source package:babel-traverse 6.26.0 package: babel-traverse 135、source package:babel-types 6.26.0 package: babel-types 136、source package:babelify 8.0.0 package: babelify 137、source package:babylon 6.18.0 package: babylon 138、source package:balanced-match 1.0.2 package: balanced-match 139、source package:base 0.11.2 package: base 140、source package:base64-js 1.3.1 package: base64-js 141、source package:beeper 1.1.1 package: beeper 142、source package:big.js 5.2.2 package: big.js 143、source package:binary-extensions 2.2.0 package: binary-extensions 144、source package:bl 1.2.2 package: bl 145、source package:bn.js 5.1.3 package: bn.js 146、source package:brace-expansion 2.0.1 package: brace-expansion 147、source package:braces 3.0.2 package: braces 148、source package:brorand 1.1.0 package: brorand 149、source package:browser-pack 6.1.0 package: browser-pack 150、source package:browser-resolve 1.11.3 package: browser-resolve 151、source package:browserify 14.5.0 package: browserify 152、source package:browserify-aes 1.2.0 package: browserify-aes 153、source package:browserify-cipher 1.0.1 package: browserify-cipher 154、source package:browserify-des 1.0.2 package: browserify-des 155、source package:browserify-rsa 4.0.1 package: browserify-rsa 156、source package:browserify-zlib 0.2.0 package: browserify-zlib 157、source package:browserslist 3.2.8 package: browserslist 158、source package:buffer 5.4.2 package: buffer 159、source package:buffer-from 1.1.2 package: buffer-from 160、source package:buffer-xor 1.0.3 package: buffer-xor 161、source package:builtin-status-codes 3.0.0 package: builtin-status-codes 162、source package:cache-base 1.0.1 package: cache-base 163、source package:cached-path-relative 1.0.2 package: cached-path-relative 164、source package:camelcase 4.1.0 package: camelcase 165、source package:camelcase-keys 2.1.0 package: camelcase-keys 166、source package:center-align 0.1.3 package: center-align 167、source package:chalk 1.1.3 package: chalk 168、source package:cheerio 1.0.0-rc.3 package: cheerio 169、source package:chokidar 3.4.3 package: chokidar 170、source package:cipher-base 1.0.4 package: cipher-base 171、source package:class-utils 0.3.6 package: class-utils 172、source package:clone 2.1.2 package: clone 173、source package:clone-buffer 1.0.0 package: clone-buffer 174、source package:clone-stats 1.0.0 package: clone-stats 175、source package:cloneable-readable 1.1.3 package: cloneable-readable 176、source package:code-point-at 1.1.0 package: code-point-at 177、source package:collection-visit 1.0.0 package: collection-visit 178、source package:combine-source-map 0.8.0 package: combine-source-map 179、source package:combined-stream 1.0.8 package: combined-stream 180、source package:commander 2.20.3 package: commander 181、source package:component-emitter 1.3.0 package: component-emitter 182、source package:compute-scroll-into-view 1.0.11 package: compute-scroll-into-view 183、source package:concat-map 0.0.1 package: concat-map 184、source package:concat-stream 1.6.2 package: concat-stream 185、source package:console-browserify 1.2.0 package: console-browserify 186、source package:constants-browserify 1.0.0 package: constants-browserify 187、source package:convert-source-map 1.6.0 package: convert-source-map 188、source package:cookiecutter-golang d372aa0 package: cookiecutter-golang 189、source package:coost v3.0.0 package: coost 190、source package:copy-descriptor 0.1.1 package: copy-descriptor 191、source package:core-js 3.27.2 package: core-js 192、source package:core-util-is 1.0.2 package: core-util-is 193、source package:create-ecdh 4.0.4 package: create-ecdh 194、source package:create-hash 1.2.0 package: create-hash 195、source package:create-hmac 1.1.7 package: create-hmac 196、source package:crelt 1.0.6 package: crelt 197、source package:cross-spawn 5.1.0 package: cross-spawn 198、source package:crypto-browserify 3.12.0 package: crypto-browserify 199、source package:currently-unhandled 0.4.1 package: currently-unhandled 200、source package:dashdash 1.14.1 package: dashdash 201、source package:date-now 0.1.4 package: date-now 202、source package:dateformat 2.2.0 package: dateformat 203、source package:dayjs 1.11.5 package: dayjs 204、source package:debug 4.3.4 package: debug 205、source package:decamelize 1.2.0 package: decamelize 206、source package:decode-uri-component 0.2.0 package: decode-uri-component 207、source package:defaults 1.0.3 package: defaults 208、source package:define-property 2.0.2 package: define-property 209、source package:defined 1.0.0 package: defined 210、source package:delayed-stream 1.0.0 package: delayed-stream 211、source package:delegates 1.0.0 package: delegates 212、source package:deprecated 0.0.1 package: deprecated 213、source package:deps-sort 2.0.0 package: deps-sort 214、source package:des.js 1.0.1 package: des.js 215、source package:detect-file 1.0.0 package: detect-file 216、source package:detect-indent 4.0.0 package: detect-indent 217、source package:detective 4.7.1 package: detective 218、source package:diffie-hellman 5.0.3 package: diffie-hellman 219、source package:dom-css 2.1.0 package: dom-css 220、source package:dom-serializer 0.1.1 package: dom-serializer 221、source package:domain-browser 1.2.0 package: domain-browser 222、source package:ecc-jsbn 0.1.2 package: ecc-jsbn 223、source package:element-plus 2.2.17 package: element-plus 224、source package:elliptic 6.5.3 package: elliptic 225、source package:emojis-list 3.0.0 package: emojis-list 226、source package:end-of-stream 0.1.5 package: end-of-stream 227、source package:enhanced-resolve 3.4.1 package: enhanced-resolve 228、source package:errno 0.1.7 package: errno 229、source package:error-ex 1.3.2 package: error-ex 230、source package:es6-iterator 2.0.3 package: es6-iterator 231、source package:es6-map 0.1.5 package: es6-map 232、source package:es6-set 0.1.5 package: es6-set 233、source package:es6-symbol 3.1.1 package: es6-symbol 234、source package:esbuild 0.15.9 package: esbuild 235、source package:esbuild-android-64 0.15.9 package: esbuild-android-64 236、source package:esbuild-android-arm64 0.15.9 package: esbuild-android-arm64 237、source package:esbuild-darwin-64 0.15.9 package: esbuild-darwin-64 238、source package:esbuild-darwin-arm64 0.15.9 package: esbuild-darwin-arm64 239、source package:esbuild-freebsd-64 0.15.9 package: esbuild-freebsd-64 240、source package:esbuild-freebsd-arm64 0.15.9 package: esbuild-freebsd-arm64 241、source package:esbuild-linux-32 0.15.9 package: esbuild-linux-32 242、source package:esbuild-linux-64 0.15.9 package: esbuild-linux-64 243、source package:esbuild-linux-arm 0.15.9 package: esbuild-linux-arm 244、source package:esbuild-linux-arm64 0.15.9 package: esbuild-linux-arm64 245、source package:esbuild-linux-mips64le 0.15.9 package: esbuild-linux-mips64le 246、source package:esbuild-linux-ppc64le 0.15.9 package: esbuild-linux-ppc64le 247、source package:esbuild-linux-riscv64 0.15.9 package: esbuild-linux-riscv64 248、source package:esbuild-linux-s390x 0.15.9 package: esbuild-linux-s390x 249、source package:esbuild-netbsd-64 0.15.9 package: esbuild-netbsd-64 250、source package:esbuild-openbsd-64 0.15.9 package: esbuild-openbsd-64 251、source package:esbuild-sunos-64 0.15.9 package: esbuild-sunos-64 252、source package:esbuild-windows-32 0.15.9 package: esbuild-windows-32 253、source package:esbuild-windows-64 0.15.9 package: esbuild-windows-64 254、source package:esbuild-windows-arm64 0.15.9 package: esbuild-windows-arm64 255、source package:escape-html 1.0.3 package: escape-html 256、source package:escape-string-regexp 5.0.0 package: escape-string-regexp 257、source package:estree-walker 2.0.2 package: estree-walker 258、source package:event-emitter 0.3.5 package: event-emitter 259、source package:events 3.2.0 package: events 260、source package:evp_bytestokey 1.0.3 package: evp_bytestokey 261、source package:execa 0.7.0 package: execa 262、source package:expand-brackets 2.1.4 package: expand-brackets 263、source package:expand-tilde 2.0.2 package: expand-tilde 264、source package:expose-loader 1.0.1 package: expose-loader 265、source package:extend 3.0.2 package: extend 266、source package:extend-shallow 3.0.2 package: extend-shallow 267、source package:extglob 2.0.4 package: extglob 268、source package:extsprintf 1.3.0 package: extsprintf 269、source package:fancy-log 1.3.3 package: fancy-log 270、source package:fast-deep-equal 3.1.3 package: fast-deep-equal 271、source package:fast-glob 3.2.12 package: fast-glob 272、source package:fast-json-stable-stringify 2.1.0 package: fast-json-stable-stringify 273、source package:ffmpeg 7:6.0-3 package: ffmpeg 274、source package:fill-range 7.0.1 package: fill-range 275、source package:find-index 0.1.1 package: find-index 276、source package:find-up 2.1.0 package: find-up 277、source package:findup-sync 2.0.0 package: findup-sync 278、source package:fined 1.2.0 package: fined 279、source package:first-chunk-stream 1.0.0 package: first-chunk-stream 280、source package:flagged-respawn 1.0.1 package: flagged-respawn 281、source package:for-in 1.0.2 package: for-in 282、source package:for-own 1.0.0 package: for-own 283、source package:form-data 2.3.3 package: form-data 284、source package:fragment-cache 0.2.1 package: fragment-cache 285、source package:fs.realpath 1.0.0 package: fs.realpath 286、source package:fsevents 2.3.2 package: fsevents 287、source package:function-bind 1.1.1 package: function-bind 288、source package:gaze 1.1.3 package: gaze 289、source package:get-stdin 4.0.1 package: get-stdin 290、source package:get-stream 3.0.0 package: get-stream 291、source package:get-value 2.0.6 package: get-value 292、source package:getpass 0.1.7 package: getpass 293、source package:gg v1.3.0 package: gg 294、source package:gin v1.5.0 package: gin 295、source package:git 4.3.20-9 package: git 296、source package:gitea v1.19.3 package: gitea 297、source package:glob-stream 3.1.18 package: glob-stream 298、source package:glob-watcher 0.0.6 package: glob-watcher 299、source package:glob2base 0.0.12 package: glob2base 300、source package:global-modules 1.0.0 package: global-modules 301、source package:global-prefix 1.0.2 package: global-prefix 302、source package:globals 9.18.0 package: globals 303、source package:globule 1.2.1 package: globule 304、source package:glogg 1.0.2 package: glogg 305、source package:go v1.1.7 package: go 306、source package:go-isatty v0.0.9 package: go-isatty 307、source package:go-pinyin v0.19.0 package: go-pinyin 308、source package:go-wav v0.3.2 package: go-wav 309、source package:go-windows-terminal-sequences v1.0.1 package: go-windows-terminal-sequences 310、source package:goconvey v1.8.1 package: goconvey 311、source package:golang-github-gosexy-gettext-dev 0~git20130221-2.1_all package: golang-github-gosexy-gettext-dev 312、source package:gstreamer1.0-fluendo-mp3 0.10.32.debian-1_s390x package: gstreamer1.0-fluendo-mp3 313、source package:gstreamer1.0-plugins-base 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-base 314、source package:gstreamer1.0-plugins-good 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-good 315、source package:gstreamer1.0-plugins-ugly 1.9.90-1 package: gstreamer1.0-plugins-ugly 316、source package:gstreamer1.0-pulseaudio 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-pulseaudio 317、source package:gstreamer1.0-x 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-x 318、source package:gulp 3.9.1 package: gulp 319、source package:gulp-concat 2.6.1 package: gulp-concat 320、source package:gulp-rename 1.4.0 package: gulp-rename 321、source package:gulp-sass 3.2.1 package: gulp-sass 322、source package:gulp-util 3.0.8 package: gulp-util 323、source package:gulplog 1.0.0 package: gulplog 324、source package:har-validator 5.1.3 package: har-validator 325、source package:has 1.0.3 package: has 326、source package:has-ansi 2.0.0 package: has-ansi 327、source package:has-flag 2.0.0 package: has-flag 328、source package:has-gulplog 0.1.0 package: has-gulplog 329、source package:has-value 1.0.0 package: has-value 330、source package:has-values 1.0.0 package: has-values 331、source package:hash-base 3.1.0 package: hash-base 332、source package:hash.js 1.1.7 package: hash.js 333、source package:history 4.9.0 package: history 334、source package:hmac-drbg 1.0.1 package: hmac-drbg 335、source package:home-or-tmp 2.0.0 package: home-or-tmp 336、source package:homedir-polyfill 1.0.3 package: homedir-polyfill 337、source package:htmlescape 1.1.1 package: htmlescape 338、source package:htmlparser2 3.10.1 package: htmlparser2 339、source package:http-signature 1.2.0 package: http-signature 340、source package:https-browserify 1.0.0 package: https-browserify 341、source package:image v0.10.0 package: image 342、source package:immutable 4.1.0 package: immutable 343、source package:indent-string 2.1.0 package: indent-string 344、source package:indexof 0.0.1 package: indexof 345、source package:inline-source-map 0.6.2 package: inline-source-map 346、source package:insert-module-globals 7.2.0 package: insert-module-globals 347、source package:interpret 1.4.0 package: interpret 348、source package:invariant 2.2.4 package: invariant 349、source package:invert-kv 1.0.0 package: invert-kv 350、source package:is-absolute 1.0.0 package: is-absolute 351、source package:is-accessor-descriptor 1.0.0 package: is-accessor-descriptor 352、source package:is-arrayish 0.2.1 package: is-arrayish 353、source package:is-binary-path 2.1.0 package: is-binary-path 354、source package:is-buffer 1.1.6 package: is-buffer 355、source package:is-core-module 2.10.0 package: is-core-module 356、source package:is-data-descriptor 1.0.0 package: is-data-descriptor 357、source package:is-descriptor 1.0.2 package: is-descriptor 358、source package:is-extendable 1.0.1 package: is-extendable 359、source package:is-extglob 2.1.1 package: is-extglob 360、source package:is-finite 1.0.2 package: is-finite 361、source package:is-fullwidth-code-point 2.0.0 package: is-fullwidth-code-point 362、source package:is-glob 4.0.3 package: is-glob 363、source package:is-number 7.0.0 package: is-number 364、source package:is-plain-object 2.0.4 package: is-plain-object 365、source package:is-relative 1.0.0 package: is-relative 366、source package:is-stream 1.1.0 package: is-stream 367、source package:is-typedarray 1.0.0 package: is-typedarray 368、source package:is-unc-path 1.0.0 package: is-unc-path 369、source package:is-utf8 0.2.1 package: is-utf8 370、source package:is-windows 1.0.2 package: is-windows 371、source package:isarray 1.0.0 package: isarray 372、source package:isobject 3.0.1 package: isobject 373、source package:isstream 0.1.2 package: isstream 374、source package:java_fpe_test 0.1.2 package: java_fpe_test 375、source package:jq 1.6-2.1 package: jq 376、source package:jquery 3.6.1 package: jquery 377、source package:js 0.1.0 package: js 378、source package:js-tokens 3.0.2 package: js-tokens 379、source package:jsbn 0.1.1 package: jsbn 380、source package:jsesc 1.3.0 package: jsesc 381、source package:json v3.7.0 package: json 382、source package:json-loader 0.5.7 package: json-loader 383、source package:json-schema-traverse 0.4.1 package: json-schema-traverse 384、source package:json-stable-stringify 0.0.1 package: json-stable-stringify 385、source package:json5 2.1.3 package: json5 386、source package:jsonc-parser 3.2.0 package: jsonc-parser 387、source package:jsonparse 1.3.1 package: jsonparse 388、source package:jsprim 1.4.1 package: jsprim 389、source package:jwt-cpp v0.5.0 package: jwt-cpp 390、source package:keypress 0.1.0 package: keypress 391、source package:kind-of 6.0.3 package: kind-of 392、source package:labeled-stream-splicer 2.0.2 package: labeled-stream-splicer 393、source package:lazy-cache 1.0.4 package: lazy-cache 394、source package:lcid 1.0.0 package: lcid 395、source package:libappimage-dev 0.1.9+dfsg-1_s390x package: libappimage-dev 396、source package:libboost-dev 1.71.0.3_s390x package: libboost-dev 397、source package:libboost-filesystem-dev 1.71.0.3_s390x package: libboost-filesystem-dev 398、source package:libboost-serialization-dev 1.71.0.3_s390x package: libboost-serialization-dev 399、source package:libboost-system-dev 1.71.0.3_s390x package: libboost-system-dev 400、source package:libdrm-dev 2.4.99-1_s390x package: libdrm-dev 401、source package:libegl1-mesa-dev 8.0.5-4+deb7u2_sparc package: libegl1-mesa-dev 402、source package:libgbm-dev 8.0.5-4+deb7u2_sparc package: libgbm-dev 403、source package:libglib2.0-dev 2.64.4-1_s390x package: libglib2.0-dev 404、source package:libgstreamer-plugins-base1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-0 405、source package:libgstreamer-plugins-base1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-dev 406、source package:libjson-c3 0.12.1-1.3_s390x package: libjson-c3 407、source package:libjson-rpc-cpp v1.4.1 package: libjson-rpc-cpp 408、source package:liblcms2-dev 2.9-4_s390x package: liblcms2-dev 409、source package:libportaudio2 19.6.0-1_s390x package: libportaudio2 410、source package:libx11-dev 2:1.8.4-2+deb12u1 package: libx11-dev 411、source package:libx11-xcb-dev 1.6.9-2_s390x package: libx11-xcb-dev 412、source package:libxcb-composite0-dev 1.8.1-2+deb7u1_sparc package: libxcb-composite0-dev 413、source package:libxcb-cursor-dev 0.1.1-4_s390x package: libxcb-cursor-dev 414、source package:libxcb-damage0-dev 1.8.1-2+deb7u1_sparc package: libxcb-damage0-dev 415、source package:libxcb-ewmh-dev 0.4.1-1_s390x package: libxcb-ewmh-dev 416、source package:libxcb-image0-dev 0.4.0-1_s390x package: libxcb-image0-dev 417、source package:libxcb-keysyms1-dev 0.4.0-1_s390x package: libxcb-keysyms1-dev 418、source package:libxcb-randr0-dev 1.8.1-2+deb7u1_sparc package: libxcb-randr0-dev 419、source package:libxcb-record0-dev 1.8.1-2+deb7u1_sparc package: libxcb-record0-dev 420、source package:libxcb-render-util0-dev 0.3.9-1_s390x package: libxcb-render-util0-dev 421、source package:libxcb-render0-dev 1.8.1-2+deb7u1_sparc package: libxcb-render0-dev 422、source package:libxcb-res0-dev 1.8.1-2+deb7u1_sparc package: libxcb-res0-dev 423、source package:libxcb-shape0-dev 1.8.1-2+deb7u1_sparc package: libxcb-shape0-dev 424、source package:libxcb-sync-dev 1.14-2_s390x package: libxcb-sync-dev 425、source package:libxcb-util0 0.3.8-3_s390x package: libxcb-util0 426、source package:libxcb-util0-dev 0.3.8-3_s390x package: libxcb-util0-dev 427、source package:libxcb-util1 0.4.0-1 package: libxcb-util1 428、source package:libxcb-xfixes0-dev 1.8.1-2+deb7u1_sparc package: libxcb-xfixes0-dev 429、source package:libxcb-xinerama0-dev 1.8.1-2+deb7u1_sparc package: libxcb-xinerama0-dev 430、source package:libxcb-xinput-dev 1.14-2_s390x package: libxcb-xinput-dev 431、source package:libxcb-xkb-dev 1.14-2_s390x package: libxcb-xkb-dev 432、source package:libxcb-xtest0-dev 1.8.1-2+deb7u1_sparc package: libxcb-xtest0-dev 433、source package:libxcb1-dev 1.8.1-2+deb7u1_sparc package: libxcb1-dev 434、source package:libxext-dev 1.3.3-1_s390x package: libxext-dev 435、source package:libxfixes-dev 5.0.3-2_s390x package: libxfixes-dev 436、source package:libxinerama-dev 2:1.1.4-3 package: libxinerama-dev 437、source package:libxkbcommon-dev 0.9.1-1_s390x package: libxkbcommon-dev 438、source package:libxkbcommon-x11-dev 0.9.1-1_s390x package: libxkbcommon-x11-dev 439、source package:libxss-dev 1.2.3-1_s390x package: libxss-dev 440、source package:libxss1 1.2.3-1_s390x package: libxss1 441、source package:libxtst-dev 1.2.3-1_s390x package: libxtst-dev 442、source package:liftoff 2.5.0 package: liftoff 443、source package:load-json-file 2.0.0 package: load-json-file 444、source package:loader-runner 2.4.0 package: loader-runner 445、source package:loader-utils 2.0.0 package: loader-utils 446、source package:local-pkg 0.4.3 package: local-pkg 447、source package:locales v0.12.1 package: locales 448、source package:locate-path 2.0.0 package: locate-path 449、source package:lodash 4.17.21 package: lodash 450、source package:lodash-es 4.17.21 package: lodash-es 451、source package:lodash-unified 1.0.2 package: lodash-unified 452、source package:lodash._basecopy 3.0.1 package: lodash._basecopy 453、source package:lodash._basetostring 3.0.1 package: lodash._basetostring 454、source package:lodash._basevalues 3.0.0 package: lodash._basevalues 455、source package:lodash._getnative 3.9.1 package: lodash._getnative 456、source package:lodash._isiterateecall 3.0.9 package: lodash._isiterateecall 457、source package:lodash._reescape 3.0.0 package: lodash._reescape 458、source package:lodash._reevaluate 3.0.0 package: lodash._reevaluate 459、source package:lodash._reinterpolate 3.0.0 package: lodash._reinterpolate 460、source package:lodash._root 3.0.1 package: lodash._root 461、source package:lodash.clonedeep 4.5.0 package: lodash.clonedeep 462、source package:lodash.escape 3.2.0 package: lodash.escape 463、source package:lodash.isarguments 3.1.0 package: lodash.isarguments 464、source package:lodash.isarray 3.0.4 package: lodash.isarray 465、source package:lodash.keys 3.1.2 package: lodash.keys 466、source package:lodash.memoize 3.0.4 package: lodash.memoize 467、source package:lodash.restparam 3.6.1 package: lodash.restparam 468、source package:lodash.template 3.6.2 package: lodash.template 469、source package:lodash.templatesettings 3.1.1 package: lodash.templatesettings 470、source package:logrus v1.9.3 package: logrus 471、source package:longest 1.0.1 package: longest 472、source package:loose-envify 1.4.0 package: loose-envify 473、source package:loud-rejection 1.6.0 package: loud-rejection 474、source package:magic-string 0.27.0 package: magic-string 475、source package:make-iterator 1.0.1 package: make-iterator 476、source package:map-cache 0.2.2 package: map-cache 477、source package:map-obj 1.0.1 package: map-obj 478、source package:map-visit 1.0.0 package: map-visit 479、source package:marked 1.2.3 package: marked 480、source package:md5.js 1.3.5 package: md5.js 481、source package:mem 1.1.0 package: mem 482、source package:memoize-one 6.0.0 package: memoize-one 483、source package:memory-fs 0.4.1 package: memory-fs 484、source package:meow 3.7.0 package: meow 485、source package:merge2 1.4.1 package: merge2 486、source package:mesa-utils 9.0.0-1 package: mesa-utils 487、source package:mesa-va-drivers 20.1.2-1_armel package: mesa-va-drivers 488、source package:mesa-vdpau-drivers 20.1.2-1_mipsel package: mesa-vdpau-drivers 489、source package:mesa-vulkan-drivers 20.1.2-1_mips64el package: mesa-vulkan-drivers 490、source package:micromatch 3.1.10 package: micromatch 491、source package:miller-rabin 4.0.1 package: miller-rabin 492、source package:mime-db 1.40.0 package: mime-db 493、source package:mime-types 2.1.24 package: mime-types 494、source package:mimic-fn 1.2.0 package: mimic-fn 495、source package:minimalistic-crypto-utils 1.0.1 package: minimalistic-crypto-utils 496、source package:minimatch 0.2.14 package: minimatch 497、source package:minimist 1.2.5 package: minimist 498、source package:mitt 3.0.0 package: mitt 499、source package:mixin-deep 1.3.2 package: mixin-deep 500、source package:mkdirp 0.5.5 package: mkdirp 501、source package:mlly 1.4.2 package: mlly 502、source package:module-deps 4.1.1 package: module-deps 503、source package:moment 2.29.4 package: moment 504、source package:mqt.qfr 1.10.0 package: mqt.qfr 505、source package:ms 2.1.2 package: ms 506、source package:multipipe 0.1.2 package: multipipe 507、source package:nan 2.14.0 package: nan 508、source package:nanomatch 1.2.13 package: nanomatch 509、source package:native v1.1.0 package: native 510、source package:ncurses-base 6.2-1_all package: ncurses-base 511、source package:neo-async 2.6.2 package: neo-async 512、source package:netlink v1.7.2 package: netlink 513、source package:next-tick 1.0.0 package: next-tick 514、source package:nlohmann_json nlohmann_json-3.7.3 package: nlohmann_json 515、source package:node 8.16.1 package: node 516、source package:node-gyp 3.8.0 package: node-gyp 517、source package:node-libs-browser 2.2.1 package: node-libs-browser 518、source package:node-sass 4.12.0 package: node-sass 519、source package:normalize-path 3.0.0 package: normalize-path 520、source package:npm-run-path 2.0.2 package: npm-run-path 521、source package:number-is-nan 1.0.1 package: number-is-nan 522、source package:object-assign 4.1.1 package: object-assign 523、source package:object-copy 0.1.0 package: object-copy 524、source package:object-visit 1.0.1 package: object-visit 525、source package:object.defaults 1.1.0 package: object.defaults 526、source package:object.map 1.0.1 package: object.map 527、source package:object.pick 1.3.0 package: object.pick 528、source package:objx v0.5.2 package: objx 529、source package:orchestrator 0.3.8 package: orchestrator 530、source package:ordered-read-streams 0.1.0 package: ordered-read-streams 531、source package:os-browserify 0.3.0 package: os-browserify 532、source package:os-config 0.2.3 package: os-config 533、source package:os-homedir 1.0.2 package: os-homedir 534、source package:os-locale 2.1.0 package: os-locale 535、source package:os-tmpdir 1.0.2 package: os-tmpdir 536、source package:p-finally 1.0.0 package: p-finally 537、source package:p-limit 1.3.0 package: p-limit 538、source package:p-locate 2.0.0 package: p-locate 539、source package:p-try 1.0.0 package: p-try 540、source package:pako 1.0.11 package: pako 541、source package:parents 1.0.1 package: parents 542、source package:parse-filepath 1.0.2 package: parse-filepath 543、source package:parse-json 2.2.0 package: parse-json 544、source package:parse-node-version 1.0.1 package: parse-node-version 545、source package:parse-passwd 1.0.0 package: parse-passwd 546、source package:parse5 3.0.3 package: parse5 547、source package:pascalcase 0.1.1 package: pascalcase 548、source package:path-browserify 0.0.1 package: path-browserify 549、source package:path-dirname 1.0.2 package: path-dirname 550、source package:path-exists 3.0.0 package: path-exists 551、source package:path-is-absolute 1.0.1 package: path-is-absolute 552、source package:path-key 2.0.1 package: path-key 553、source package:path-parse 1.0.7 package: path-parse 554、source package:path-platform 0.11.15 package: path-platform 555、source package:path-root 0.1.1 package: path-root 556、source package:path-root-regex 0.1.2 package: path-root-regex 557、source package:path-to-regexp 1.7.0 package: path-to-regexp 558、source package:path-type 2.0.0 package: path-type 559、source package:pathe 1.1.1 package: pathe 560、source package:pbkdf2 3.1.1 package: pbkdf2 561、source package:performance-now 2.1.0 package: performance-now 562、source package:picomatch 2.3.1 package: picomatch 563、source package:pify 2.3.0 package: pify 564、source package:pinia 2.0.22 package: pinia 565、source package:pinkie 2.0.4 package: pinkie 566、source package:pinkie-promise 2.0.1 package: pinkie-promise 567、source package:pipewire-pulse 0.3.71 package: pipewire-pulse 568、source package:pkg-types 1.0.3 package: pkg-types 569、source package:platform/external/fmtlib upstream-master package: platform/external/fmtlib 570、source package:portaudio19-dev 19.6.0-1_s390x package: portaudio19-dev 571、source package:posix-character-classes 0.1.1 package: posix-character-classes 572、source package:prefix-style 2.0.1 package: prefix-style 573、source package:pretty v0.2.1 package: pretty 574、source package:pretty-hrtime 1.0.3 package: pretty-hrtime 575、source package:private 0.1.8 package: private 576、source package:process 0.11.10 package: process 577、source package:process-nextick-args 2.0.1 package: process-nextick-args 578、source package:promxy v0.0.81 package: promxy 579、source package:prop-types 15.7.2 package: prop-types 580、source package:prr 1.0.1 package: prr 581、source package:psl 1.4.0 package: psl 582、source package:public-encrypt 4.0.3 package: public-encrypt 583、source package:punycode 2.1.1 package: punycode 584、source package:python3 3.8.2-3_s390x package: python3 585、source package:python3-dbus 1.2.8-3_s390x package: python3-dbus 586、source package:querystring 0.2.0 package: querystring 587、source package:querystring-es3 0.2.1 package: querystring-es3 588、source package:queue-microtask 1.2.3 package: queue-microtask 589、source package:raf 3.4.1 package: raf 590、source package:randombytes 2.1.0 package: randombytes 591、source package:randomfill 1.0.4 package: randomfill 592、source package:react 16.9.0 package: react 593、source package:react-custom-scrollbars 4.2.1 package: react-custom-scrollbars 594、source package:react-dom 16.9.0 package: react-dom 595、source package:react-is 16.9.0 package: react-is 596、source package:react-router 4.3.1 package: react-router 597、source package:react-router-dom 4.3.1 package: react-router-dom 598、source package:read-only-stream 2.0.0 package: read-only-stream 599、source package:read-pkg 2.0.0 package: read-pkg 600、source package:read-pkg-up 2.0.0 package: read-pkg-up 601、source package:readable-stream 3.6.0 package: readable-stream 602、source package:readdirp 3.6.0 package: readdirp 603、source package:rechoir 0.6.2 package: rechoir 604、source package:redent 1.0.0 package: redent 605、source package:regenerate 1.4.0 package: regenerate 606、source package:regenerator-runtime 0.13.3 package: regenerator-runtime 607、source package:regex-not 1.0.2 package: regex-not 608、source package:regexpu-core 2.0.0 package: regexpu-core 609、source package:regjsgen 0.2.0 package: regjsgen 610、source package:repeat-element 1.1.3 package: repeat-element 611、source package:repeat-string 1.6.1 package: repeat-string 612、source package:repeating 2.0.1 package: repeating 613、source package:replace-ext 1.0.0 package: replace-ext 614、source package:require-directory 2.1.1 package: require-directory 615、source package:resolve 1.22.1 package: resolve 616、source package:resolve-dir 1.0.1 package: resolve-dir 617、source package:resolve-pathname 2.2.0 package: resolve-pathname 618、source package:resolve-url 0.2.1 package: resolve-url 619、source package:ret 0.1.15 package: ret 620、source package:reusify 1.0.4 package: reusify 621、source package:right-align 0.1.3 package: right-align 622、source package:ripemd160 2.0.2 package: ripemd160 623、source package:rollup 2.79.1 package: rollup 624、source package:run-parallel 1.2.0 package: run-parallel 625、source package:safe-buffer 5.2.1 package: safe-buffer 626、source package:safe-regex 1.1.0 package: safe-regex 627、source package:safer-buffer 2.1.2 package: safer-buffer 628、source package:sass 1.55.0 package: sass 629、source package:sass-graph 2.2.4 package: sass-graph 630、source package:scheduler 0.15.0 package: scheduler 631、source package:schema-utils 3.0.0 package: schema-utils 632、source package:scroll-into-view-if-needed 2.2.20 package: scroll-into-view-if-needed 633、source package:scss-tokenizer 0.2.3 package: scss-tokenizer 634、source package:scule 1.1.1 package: scule 635、source package:sequencify 0.0.7 package: sequencify 636、source package:set-value 2.0.1 package: set-value 637、source package:setimmediate 1.0.5 package: setimmediate 638、source package:sha.js 2.4.11 package: sha.js 639、source package:shadered v1.5.3 package: shadered 640、source package:shasum 1.0.2 package: shasum 641、source package:shebang-command 1.2.0 package: shebang-command 642、source package:shebang-regex 1.0.0 package: shebang-regex 643、source package:shell-quote 1.7.2 package: shell-quote 644、source package:simple-concat 1.0.0 package: simple-concat 645、source package:slash 1.0.0 package: slash 646、source package:slirp4netns 1.2.0-1 package: slirp4netns 647、source package:smooth-scroll-into-view-if-needed 1.1.23 package: smooth-scroll-into-view-if-needed 648、source package:snapdragon 0.8.2 package: snapdragon 649、source package:snapdragon-node 2.1.1 package: snapdragon-node 650、source package:snapdragon-util 3.0.1 package: snapdragon-util 651、source package:source-list-map 2.0.1 package: source-list-map 652、source package:source-map-resolve 0.5.3 package: source-map-resolve 653、source package:source-map-support 0.5.21 package: source-map-support 654、source package:source-map-url 0.4.0 package: source-map-url 655、source package:sourcemap-codec 1.4.8 package: sourcemap-codec 656、source package:sparkles 1.0.1 package: sparkles 657、source package:spdx-expression-parse 3.0.1 package: spdx-expression-parse 658、source package:split-string 3.1.0 package: split-string 659、source package:sqlclosecheck v0.5.0 package: sqlclosecheck 660、source package:sse v0.1.0 package: sse 661、source package:sshpk 1.16.1 package: sshpk 662、source package:static-extend 0.1.2 package: static-extend 663、source package:stdout-stream 1.4.1 package: stdout-stream 664、source package:stream-browserify 2.0.2 package: stream-browserify 665、source package:stream-combiner2 1.1.1 package: stream-combiner2 666、source package:stream-consume 0.1.1 package: stream-consume 667、source package:stream-http 2.8.3 package: stream-http 668、source package:stream-splicer 2.0.1 package: stream-splicer 669、source package:string-width 2.1.1 package: string-width 670、source package:string_decoder 1.3.0 package: string_decoder 671、source package:strip-ansi 4.0.0 package: strip-ansi 672、source package:strip-bom 3.0.0 package: strip-bom 673、source package:strip-eof 1.0.0 package: strip-eof 674、source package:strip-indent 1.0.1 package: strip-indent 675、source package:strip-literal 1.3.0 package: strip-literal 676、source package:subarg 1.0.0 package: subarg 677、source package:sudo 1.9.8p2-1~exp1 package: sudo 678、source package:supports-color 4.5.0 package: supports-color 679、source package:supports-preserve-symlinks-flag 1.0.0 package: supports-preserve-symlinks-flag 680、source package:syntax-error 1.4.0 package: syntax-error 681、source package:sys v0.5.0 package: sys 682、source package:systemjs 6.13.0 package: systemjs 683、source package:tapable 0.2.9 package: tapable 684、source package:testify v1.9.0 package: testify 685、source package:text v0.1.0 package: text 686、source package:through2 2.0.5 package: through2 687、source package:tildify 1.2.0 package: tildify 688、source package:time-stamp 1.1.0 package: time-stamp 689、source package:timers-browserify 2.0.12 package: timers-browserify 690、source package:tiny-invariant 1.0.6 package: tiny-invariant 691、source package:tiny-warning 1.0.3 package: tiny-warning 692、source package:tinyaes 1.0.4rc1 package: tinyaes 693、source package:tlp 1.5.0-1~bpo11+1 package: tlp 694、source package:to-arraybuffer 1.0.1 package: to-arraybuffer 695、source package:to-camel-case 1.0.0 package: to-camel-case 696、source package:to-fast-properties 1.0.3 package: to-fast-properties 697、source package:to-no-case 1.0.2 package: to-no-case 698、source package:to-object-path 0.3.0 package: to-object-path 699、source package:to-regex 3.0.2 package: to-regex 700、source package:to-regex-range 5.0.1 package: to-regex-range 701、source package:to-space-case 1.0.0 package: to-space-case 702、source package:toml v1.3.2 package: toml 703、source package:tools v0.6.0 package: tools 704、source package:tortellini 4f6795a package: tortellini 705、source package:trim-newlines 1.0.0 package: trim-newlines 706、source package:trim-right 1.0.1 package: trim-right 707、source package:tty-browserify 0.0.1 package: tty-browserify 708、source package:typedarray 0.0.6 package: typedarray 709、source package:uglify-to-browserify 1.0.2 package: uglify-to-browserify 710、source package:uglifyjs-webpack-plugin 0.4.6 package: uglifyjs-webpack-plugin 711、source package:umd 3.0.3 package: umd 712、source package:unc-path-regex 0.1.2 package: unc-path-regex 713、source package:unimport 1.3.0 package: unimport 714、source package:union-value 1.0.1 package: union-value 715、source package:unique-stream 1.0.0 package: unique-stream 716、source package:universal-translator v0.16.0 package: universal-translator 717、source package:unplugin-auto-import 0.11.5 package: unplugin-auto-import 718、source package:unplugin-vue-components 0.22.12 package: unplugin-vue-components 719、source package:unset-value 1.0.0 package: unset-value 720、source package:upath 1.2.0 package: upath 721、source package:urix 0.1.0 package: urix 722、source package:url 0.11.0 package: url 723、source package:use 3.1.1 package: use 724、source package:user-home 1.1.1 package: user-home 725、source package:util 0.11.1 package: util 726、source package:util-deprecate 1.0.2 package: util-deprecate 727、source package:uuid 3.3.3 package: uuid 728、source package:v-drag 3.0.9 package: v-drag 729、source package:v8flags 2.1.1 package: v8flags 730、source package:value-equal 0.4.0 package: value-equal 731、source package:verror 1.10.0 package: verror 732、source package:vinyl 2.2.0 package: vinyl 733、source package:vinyl-buffer 1.0.1 package: vinyl-buffer 734、source package:vinyl-fs 0.3.14 package: vinyl-fs 735、source package:vinyl-source-stream 2.0.0 package: vinyl-source-stream 736、source package:vm-browserify 1.1.2 package: vm-browserify 737、source package:vue-codemirror 6.1.1 package: vue-codemirror 738、source package:vue-demi 0.13.11 package: vue-demi 739、source package:vue-router 4.1.5 package: vue-router 740、source package:w3c-keyname 2.2.8 package: w3c-keyname 741、source package:warning 4.0.3 package: warning 742、source package:watchpack 1.7.4 package: watchpack 743、source package:watchpack-chokidar2 2.0.0 package: watchpack-chokidar2 744、source package:webpack 3.12.0 package: webpack 745、source package:webpack-sources 3.2.3 package: webpack-sources 746、source package:webpack-virtual-modules 0.6.1 package: webpack-virtual-modules 747、source package:window-size 0.1.0 package: window-size 748、source package:wireplumber 0.4.9-1 package: wireplumber 749、source package:wordwrap 0.0.2 package: wordwrap 750、source package:wrap-ansi 2.1.0 package: wrap-ansi 751、source package:x11-utils 7.7~1_sparc package: x11-utils 752、source package:x11-xserver-utils 7.7~3_sparc package: x11-xserver-utils 753、source package:x11proto-record-dev 2020.1-1_all package: x11proto-record-dev 754、source package:x11proto-xext-dev 7.3.0-1_all package: x11proto-xext-dev 755、source package:xcb-proto 1.7.1.orig package: xcb-proto 756、source package:xdg-utils 1.1.3-4.1 package: xdg-utils 757、source package:xkb-data 2.5.1-3_all package: xkb-data 758、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 759、source package:xserver-xorg-input-all 7.7+7_s390x package: xserver-xorg-input-all 760、source package:xserver-xorg-video-all 7.7+7_s390x package: xserver-xorg-video-all 761、source package:xtend 4.0.2 package: xtend 762、source package:xwayland 2:23.1.1-1 package: xwayland 763、source package:yargs 8.0.2 package: yargs Open Source Software Licensed under the Expat: 1、source package:golang-github-adrg-xdg-dev 0.4.0-2 package: golang-github-adrg-xdg-dev 2、source package:golang-github-disintegration-imaging-dev 1.6.2-2 package: golang-github-disintegration-imaging-dev 3、source package:golang-github-smartystreets-goconvey-dev 1.6.4+dfsg-1_all package: golang-github-smartystreets-goconvey-dev 4、source package:golang-github-stretchr-testify-dev 1.8.0-1~bpo11+1 package: golang-github-stretchr-testify-dev 5、source package:golang-github-teambition-rrule-go-dev 1.8.1-1 package: golang-github-teambition-rrule-go-dev 6、source package:golang-gopkg-alecthomas-kingpin.v2-dev 2.2.6-4 package: golang-gopkg-alecthomas-kingpin.v2-dev 7、source package:intel-media-va-driver-non-free 23.2.3+ds1-1 package: intel-media-va-driver-non-free 8、source package:libepoxy-dev 1.5.9-2 package: libepoxy-dev 9、source package:libiniparser-dev 4.1-4_s390x package: libiniparser-dev 10、source package:libinput-dev 1.6.3-1_s390x package: libinput-dev 11、source package:libjson-c-dev 0.16-2 package: libjson-c-dev 12、source package:libmtdev-dev 1.1.6-1_s390x package: libmtdev-dev 13、source package:libsass-dev 3.6.4-4~exp_s390x package: libsass-dev 14、source package:libspdlog-dev 1:1.3.1-1 package: libspdlog-dev 15、source package:libutf8proc-dev 2.7.0-4 package: libutf8proc-dev 16、source package:libva-dev 2.8.0-1_s390x package: libva-dev 17、source package:nlohmann-json3-dev 3.9.1-1 package: nlohmann-json3-dev 18、source package:rapidjson-dev 1.1.0-1 package: rapidjson-dev 19、source package:va-driver-all 2.8.0-1_s390x package: va-driver-all 20、source package:wayland-protocols 1.9-1 package: wayland-protocols Open Source Software Licensed under the BSD-3-Clause: 1、source package:DocxFactory 91131f28 package: DocxFactory 2、source package:alsa-topology-conf 1.2.5.1-2 package: alsa-topology-conf 3、source package:alsa-ucm-conf 1.2.9-1 package: alsa-ucm-conf 4、source package:amdefine 1.0.1 package: amdefine 5、source package:android-pdfium a56ccce4 package: android-pdfium 6、source package:apt 2.7.1 package: apt 7、source package:bcrypt-pbkdf 1.0.2 package: bcrypt-pbkdf 8、source package:browserify 14.5.0 package: browserify 9、source package:charenc 0.0.2 package: charenc 10、source package:chromium 87.0.4280.88-0.4 package: chromium 11、source package:cmake v3.27.0-rc5 package: cmake 12、source package:coost v3.0.0 package: coost 13、source package:crypt 0.0.2 package: crypt 14、source package:crypto v0.13.0 package: crypto 15、source package:css-select 1.2.0 package: css-select 16、source package:css-what 2.1.3 package: css-what 17、source package:dns v1.1.52 package: dns 18、source package:dnsutils 970203-0.1 package: dnsutils 19、source package:duplexer2 0.1.4 package: duplexer2 20、source package:entities 1.1.2 package: entities 21、source package:errwrap v1.5.0 package: errwrap 22、source package:external/github.com/protocolbuffers/protobuf v3.7.0-rc.3 package: external/github.com/protocolbuffers/protobuf 23、source package:extra-cmake-modules 5.98.0-2 package: extra-cmake-modules 24、source package:ffmpeg 7:6.0-3 package: ffmpeg 25、source package:fsnotify v1.6.0 package: fsnotify 26、source package:go-cmp v0.6.0 package: go-cmp 27、source package:golang 2:1.7~5~bpo8+1 package: golang 28、source package:golang-any 1.7~5~bpo8+1_s390x package: golang-any 29、source package:golang-github-fsnotify-fsnotify-dev 1.6.0-1 package: golang-github-fsnotify-fsnotify-dev 30、source package:golang-github-miekg-dns-dev 1.1.50-2 package: golang-github-miekg-dns-dev 31、source package:golang-github-rickb777-date-dev 1.20.1-1 package: golang-github-rickb777-date-dev 32、source package:golang-go 1.7~5~bpo8+1_ppc64el package: golang-go 33、source package:golang-golang-x-sys-dev 0.3.0-1+hurd.1 package: golang-golang-x-sys-dev 34、source package:golang-golang-x-xerrors-dev 0.0~git20191204.9bdfabe-1~bpo10+1 package: golang-golang-x-xerrors-dev 35、source package:golang-google-protobuf-dev 1.28.1-3 package: golang-google-protobuf-dev 36、source package:gstreamer1.0-plugins-base 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-base 37、source package:gstreamer1.0-plugins-good 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-plugins-good 38、source package:gstreamer1.0-pulseaudio 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-pulseaudio 39、source package:gstreamer1.0-x 1.4.4-2_kfreebsd-i386 package: gstreamer1.0-x 40、source package:hoist-non-react-statics 2.5.5 package: hoist-non-react-statics 41、source package:ieee754 1.2.1 package: ieee754 42、source package:init 1.65~exp2 package: init 43、source package:iputils-ping 20190709-3_s390x package: iputils-ping 44、source package:js-base64 2.5.1 package: js-base64 45、source package:json-schema 0.2.3 package: json-schema 46、source package:libcli11-dev 2.1.2+ds-1 package: libcli11-dev 47、source package:libgmock-dev 1.9.0.20190831-3 package: libgmock-dev 48、source package:libgoogle-glog-dev 0.4.0-1_s390x package: libgoogle-glog-dev 49、source package:libgstreamer-plugins-base1.0-0 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-0 50、source package:libgstreamer-plugins-base1.0-dev 1.4.4-2_kfreebsd-i386 package: libgstreamer-plugins-base1.0-dev 51、source package:libgtest-dev 1.9.0.20190831-1_s390x package: libgtest-dev 52、source package:libjpeg-dev 2.0.5-1_all package: libjpeg-dev 53、source package:libnl-3-dev 3.4.0-1~bpo9+1_s390x package: libnl-3-dev 54、source package:libnl-genl-3-dev 3.4.0-1~bpo9+1_s390x package: libnl-genl-3-dev 55、source package:libnl-route-3-dev 3.4.0-1~bpo9+1_s390x package: libnl-route-3-dev 56、source package:libpcap-dev 1.9.1-4~bpo10+1_s390x package: libpcap-dev 57、source package:libtirpc-common 1.2.6-1_all package: libtirpc-common 58、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 59、source package:locales 2.31-0experimental0_all package: locales 60、source package:lxqt-build-tools 0.8.0-1 package: lxqt-build-tools 61、source package:marked 1.2.3 package: marked 62、source package:md5 2.2.1 package: md5 63、source package:mmkv-static 1.2.10 package: mmkv-static 64、source package:mod v0.8.0 package: mod 65、source package:mount 2.9g-6 package: mount 66、source package:net v0.15.0 package: net 67、source package:node 8.16.1 package: node 68、source package:normalize-wheel-es 1.2.0 package: normalize-wheel-es 69、source package:nth-check 1.0.2 package: nth-check 70、source package:onboard 1.4.1-5_s390x package: onboard 71、source package:passwd 980403-0.3 package: passwd 72、source package:pflag v1.0.5 package: pflag 73、source package:protobuf v1.3.2 package: protobuf 74、source package:python3-click 8.1.6-1 package: python3-click 75、source package:qml-module-qtgraphicaleffects 5.7.1~20161021-3_s390x package: qml-module-qtgraphicaleffects 76、source package:qs 6.5.2 package: qs 77、source package:qtermwidget 0.14.1 package: qtermwidget 78、source package:regenerator-transform 0.10.1 package: regenerator-transform 79、source package:regjsparser 0.1.5 package: regjsparser 80、source package:sass 1.55.0 package: sass 81、source package:sha.js 2.4.11 package: sha.js 82、source package:source-map 0.6.1 package: source-map 83、source package:spdx-license-ids 3.0.6 package: spdx-license-ids 84、source package:sys v0.6.0 package: sys 85、source package:syscall_intercept 4b3a3b5 package: syscall_intercept 86、source package:term v0.13.0 package: term 87、source package:terser 5.15.1 package: terser 88、source package:text v0.13.0 package: text 89、source package:tough-cookie 2.4.3 package: tough-cookie 90、source package:uglify-js 2.8.29 package: uglify-js 91、source package:util-linux 2.5-12 package: util-linux 92、source package:uuid v1.3.0 package: uuid 93、source package:wpasupplicant 2.9.0-12_s390x package: wpasupplicant 94、source package:xdotool 3.20160805.1-4_s390x package: xdotool 95、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 96、source package:xsettingsd 1.0.2-1 package: xsettingsd 97、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the BSD-2-Clause: 1、source package:DocxFactory 91131f28 package: DocxFactory 2、source package:block-stream 0.0.9 package: block-stream 3、source package:coost v3.0.0 package: coost 4、source package:domelementtype 1.3.1 package: domelementtype 5、source package:domhandler 2.4.2 package: domhandler 6、source package:domutils 1.5.1 package: domutils 7、source package:doxyqml 0.3.0-1.1.debian package: doxyqml 8、source package:escope 3.6.0 package: escope 9、source package:esrecurse 4.3.0 package: esrecurse 10、source package:estraverse 5.2.0 package: estraverse 11、source package:esutils 2.0.3 package: esutils 12、source package:ffmpeg 7:6.0-3 package: ffmpeg 13、source package:glob 3.1.21 package: glob 14、source package:golang-dbus-dev 5.1.0-1~bpo11+1 package: golang-dbus-dev 15、source package:golang-github-msteinert-pam-dev 1.1.0-1 package: golang-github-msteinert-pam-dev 16、source package:golang-gopkg-check.v1-dev 0.0+git20200902.038fdea-1 package: golang-gopkg-check.v1-dev 17、source package:graceful-fs 1.2.3 package: graceful-fs 18、source package:libarchive-dev 3.4.0-2~bpo9+1_amd64 package: libarchive-dev 19、source package:libtag1-dev 1.9.1-2~bpo70+1_sparc package: libtag1-dev 20、source package:libtss2-dev 2.4.0-1_s390x package: libtss2-dev 21、source package:libtss2-tcti-tabrmd0 3.0.0-1 package: libtss2-tcti-tabrmd0 22、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 23、source package:normalize-package-data 2.5.0 package: normalize-package-data 24、source package:sdparm 1.12-1 package: sdparm 25、source package:shim-signed 1.39~1+deb11u1 package: shim-signed 26、source package:shim-unsigned 15+1533136590.3beb971-9_i386 package: shim-unsigned 27、source package:smartmontools 7.3-1 package: smartmontools 28、source package:tpm2-abrmd 3.0.0-1 package: tpm2-abrmd 29、source package:tt v1.0.1 package: tt 30、source package:uri-js 4.4.0 package: uri-js 31、source package:usb-modeswitch 2.6.1.orig package: usb-modeswitch Open Source Software Licensed under the MPL-2.0: 1、source package:browser-desktop 87.0-729282885 package: browser-desktop 2、source package:dompurify 2.4.1 package: dompurify 3、source package:libjwt-dev 1.9.0-4_mips64el package: libjwt-dev 4、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter Open Source Software Licensed under the MPL-1.1: 1、source package:libcairo2-dev 1.16.0-4_s390x package: libcairo2-dev 2、source package:libchardet 1.0.3 package: libchardet 3、source package:libpam-gnome-keyring 3.4.1-5_sparc package: libpam-gnome-keyring 4、source package:libtag1-dev 1.9.1-2~bpo70+1_sparc package: libtag1-dev Open Source Software Licensed under the AFL-2.1: 1、source package:python3-dbus 1.2.8-3_s390x package: python3-dbus Open Source Software Licensed under the AGPL-1.0-only: 1、source package:spdx-license-ids 3.0.6 package: spdx-license-ids Open Source Software Licensed under the AGPL-3.0-only: 1、source package:nging v3.5.2 package: nging 2、source package:sobjectizer 1.2.3 package: sobjectizer Open Source Software Licensed under the Apache-2.0 or LGPL-3+: 1、source package:liblucene++-dev 3.0.7-8+b2_s390x package: liblucene++-dev Open Source Software Licensed under the Apache-2.0-with-GPL2-LGPL2-Exception: 1、source package:cups 2.4.2-3+deb12u1 package: cups Open Source Software Licensed under the Artistic or GPL-1+: 1、source package:libfile-mimeinfo-perl 0.33-1 package: libfile-mimeinfo-perl 2、source package:perl-openssl-defaults 7 package: perl-openssl-defaults Open Source Software Licensed under the Artistic-2.0: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the BSD: 1、source package:compiler 4.12.0 package: compiler 2、source package:ffmpeg 7:6.0-3 package: ffmpeg 3、source package:glide 4.12.0 package: glide 4、source package:libnet-dev 1.2-rc3 package: libnet-dev 5、source package:libvncserver LibVNCServer-0.9.14 package: libvncserver 6、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 7、source package:node 8.16.1 package: node 8、source package:smartmontools 7.3-1 package: smartmontools 9、source package:zip 3.0-9 package: zip Open Source Software Licensed under the BSD-1-Clause: 1、source package:ffmpeg 7:6.0-3 package: ffmpeg Open Source Software Licensed under the BSD-3-clause: 1、source package:tpm2-tools 5.4-1 package: tpm2-tools Open Source Software Licensed under the BSD-3-clause or GPL-2: 1、source package:libcap-dev 2.36-1_mips64el package: libcap-dev 2、source package:libcap2-bin 2.36-1_s390x package: libcap2-bin Open Source Software Licensed under the BSD-4-Clause: 1、source package:unalz 0.65-9 package: unalz Open Source Software Licensed under the BSD-Source-Code: 1、source package:iputils-ping 20190709-3_s390x package: iputils-ping Open Source Software Licensed under the BSL-1.0: 1、source package:ffmpeg 7:6.0-3 package: ffmpeg Open Source Software Licensed under the Bitstream-Vera: 1、source package:fontconfig 2.9.0.orig package: fontconfig Open Source Software Licensed under the Brian-Gladman-3-Clause: 1、source package:libzip-dev 1.6.1-3_s390x package: libzip-dev 2、source package:libzip4 1.6.1-3_s390x package: libzip4 Open Source Software Licensed under the CC-BY-3.0: 1、source package:spdx-exceptions 2.3.0 package: spdx-exceptions Open Source Software Licensed under the CC-BY-4.0: 1、source package:caniuse-lite 1.0.30000989 package: caniuse-lite Open Source Software Licensed under the CC-BY-SA-4.0: 1、source package:glob 7.1.4 package: glob Open Source Software Licensed under the CC0-1.0: 1、source package:spdx-license-ids 3.0.6 package: spdx-license-ids Open Source Software Licensed under the CDDL-1.0: 1、source package:libraw-dev 0.9.1-1+deb6u1 package: libraw-dev Open Source Software Licensed under the CPL-1.0: 1、source package:graphviz 2.8-3+etch1 package: graphviz 2、source package:junit 4.11 package: junit Open Source Software Licensed under the EPL-1.0: 1、source package:aspectjrt 1.9.6 package: aspectjrt 2、source package:junit 4.13.2 package: junit Open Source Software Licensed under the FTL: 1、source package:freetype VER-2-10-3 package: freetype 2、source package:libfreetype-dev 2.13.0+dfsg-1 package: libfreetype-dev Open Source Software Licensed under the Font-exception-2.0: 1、source package:ttf-unifont 9.0.06-2_all package: ttf-unifont 2、source package:xfonts-wqy 1.0.0~rc1-7 package: xfonts-wqy Open Source Software Licensed under the GFDL-1.2-only: 1、source package:kdevelop v22.11.80 package: kdevelop Open Source Software Licensed under the GPL+ and GPLv2+ and MIT and Redistributable no modification permitted: 1、source package:linux-firmware 20230824 package: linux-firmware Open Source Software Licensed under the GPL-2 or GPL-2+: 1、source package:ipheth-utils 1.0-5_s390x package: ipheth-utils Open Source Software Licensed under the GPL-2 with Font embedding exception and M+ FONTS License: 1、source package:fonts-wqy-zenhei 0.9.45-8 package: fonts-wqy-zenhei Open Source Software Licensed under the GPL-2 with OpenSSL exception: 1、source package:barrier 2.4.0+dfsg-2 package: barrier Open Source Software Licensed under the GPL-2+ and LGPL-2+: 1、source package:xdg-desktop-portal-gtk 1.8.0-1~bpo10+1 package: xdg-desktop-portal-gtk Open Source Software Licensed under the GPL-2+ or AFL-2.1: 1、source package:dbus 1.9.8-1 package: dbus 2、source package:dbus-user-session 1.13.8-1_s390x package: dbus-user-session 3、source package:dbus-x11 1.8.22-0+deb8u1_s390x package: dbus-x11 4、source package:libdbus-1-dev 1.8.22-0+deb8u1_s390x package: libdbus-1-dev Open Source Software Licensed under the GPL-2+ or FTL: 1、source package:libfreetype6-dev 2.9.1-4_s390x package: libfreetype6-dev Open Source Software Licensed under the GPL-2+ or LGPL-2.1 or LGPL-3.0: 1、source package:libquazip5-dev 0.7.6-6_s390x package: libquazip5-dev Open Source Software Licensed under the GPL-2+ with OpenSSL exception: 1、source package:cryptsetup 2:2.6.1-4 package: cryptsetup 2、source package:cryptsetup-initramfs 2.3.1-1_all package: cryptsetup-initramfs 3、source package:libcryptsetup12 2.3.1-1_s390x package: libcryptsetup12 Open Source Software Licensed under the GPL-2+ with SSL exception: 1、source package:remmina 1.4.8+dfsg-2~bpo10+2 package: remmina 2、source package:remmina-plugin-rdp 1.4.7+dfsg-1_s390x package: remmina-plugin-rdp 3、source package:remmina-plugin-vnc 1.4.7+dfsg-1_s390x package: remmina-plugin-vnc Open Source Software Licensed under the GPL-2+ with sane exception: 1、source package:libsane-dev 1.2.1-4 package: libsane-dev Open Source Software Licensed under the GPL-2.0 or GPL-3.0 or FIPL-1.0: 1、source package:libfreeimage-dev 3.18.0+ds2-3_s390x package: libfreeimage-dev Open Source Software Licensed under the GPL-2.0+ or LGPL-2.1+: 1、source package:fcitx5-frontend-gtk3 0.0~git20200606.fc335f1-2_s390x package: fcitx5-frontend-gtk3 Open Source Software Licensed under the GPL-3 with Qt-1.0 exception: 1、source package:qttools5-dev 5.9.2-4_kfreebsd-i386 package: qttools5-dev 2、source package:qttools5-dev-tools 5.9.2-4_kfreebsd-i386 package: qttools5-dev-tools 3、source package:qttranslations5-l10n 5.9.2-1 package: qttranslations5-l10n Open Source Software Licensed under the GPL-3+ or Less: 1、source package:less 590-2 package: less Open Source Software Licensed under the GPL-3+ with OpenSSL exception: 1、source package:libdmr-dev 5.7.6.147-1 package: libdmr-dev Open Source Software Licensed under the GPL-3.0-with-Qt-1.0-exception: 1、source package:libqt5webchannel5-dev 5.7.1-2_s390x package: libqt5webchannel5-dev 2、source package:qml-module-qtwebchannel 5.9.2-3 package: qml-module-qtwebchannel Open Source Software Licensed under the GPL-any: 1、source package:command-not-found 23.04.0-1 package: command-not-found Open Source Software Licensed under the Hylafax: 1、source package:libtiff-dev 4.1.0+git191117-2~deb10u1_s390x package: libtiff-dev Open Source Software Licensed under the ICU: 1、source package:node 8.16.1 package: node 2、source package:x11-xserver-utils 7.7~3_sparc package: x11-xserver-utils 3、source package:xkb-data 2.5.1-3_all package: xkb-data 4、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 5、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the ISC: 1、source package:abbrev 1.1.1 package: abbrev 2、source package:anymatch 3.1.2 package: anymatch 3、source package:aproba 1.2.0 package: aproba 4、source package:are-we-there-yet 1.1.5 package: are-we-there-yet 5、source package:boolbase 1.0.0 package: boolbase 6、source package:browserify-sign 4.2.1 package: browserify-sign 7、source package:cliui 4.1.0 package: cliui 8、source package:color-support 1.1.3 package: color-support 9、source package:concat-with-sourcemaps 1.1.0 package: concat-with-sourcemaps 10、source package:console-control-strings 1.1.0 package: console-control-strings 11、source package:crda 4.14+git20191112.9856751.orig package: crda 12、source package:d 1.0.1 package: d 13、source package:distro-info-data 0.9~bpo60+1 package: distro-info-data 14、source package:electron-to-chromium 1.3.254 package: electron-to-chromium 15、source package:es5-ext 0.10.53 package: es5-ext 16、source package:es6-symbol 3.1.3 package: es6-symbol 17、source package:es6-weak-map 2.0.3 package: es6-weak-map 18、source package:ext 1.4.0 package: ext 19、source package:fastq 1.13.0 package: fastq 20、source package:ffmpeg 7:6.0-3 package: ffmpeg 21、source package:fs 0.0.1-security package: fs 22、source package:fs.realpath 1.0.0 package: fs.realpath 23、source package:fstream 1.0.12 package: fstream 24、source package:gauge 2.7.4 package: gauge 25、source package:get-caller-file 1.0.3 package: get-caller-file 26、source package:glob 7.1.4 package: glob 27、source package:glob-parent 5.1.2 package: glob-parent 28、source package:go-spew v1.1.1 package: go-spew 29、source package:go-wav v0.3.2 package: go-wav 30、source package:golang-github-nfnt-resize-dev 0.0~git20180221.83c6a99-2_all package: golang-github-nfnt-resize-dev 31、source package:graceful-fs 4.2.4 package: graceful-fs 32、source package:har-schema 2.0.0 package: har-schema 33、source package:has-unicode 2.0.1 package: has-unicode 34、source package:hosted-git-info 2.8.8 package: hosted-git-info 35、source package:in-publish 2.0.0 package: in-publish 36、source package:inflight 1.0.6 package: inflight 37、source package:inherits 2.0.4 package: inherits 38、source package:ini 1.3.5 package: ini 39、source package:isexe 2.0.0 package: isexe 40、source package:json-stringify-safe 5.0.1 package: json-stringify-safe 41、source package:lru-cache 4.1.5 package: lru-cache 42、source package:minimalistic-assert 1.0.1 package: minimalistic-assert 43、source package:minimatch 5.1.6 package: minimatch 44、source package:natives 1.1.6 package: natives 45、source package:node 8.16.1 package: node 46、source package:node-bin-setup 1.0.6 package: node-bin-setup 47、source package:nopt 3.0.6 package: nopt 48、source package:npmlog 4.1.2 package: npmlog 49、source package:once 1.4.0 package: once 50、source package:osenv 0.1.5 package: osenv 51、source package:parse-asn1 5.1.6 package: parse-asn1 52、source package:pkgconf 1.8.1-2 package: pkgconf 53、source package:pseudomap 1.0.2 package: pseudomap 54、source package:python3-dnspython 2.4.0~rc1-1 package: python3-dnspython 55、source package:remove-trailing-separator 1.1.0 package: remove-trailing-separator 56、source package:require-main-filename 1.0.1 package: require-main-filename 57、source package:rimraf 2.7.1 package: rimraf 58、source package:rollup 2.79.1 package: rollup 59、source package:semver 5.7.1 package: semver 60、source package:set-blocking 2.0.0 package: set-blocking 61、source package:sigmund 1.0.1 package: sigmund 62、source package:signal-exit 3.0.3 package: signal-exit 63、source package:tar 2.2.2 package: tar 64、source package:type 2.1.0 package: type 65、source package:vinyl-sourcemaps-apply 0.2.1 package: vinyl-sourcemaps-apply 66、source package:which 1.3.1 package: which 67、source package:which-module 2.0.0 package: which-module 68、source package:wide-align 1.1.3 package: wide-align 69、source package:wrappy 1.0.2 package: wrappy 70、source package:y18n 3.2.1 package: y18n 71、source package:yallist 2.1.2 package: yallist 72、source package:yargs-parser 8.1.0 package: yargs-parser Open Source Software Licensed under the ImageMagick: 1、source package:DocxFactory 91131f28 package: DocxFactory Open Source Software Licensed under the Info-ZIP: 1、source package:unzip 6.0.orig package: unzip Open Source Software Licensed under the LGPL: 1、source package:ffmpeg 7:6.0-3 package: ffmpeg 2、source package:libatspi2.0-dev 2.5.3-2_sparc package: libatspi2.0-dev 3、source package:liblightdm-qt-dev 1.26.0-5_s390x package: liblightdm-qt-dev 4、source package:lightdm 1.9.9-1 package: lightdm 5、source package:slirp4netns 1.2.0-1 package: slirp4netns 6、source package:smartmontools 7.3-1 package: smartmontools Open Source Software Licensed under the LGPL-2+ and LGPL-2.1+: 1、source package:ostree 2023.3-2 package: ostree Open Source Software Licensed under the LGPL-2+ and LGPL-2.1+ and FSFULLR and CC0-1.0 and Janik-permissive and Iconv-PD and Mingw-PD and Old-GLib-Tests-permissive: 1、source package:libglib2.0-bin 2.76.4-1 package: libglib2.0-bin Open Source Software Licensed under the LGPL-2.0+ and Expat: 1、source package:policykit-1 122-4 package: policykit-1 Open Source Software Licensed under the LGPL-2.0-or-later: 1、source package:bubblewrap 0~git160513-2 package: bubblewrap 2、source package:gvfs-backends 1.44.1-1_s390x package: gvfs-backends 3、source package:gvfs-bin 1.44.1-1_s390x package: gvfs-bin 4、source package:gvfs-fuse 1.44.1-1_s390x package: gvfs-fuse 5、source package:kcalcore 5:5.85.0-2 package: kcalcore 6、source package:kdeclarative 5.100.0-1 package: kdeclarative 7、source package:libasound2-dev 1.2.2-2.3_ppc64el package: libasound2-dev 8、source package:libgdk-pixbuf2.0-0 2.40.2-3 package: libgdk-pixbuf2.0-0 9、source package:libgdk-pixbuf2.0-dev 2.40.0+dfsg-5_s390x package: libgdk-pixbuf2.0-dev 10、source package:libkf5itemviews-dev 5.70.0-1_s390x package: libkf5itemviews-dev 11、source package:libkf5widgetsaddons-dev 5.70.0-1_s390x package: libkf5widgetsaddons-dev 12、source package:libmtp-runtime 1.1.9-3~bpo8+1 package: libmtp-runtime 13、source package:libpolkit-agent-1-dev 0.116-2_s390x package: libpolkit-agent-1-dev 14、source package:libpolkit-qt5-1-dev 0.112.0-7_s390x package: libpolkit-qt5-1-dev 15、source package:librsvg2-bin 2.48.7-1_ppc64el package: librsvg2-bin 16、source package:platform/external/e2fsprogs lollipop-dev package: platform/external/e2fsprogs 17、source package:xdg-desktop-portal 1.8.1-1~bpo10+1 package: xdg-desktop-portal Open Source Software Licensed under the LGPL-2.1 or MPL-2.0: 1、source package:libical-dev 3.0.8-2_mipsel package: libical-dev Open Source Software Licensed under the LGPL-3 or GPL-2-or-3 with KDE Exception: 1、source package:qml6-module-qtwebchannel 6.4.2~rc1-3 package: qml6-module-qtwebchannel Open Source Software Licensed under the LGPL-3Qt-1.1Exception or GPL-2Qt-1.1Exception: 1、source package:qml-module-qtwebengine 5.7.1+dfsg-6.1_mipsel package: qml-module-qtwebengine 2、source package:qtwebengine5-dev 5.7.1+dfsg-6.1_mipsel package: qtwebengine5-dev Open Source Software Licensed under the LGPLv2 with exceptions or GPLv3 with exceptions and GFDL: 1、source package:libqt6svg6 6.4.1 package: libqt6svg6 Open Source Software Licensed under the Libpng: 1、source package:libpng-dev 1.6.37-2_s390x package: libpng-dev 2、source package:libsdl2-dev 2.0.9+dfsg1-1_s390x package: libsdl2-dev Open Source Software Licensed under the Linux-syscall-note: 1、source package:pinn 0.0 package: pinn Open Source Software Licensed under the MITNFA: 1、source package:through2 0.6.5 package: through2 Open Source Software Licensed under the MPL-1.1 or GPL-2+ or LGPL-2.1+: 1、source package:libchardet-dev 1.0.4-1_s390x package: libchardet-dev 2、source package:libchardet1 1.0.4-1_s390x package: libchardet1 3、source package:libuchardet-dev 0.0.7-1_s390x package: libuchardet-dev 4、source package:libuchardet0 0.0.7-1_s390x package: libuchardet0 Open Source Software Licensed under the NAIST-2003: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the Net-SNMP: 1、source package:sudo 1.9.8p2-1~exp1 package: sudo Open Source Software Licensed under the OFL-1.1: 1、source package:fonts-intel-one-mono 1.2.1-2 package: fonts-intel-one-mono 2、source package:fonts-lohit-deva 2.95.4.orig package: fonts-lohit-deva 3、source package:fonts-noto 20201225-1 package: fonts-noto 4、source package:fonts-noto-mono 20200323-1_all package: fonts-noto-mono Open Source Software Licensed under the OpenSSL: 1、source package:libssl1.1 1.1.1~~pre9-1 package: libssl1.1 2、source package:node 8.16.1 package: node Open Source Software Licensed under the PD: 1、source package:xz-utils 5.4.1-0.2 package: xz-utils Open Source Software Licensed under the Public Domain: 1、source package:debianutils 5.8-1 package: debianutils 2、source package:ffmpeg 7:6.0-3 package: ffmpeg 3、source package:grub-efi-amd64-signed 1+2.06+8.1 package: grub-efi-amd64-signed 4、source package:grub-efi-arm64-signed 1+2.06+8.1 package: grub-efi-arm64-signed 5、source package:jsonify 0.0.0 package: jsonify 6、source package:libatspi2.0-dev 2.5.3-2_sparc package: libatspi2.0-dev 7、source package:libsqlite3-0 3.8.7.1-1_kfreebsd-i386 package: libsqlite3-0 8、source package:libsqlite3-dev 3.8.7.1-1_kfreebsd-i386 package: libsqlite3-dev 9、source package:sqlite3 3.9.2-1 package: sqlite3 10、source package:tzdata 2023c-7 package: tzdata Open Source Software Licensed under the Python-2.0: 1、source package:python3 3.8.2-3_s390x package: python3 Open Source Software Licensed under the Qt-GPL-exception-1.0: 1、source package:qtremoteobjects v5.11.0-rc2 package: qtremoteobjects Open Source Software Licensed under the Rdisc: 1、source package:iputils-ping 20190709-3_s390x package: iputils-ping Open Source Software Licensed under the SGI-B-1.1: 1、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 2、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the SGI-B-2.0: 1、source package:libegl1-mesa-dev 8.0.5-4+deb7u2_sparc package: libegl1-mesa-dev 2、source package:libgbm-dev 8.0.5-4+deb7u2_sparc package: libgbm-dev 3、source package:xserver-xorg-core 1.20.8-2_s390x package: xserver-xorg-core 4、source package:xwayland 2:23.1.1-1 package: xwayland Open Source Software Licensed under the SIL-1.1: 1、source package:fonts-noto-cjk 20190410+repack1-2.debian package: fonts-noto-cjk Open Source Software Licensed under the SSLeay: 1、source package:libssl1.1 1.1.1~~pre9-1 package: libssl1.1 Open Source Software Licensed under the Sleepycat: 1、source package:go-difflib v1.0.0 package: go-difflib Open Source Software Licensed under the The Bugly Software License Version 1.0: 1、source package:crashreport 3.4.4 package: crashreport 2、source package:nativecrashreport 3.9.2 package: nativecrashreport Open Source Software Licensed under the Unicode-DFS-2015: 1、source package:DocxFactory 91131f28 package: DocxFactory Open Source Software Licensed under the Unicode-DFS-2016: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the Unicode-TOU: 1、source package:node 8.16.1 package: node Open Source Software Licensed under the Unlicense: 1、source package:ncompress 4.2.4.6.orig package: ncompress 2、source package:tortellini 4f6795a package: tortellini 3、source package:tweetnacl 0.14.5 package: tweetnacl Open Source Software Licensed under the Vim: 1、source package:vim 8.2.0716.orig package: vim Open Source Software Licensed under the X11: 1、source package:libwayland-dev 1.6.0-2_s390x package: libwayland-dev 2、source package:libxcb-image0-dev 0.4.0-1_s390x package: libxcb-image0-dev 3、source package:libxcb-keysyms1-dev 0.4.0-1_s390x package: libxcb-keysyms1-dev 4、source package:libyaml-cpp-dev 0.6.3-9_s390x package: libyaml-cpp-dev 5、source package:ncurses-base 6.2-1_all package: ncurses-base 6、source package:wordwrap 0.0.2 package: wordwrap Open Source Software Licensed under the Xnet: 1、source package:onboard 1.4.1-5_s390x package: onboard Open Source Software Licensed under the Zlib: 1、source package:avfs 1.1.4-2 package: avfs 2、source package:ffmpeg 7:6.0-3 package: ffmpeg 3、source package:libminizip-dev 1.1-8_hurd-i386 package: libminizip-dev 4、source package:libsdl2-dev 2.0.9+dfsg1-1_s390x package: libsdl2-dev 5、source package:libxlsxwriter RELEASE_1.0.0 package: libxlsxwriter 6、source package:node 8.16.1 package: node 7、source package:pako 1.0.11 package: pako 8、source package:pigz 2.6-1 package: pigz 9、source package:unalz 0.65-9 package: unalz 10、source package:zlib1g 1.2.8.dfsg-5_s390x package: zlib1g 11、source package:zlib1g-dev 1:1.2.3.3.dfsg-1 package: zlib1g-dev Open Source Software Licensed under the copyleft-next-0.3.0: 1、source package:crda 4.14+git20191112.9856751.orig package: crda Open Source Software Licensed under the cryptsetup-OpenSSL-exception: 1、source package:aria2 1.9.5-1 package: aria2 2、source package:libcryptsetup-dev 2:2.4.0-1 package: libcryptsetup-dev Open Source Software Licensed under the curl: 1、source package:curl 8.0.1-1~exp1 package: curl 2、source package:libcurl4-openssl-dev 7.68.0-1_s390x package: libcurl4-openssl-dev Open Source Software Licensed under the hdparm: 1、source package:hdparm 9.65+ds-1 package: hdparm Open Source Software Licensed under the nolicense: 1、source package:FreeBSD-Electron v9.0.3 package: FreeBSD-Electron 2、source package:LTSLAM 94d7e0f package: LTSLAM 3、source package:TSFileEditor 0.2.1 package: TSFileEditor 4、source package:asio asio-1-29-0 package: asio 5、source package:chromium-source-tarball 59.0.3071.57 package: chromium-source-tarball 6、source package:geek-navigation 5a521f2 package: geek-navigation 7、source package:gentoo 202 package: gentoo 8、source package:go-urn v1.1.0 package: go-urn 9、source package:imaging v1.6.2 package: imaging 10、source package:kcrash 5.103.0-1 package: kcrash 11、source package:ncnn_paddleocr 9c054d3 package: ncnn_paddleocr 12、source package:plasma-workspace v5.25.90 package: plasma-workspace 13、source package:platform/external/qt emu-29.0-release package: platform/external/qt 14、source package:qtbase v6.5.1 package: qtbase 15、source package:qtxlsxwriter v0.3.0 package: qtxlsxwriter 16、source package:scriptcommunicator_serial-terminal Release_06_02 package: scriptcommunicator_serial-terminal 17、source package:socket v0.4.1 package: socket 18、source package:strace v4.14 package: strace 19、source package:v5 v5.1.0 package: v5 20、source package:wlr-protocols d278d20 package: wlr-protocols Copy of Licenses 【GPL-2.0】 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program 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, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. 【GPL-3.0】 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. https://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program 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 . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see https://www.gnu.org/licenses/. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read https://www.gnu.org/licenses/why-not-lgpl.html. 【LGPL-2.1】 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. 11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. one line to give the library's name and an idea of what it does. Copyright (C) year name of author This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Also add information on how to contact you by electronic and paper mail. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. signature of Ty Coon, 1 April 1990 Ty Coon, President of Vice That's all there is to it! 【LGPL-3.0】 GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. https://fsf.org/ Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. 0. Additional Definitions. As used herein, "this License" refers to version 3 of the GNU Lesser General Public License, and the "GNU GPL" refers to version 3 of the GNU General Public License. "The Library" refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. An "Application" is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. A "Combined Work" is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the "Linked Version". The "Minimal Corresponding Source" for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. The "Corresponding Application Code" for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. 1. Exception to Section 3 of the GNU GPL. You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. 2. Conveying Modified Versions. If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. 3. Object Code Incorporating Material from Library Header Files. The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the object code with a copy of the GNU GPL and this license document. 4. Combined Works. You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. b) Accompany the Combined Work with a copy of the GNU GPL and this license document. c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. d) Do one of the following: Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) 5. Combined Libraries. You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 6. Revised Versions of the GNU Lesser General Public License. The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. 【BSD-2-clause】 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 【BSD-3-clause】 Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of Apple Inc. ("Apple") nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 【The Qt Company GPL Exception 1.0】 Exception 1: As a special exception you may create a larger work which contains the output of this application and distribute that work under terms of your choice, so long as the work is not otherwise derived from or based on this application and so long as the work does not in itself generate output that contains the output from this application in its original or modified form. Exception 2: As a special exception, you have permission to combine this application with Plugins licensed under the terms of your choice, to produce an executable, and to copy and distribute the resulting executable under the terms of your choice. However, the executable must be accompanied by a prominent notice offering all users of the executable the entire source code to this application, excluding the source code of the independent modules, but including any changes you have made to this application, under the terms of this license. 【The Qt Company LGPL Exception version 1.1】 As an additional permission to the GNU Lesser General Public License version 2.1, the object code form of a "work that uses the Library" may incorporate material from a header file that is part of the Library. You may distribute such object code under terms of your choice, provided that: (i) the header files of the Library have not been modified; and (ii) the incorporated material is limited to numerical parameters, data structure layouts, accessors, macros, inline functions and templates; and (iii) you comply with the terms of Section 6 of the GNU Lesser General Public License version 2.1. Moreover, you may apply this exception to a modified version of the Library, provided that such modification does not involve copying material from the Library into the modified Library's header files unless such material is limited to (i) numerical parameters; (ii) data structure layouts; (iii) accessors; and (iv) small macros, templates and inline functions of five lines or less in length. Furthermore, you are not required to apply this additional permission to a modified version of the Library. ================================================ FILE: src/plugin-systeminfo/operation/qrc/gpl/gpl-3.0-zh_TW-title.txt ================================================ Open Source Software Notice ================================================ FILE: src/plugin-systeminfo/operation/qrc/license/deepin-end-user-license-agreement_community_en_US.txt ================================================ Deepin OS Privacy Policy Latest update date:December 8th, 2020 The Privacy Policy sets forth the personal information processed by UnionTech Software as well as its affiliates (including but not limited to Wuhan Deepin Technology Co., Ltd. (hereinafter referred to as “UnionTech Software” or “We”) as well as the way and purpose for processing the personal information. The Privacy Policy applies to the Deepin OS and the related applications (“the software”) that we provides to you, which will be listed and described one by one. You can contact us through the following ways: UnionTech Software Technology Co., Ltd. [Address] Floor 18, Building 12, Yard 10, Kegu First Street, Beijing Economic and Technological Development Zone, Beijing City, PRC [Email] support@UnionTech.com [Tel] 400-8588-488 We are deeply aware of the importance of your personal information to you and will try our utmost to maintain the reliability and security of your personal information. We are committed to maintaining your trust in us and will make unremitting efforts to protect your personal information strictly by the following principles: consistency of rights and responsibilities, clear purposes, choice of consent, minimum sufficiency, ensuring safety, subject participation, openness and transparency, etc. In the meantime, we promise to adopt corresponding security protection measures to protect your personal information according to the mature security standard in the industry. We strive to present the Privacy Policy in a concise, clear and understandable manner. In order to facilitate your reading and understanding, we have defined the special terms about personal information protection. Please go to the “Appendix 1: Definition” in the Privacy Policy for the detailed information about these terms so that you can grasp the information we wish to convene to you accurately. The Privacy Policy will help you to understand the following: I.How we collect and use your personal information II.How we use Cookies and similar technologies III.How we share, transfer and disclose to the public your personal information IV.How we protect your personal information V.How we store your personal information VI.Your rights VII.How we process the minor’s personal information VIII.How we transfer your personal information globally IX.How to update the Privacy Policy X.Our personal information protection department/specialist XI.Your rights to appeal and sue to the regulatory authority Before using our products and services, please read and understand carefully the Privacy Policy, in particular the black and bold part, so that you can better understand our products and services and make an appropriate choice. I. How We Collect and Use Your Personal Information When you use the software products and services, your relevant personal information will be recorded and stored automatically in your local devices, including: Network Identification Information e.g. your IP address, MAC address, etc.; Device Information Including your device motherboard information, BIOS information, CPU information, memory information, hard disk information, partition information, network card information, etc.; Operation System Information Including the operation system software version, the latest update date of the system, system language, system sound effects, power supply, mouse, system theme, wallpaper, launcher, dock, configuration information for hot corners, daily login times and source for each download; Application Software Information For example, the version, installation location, start and exist time of your applications installed in the system. 1.Personal Information You Voluntarily Authorize Us to Collect Only when you actively enable the corresponding business feature, can information of this kind be transmitted through the server to UnionTech Software for processing. Your refusal to enable such features or provide corresponding personal information to UnionTech Software will not affect your normal use of the software. Such business features include: 1.1User Experience Program If you enable the “User Experience Program”, we are authorized to read, record and store the information in your local devices. We will stop collecting such information after “User Experience Program” being disabled by you, including: 1.1.1.Device and System Information The device information includes your device motherboard information, BIOS information, CPU information, memory information, hard disk information, partition information, network card information, etc. The system information includes the system software version, the latest update date of the system, system language, daily active users, source for each download and the operation system performance information during runtime. 1.1.2.Application Software Information For example, the version, installation location, start and exist time of your applications installed in the system and the performance information during runtime. 1.1.3.Exception Information The exception information of the operation system and/or the application during runtime. 1.2Deepin ID Service You can register your Deepin ID in www.deepin.com and log into the software or the products provided by our partners. You can make synchronization of the software configuration and application software of the software between different devices after login. However, such synchronization will be expired after the Deepin ID service being disabled by you. 1.2.1.Deepin ID Registration To realize the service feature and meet the relevant regulatory requirement in the P.R.C, personal mobile number is needed to complete the Deepin ID registration. Due to the regulatory requirements of the P.R.C, it will be unavailable for us to provide you with Deepin ID services if you refuse to provide your mobile number. If you are located outside the P.R.C, you need to provide your personal email address to complete the Deepin ID registration. 1.2.2.System Configuration Synchronization Service You can log into the Deepin ID through the cloud synchronization module of the software control center and authorize to enable the "cloud synchronization" service to synchronize the software configuration between different devices under the same Deepin ID. For this synchronization purpose, the cloud synchronization service will read your device information and system information. Your refusal to provide the foregoing information will not affect the normal operation of other services in the software. 1.2.3.Application Software Synchronization Service You can log into the Deepin ID through the cloud synchronization module of the software control center to synchronize the software application software between different devices under the same Deepin ID. For this synchronization purpose, the application software synchronization service will read your application software information, application software purchase information (including your real-name authentication information and bank account information necessary to complete the payment), history application review data and history reward data. Your refusal to provide the foregoing information will not affect the normal operation of other services in the software. 1.2.4.Browser Service When you browse and visit the website and platform we provide with the pre-installed browser of the software, we will collect through cookies and other similar technologies your device information, system information and browsing information (including your browser version information, favorites information, browsed website records, browser settings, auto-populated data (we will save your user account and password filling record when permitted.) as well as your IP address. Please refer to [Part II] “How We Use Cookies and Similar Technologies” for details. 1.2.5.Application Store Service We will collect your device information, system information and application information when you download, install and uninstall applications with the pre-installed application store of the software. You can comment on and/or rate the applications in the application store after login with your Deepin ID. The comments and/or rating information will be stored in association with your Deepin ID. 2.Collecting Your Personal Information Automatically When You Use software Products and Services When you use some features of the software products and services, we will automatically collect the relevant information, which may include your personal information. Such features include: 2.1.Desktop AI Assistant/Voice Notepad The desktop AI assistant service is integrated into the software and co-provided by our partners and us. When you input texts via the desktop AI assistant or use the voice notepad feature, our partner will directly collect your voice content to conduct technical analysis and convert it to texts. As for the detailed description for the information shared to the partners, please refer to [Part III] “How We Share, Transfer and Disclose Your Personal Information” in Privacy Policy in detail. 2.2.System Upgrade When you upgrade the Deepin OS products and services, we will collect your device ID, system mainline version, system version number and other information for us to clarify your system information, so as to help you update accurately. The collected information will be anonymized. 3.Conducting Internal Audit, Big Data Analysis and Research 3.1.We will conduct necessary internal audit with the personal information collected within UnionTech Software. 3.2.We will use the personal information collected for big data analysis. For example, the collected information will be used to analyze and form statistical products excluding personal information, display the overall picture of UnionTech Software services, analyze the behavior patterns of different groups, etc. We may disclose to the public or share with our affiliates and partners the processed statistical big data information without identification. 4.Safety and Security We will use your personal information for purposes such as ensuring the security of your personal devices and accounts, the security of our operation as well as fulfilling our legal obligations (for example, saving the information that may involve illegal and criminal activities). 5.Other Usage 5.1.We will seek your explicit consent in advance when using the information collected for a specific purpose for other purposes. 5.2.However, in accordance with the relevant laws and regulations as well as the national standards, we may collect and use your personal information without seeking your authorization and consent under the following circumstances: 5.2.1.personal information directly related to national security, national defence security and other national interests; personal information directly related to public safety, public health, public information and other major public interests; 5.2.2.personal information directly related to crime investigation, prosecution, trial and judgement execution, etc.; 5.2.3.for the purpose of protecting your and other individual’s important legal rights and interests such as life, property, reputation, etc. but difficult to get the person’s consent; 5.2.4.personal information collected that is disclosed to the public by yourself; 5.2.5.personal information collected from legally and publicly disclosed information, such as legal news report, government information disclosure, etc.; 5.2.6.personal information needed to sign and fulfil a contract at your request; 5.2.7.personal information needed for maintaining the safe and stable operation of the products and services provided, for example, finding and handling the faults of products and services; 5.2.8.personal information needed for legal news reporting; 5.2.9.personal information which is needed for conducting statistical and academic research in public interests but de-identified in the academic research results or its description results offered to the outside world; 5.2.10.other circumstances under the provisions of laws and regulations. II.How to Use Cookies and Similar Technologies 6.Cookie 6.1.We will store on your computer or mobile device a small text file called Cookie, which usually contains the identifier, website name, some numbers and characters. With the assistance of Cookies, we can store your preferences in our web servers and provide you more personalized user experience and services. 6.1.1.We will not use Cookies for other purposes except for those described in this Privacy Policy. You can choose to manage or delete Cookies according to your preference. Please refer to AboutCookies.org for details. 6.1.2.You can clear all the Cookies saved on your computer. Most web browsers have the Cookie blocking feature and you can learn and set it in your browser settings. 7.Do Not Track Many web browsers have a Do Not Track feature that may send Do Not Track requests to websites. At present, major Internet standards organizations have not yet established policies to regulate how websites should respond to such requests. But if your browser has Do Not Track enabled, your choice will be respected in all of our sites. III.How We Share, Transfer and Disclose to the Public Your Personal Information 1.Sharing 1.1.We will not share your personal information with any company, organization or individual other than UnionTech Software except for the flowing circumstances: 1.1.1.Sharing with explicit consent: We will share with others your personal information after obtaining your explicit consent. 1.1.2.We may share your personal information externally in accordance with the laws and regulations or the mandatory request of the government authorities. 1.1.3.Sharing with authorized partners: For the purpose of the Privacy Policy statement only, some of our services are jointly provided by our authorized partners. We may share with the partners some of your personal information in order to provide better custom services and user experiences. We will share your personal information necessary for providing services only for the legal, proper, necessary, specific and clear purposes. Our partners are not authorized to use the shared information for other purposes. For the company, organization or individual that we share information with, we will sign a strict confidentiality agreement demanding them to deal with the personal information according to our instructions, the Privacy Policy as well as other related confidentiality and security measures. Please refer to the below for the detailed information of authorized partner sharing: Cooperation Type: Voice service Partner Name: IFLYTEK CO., LTD. Cooperation Purpose: Speech content text conversion technology Cooperation Mode: Transmitting the personal information by embedding third-party codes and plugins. Shared Personal Information Field: Voice information content Partner Data Security Capacity Description: National Information Security Level Protection Level 3 Certification 1.1.4.It should be specially noted that when related service providers provide services to you through third-party access such as page jumps to service provider pages, the corresponding service provider will directly reach the corresponding personal information authorization license with you and such information directly collected by the service provider is not within the scope of the information we share with them. In the case where the service is provided directly by a third party, we will clearly identify the third party information on the specific service page. To avoid ambiguity, you should be aware of and understand that the aforementioned links to websites, applications, products and services operated by independent third parties are provided only for the convenience of users to browse relevant pages. When you visit such third-party websites, applications, products and services, you should agree separately to the privacy policy and personal information protection clauses provided for you. We and such third-party websites, applications, products and services providers will assume independent personal information protection responsibilities respectively to you within the scope stipulated by law and agreed by both parties. 2.Transfer We will not transfer your personal information to any company, organization or individual except for the following circumstances: 2.1.Having obtained your explicit authorization and consent in advance; 2.2.When it comes to merger, acquisition or bankruptcy liquidation, if it involves personal information transfer, we will require the new company and organization holding your personal information continue to be bound by the Privacy Policy. Otherwise we will demand the company and organization to seek your authorization and consent again. 3.Public Disclosure We will disclose your personal information publicly only under the following circumstances and under the premise of adopting the security protection measures that conform to the industry standard: 3.1.Disclosing the specified personal information in the manner you explicitly consent according to your needs; 3.2.Where it is necessary to provide your personal information in accordance with the requirements of laws, regulations, mandatory administrative enforcement or judicial requirements, we may publicly disclose your personal information in accordance with the type of personal information and the manner of disclosure required. Subject to laws and regulations, when we receive the above request for information disclosure, we will require the corresponding legal documents, such as subpoenas or investigation letters. We firmly believe that the information we are required to provide should be as transparent as possible to the extent permitted by law. All requests are carefully reviewed to ensure that they have a legitimate basis and are limited to data obtained by law enforcement agencies for specific investigative purposes and with legal rights. To the extent permitted by laws and regulations, the files we disclose are protected by encryption keys. IV.How We Protect Your Personal Information 1.Various security technologies and protective measures meeting the industry standard have been adopted in the website to prevent the personal information of users from unauthorized access, use or leakage. This website strictly complies with domestic and foreign security standards to build a security system and integrates cutting-edge and mainstream security technologies to prevent users' personal information from being accessed, used and leaked without authorization. The sound security protection system established makes it available to intercept the attack timely and actively when the website encounters external network attack and virus infection. Each application platform of this website uses the HTTPS encryption protocol for transmission during the network communication, which can effectively prevent the information from being stolen by third parties during the communication between the user and the platform. The user's privacy and sensitive data is stored in an encrypted manner and is backed up in real time in the website. 2.A sound data security management system has been established in this website, including grading and classification of user information, encrypted storage as well as division of data access rights. Internal data management system and operation procedure haven been formulated in which the strict process requirements for data acquisition, use and destruction prevent the user information from being illegally used. Here are the details: defining the security management responsibility for each department and responsible personnel accessing the personal information of users; formulating the workflow and security management process for personal information collection and use and related activities of users; implementing authority management for staff and agents, reviewing the information exported, copied and destroyed in batch and adopting anti-leakage measures; properly keeping the paper media, optical media and electromagnetic media and other carriers that record the personal information of users and adopting corresponding security storage measures; implementing access review for the information system that stores personal information of users and adopting anti-intrusion and anti-virus measures, etc.; recording the processing information for the personal information of users, such as operation staff, time, place and events; holding security and privacy training periodically to raise the staff’s awareness of information protection. 3.We will adopt all reasonable and feasible measures to ensure that irrelevant personal information is not collected. Unless permitted by law or the retention period needs to extend, we will only retain your personal information for the period needed to achieve the purposes in this Privacy Policy. 4.We will regularly update and disclose the relevant contents of reports such as security risks and personal information security impact assessments in accordance with the laws and regulations and the requirements of competent authorities. 5.The Internet environment is not 100% secure and we will try our utmost to ensure or guarantee the security of any information you send us. If our physical, technical, or management protection facilities are damaged, resulting in unauthorized access, public disclosure, tampering or destruction of information, resulting in damage to your legitimate rights and interests, we will assume corresponding legal responsibility. 6.In the unfortunate event of a personal information security incident, we will promptly inform you of the basic situation and possible impact of the security incident, the emergency response taken or to be taken, other relevant disposal measures, remedies for you, etc. in accordance with the laws and regulations, through the station letter/the contact information you reserve, etc. in a timely manner. If it is difficult to notify the individual information subjects one by one, we will take a reasonable and effective way to issue an announcement and will actively report the disposition of personal information security incidents to the relevant regulatory authorities. 7.If you have any questions about the protection of our personal information, you can contact us through the contact information in [Part X] of this Policy. If you find that your personal information has been leaked, please contact us immediately through the contact methods stipulated in this policy so that we can take appropriate measures in a timely manner. V.How We Store Your Personal Information We will adopt all reasonable and feasible measures to ensure that irrelevant personal information is not collected. We will store your personal information within the scope permitted by the laws and regulations and within the scope agreed by you. As for the information storage time exceeding the scope permitted by law, we delete or anonymize it. If there is no other agreement, you commit that we can permanently store your personal information collected based on the “User Experience Program” to maintain and improve the stability and security of our services. Meanwhile, you agree that after disabling your Deepin ID account, we have the right to keep your purchase, comment and rating records in the Application Store generated during your use of Deepin ID till the expiration period of three years due to the transaction security requirements. The remaining personal information of the Deepin ID account will be deleted in time after you disable your account. VI.Your Rights We will try our utmost to adopt appropriate technical measures to ensure that you can access, update and correct your registration information or other personal information provided when using the website services. 1.Accessing Your Personal Information Unless otherwise provided by the laws and regulations, you have the right to access your personal information. You can access your information yourself by: 1.1.Account Information/Basic User Information: If you want to access or edit basic personal information in your Deepin ID, such as mobile phone number, email address, gender, education information, career information or other personal information, you can log into the Deepin ID registration website and perform such operations in “[User Center]”. 1.2.Transaction Information: If you expect to access your history reward records, you can inquire your purchase records and other information related to application purchase in “Personal Center” in Application Store. 1.3.If you cannot access your personal information through the methods aforementioned, you can contact us at any time via the contact information described in [Part X] and we will respond to your access request within [15] days. 1.4.As for the personal information generated during your use of our products and services, we will provide it according to relevant arrangement in item (7) “Responding to Your Requests Aforementioned” of this part. 2.Correcting Inaccurate or incomplete Personal Information 2.1.You can correct or supplement some of your personal information yourself in your [Personal Center]. In particular, please pay attention to verifying the authenticity, timeliness, completeness and accuracy of the personal information submitted, otherwise we will not be able to contact you effectively and provide you with some services. If we have reasonable grounds to suspect that your information provided is incorrect, incomplete or untrue, we have the right to ask you or notify you to correct it or even suspend or terminate some of the services provided to you. 2.2.Some special information may not be corrected by yourself. You can contact us through the contact information published in [Part X] of this Policy. We will respond to your access request within [15] days. To ensure the security of your account, we may require you to verify your identity. 3.Revoking Consent or Processing Restrictions 3.1.You can change the scope of your personal information that you authorize us to collect and use by deleting information, turning off features of the device/tool or performing other feasible privacy settings (depending on the system version). 3.2.If you are unable to revoke your authorized consent through the methods aforementioned, you can contact us at any time via the contact information in [Part X] and explain which consent you expect to revoke to perform such operations. We will respond to your access request within [15] days. 3.3.When you revoke your consent, we will no longer process your corresponding personal information. However, your decision to revoke your consent will not affect the legality of the processing of personal information previously based on your authorization. 4.Deleting Personal Information 4.1.You can raise your request to delete your personal information from the website under the following circumstances: 4.1.1.Our processing of personal information is inconsistent with the laws and regulations or the agreement with you; 4.1.2.Our collection and use of your personal information without your explicit consent; 4.1.3.We terminate to provide or you terminate actively the product and service of this website. 4.2.If we decide to respond to your request for deletion, we will also notify the third parties (including affiliates of this website) who have obtained your personal information from us at the same time and ask these third parties to delete your personal information in a timely manner, unless otherwise provided by the laws and regulations or such third parties have obtained your independent authorization. 4.3.We may not delete the corresponding information from our backup system after you delete your personal information from the website but will delete it when the backup is updated. 4.4.If you are unable to delete such personal information through the above path, you can contact us at any time through the customer service of this website. To ensure the security of your account, we may require you to verify your identity. 5.Canceling Accounts 5.1.Deepin ID supports account cancellation. You can cancel it yourself by accessing [Account Information in Personal Center] or contact us to cancel your Deepin ID through the contact information published in [Part X] of this Policy. To ensure the security of your account, we may require you to verify your identity. 5.2.After canceling your account, we will terminate the services provided for you and delete your personal information at your request within the time limit stipulated by law unless otherwise provided by the laws and regulations or agreed between us. 6.Obtaining the Copy of Personal Information 6.1.You have the right to send a written request to obtain your copy of personal information through the contact information published in the Policy. 6.2.As long as the technology is feasible, such as data interface matching, we can also directly transfer a copy of your personal information to your designated third party according to your requirements and existing common technologies. If the transmission fails due to the third-party’s refusal to receive a copy of your personal information, you should coordinate with these third parties to resolve it by yourself and we will not be responsible for it. 7.Responding to Your Requests Aforementioned 7.1.To ensure the security of your account, you may need to offer a written request or otherwise verify your identity. We may demand you to verify your identity before processing your request. 7.2.We will respond within [15] days. If you are not satisfied, you can complain through the channels in [Part X] of this Policy. 7.3.For your reasonable request, we do not charge fees in principle, but for repeated requests that exceed a reasonable limit, we will charge a certain cost as appropriate. For those that are unreasonably repetitive, requiring excessive technical means (for example, needing to develop new systems or fundamentally changing existing practices), posing risks to the legitimate rights and interests of others or highly impractical (for example, involving information stored on backup tapes), we may reject them. 7.4.Subject to the laws and regulations, we will be unable to respond to your request under the following circumstances: 7.4.1.Directly related to national security and national defence security; 7.4.2.Directly related to public safety, public health and major public interests; 7.4.3.Directly related to crime investigation, prosecution, trial and judgment enforcement; 7.4.4.Having sufficient evidence to prove that you use your rights subjectively, maliciously and abusively; 7.4.5.Responding to your request will result in severe damage to your, other people or organization’s legitimate rights and interests; 7.4.6.Involving trade secrets; 7.4.7.Other circumstances stipulated by law. VII.How we Process the Minor’s Personal Information 1.Our products and services are only available to users over 14 years old. If you are under 14 years, you should provide your legal guardian's contact information (such as email address and phone number). We will contact your legal guardian through the contact information and take reasonable steps to obtain the express authorization and consent of your legal guardian; you should clearly understand that if we discover or suspect that you are under the age of 14, we can suspend or terminate the service to you at any time until you provide us with proof that you are over 14 years old, or assist us in obtaining express authorization and consent from your legal guardian. 2.For the collection of the minor's personal information with the consent of the legal guardian, including the legal guardian's insurance for minors, etc., we will only use or publicly disclose this information when it is permitted by law, expressly agreed by the legal guardian or necessary for the protection of minors. 3.If we find that we have collected the personal information from a minor without the prior consent of a verifiable parent or other legal guardian, we will try to delete the data as soon as possible. VIII.How We Transfer Your Personal Information Globally 1.We will store personal information collected in each country/region in accordance with the laws and regulations of each country/region. 2.We will store personal information collected in China in accordance with Chinese laws and regulations. 3.We reserve the right to transfer your personal information to other government jurisdictions. Your consent to this Privacy Policy and such data you submit or we collect represent your consent to any such transfer. In this case, we will transfer your personal information and provide adequate protection in accordance with the relevant laws and regulations and this Privacy Policy. IX.How to Update the Privacy Policy 1.Our privacy policy may change. We will not reduce your rights under the Privacy Policy without your explicit consent. We will release an updated version of the Privacy Policy. 2.For significant changes, we will also provide more prominent notices (including sending notifications via email for some services and explaining the specific changes to the Privacy Policy). 3.Significant changes in Privacy Policy include but not limited to: 3.1.Significant changes in our products and service modes, including the purpose of processing the personal information, the type of the personal information processed, the way in which the personal information is used, etc.; 3.2.Significant changes in ownership structure, organization structure, etc., such as changes caused by business adjustments, bankruptcy, merger and acquisition; 3.3.Changes in the main object of personal information sharing, transfer or disclosure; 3.4.Significant changes in your right to participate in the processing of personal information and how you exercise it; 3.5.Changes in our responsible department for processing personal information security, contact methods and complaint channels; 3.6.Existence of high risks indicated by an impact assessment report on personal data security. X.Our Personal Information Protection Department/Specialist 1.We have appointed a personal information protection organization to be responsible for coordinating and monitoring UnionTech Software in compliance with and implementation of the laws and regulations and internal policies and systems related to the protection of personal information. 2.If you have any questions, comments or suggestions about this Privacy Policy, you can contact us through the following methods. In general, we will reply within 30 days or a longer period allowed by applicable laws and regulations. Personal information protection department/specialist: [Legal Affairs Department] Address: [Floor 18, Building 12, Yard 10, Kegu First Street, Beijing Economic and Technological Development Zone, Beijing City, PRC] Tel: [010-62669253] Email: [privacy@UnionTech.com] XI.Complaining and Suing to the Regulatory Department If you are dissatisfied with our response, especially when you believe that our personal information processing actions have harmed your legitimate rights and interests and no agreement can be reached through negotiation, you have the right to lodge a complaint with the relevant personal information protection supervision authority or either party can bring a law suit to the People's Court located in [Daxing District, Beijing]. Appendix 1: Definition Personal Information Personal information refers to all kinds of information recorded electronically or otherwise that can identify the identity of a specific natural person or reflect the activity of a specific natural person either alone or in combination with other information, including but not limited to the name, date of birth, identification number, personal biometric information, address, and telephone number of a natural person. Personal Sensitive Information Personal sensitive information refers to the personal information that, if leaked, illegally provided or abused, may endanger personal and property safety and easily lead to damage to personal reputation, physical and mental health, or discriminatory treatment. For example, personal sensitive information includes personal phone numbers, ID numbers, web browsing records, personal biometric information, bank account numbers, communication records and content, property information, credit information, whereabouts, accommodation information, precise positioning information, physiological health Information, transaction information, personal information of minors under 14 years old (including minors of 14 years old), etc. ================================================ FILE: src/plugin-systeminfo/operation/qrc/license/deepin-end-user-license-agreement_community_zh_CN.txt ================================================ 深度操作系统隐私政策 最近更新日期:2020年【12】月【08】日。 本隐私政策阐述了统信软件技术有限公司及其关联公司(特别是武汉深之度科技有限公司)(以下简称“统信软件”或者“我们”)处理的个人信息以及我们处理个人数据的方式和目的。本隐私政策适用范围包括我们向您提供的深度操作系统及相关应用程序(以下简称为“本软件”),我们会在本隐私政策中逐一列举说明。 您可以通过以下方式与我们取得联系: 统信软件技术有限公司 【地址】北京市北京经济技术开发区科谷一街10号院12号楼18层 【邮件】support@uniontech.com 【电话】400-8588-488 我们深知个人信息对您的重要性,并会尽全力保护您的个人信息安全可靠。我们致力于维持您对我们的信任,恪守以下原则,保护您的个人信息:权责一致原则、目的明确原则、选择同意原则、最少够用原则、确保安全原则、主体参与原则、公开透明原则等。同时,统信软件承诺,我们将按业界成熟的安全标准,采取相应的安全保护措施来保护您的个人信息。 我们努力以简明、清晰、易于理解的方式展现本隐私政策。为了便于您阅读及理解,我们将涉及个人信息保护的专门术语进行了定义,请前往本隐私政策“附录1:定义”来了解这些术语的具体内容,以便您准确掌握我们希望向您表达的信息。 本政策将帮助您了解以下内容: 一、我们如何收集和使用您的个人信息 二、我们如何使用 Cookie 和同类技术 三、我们如何共享、转让、公开披露您的个人信息 四、我们如何保护您的个人信息 五、我们如何存储您的个人信息 六、您的权利 七、我们如何处理未成年人的个人信息 八、您的个人信息如何在全球范围转移 九、本政策如何更新 十、我们的个人信息保护部门/专员 十一、您向监管部门申诉或者提起诉讼的权利 请在使用我们的产品或服务前,仔细阅读并了解本隐私政策,尤其是加黑加粗部分,以便您更好地了解我们提供的各项产品及服务,并作出适当的选择。 一、我们如何收集和使用您的个人信息 当您使用本软件产品及服务时,相关个人信息将自动记录并存储于您的本地设备中。此类信息包括: ●网络标识信息 例如您的IP地址,MAC地址等 ●设备信息 包括您的设备主板信息、BIOS信息、CPU信息、内存信息、硬盘信息、分区信息、网卡信息等; ●操作系统信息 包括操作系统软件版本、系统最后一次更新时间、系统语言、系统音效、电源、鼠标、系统主题、壁纸、启动器、任务栏、热区的配置信息、每日登录系统的次数、每次下载使用源信息。 ●应用软件信息 例如您安装在系统内的各应用版本、安装位置、各应用启动/退出时间信息。 1.您主动授权我们收集的个人信息 仅当您主动开启相应业务功能时,该类信息才会通过服务器传输到统信软件处理。您拒绝开启此类业务功能或向统信软件提供相应个人信息不会影响您使用本软件产品。此类业务功能包括: 1.1.用户体验计划 若您开启“用户体验计划”,则您将授权我们读取记录并存储在您的本地设备中的相关信息。您关闭“用户体验计划”后我们将停止收集此类信息。该类信息包括: 1.1.1.设备及系统信息 设备信息包括您的设备主板信息、BIOS信息、CPU信息、内存信息、硬盘信息、分区信息、网卡信息等;系统信息包括系统软件版本、系统最后一次更新时间、系统语言、日活用户、每次下载使用源信息;运行期间的操作系统性能信息。 1.1.2.应用软件信息 例如您安装在系统内的各应用版本、安装位置、各应用启动/退出时间信息,应用运行期间的性能信息。 1.1.3 异常信息 在操作系统运行期间发生异常和/或应用运行期间发生异常时的运行信息。 1.2.Deepin ID服务 您可以通过我们的网站(www.deepin.com)注册Deepin ID并登录到本软件或我们的合作伙伴提供的产品。在本软件中登录账户后,您可以在不同设备之间实现本软件的系统配置和应用软件同步。您关闭Deepin ID服务后,您的系统配置和应用软件将不能再继续在各设备之间同步。 1.2.1.Deepin ID注册 为实现本服务功能并符合中华人民共和国相关监管要求,您需要提供个人手机号码以完成Deepin ID注册。受限于中华人民共和国监管要求,若您拒绝提供手机号码,我们将无法向您提供Deepin ID服务。若您位于中华人民共和国以外的其他地区,您需要提供个人邮箱地址以完成Deepin ID注册。 1.2.2.系统配置同步服务 若您通过本软件控制中心的云同步模块登录Deepin ID并授权开启“云同步”开关,以实现您在使用同一Deepin ID下不同设备间的配置同步。出于该同步目的,云同步服务将会读取您的设备信息和系统信息。您拒绝提供前述信息不会导致本软件其他服务的正常提供。 1.2.3.应用软件同步服务 您可以通过本软件控制中心的云同步模块登录Deepin ID,以实现同一Deepin ID下不同设备间的本软件应用软件同步。出于该同步目的,应用软件同步服务将会读取您的应用软件信息、应用软件购买信息(包括您为完成支付所必须的实名认证信息和银行账户信息)、历史应用评论数据、历史打赏数据。您拒绝提供前述信息不会导致本软件其他服务的正常提供。 1.2.4.浏览器服务 若您使用本软件预装的浏览器并访问和浏览我们提供的网站或平台时,我们会通过cookie或其他技术方式收集您的设备信息、系统信息和浏览信息(包括您使用浏览器的版本信息、收藏夹信息、网页浏览记录、浏览器设置、自动填充数据(在您的许可下,我们将保存您的用户名和登录密码的填充记录)及您的IP地址,详见【第二部分】“我们如何使用 Cookie 和同类技术”。 1.2.5. 应用商店服务 若您使用本软件预装的应用商店来下载、安装和卸载应用软件时,我们会收集您的设备信息、系统信息和应用软件信息。您在登录了Deepin ID之后可以对应用商店中的应用进行评价和/或评分,该评价和/或评分信息会和您Deepin ID一起关联存储。 2.在您使用本软件产品及服务时我们自动收集的您的个人信息 在您使用本软件产品及服务的部分功能,我们将自动收集相关信息,该等信息中可能包括您的个人信息。此类功能包括: 2.1.桌面智能助手/语音记事本 桌面智能助手服务集成于本软件中,由我们联合我们的合作方向您提供。当您使用桌面智能助手通过语音输入文字,或使用语音记事本功能时,我们的合作方将会直接收集该等语音内容用以进行技术分析并转化为文字。有关此类信息共享至合作方的详细说明,详见本隐私政策【第三部分】“我们如何共享、转让、公开披露您的个人信息”的说明。 2.2.系统更新 当您升级本软件产品及服务时,我们将会收集您的设备ID、系统主线版本、系统版本号等信息,供我们明确您的系统信息从而帮助您准确更新。该等收集的信息均会进行匿名化处理。 3.开展内部审计、大数据分析和研究 3.1.我们将使用收集的个人信息在统信软件内部进行必要的内部审计。 3.2.我们会将所收集到的个人信息用于大数据分析。例如,我们将收集到的信息用于分析形成不包含任何个人信息的统计类产品,展示统信软件服务的整体全貌,分析不同群体的行为模式等。我们可能对外公开并与我们的关联方和合作伙伴分享经统计加工后不含身份识别内容的大数据分析信息。 4.安全保障 我们还会将您的个人信息用于保障您的个人设备安全、账户安全、我们的运营安全及履行我们的法律义务(例如留存可能涉及违法犯罪活动信息)等用途。 5.其他使用 5.1.当我们要将基于特定目的收集而来的信息用于其他目的时,会事先征求您的明确同意。 5.2.但是,根据相关法律法规及国家标准,以下情形中,我们可能会收集、使用您的相关个人信息无需征求您的授权同意: 5.2.1.与国家安全、国防安全等国家利益直接相关的;与公共安全、公共卫生、公众知情等重大公共利益直接相关的; 5.2.2.与犯罪侦查、起诉、审判和判决执行等直接相关的; 5.2.3.出于维护您或其他个人的生命、财产、声誉等重大合法权益但又很难得到本人同意的; 5.2.4.所收集的个人信息是您自行向社会公众公开的; 5.2.5.从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道; 5.2.6.根据您要求签订和履行合同所必需的; 5.2.7.用于维护所提供的产品或服务的安全稳定运行所必需的,例如发现、处置产品或服务的故障; 5.2.8.为开展合法的新闻报道所必需的; 5.2.9.出于公共利益开展统计或学术研究所必要,且其对外提供学术研究或描述的结果时,对结果中所包含的个人信息进行去标识化处理的; 5.2.10.法律法规规定的其他情形。 二、我们如何使用 Cookie 和同类技术 1.Cookie 1.1.我们会在您的计算机或移动设备上存储称为 Cookie 的小文本文件。Cookie 通常包含标识符、站点名称以及一些号码和字符。借助于 Cookie,我们的网络服务器能够存储您的偏好,为您提供更个性化的用户体验和服务。 1.1.1.我们不会将 Cookie 用于本政策所述目的之外的任何用途。您可根据自己的偏好管理或删除 Cookie。有关详情,请参见 AboutCookies.org。 1.1.2.您可以清除计算机上保存的所有 Cookie,大部分网络浏览器都设有阻止 Cookie 的功能,您可在您使用的浏览器设置中了解和设置。 2.Do Not Track(请勿追踪) 很多网络浏览器均设有Do Not Track功能,该功能可向网站发布 Do Not Track 请求。目前,主要互联网标准组织尚未设立相关政策来规定网站应如何应对此类请求。但如果您的浏览器启用了Do Not Track,那么我们的所有网站都会尊重您的选择。 三、我们如何共享、转让、公开披露您的个人信息 1.共享 1.1.我们不会与统信软件以外的任何公司、组织和个人分享您的个人信息,但以下情况除外: 1.1.1.在获取明确同意的情况下共享:获得您的明确同意后,我们会与其他方共享您的个人信息。 1.1.2.我们可能会根据法律法规规定,或按政府主管部门的强制性要求,对外共享您的个人信息。 1.1.3.与授权合作伙伴共享:仅为实现本隐私政策声明的目的,我们的某些服务将由我们授权合作伙伴共同提供。我们可能会与合作伙伴共享您的某些个人信息,以提供更好的客户服务和用户体验。我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,并且只会共享提供服务所必要的个人信息。我们的合作伙伴无权将共享的个人信息用于任何其他用途。对我们与之共享个人信息的公司、组织和个人,我们会与其签署严格的保密协定,要求他们按照我们的说明、本隐私政策以及其他任何相关的保密和安全措施来处理个人信息。 授权合作伙伴共享的具体情况,请参见如下: 语音服务 合作伙伴名称:科大讯飞股份有限公司 合作目的:语音内容文本转化技术 合作方式:嵌入第三方代码、插件传输个人信息 共享个人信息字段:语音信息内容 合作伙伴数据安全能力描述:国家信息安全等级保护三级认证 1.1.4.需要特别提请您注意的是,当相关服务提供商以页面跳转至服务商页面等第三方接入的方式向您提供服务时,相应的服务提供商将直接与您达成相应的个人信息授权使用许可,该等由服务提供商直接收集的个人信息并非我们向其共享的个人信息范围。该等由第三方直接提供服务的情形我们将会在具体服务页面中明确标识第三方信息。为避免歧义,您应知悉并了解,前述由独立第三方运营的网站、应用程序、产品和服务的链接,仅为方便用户浏览相关页面而提供。当您访问该等第三方网站、应用程序、产品和服务链接时,应另行同意其为您提供的隐私政策或个人信息保护条款。我们与该等第三方网站、应用程序、产品和服务提供者在法律规定和双方约定的范围内各自向您承担独立的个人信息保护责任。 2.转让 我们不会将您的个人信息转让给任何公司、组织和个人,但以下情况除外: 2.1.事先获取您明确的授权同意; 2.2.在涉及合并、收购或破产清算时,如涉及到个人信息转让,我们会在要求新的持有您个人信息的公司、组织继续受此隐私政策的约束,否则我们将要求该公司、组织重新向您征求授权同意。 3.公开披露 我们仅会在以下情况下,且采取符合业界标准的安全防护措施的前提下,公开披露您的个人信息: 3.1.根据您的需求,在您明确同意的披露方式下披露您所指定的个人信息; 3.2.根据法律、法规的要求、强制性的行政执法或司法要求所必须提供您个人信息的情况下,我们可能会依据所要求的个人信息类型和披露方式公开披露您的个人信息。在符合法律法规的前提下,当我们收到上述披露信息的请求时,我们会要求必须出具与之相应的法律文件,如传票或调查函。我们坚信,对于要求我们提供的信息,应该在法律允许的范围内尽可能保持透明。我们对所有的请求都进行了慎重的审查,以确保其具备合法依据,且仅限于执法部门因特定调查目的且有合法权利获取的数据。在法律法规许可的前提下,我们披露的文件均在加密密钥的保护之下。 四、我们如何保护您的个人信息 1.本网站已采用符合业界标准的各种安全技术和防护措施保护用户的个人信息不被未经授权地访问、使用或泄漏。本网站严格遵循国内外的安全标准进行安全体系搭建,并结合前沿、主流的安全技术进行落地,防止用户的个人信息在未经授权时被访问、使用、泄露。建立了完善的安全防御体系,当网站受到外部的网络攻击、病毒感染时,能对攻击行为进行及时主动拦截。本网站各应用平台均在网络通信过程中采用HTTPS加密协议传输,能够有效避免用户与平台通信过程中信息被第三方窃取。涉及到用户的隐私、敏感数据,在本网站系统中都采用加密的方式进行保存,并实时进行数据备份。 2.本网站已经建立了健全的数据安全管理体系,包括对用户信息进行分级分类、加密保存、数据访问权限划分。制定了内部数据管理制度和操作规程,从数据的获取、使用、销毁都有严格的流程要求,避免用户隐私数据被非法使用。确定接触用户个人信息的各部门及其负责人安全管理责任;建立用户个人信息收集、使用及其相关活动的工作流程和安全管理制度;对工作人员及代理人实行权限管理,对批量导出、复制、销毁信息实行审查,并采取防泄密措施;妥善保管记录用户个人信息的纸介质、光介质、电磁介质等载体,并采取相应的安全储存措施;对储存用户个人信息的信息系统实行接入审查,并采取防入侵、防病毒等措施;记录对用户个人信息进行操作的人员、时间、地点、事项等信息;定期举办安全和隐私保护培训,提高员工的个人信息保护意识。 3.我们会采取一切合理可行的措施,确保未收集无关的个人信息。我们只会在达成本政策所述目的所需的期限内保留您的个人信息,除非需要延长保留期或受到法律的允许。 4.我们将根据法律法规和主管部门的要求,定期更新并公开安全风险、个人信息安全影响评估等报告的有关内容。 5.互联网环境并非百分之百安全,我们将尽力确保或担保您发送给我们的任何信息的安全性。如果我们的物理、技术、或管理防护设施遭到破坏,导致信息被非授权访问、公开披露、篡改、或毁坏,导致您的合法权益受损,我们将承担相应的法律责任。 6.若不幸发生个人信息安全事件的,我们将按照法律法规要求,及时通过站内信/您预留的联系方式等向您告知安全事件的基本情况和可能的影响、我们已采取或将采取的应急响应及其他有关处置措施、对您的补救措施等。若难以逐一告知个人信息主体时,我们将采取合理、有效的方式发布公告并将主动向有关监管部门上报个人信息安全事件的处置情况。 7.如果您对我们的个人信息保护有任何疑问,可通过本政策【第十部分】的联系方式联系我们。若您发现您的个人信息泄露时,请您立即通过本政策约定的联系方式与我们联系,以便我们及时采取相应措施。 五、我们如何存储您的个人信息 1.我们会采取一切合理可行的措施,确保未收集无关的个人信息。我们将在法律法规允许的范围内及与您的约定范围内存储您的个人信息,存储时间如超出法律的允许范围外,我们将进行删除或匿名化处理。 2.若无其他约定,您同意在您注销Deepin ID账户后,出于交易安全需求,我们有权保留您在使用Deepin ID期间于应用商店产生的购买、评论及评分记录直至届满三年;其余Deepin ID账户个人信息我们将在您注销账户后及时删除。 六、您的权利 我们将尽最大努力采取适当的技术手段,保障您可以访问、更新和更正自己的注册信息或使用本网站服务时提供的其他个人信息。 1.访问您的个人信息 除法律法规另有规定,您有权访问您的个人信息。您可以通过以下方式自行访问您的信息: 1.1.账户信息/用户基本信息:如果您希望访问或编辑您的Deepin ID中的个人基本信息,如手机号码、邮箱地址、性别、教育信息、职业信息或其他个人资料信息,您可以登录Deepin ID注册网站,通过“[用户中心]”执行此类操作 1.2.交易信息:如果您希望访问您的历史打赏记录,您可以在应用商店“个人中心”查询您的购买记录及其他与应用购买相关的信息。 1.3.如果您无法通过上述方式访问您的个人信息,您可以随时通过【第十部分】的联系方式联系我们。我们将在[15]天内回复您的访问请求。 1.4.对于您在使用我们的产品或服务过程中产生的其他个人信息,我们将根据本部分第(7)项“响应您的上述请求”中的相关安排向您提供。 2.更正不准确或不完整的个人信息 2.1.您可以通过您的[个人中心]自行进行更正或补充您的一些个人信息。特别提示的是,请您注意核对您提交的个人信息的真实、及时、完整和准确,否则会导致我们无法与您进行有效联系、无法向您提供部分服务。若我们有合理理由怀疑您提供的资料发生错误、不完整、不真实,我们有权向您询问或通知您改正,甚至暂停或中止对您提供部分服务。 2.2.某些特殊信息的更正可能无法自行操作,您可以通过本政策【第十部分】公布的联系方式与我们联系。我们将在[15]天内回复您的访问请求。为保障您的账户安全,我们可能会要求您进行身份验证。 3.撤销同意或处理限制 3.1.您可以通过删除信息、关闭有关设备/工具的功能或进行其他可行的隐私设置方式(视系统版本而定)等以变更您授权我们收集和使用的您的个人信息范围。 3.2.如果您无法通过上述方式撤销您的授权同意的,您可以随时通过【第十部分】的联系方式联系我们并说明您要撤销哪一项同意以执行此类操作。我们将在[15]日内回复您的访问请求。 3.3.当您撤销同意后,我们将不再处理相应的个人信息。但您撤销同意的决定,不会影响此前基于您的授权而开展的个人信息处理的合法性。 4.删除个人信息 4.1.在下列情形中,您可以向本网站提出删除您的个人信息的请求: 4.1.1.我们处理个人信息的行为违反法律法规或与您的约定的; 4.1.2.我们对您的个人信息的收集和使用,未能获得您明确同意的; 4.1.3.我们终止向您提供或您主动终止使用本网站的产品或服务的。 4.2.若我们决定响应您的删除请求,我们还将同时尽可能通知从我们分享获得您的个人信息的第三方(包括本网站的关联公司),要求该等第三方及时删除您的个人信息,除非法律法规另有规定,或该等第三方已获得您的独立授权。 4.3.当您从本网站中删除个人信息后,我们可能不会立即从备份系统中删除相应的信息,但会在备份更新时删除这些信息。 4.4.如果您无法通过上述路径删除该等个人信息,您可以随时通过本网站客服与我们取得联系。为保障您的账户安全,我们可能会要求您进行身份验证。 5.账户注销 5.1.Deepin ID支持账户注销,您可以访问[个人中心中的账户信息] 页面自行操作或通过本政策【第十部分】公布的联系方式联系我们注销您的Deepin ID,我们可能要求您进行身份验证以保障您的账户安全。 5.2.在注销账户之后,我们将停止为您提供服务,并依据您的要求,在适用法律规定的时限内删除您的个人信息,法律法规另有规定或您与我们达成其他一致意见的情况除外。 6.获取个人信息副本 6.1.您有权通过本政策公布的联系方式向我们发出书面请求以获取您的个人信息副本。 6.2.在技术可行的前提下,例如数据接口匹配,我们还可按您的要求和现有的通行技术,直接将您的个人信息副本传输给您指定的第三方。若因该等第三方拒绝接收您的个人信息副本而导致传输失败的,您应自行与该等第三方进行协调解决,我们对此不承担任何责任。 7.响应您的上述请求 7.1.为保障您的账户安全,您可能需要提供书面请求,或以其他方式证明您的身份。我们可能会先要求您验证自己的身份,然后再处理您的请求。 7.2.我们将在[15]天日做出答复。如您不满意,还可以按照本政策【第十部分】规定的途径投诉。 7.3.对于您合理的请求,我们原则上不收取费用,但对多次重复、超出合理限度的请求,我们将视情收取一定成本费用。对于那些无端重复、需要过多技术手段(例如,需要开发新系统或从根本上改变现行惯例)、给他人合法权益带来风险或者非常不切实际(例如,涉及备份磁带上存放的信息)的请求,我们可能会予以拒绝。 7.4.在以下情形中,按照法律法规要求,我们将无法响应您的请求: 7.4.1.与国家安全、国防安全直接相关的; 7.4.2.与公共安全、公共卫生、重大公共利益直接相关的; 7.4.3.与犯罪侦查、起诉、审判和判决执行等直接相关的; 7.4.4.有充分证据表明您存在主观恶意或滥用权利的; 7.4.5.响应您的请求将导致您或其他个人、组织的合法权益受到严重损害的。 7.4.6.涉及商业秘密的; 7.4.7.其他适用法律规定的情形。 七、我们如何处理未成年人的个人信息 1.我们的产品和服务仅限14周岁以上的用户使用,如果您未满14周岁,您应提供您的法定监护人的联络方式(例如电子邮箱、电话号码),我们将通过该联络方式联系您的法定监护人,并采取合理措施征得您的法定监护人的明示授权同意;您应明确了解,若我们在服务过程中发现或怀疑您未满14周岁的,则我们可以随时中止或终止向您提供服务,直至您向我们提供您已满14周岁的证明,或协助我们获得您的法定监护人的明示授权同意。 2.对于经法定监护人同意而收集未成年人个人信息的情况,包括法定监护人为未成年人投保等,我们只会在受到法律允许、法定监护人明确同意或者保护未成年人所必要的情况下使用或公开披露此信息。 3.如果我们发现自己在未事先获得可证实的父母或者其他法定监护人同意的情况下收集了未成年人的个人信息,则会设法尽快删除相关数据。 八、您的个人信息如何在全球范围转移 1.我们将遵从各国家/地区的法律法规,对在各国家/地区收集的个人信息进行存储。 2.我们会按照中国的法律法规规定,将中国境内收集的个人信息存储于中国境内。 3.我们保留将您的个人信息传送到其他政府管辖区域的权利。您对本隐私政策的同意,以及您提交或我们收集的此类数据,代表您对任何此类转移的同意。在这种情况下,我们将依据相关法律规定及本政策来对您的个人信息进行转移并提供足够的保护。 九、本政策如何更新 1.我们的隐私政策可能变更。未经您明确同意,我们不会削减您按照隐私政策所应享有的权利。我们会发布对隐私政策的更新版本。 2.对于重大变更,我们还会提供更为显著的通知(包括对于某些服务,我们会通过电子邮件发送通知,说明隐私政策的具体变更内容)。 3.隐私政策的重大变更包括但不限于: 3.1.我们的产品和服务模式发生重大变化。如处理个人信息的目的、处理的个人信息类型、个人信息的使用方式等; 3.2.我们在所有权结构、组织架构等方面发生重大变化。如业务调整、破产并购等引起的所有者变更等; 3.3.个人信息共享、转让或公开披露的主要对象发生变化; 3.4.您参与个人信息处理方面的权利及其行使方式发生重大变化; 3.5.我们负责处理个人信息安全的责任部门、联络方式及投诉渠道发生变化时; 3.6.个人信息安全影响评估报告表明存在高风险时。 十、我们的个人信息保护部门/专员 1.我们已经任命个人信息保护机构,以负责统筹及监察统信软件遵守和实施与个人信息保护相关的法律法规及内部政策制度的情况。 2.如果您对本隐私政策有任何疑问、意见或建议,您可以通过以下方式与其联系,一般情况下,我们将在三十天内或适用法律法规允许的更长时限内回复。 个人信息保护部门/专员:【法务部】 地址:【北京市北京经济技术开发区科谷一街10号院12号楼18层】 电话:【010-62669253】 电子邮件:【privacy@uniontech.com】 十一、向监管部门申诉或者提起诉讼 如果您对我们的回复不满意,特别是认为我们的个人信息处理行为损害了您的合法权益,且协商无法达成一致的,您有权向有关个人信息保护监管部门提起申诉或者任何一方均可向【北京市大兴区】人民法院提起诉讼)。 附录1:定义 ●个人信息 个人信息是指以电子或者其他方式记录的能够单独或者与其他信息结合识别特定自然人身份或者反映特定自然人活动情况的各种信息。 包括但不限于自然人的姓名、出生日期、身份证件号码、个人生物识别信息、住址、电话号码等。 ●个人敏感信息 个人敏感信息是指一旦泄露、非法提供或滥用可能危害人身和财产安全,极易导致个人名誉、身心健康受到损害或歧视性待遇等的个人信息。例如,个人敏感信息包括个人电话号码、身份证件号码、网页浏览记录、个人生物识别信息、银行账号、通信记录和内容、财产信息、征信信息、行踪轨迹、住宿信息、精准定位信息、健康生理信息、交易信息、14岁以下(含)未成年人的个人信息等。 ================================================ FILE: src/plugin-systeminfo/operation/qrc/license/deepin-end-user-license-agreement_developer_community_en_US.txt ================================================ Enabling this feature grants advanced system permissions. Misuse may cause data loss, boot failures, or system errors. Official warranty service is void. Once it is allowed, you cannot exit the developer mode or return to normal user mode. Please carefully consider whether you need root privileges. To the maximum extent without any violation of the applicable laws, we do not take any liability for the damages and risks resulting from using or inability to use this product, including, but not limited to direct or indirect personal injuries, commercial profit loss, trade interruption, data loss, or any other economic loss. ================================================ FILE: src/plugin-systeminfo/operation/qrc/license/deepin-end-user-license-agreement_developer_community_zh_CN.txt ================================================ 开启本功能后,您将获得系统高级权限。在此状态下,可能会因为误操作导致数据丢失、系统无法启动或运行故障,且不再享有官方报修服务。本功能一旦开启则无法退出或退回至普通用户模式,您应慎重考虑是否需要开启本功能。 在适用法律允许的最大范围内,对因使用或不能使用本产品所产生的损害及风险,包括但不限于直接或间接的个人损害、商业赢利的丧失、贸易中断、商业信息的丢失或任何其它经济损失,我们恕不承担任何责任。 ================================================ FILE: src/plugin-systeminfo/operation/qrc/license/deepin-end-user-license-agreement_developer_community_zh_HK.txt ================================================ 開啟此功能後,您將獲得系統高級權限。在此狀態下,可能會因誤操作導致資料遺失、系統無法啟動或運行故障,且不再享有官方維修服務。本功能一旦開啟則無法退出或退回至普通用戶模式,您應慎重考慮是否需要開啟本功能。 在適用法律允許的最大範圍內,對因使用或不能使用本產品所產生的損害及風險,包括但不限於直接或間接的個人損害、商業贏利的喪失、貿易中斷、商業訊息的丟失或任何其他經濟損失,我們恕不承擔任何責任。 ================================================ FILE: src/plugin-systeminfo/operation/qrc/license/deepin-end-user-license-agreement_developer_community_zh_TW.txt ================================================ 開啟此功能後,您將獲得系統進階權限。在此狀態下,可能會因誤操作導致資料遺失、系統無法啟動或運作故障,且不再享有官方維修服務。本功能一旦開啟則無法退出或退回至普通使用者模式,您應慎重考慮是否需要開啟本功能。 在適用法律允許的最大範圍內,對因使用或不能使用本產品所產生的損害及風險,包括但不限於直接或間接的個人損害、商業贏利的喪失、貿易中斷、商業訊息的遺失或任何其它經濟損失,我們恕不承擔任何責任。 ================================================ FILE: src/plugin-systeminfo/operation/qrc/license/deepin-end-user-license-agreement_en_US.txt ================================================ End User License Agreement for Deepin OS Updated date:December 8th, 2020 Welcome to use Deepin OS (“the software”), which is maintained and issued by Deepin Community. Based on Linux kernel, this software is integrated by open-source softwares selected, customized and developed by Deepin Community. This software is an open-source operating system and complies to software license agreements of all open-source software, components, and projects, on which the software relies. Deepin Community is a team founded by UnionTech Software Technology Co., Ltd. (“UnionTech Software”) and its affiliate (particularly Wuhan Deepin Technology Co., Ltd.(“Deepin Technology”)) and specialized on open-source technology. On behalf of UnionTech Software, Deepin Community enters into a legal agreement with users, and its rights and obligations under this agreement are ascribed to UnionTech Software. Please read all rights and limitations stated in this End User License Agreement ("EULA") carefully before using the software. This is a legal Agreement between UnionTech Software Technology Co., Ltd. ("UnionTech Software") and its affiliated companies (especially Wuhan Deepin Technology Co., Ltd. ("Deepin Technology") )and you (natural person, legal person or other organization). By installing, copying and/or otherwise using the software, you signify your assent to and acceptance of the EULA, and acknowledge that you have read and understood all the terms of the EULA. If you represent an entity, by installing, copying and/or otherwise using the software, you are deemed to accept these terms on behalf of the entity. If you DO NOT agree any term of this agreement, please do not install, download or use the software and its relevant services by any other means. Unless being replaced by a new version, the EULA applies to any version of Deepin software (community Version) and its related updates, and any usage of the source code, regardless the way how the software is delivered. Compared with their previous version in any components of the software, any part of the source code and object code that are created or modified by Deepin Technology, attached with the copyright declaration of Deepin Technology, are owned by UnionTech Software. For all purposes of this EULA, using the software includes downloading, installing, copying, redistributing or running a function in other ways. 1.License Authorization. Subject to the following terms, UnionTech Software grants to you a perpetual, worldwide, and non-exclusive license to the software pursuant to this EULA and “GNU General Public License” (Version 3). The software may contain the components compiled by third-party developers in accordance with the corresponding open source licenses (hereinafter referred to as “open source software component”). Each software component is under a open source license located in its source code, which should be conformed to when you use it. Pertaining solely to the software, this EULA does not limit or change your rights or obligations under the license terms applicable to any particular open source software component. 2.Intellectual Property Rights. The program owned by UnionTech Software in the software is protected under Copyright Law and other applicable laws. UnionTech Software and its affiliates have legal trademark rights to “统信” “深度” “UOS” “deepin” “统信UOS” trademarks and logos. (1) You shall not remove any copyright mark from the software, meanwhile you shall make the copyright mark exactly as is on all the copies of the software to duly announce the copyright of UnionTech Software and/or other licensors. (2) UnionTech Software owns the copyright and other intellectual property rights of the software (including but not limited to any image, picture, flash, video, record, music, word and additional program, color, user interface-design, structure), attached printing material and any copies of the software (except for trademarks and other rights owned by third parties), or UnionTech Software has the legitimate using rights. (3) The copyright of the software and printing documents are protected under the Copyright Law, Patent Law, Trademark Law, Anti-injustice Competition Law of PRC and international laws and treaties. (4) You shall not remove or destroy any copyright mark regarding the software. You guarantee that you shall also copy this copyright declaration in all copies of the software (whether in whole or part). (5) You agree to prevent any pirates of the software and the printing documents. (6) You shall not copy the printing material attached to the software. 3.Redistribution. You can only redistribute the software when you have retained the copyright mark and copyright notice of the software in accordance with the requirements of Article 2 above, and have deleted and replaced the trademarks of all unified software. In addition to the above, this Agreement does not allow you to redistribute (including but not limited to software sales, pre-installation, bundling, etc.) the software or its components for any commercial purpose, regardless of whether the software or its components have been modified. You should be aware that modifying this software may cause damage to the application and may not work properly. 4.Specification. The use of this software is subject to the laws and this EULA. You are not entitled to perform, including but not limited to, the following activities by using the software: 1)to publish, deliver, transmit or store any content that contravenes the laws and regulations belongs to the country where the user resides, or threatens the social security, social stability, or anything that is inappropriate, insulting, defamatory, obscene, violent and against the laws, regulations and policies belongs to the country where the user resides; 2)to publish, deliver, transmit or store content that infringes others intellectual property rights or trade secrets; 3)to issue, deliver or transmit bulk advertisements or spam; 4)to publish, transmit or distribute images, pictures, software or other materials (including but not limited to copyright, trademarks, patents, trade secrets, privacy and related personality rights) that infringe on third parties, unless you have obtained the necessary and effective authorization from the right holder in advance; 5)to take any actions to threaten the security of the network, including but not limited to, using data or entering the server/account without permission; entering public networks or private computers and deleting, copying, amending or adding stored information without permission; without permission, attempting to detect, scan or test the weakness of the Software system or the network or attempt to conduct any other activities to damage the network security system; attempting to intervene with, affect the normal operation of, the Software or the network; intentionally spreading malicious programs or viruses, and taking other actions to damage or intervene with the normal information service of the network; forging part or all of the titles of TCP/IP packages. 6)to use other services provided by the software and UnionTech Software in any illegal way, for any illegal purpose, or in any inconsistent way with the EULA. If you fail to comply with the above provisions, Deepin Community does not assume any responsibility and has the right, in its sole discretion, to terminate, completely or partially suspend, or limit its normal function of the software, and reserves all rights to pursue your actions. 5.Disclaimer of Warranty. No any other form of after-sales warranty is applied to the software. To the maximum extent permitted under the applicable law, the software is licensed "as is" by Deepin Community without any other assurance and warranties, whether express, implied or statutory, including, but not limited to, any implied warranties of merchantability, non-infringement or fitness for a particular purpose. The software is designed and supplied as a general purpose product and not for the specific use of any user. No software is without errors, so you should always make a backup of your files, and solely be responsible for the risks of using the software. Deepin Community does not take any liability for the damages and risks resulting from using or inability to use the software, including, but not limited to direct or indirect personal injuries, commercial profit loss, trade interruption, data loss, or any other economic loss. Deepin Community does not take any liability for damages caused by telecommunication systems or Internet network failures, or any other force majeure reasons (including hacking attack). 6.Limited Liability. Deepin Community, is not responsible for any claims or damages arising out of or in connection with the content of the software or others related to the content provided by you or a third party. 7.Third Party Programs. Deepin Community may distribute third party software programs with the software, which are not the necessity to run the software, provided as a convenience to you, and are subject to their own license terms. In addition, any program you install and run based on the software is considered as the third party software program. If you do not agree to abide by the applicable license terms accompanied with the third party software programs, you should not install or run such Third Party Programs. If you wish to install the third party software programs on more than one system or transfer them to another party, then you must contact the licensors of the third party software programs. 8.Right Reservation. All rights not expressly granted with the software are owned by Deepin Community. 9.License Termination. (1) Deepin Community is entitled to terminate the EULA at any time, if any terms or conditions in the EULA are violated. (2) Provided that Deepin Community offers you any replaced, revised or upgraded Version of the software attached with a replacement of the EULA, which stipulates that you can use the replaced, revised or upgraded Version of the software under the condition that you accept the replacement of the EULA, Deepin Community may terminate this EULA. 10.Jurisdiction and Applicable Law. The establishment, execution, interpretation and resolution of disputes with respect to the EULA shall be governed by the laws of the P.R.C. When any dispute arises between Deepin Community and the user due to the content or the implement of the EULA, the two parties shall resolve it through friendly negotiation; if the negotiation fails, the user hereby agrees that the dispute shall be resolved in the court located in the jurisdiction where UnionTech Software resides. 11.Interpretation and Modification. Deepin Community has the right to interpret and modify this EULA to the maximum extent without any violation of all the applicable laws and regulations, as well as the agreements that the software complies with, including “GNU General Public License” (Version 3). It also reserves the right to modify this EULA at any time in accordance with the changes in relevant laws and regulations, as well as the open-source strategies of the community. The modified EULA will be shown in the new version of the software for acceptance before you use it. In the event of a dispute, this EULA terminates and the latest EULA shall prevail. If you do not agree with the changes in the EULA, you can uninstall and delete the software and destroy the relevant information. If you continue to use the software, you are deemed to have accepted the modifications in the EULA. 12.This EULA is published in Simplified Chinese and English. No matter which language version you read, the Simplified Chinese version shall prevail. 13.Contact Us. If you have any questions regarding this EULA, or need any information, please contact Deepin Community at: support@deepin.org. ================================================ FILE: src/plugin-systeminfo/operation/qrc/license/deepin-end-user-license-agreement_zh_CN.txt ================================================ 深度操作系统最终用户许可协议 版本更新日期:[2020]年[12]月[08]日 欢迎使用深度操作系统(以下称为“本软件”),深度操作系统由深度社区维护和发行。 本软件基于Linux内核,并集成了深度社区选择、定制和开发的开源软件搭建而成。本软件为开源操作系统软件,并遵循本软件所依赖的各开源软件、组件和项目的软件许可协议。 深度社区是统信软件技术有限公司(以下简称“统信软件”)及其关联公司(特别是武汉深之度科技有限公司(以下简称为“深度科技”))成立的、专注于开源技术的团队。深度社区代表统信软件与用户达成法律协议,且深度社区在本协议下的权利和义务归属于统信软件。 请在使用本软件之前仔细阅读本最终用户许可协议(以下称为“本协议”)中规定的所有权利和限制。本协议是统信软件技术有限公司(以下简称“统信软件”)及其关联公司(特别是武汉深之度科技有限公司(以下简称为“深度科技”))与您(自然人、法人或其他组织)之间达成的法律协议。一旦您安装、复制或以其他方式使用本软件,即表明您同意并接受本协议,并且承认您已阅读和理解了本协议。若您为代表一个实体的个人,一旦您安装、复制或以其他方式使用本软件即承认您已被授权代表该实体接受本协议。如果您不同意本协议中的任何条款,请勿安装、下载或以其他方式使用本软件及其相关服务。 除非本协议被新协议版本替代,本协议规范适用于任一版本的深度操作系统,以及任何相关的更新、源代码的使用,无论交付的方式如何。 本软件中所包含的由深度社区提供并附有版权声明的源代码、目标码、以及由前述源代码和/或目标码所构成的所有组件当中,由深度社区创作的内容、或修改的有别于未修改之前版本的内容及形成的相关版权归统信软件所有。为本协议之目的,使用是指下载、安装、复制、再发布或以其它方式对本软件做功能性使用。 1.许可授权。在下面条款的约束下,统信软件根据本协议和《GNU通用公共许可协议》(第3版)授予您有关本软件永久的,全世界范围内,非独占性的许可。本软件可能包含由第三方开发者根据相应开源协议编制的软件组件(以下简称“开源软件组件”),每一个软件组件的许可协议均位于该软件组件的源代码中,您在使用这些软件组件时应遵守相应开源软件许可协议的规定。本协议仅适用于本软件,且不限制或改变您根据任何特定开源软件组件的许可条款享有的权利或义务。 2.知识产权。本软件中统信软件享有版权的部分受著作权法和其它相关适用法律的保护,并且统信软件及其关联公司对“统信”“统信UOS” “深度”和“deepin”商标及标识拥有合法商标权。(1)您不得去掉本软件上的任何版权标识和商标标识,并应在其所有复制品上依照其现有表述方式标注其版权属于统信软件及/或其他授权人。(2)本软件(包括但不限于本软件中所含的任何图像、照片、动画、录像、录音、音乐、文字和附加程序、色彩、界面设计、版面框架)、随附的文档印刷材料及本软件任何副本的著作权及其他知识产权,均由统信软件拥有(属于第三方所有之商标及第三方所有之其他权利除外)或统信软件拥有合法使用权。(3)本软件及文档印刷材料享有版权,并受中华人民共和国著作权法、商标法、专利法、反不正当竞争法及国际条约条款的保护。(4)您不可以从本软件中去掉其版权声明;并保证为本软件的复制品(全部或部分)复制版权声明。(5)您同意制止以任何形式非法复制本软件及文档印刷材料。(6)您不可复制本软件随附的文档印刷材料。 3.再发布。您仅在以下情况下方可进行再发布:您已按照上述第2条的要求保留本软件的版权标识以及版权声明,并且您已删除并替换所有统信软件的商标。除了以上情况之外,本协议不允许您为了任何商业目的再发布(包括但不限于软件销售、预装、捆绑等)本软件或其组件,不管本软件或其组件是否已被修改。您应了解,修改本软件可能造成应用程序受损以及无法正常使用。 4.使用规范。您在遵守法律及本协议的前提下可依本协议使用本软件。您无权实施包括但不限于下列行为: 1)利用本软件发表、传送、传播、储存违反您所在国家法律、危害社会安全、公序良俗的内容,或任何不当的、侮辱诽谤的、淫秽的、暴力的及任何违反使用者所在国家法律法规政策的内容; 2)利用本软件发表、传送、传播、储存侵害他人知识产权、商业秘密权等合法权利的内容; 3)利用本软件批量发表、传送、传播广告信息及垃圾信息; 4)利用本软件发表、传送或散布以其他方式实现传送含有侵犯第三方合法权利(包括但不限于版权、商标权、专利权、商业秘密、隐私权及相关人格权利)的图像、相片、软件或其他资料的文件,除非您已获得权利人充分有效的事先授权; 5)任何危害网络安全的行为,包括但不限于:使用未经许可的数据或进入未经许可的服务器/账户;未经允许进入公众网络或者他人操作系统并删除、修改、增加存储信息;未经许可,企图探查、扫描、测试本软件系统或网络的弱点或其它实施破坏网络安全的行为;企图干涉、破坏本软件系统正常运行,故意传播恶意程序或病毒以及其他破坏干扰正常网络信息服务的行为;伪造TCP/IP数据包名称或部分名称; 6)其他以任何不合法的方式、为任何不合法的目的、或以任何与本协议不一致的方式使用本软件。 您若违反上述规定,深度社区不承担因此导致的任何责任,有权自行决定采取终止、完全或部分中止、限制您使用本软件的相关功能并保留追究上述行为的一切权利。 5.免责说明。本软件不享受任何其他形式的售后担保。在适用法律允许的最大限度内,深度社区对本软件按“现状”向您进行授予许可。深度社区不提供任何明示、默示或法定的保证、保障或条件,包括但不限于有关适销性、针对特定目的的适用性和不侵权的默示保证。 本软件是作为一般用途的产品而不是为任何用户的具体用途而设计并提供的。您同意没有产品是无错误的,因此,您应该经常对您的文件做出备份。您须自行承担使用该软件的风险。对因使用或不能使用本软件所产生的损害及风险,包括但不限于直接或间接的个人损害、商业盈利的丧失、贸易中断、商业信息的丢失或任何其它经济损失,深度社区不承担任何责任。对于因电信系统或互联网网络故障、配套系统故障问题或其它任何不可抗力原因(包括黑客攻击行为)而产生的损失,深度社区不承担任何责任。 6.有限责任。深度社区对您或第三方提供的应用于或操作于本软件的内容或与该内容相关的其他内容而引起的任何索赔或损害不承担任何责任。 7.第三方软件程序。深度社区可能随本软件发行第三方软件程序。这类第三方软件程序不是本软件的运行所必须的,而是为方便您而提供的,且受其自身所带的许可条款约束。此外,您基于本软件安装和运行的其它应用程序,也属于第三方软件程序的范畴。该等许可条款随第三方软件程序附送。如果您不同意遵守第三方软件程序适用的许可条款,则无权安装和运行该等程序。如果您希望在一个以上的系统中安装第三方软件程序,或向其它人转让第三方软件程序,则必须自行联络第三方软件程序许可人。 8.权利的保留。未明示授予的与本软件相关的一切权利均为深度社区所有。 9.许可终止。(1)如您未遵守本协议的各项条款和条件,深度社区可终止本协议。(2)通过向您提供本软件的任何替换版本或修改版本或升级版本的一份取代协议,并规定您使用这类替换版本或修改版本或升级版本的条件是您接受这类取代协议,深度社区可以终止本协议。 10.管辖和法律适用。本协议的订立、执行和解释及争议的解决均应适用中华人民共和国法律。如您与深度社区就本协议内容或其执行发生任何争议,双方应进行友好协商;协商不成时,任何一方均可向统信软件所在地有管辖权的人民法院提起诉讼。 11.解释以及修改。深度社区在不违背本软件所遵守的包括《GNU通用公共许可协议》(第3版)在内的所有协议及法律规定所允许的最大范围内对本协议拥有解释权与修改权。深度社区有权随时根据有关法律、法规的变化以及社区开源策略的调整等修改本协议。修改后的协议会在随附于新版本软件中在您使用前阅读和选择接受。当发生有关争议时,本协议终止,以最新的协议文本为准。如果您不同意协议变更的内容,您可以自行卸载删除本软件并销毁其相关信息内容。如果您继续使用本软件,则视为您接受本协议的变更。 12.本协议以简体中文和英文文字书写,无论您收到的是其中哪种语言的版本,均以简体中文版本为最准确释义。 13.联系我们。如果您对本协议有任何疑问或者希望从深度社区获得任何信息,请按下列联系方式与深度社区直接联系:support@deepin.org。 ================================================ FILE: src/plugin-systeminfo/operation/qrc/systeminfo.qrc ================================================ icons/dcc_nav_systeminfo_42px.svg icons/dcc_nav_systeminfo_84px.svg actions/dcc_privacy_policy_32px.svg actions/dcc_protocol_32px.svg actions/dcc_version_32px.svg texts/dcc_edit_12px.svg light/icons/icon_about_pc_128px.svg light/icons/icon_about_laptop_128px.svg dark/icons/icon_about_pc_128px.svg dark/icons/icon_about_laptop_128px.svg icons/edit.dci gpl/gpl-3.0-zh_CN-body.txt gpl/gpl-3.0-zh_CN-title.txt gpl/gpl-3.0-zh_TW-body.txt gpl/gpl-3.0-zh_TW-title.txt license/deepin-end-user-license-agreement_zh_CN.txt license/deepin-end-user-license-agreement_en_US.txt gpl/gpl-3.0-en_US-body.txt gpl/gpl-3.0-en_US-title.txt license/deepin-end-user-license-agreement_community_en_US.txt license/deepin-end-user-license-agreement_community_zh_CN.txt license/deepin-end-user-license-agreement_developer_community_en_US.txt license/deepin-end-user-license-agreement_developer_community_zh_CN.txt license/deepin-end-user-license-agreement_developer_community_zh_HK.txt license/deepin-end-user-license-agreement_developer_community_zh_TW.txt ================================================ FILE: src/plugin-systeminfo/operation/systeminfodbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "systeminfodbusproxy.h" #include #include #include #include #include #include const QString HostnameService = QStringLiteral("org.freedesktop.hostname1"); const QString HostnamePath = QStringLiteral("/org/freedesktop/hostname1"); const QString HostnameInterface = QStringLiteral("org.freedesktop.hostname1"); const QString LicenseInfoService = QStringLiteral("com.deepin.license"); const QString LicenseInfoPath = QStringLiteral("/com/deepin/license/Info"); const QString LicenseInfoInterface = QStringLiteral("com.deepin.license.Info"); const QString LicenseActivatorService = QStringLiteral("com.deepin.license.activator"); const QString LicenseActivatorPath = QStringLiteral("/com/deepin/license/activator"); const QString LicenseActivatorInterface = QStringLiteral("com.deepin.license.activator"); const QString PropertiesInterface = QStringLiteral("org.freedesktop.DBus.Properties"); const QString PropertiesChanged = QStringLiteral("PropertiesChanged"); const QString &SystemInfoService = QStringLiteral("org.deepin.dde.SystemInfo1"); const QString &SystemInfoPath = QStringLiteral("/org/deepin/dde/SystemInfo1"); const QString &SystemInfoInterface = QStringLiteral("org.deepin.dde.SystemInfo1"); const QString &TimedateService = QStringLiteral("org.deepin.dde.Timedate1"); const QString &TimedatePath = QStringLiteral("/org/deepin/dde/Timedate1"); const QString &TimedateInterface = QStringLiteral("org.deepin.dde.Timedate1"); const QString &TimeZoneService = QStringLiteral("org.freedesktop.timedate1"); const QString &TimeZonePath = QStringLiteral("/org/freedesktop/timedate1"); const QString &TimeZoneInterface = QStringLiteral("org.freedesktop.timedate1"); SystemInfoDBusProxy::SystemInfoDBusProxy(QObject *parent) : QObject(parent) , m_hostname1Inter(new DDBusInterface(HostnameService, HostnamePath, HostnameInterface, QDBusConnection::systemBus(), this)) , m_licenseInfoInter(new DDBusInterface(LicenseInfoService, LicenseInfoPath, LicenseInfoInterface, QDBusConnection::systemBus(), this)) , m_licenseActivatorInter(new DDBusInterface(LicenseActivatorService, LicenseActivatorPath, LicenseActivatorInterface, QDBusConnection::sessionBus(), this)) , m_systemInfo(new DDBusInterface(SystemInfoService, SystemInfoPath, SystemInfoInterface, QDBusConnection::sessionBus(), this)) , m_systemInfoSysBus(new DDBusInterface(SystemInfoService, SystemInfoPath, SystemInfoInterface, QDBusConnection::systemBus(), this)) , m_timedateInter(new DDBusInterface(TimedateService, TimedatePath, TimedateInterface, QDBusConnection::sessionBus(), this)) , m_timeZoneInter(new DDBusInterface(TimeZoneService, TimeZonePath, TimeZoneInterface, QDBusConnection::systemBus(), this)) { } QString SystemInfoDBusProxy::staticHostname() { return qvariant_cast(m_hostname1Inter->property("StaticHostname")); } void SystemInfoDBusProxy::setStaticHostname(const QString &value) { QList argumentList; argumentList << QVariant::fromValue(value) << QVariant::fromValue(true); m_hostname1Inter->asyncCallWithArgumentList("SetStaticHostname", argumentList); } void SystemInfoDBusProxy::setStaticHostname(const QString &value, QObject *receiver, const char *member, const char *errorSlot) { QList argumentList; argumentList << QVariant::fromValue(value) << QVariant::fromValue(true); m_hostname1Inter->callWithCallback("SetStaticHostname", argumentList, receiver, member, errorSlot); } int SystemInfoDBusProxy::authorizationState() { return qvariant_cast(m_licenseInfoInter->property("AuthorizationState")); } void SystemInfoDBusProxy::setAuthorizationState(const int value) { m_licenseInfoInter->setProperty("AuthorizationState", QVariant::fromValue(value)); } QString SystemInfoDBusProxy::timezone() { return qvariant_cast(m_timeZoneInter->property("Timezone")); } void SystemInfoDBusProxy::setTimezone(const QString &value) { QList argumentList; argumentList << QVariant::fromValue(value) << QVariant::fromValue(true); m_hostname1Inter->asyncCallWithArgumentList("SetTimezone", argumentList); } int SystemInfoDBusProxy::shortDateFormat() { return qvariant_cast(m_timedateInter->property("ShortDateFormat")); } qulonglong SystemInfoDBusProxy::memorySize() { return m_systemInfoSysBus->property("MemorySize").toULongLong(); } QString SystemInfoDBusProxy::Processor() { return m_systemInfo->property("Processor").toString(); } qulonglong SystemInfoDBusProxy::CurrentSpeed() { return m_systemInfo->property("CurrentSpeed").toLongLong(); } QString SystemInfoDBusProxy::CPUHardware() { return m_systemInfo->property("CPUHardware").toString(); } double SystemInfoDBusProxy::CPUMaxMHz() { return m_systemInfo->property("CPUMaxMHz").toDouble(); } void SystemInfoDBusProxy::Show() { m_licenseActivatorInter->asyncCall("Show"); } ================================================ FILE: src/plugin-systeminfo/operation/systeminfodbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef SYSTEMINFODBUSPROXY_H #define SYSTEMINFODBUSPROXY_H #include using Dtk::Core::DDBusInterface; #include class SystemInfoDBusProxy : public QObject { Q_OBJECT public: explicit SystemInfoDBusProxy(QObject *parent = nullptr); Q_PROPERTY(QString StaticHostname READ staticHostname WRITE setStaticHostname NOTIFY StaticHostnameChanged) QString staticHostname(); void setStaticHostname(const QString &value); void setStaticHostname(const QString &value, QObject *receiver, const char *member, const char *errorSlot); Q_PROPERTY(int AuthorizationState READ authorizationState WRITE setAuthorizationState NOTIFY AuthorizationStateChanged) int authorizationState(); void setAuthorizationState(const int value); Q_PROPERTY(QString Timezone READ timezone WRITE setTimezone NOTIFY TimezoneChanged) QString timezone(); void setTimezone(const QString &value); Q_PROPERTY(int ShortDateFormat READ shortDateFormat NOTIFY ShortDateFormatChanged) int shortDateFormat(); // sysinfo system qulonglong memorySize(); // sysinfo QString Processor(); qulonglong CurrentSpeed(); QString CPUHardware(); double CPUMaxMHz(); Q_SIGNALS: void StaticHostnameChanged(const QString &value) const; void AuthorizationStateChanged(const int value) const; void TimezoneChanged(const QString &value) const; void ShortDateFormatChanged(const int value) const; public Q_SLOTS: void Show(); private: DDBusInterface *m_hostname1Inter; DDBusInterface *m_licenseInfoInter; DDBusInterface *m_licenseActivatorInter; DDBusInterface *m_systemInfo; DDBusInterface *m_systemInfoSysBus; DDBusInterface *m_timedateInter; DDBusInterface *m_timeZoneInter; }; #endif // SYSTEMINFODBUSPROXY_H ================================================ FILE: src/plugin-systeminfo/operation/systeminfointeraction.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "systeminfointeraction.h" #include "dccfactory.h" #include using namespace dccV25; SystemInfoInteraction::SystemInfoInteraction(QObject *parent) : QObject{ parent } , m_systemInfoWork(nullptr) , m_systemInfoMode(nullptr) { qmlRegisterType("org.deepin.dcc.systemInfo", 1, 0, "SystemInfoWork"); qmlRegisterType("org.deepin.dcc.systemInfo", 1, 0, "SystemInfoModel"); m_systemInfoMode = new SystemInfoModel(this); m_systemInfoWork = new SystemInfoWork(m_systemInfoMode, this); connect(m_systemInfoWork, &SystemInfoWork::requestUeProgram, this, &SystemInfoInteraction::requestUeProgram); m_systemInfoWork->activate(); } SystemInfoWork *SystemInfoInteraction::systemInfoWork() const { return m_systemInfoWork; } void SystemInfoInteraction::setSystemInfoWork(SystemInfoWork *newSystemInfoWork) { m_systemInfoWork = newSystemInfoWork; } SystemInfoModel *SystemInfoInteraction::systemInfoMode() const { return m_systemInfoMode; } void SystemInfoInteraction::setSystemInfoMode(SystemInfoModel *newSystemInfoMode) { m_systemInfoMode = newSystemInfoMode; } DCC_FACTORY_CLASS(SystemInfoInteraction) #include "systeminfointeraction.moc" ================================================ FILE: src/plugin-systeminfo/operation/systeminfointeraction.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef SYSTEMINFOINTERACTION_H #define SYSTEMINFOINTERACTION_H #include "systeminfomodel.h" #include "systeminfowork.h" #include using namespace DCC_NAMESPACE; class SystemInfoInteraction : public QObject { Q_OBJECT public: explicit SystemInfoInteraction(QObject *parent = nullptr); Q_INVOKABLE SystemInfoWork *systemInfoWork() const; void setSystemInfoWork(SystemInfoWork *newSystemInfoWork); Q_INVOKABLE SystemInfoModel *systemInfoMode() const; void setSystemInfoMode(SystemInfoModel *newSystemInfoMode); signals: void requestUeProgram(bool visible) const; private: SystemInfoWork* m_systemInfoWork; SystemInfoModel* m_systemInfoMode; }; #endif // SYSTEMINFOINTERACTION_H ================================================ FILE: src/plugin-systeminfo/operation/systeminfomodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "systeminfomodel.h" #include "QtQml/qqml.h" #include "dccfactory.h" #include "math.h" #include "utils.h" #include namespace DCC_NAMESPACE { static QString formatCap(qulonglong cap, const int size = 1024, quint8 precision = 1) { static QStringList type = { " B", " KB", " MB", " GB", " TB" }; qulonglong lc = cap; double dc = cap; double ds = size; for (int p = 0; p < type.count(); ++p) { if (cap < pow(size, p + 1) || p == type.count() - 1) { if (!precision) { #ifdef __sw_64__ return QString::number(ceil(lc / pow(size, p))) + type[p]; #else return QString::number(round(lc / pow(size, p))) + type[p]; #endif } return QString::number(dc / pow(ds, p), 'f', precision) + type[p]; } } return ""; } SystemInfoModel::SystemInfoModel(QObject *parent) : QObject(parent) , m_type("64") , m_licenseState(ActiveState::Unauthorized) , m_privacyPolicy("") , m_gnuLinceseTitle("") , m_gnuLinceseContent("") , m_userLicense("") , m_joinUeProgram(false) { } void SystemInfoModel::setProductName(const QString &name) { if (m_productName == name) return; m_productName = name; Q_EMIT productNameChanged(m_productName); } void SystemInfoModel::setVersionNumber(const QString &number) { if (m_versionNumber == number) return; m_versionNumber = number; Q_EMIT versionNumberChanged(m_versionNumber); } void SystemInfoModel::setVersion(const QString &version) { if (m_version == version) return; m_version = version; Q_EMIT versionChanged(m_version); } void SystemInfoModel::setType(qlonglong type) { if (m_type == QString("%1").arg(type)) return; m_type = QString("%1").arg(type); typeChanged(m_type); } void SystemInfoModel::setProcessor(const QString &processor) { if (m_processor == processor) return; m_processor = processor; Q_EMIT processorChanged(processor); } void SystemInfoModel::setHostName(const QString &hostName) { m_hostName = hostName; hostNameChanged(hostName); } void SystemInfoModel::setEndUserAgreementPath(const QString &path) { m_endUserAgreementTextPath = path; bool isMarkdown = path.endsWith(".md", Qt::CaseInsensitive); m_userLicenseFormat = isMarkdown ? Qt::MarkdownText : Qt::PlainText; Q_EMIT userLicenseFormatChanged(); } QString SystemInfoModel::graphicsPlatform() const { return m_graphicsPlatform; } void SystemInfoModel::setGraphicsPlatform(const QString &newGraphicsPlatform) { if (m_graphicsPlatform == newGraphicsPlatform) return; m_graphicsPlatform = newGraphicsPlatform; Q_EMIT graphicsPlatformChanged(); } bool SystemInfoModel::showAuthorization() const { return !(IS_COMMUNITY_SYSTEM || DSysInfo::UosEditionUnknown == DSysInfo::uosEditionType()) && DSysInfo::uosEditionType() != DSysInfo::UosEnterpriseC; } bool SystemInfoModel::showUserExperienceProgram() const { return !IS_SERVER_SYSTEM && !IS_COMMUNITY_SYSTEM && DSysInfo::isDeepin(); } bool SystemInfoModel::showGraphicsPlatform() const { return IS_COMMUNITY_SYSTEM; } QString SystemInfoModel::systemInstallationDate() const { return m_systemInstallationDate; } void SystemInfoModel::setSystemInstallationDate(const QString &newSystemInstallationDate) { if (m_systemInstallationDate == newSystemInstallationDate) return; m_systemInstallationDate = newSystemInstallationDate; Q_EMIT systemInstallationDateChanged(); } QString SystemInfoModel::logoPath() const { return m_logoPath; } void SystemInfoModel::setLogoPath(const QString &newLogoPath) { if (m_logoPath == newLogoPath) return; m_logoPath = newLogoPath; Q_EMIT logoPathChanged(); } bool SystemInfoModel::showDetail() const { return m_showDetail; } void SystemInfoModel::setShowDetail(bool newShowDetail) { if (m_showDetail == newShowDetail) return; m_showDetail = newShowDetail; Q_EMIT showDetailChanged(); } void SystemInfoModel::onLicenseStateChanged(const ActiveState &state) { if (state == Authorized) { setLicenseStatusText(QObject::tr("Activated")); setLicenseStatusColor(QColor(21, 187, 24)); setLicenseActionText(QObject::tr("View")); } else if (state == Unauthorized) { setLicenseStatusText(QObject::tr("To be activated")); setLicenseStatusColor(QColor(255, 87, 54)); setLicenseActionText(QObject::tr("Activate")); } else if (state == AuthorizedLapse) { setLicenseStatusText(QObject::tr("Expired")); setLicenseStatusColor(QColor(255, 87, 54)); setLicenseActionText(QObject::tr("View")); } else if (state == TrialAuthorized) { setLicenseStatusText(QObject::tr("In trial period")); setLicenseStatusColor(QColor(255, 170, 0)); setLicenseActionText(QObject::tr("Activate")); } else if (state == TrialExpired) { setLicenseStatusText(QObject::tr("Trial expired")); setLicenseStatusColor(QColor(255, 87, 54)); setLicenseActionText(QObject::tr("Activate")); } } QColor SystemInfoModel::licenseStatusColor() const { return m_licenseStatusColor; } void SystemInfoModel::setLicenseStatusColor(const QColor &newLicenseStatusColor) { if (m_licenseStatusColor == newLicenseStatusColor) return; m_licenseStatusColor = newLicenseStatusColor; Q_EMIT licenseStatusColorChanged(); } QString SystemInfoModel::licenseActionText() const { return m_licenseActionText; } void SystemInfoModel::setLicenseActionText(const QString &newLicenseActionText) { if (m_licenseActionText == newLicenseActionText) return; m_licenseActionText = newLicenseActionText; Q_EMIT licenseActionTextChanged(); } QString SystemInfoModel::licenseStatusText() const { return m_licenseStatusText; } void SystemInfoModel::setLicenseStatusText(const QString &newLicenseStatusText) { if (m_licenseStatusText == newLicenseStatusText) return; m_licenseStatusText = newLicenseStatusText; Q_EMIT licenseStatusTextChanged(); } QString SystemInfoModel::systemCopyright() const { return m_systemCopyright; } void SystemInfoModel::setSystemCopyright(const QString &newSystemCopyright) { if (m_systemCopyright == newSystemCopyright) return; m_systemCopyright = newSystemCopyright; Q_EMIT systemCopyrightChanged(); } bool SystemInfoModel::joinUeProgram() const { return m_joinUeProgram; } void SystemInfoModel::setJoinUeProgram(bool newJoinUeProgram) { m_joinUeProgram = newJoinUeProgram; Q_EMIT joinUeProgramChanged(m_joinUeProgram); } QString SystemInfoModel::userExperienceProgramText() const { return m_userExperienceProgramText; } void SystemInfoModel::setUserExperienceProgramText(const QString &newUserExperienceProgramText) { if (m_userExperienceProgramText == newUserExperienceProgramText) return; m_userExperienceProgramText = newUserExperienceProgramText; Q_EMIT userExperienceProgramTextChanged(); } QString SystemInfoModel::userLicense() const { return m_userLicense; } void SystemInfoModel::setUserLicense(const QString &newUserLicense) { if (m_userLicense == newUserLicense) return; m_userLicense = newUserLicense; Q_EMIT userLicenseChanged(); } QString SystemInfoModel::gnuLinceseContent() const { return m_gnuLinceseContent; } void SystemInfoModel::setGnuLinceseContent(const QString &newGnuLinceseContent) { if (m_gnuLinceseContent == newGnuLinceseContent) return; m_gnuLinceseContent = newGnuLinceseContent; Q_EMIT gnuLinceseContentChanged(); } QString SystemInfoModel::gnuLinceseTitle() const { return m_gnuLinceseTitle; } void SystemInfoModel::setGnuLinceseTitle(const QString &newGnuLinceseTitle) { if (m_gnuLinceseTitle == newGnuLinceseTitle) return; m_gnuLinceseTitle = newGnuLinceseTitle; Q_EMIT gnuLinceseTitleChanged(); } QString SystemInfoModel::privacyPolicy() const { return m_privacyPolicy; } void SystemInfoModel::setPrivacyPolicy(const QString &newPrivacyPolicy) { if (m_privacyPolicy == newPrivacyPolicy) return; m_privacyPolicy = newPrivacyPolicy; Q_EMIT privacyPolicyChanged(); } void SystemInfoModel::setMemory(qulonglong totalMemory, qulonglong installedMemory) { QString mem_device_size = formatCap(installedMemory, 1024, 0); QString mem = formatCap(totalMemory); if (m_memory == mem) return; m_memory = mem; m_memory = QString("%1 (%2 %3)").arg(mem_device_size, mem, tr("available")); memoryChanged(m_memory); } void SystemInfoModel::setKernel(const QString &kernel) { if (m_kernel == kernel) return; m_kernel = kernel; kernelChanged(kernel); } void SystemInfoModel::setLicenseState(DCC_NAMESPACE::ActiveState state) { if (m_licenseState != state) { m_licenseState = state; Q_EMIT licenseStateChanged(state); } onLicenseStateChanged(state); } } ================================================ FILE: src/plugin-systeminfo/operation/systeminfomodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef SYSTEMINFOMODEL_H #define SYSTEMINFOMODEL_H #include #include #include #include using namespace Dtk::Core; namespace DCC_NAMESPACE{ enum ActiveState { Unknown = -1, //未知 Unauthorized = 0, //未授权 Authorized, //已授权 AuthorizedLapse, //授权失效 TrialAuthorized, //试用期已授权 TrialExpired //试用期已过期 }; // !!! 不要用C++11的前置声明枚举类型,这里lupdate命令有个bug.具体见 // https://stackoverflow.com/questions/6504902/lupdate-error-qualifying-with-unknown-namespace-class class SystemInfoModel : public QObject { Q_OBJECT Q_PROPERTY(QString privacyPolicy READ privacyPolicy NOTIFY privacyPolicyChanged FINAL) Q_PROPERTY(QString gnuLinceseTitle READ gnuLinceseTitle NOTIFY gnuLinceseTitleChanged FINAL) Q_PROPERTY(QString gnuLinceseContent READ gnuLinceseContent NOTIFY gnuLinceseContentChanged FINAL) Q_PROPERTY(QString userLicense READ userLicense NOTIFY userLicenseChanged FINAL) Q_PROPERTY(Qt::TextFormat userLicenseFormat READ userLicenseFormat NOTIFY userLicenseFormatChanged FINAL) Q_PROPERTY(QString userExperienceProgramText READ userExperienceProgramText NOTIFY userExperienceProgramTextChanged FINAL) Q_PROPERTY(bool joinUeProgram READ joinUeProgram NOTIFY joinUeProgramChanged FINAL) Q_PROPERTY(QString productName READ productName NOTIFY productNameChanged FINAL) Q_PROPERTY(QString systemCopyright READ systemCopyright NOTIFY systemCopyrightChanged FINAL) Q_PROPERTY(QString hostName READ hostName NOTIFY hostNameChanged FINAL) Q_PROPERTY(QString version READ version NOTIFY versionChanged FINAL) Q_PROPERTY(QString versionNumber READ versionNumber NOTIFY versionNumberChanged FINAL) Q_PROPERTY(QString type READ type NOTIFY typeChanged FINAL) Q_PROPERTY(QString memory READ memory NOTIFY memoryChanged FINAL) Q_PROPERTY(QString kernel READ kernel NOTIFY kernelChanged FINAL) Q_PROPERTY(QString processor READ processor NOTIFY processorChanged FINAL) Q_PROPERTY(QString licenseStatusText READ licenseStatusText NOTIFY licenseStatusTextChanged FINAL) Q_PROPERTY(QString licenseActionText READ licenseActionText NOTIFY licenseActionTextChanged FINAL) Q_PROPERTY(QColor licenseStatusColor READ licenseStatusColor NOTIFY licenseStatusColorChanged FINAL) Q_PROPERTY(bool showDetail READ showDetail NOTIFY showDetailChanged FINAL) Q_PROPERTY(QString logoPath READ logoPath NOTIFY logoPathChanged FINAL) Q_PROPERTY(QString systemInstallationDate READ systemInstallationDate NOTIFY systemInstallationDateChanged FINAL) Q_PROPERTY(QString graphicsPlatform READ graphicsPlatform NOTIFY graphicsPlatformChanged FINAL) public: explicit SystemInfoModel(QObject *parent = nullptr); QString productName() const { return m_productName;} QString versionNumber() const { return m_versionNumber;} QString version() const { return m_version;} QString type() const { return m_type;} QString processor() const { return m_processor;} QString memory() const { return m_memory;} QString kernel() const { return m_kernel;} QString hostName() const { return m_hostName;} inline std::optional endUserAgreementPath() const { return m_endUserAgreementTextPath; } inline Qt::TextFormat userLicenseFormat() const { return m_userLicenseFormat; } inline ActiveState licenseState() const { return m_licenseState; } QString privacyPolicy() const; void setPrivacyPolicy(const QString &newPrivacyPolicy); QString gnuLinceseTitle() const; void setGnuLinceseTitle(const QString &newGnuLinceseTitle); QString gnuLinceseContent() const; void setGnuLinceseContent(const QString &newGnuLinceseContent); QString userLicense() const; void setUserLicense(const QString &newUserLicense); QString userExperienceProgramText() const; void setUserExperienceProgramText(const QString &newUserExperienceProgramText); bool joinUeProgram() const; void setJoinUeProgram(bool newJoinUeProgram); QString systemCopyright() const; void setSystemCopyright(const QString &newSystemCopyright); QString licenseStatusText() const; void setLicenseStatusText(const QString &newLicenseStatusText); QString licenseActionText() const; void setLicenseActionText(const QString &newLicenseActionText); QColor licenseStatusColor() const; void setLicenseStatusColor(const QColor &newLicenseStatusColor); void onLicenseStateChanged(const ActiveState &state); bool showDetail() const; void setShowDetail(bool newShowDetail); QString logoPath() const; void setLogoPath(const QString &newLogoPath); QString systemInstallationDate() const; void setSystemInstallationDate(const QString &newSystemInstallationDate); Q_INVOKABLE bool showAuthorization() const; Q_INVOKABLE bool showUserExperienceProgram() const; Q_INVOKABLE bool showGraphicsPlatform() const; QString graphicsPlatform() const; void setGraphicsPlatform(const QString &newGraphicsPlatform); Q_SIGNALS: void productNameChanged(const QString& version); void versionNumberChanged(const QString& version); void versionChanged(const QString& version); void typeChanged(const QString& type); void processorChanged(const QString& processor); void memoryChanged(const QString& memory); void kernelChanged(const QString& kernel); void licenseStateChanged(ActiveState state); void hostNameChanged(const QString& hostName); void setHostNameError(const QString& error); void privacyPolicyChanged(); void gnuLinceseTitleChanged(); void gnuLinceseContentChanged(); void userLicenseChanged(); void userLicenseFormatChanged(); void userExperienceProgramTextChanged(); void joinUeProgramChanged(const bool enable) const; void systemCopyrightChanged(); void licenseStateDataChanged(); void licenseStatusTextChanged(); void licenseActionTextChanged(); void licenseStatusColorChanged(); void showDetailChanged(); void logoPathChanged(); void systemInstallationDateChanged(); void graphicsPlatformChanged(); public Q_SLOTS: void setProductName(const QString& name); void setVersionNumber(const QString& number); void setVersion(const QString& version); void setType(qlonglong type); void setProcessor(const QString& processor); void setMemory(qulonglong totalMemory, qulonglong installedMemory); void setKernel(const QString &kernel); void setLicenseState(DCC_NAMESPACE::ActiveState state); void setHostName(const QString& hostName); void setEndUserAgreementPath(const QString &path); private: QString m_version; QString m_productName; QString m_versionNumber; QString m_type; QString m_processor; QString m_memory; QString m_kernel; QString m_hostName; std::optional m_endUserAgreementTextPath; Qt::TextFormat m_userLicenseFormat = Qt::PlainText; DCC_NAMESPACE::ActiveState m_licenseState; // 隐私协议 QString m_privacyPolicy; // 开源协议 QString m_gnuLinceseTitle; QString m_gnuLinceseContent; // 最终用户协议 QString m_userLicense; // 用户体验计划文本 QString m_userExperienceProgramText; bool m_joinUeProgram; QString m_systemCopyright; QString m_licenseStatusText; QColor m_licenseStatusColor; QString m_licenseActionText; QString m_logoPath; bool m_showDetail; QString m_systemInstallationDate; QString m_graphicsPlatform; }; } Q_DECLARE_METATYPE(DCC_NAMESPACE::ActiveState); #endif // SYSTEMINFOMODEL_H ================================================ FILE: src/plugin-systeminfo/operation/systeminfowork.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "systeminfowork.h" #include "systeminfodbusproxy.h" #include "systeminfomodel.h" #include "utils.h" #include #include #include #include #include #include #include #include #include #include #include #include DCORE_USE_NAMESPACE DGUI_USE_NAMESPACE const QString USER_EXPERIENCE_SERVICE = "com.deepin.userexperience.Daemon"; namespace DCC_NAMESPACE{ SystemInfoWork::SystemInfoWork(SystemInfoModel *model, QObject *parent) : QObject(parent) , m_model(model) , m_systemInfoDBusProxy(new SystemInfoDBusProxy(this)) , m_process(nullptr) , m_content("") , m_title("") , m_dBusUeProgram(nullptr) { qRegisterMetaType("ActiveState"); m_dBusUeProgram = new QDBusInterface( "org.deepin.dde.EventLog1", "/org/deepin/dde/EventLog1", "org.deepin.dde.EventLog1", QDBusConnection::sessionBus(), this); connect(m_systemInfoDBusProxy, &SystemInfoDBusProxy::StaticHostnameChanged, m_model, &SystemInfoModel::setHostName); connect(m_systemInfoDBusProxy, &SystemInfoDBusProxy::AuthorizationStateChanged, m_model, [this](const int state) { m_model->setLicenseState(static_cast(state)); }); connect(m_systemInfoDBusProxy, &SystemInfoDBusProxy::TimezoneChanged, this, &SystemInfoWork::onTimezoneChanged); connect(m_systemInfoDBusProxy, &SystemInfoDBusProxy::ShortDateFormatChanged, this, &SystemInfoWork::onShortDateFormatChanged); connect(Dtk::Gui::DGuiApplicationHelper::instance(), &Dtk::Gui::DGuiApplicationHelper::themeTypeChanged, this, &SystemInfoWork::onThemeTypeChanged); updateFrequency(false); } SystemInfoWork::~SystemInfoWork() { if (m_process) { //如果控制中心被强制关闭,需要用kill来杀掉没有被关闭的窗口 kill(static_cast<__pid_t>(m_process->processId()), 15); m_process->deleteLater(); m_process = nullptr; } } void SystemInfoWork::activate() { //获取主机名 m_model->setHostName(m_systemInfoDBusProxy->staticHostname()); m_model->setLogoPath(DSysInfo::distributionOrgLogo(DSysInfo::Distribution, DSysInfo::Normal)); if (DSysInfo::isDeepin()) { m_model->setLicenseState(static_cast(m_systemInfoDBusProxy->authorizationState())); QString productName = QString("%1").arg(DSysInfo::uosSystemName()); m_model->setProductName(productName); QString versionNumber = QString("%1").arg(DSysInfo::majorVersion()); m_model->setVersionNumber(versionNumber); } QString version; if (DSysInfo::uosType() == DSysInfo::UosServer || DSysInfo::uosEditionType() == DSysInfo::UosEuler) { version = QString("%1%2").arg(DSysInfo::minorVersion(), DSysInfo::uosEditionName()); m_model->setVersion(version); } else if (DSysInfo::isDeepin()) { QDBusConnection::systemBus().connect("com.deepin.license", "/com/deepin/license/Info", "com.deepin.license.Info", "LicenseStateChange", this, SLOT(onLicenseAuthorizationProperty())); onLicenseAuthorizationProperty(); } else { version = QString("%1 %2").arg(DSysInfo::productVersion(), DSysInfo::productTypeString()); m_model->setVersion(version); } m_model->setType(QSysInfo::WordSize); m_model->setKernel(QSysInfo::kernelVersion()); // 注意:不在此处设置 processor,因为构造函数中的 updateFrequency() 已经设置了 processor if (m_systemInfoDBusProxy->memorySize() > 0) { m_model->setMemory(static_cast(DSysInfo::memoryTotalSize()), m_systemInfoDBusProxy->memorySize()); } else { m_model->setMemory(static_cast(DSysInfo::memoryTotalSize()), static_cast(DSysInfo::memoryInstalledSize())); } m_model->setSystemInstallationDate(getSystemInstallDate(m_systemInfoDBusProxy->shortDateFormat(), m_systemInfoDBusProxy->timezone())); // 隐私政策文本内容 QString http = DSysInfo::productType() != DSysInfo::ProductType::Uos ? tr("https://www.deepin.org/en/agreement/privacy/") : tr("https://www.uniontech.com/agreement/privacy-en"); QString email = DSysInfo::productType() != DSysInfo::ProductType::Uos ? "support@deepin.org" : "support@uniontech.com"; QString text = tr("

We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.

" "

You can click here to view our latest privacy policy and/or view it online by visiting %1. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.

") .arg(http) .arg(email); m_model->setPrivacyPolicy(text); // 用户体验计划内容 m_model->setJoinUeProgram(isUeProgramEnabled()); updateUserExperienceProgramText(); m_model->setShowDetail(true); QString platformname = QGuiApplication::platformName(); if (platformname.contains("xcb")) { platformname = "X11"; } else if (platformname.contains("wayland")) { platformname = "Wayland"; } m_model->setGraphicsPlatform(platformname); // 初始化开源协议 initGnuLicenseData(); // 初始化用户最终协议 initUserLicenseData(); initSystemCopyright(); } void SystemInfoWork::updateUserExperienceProgramText() { if (!m_model) return; QString http = IS_COMMUNITY_SYSTEM ? tr("https://www.deepin.org/en/agreement/privacy/") : tr("https://www.uniontech.com/agreement/experience-en"); // 根据当前主题选择普通文本颜色:浅色主题用半透明黑,深色主题用半透明白 auto themeType = Dtk::Gui::DGuiApplicationHelper::instance()->themeType(); const QString normalColor = themeType == Dtk::Gui::DGuiApplicationHelper::DarkType ? QStringLiteral("#B3FFFFFF") : QStringLiteral("#64000000"); QString text; if (IS_COMMUNITY_SYSTEM) { text = tr("

Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. " "If you refuse our collection and use of the aforementioned information, do not join User Experience Program. " "For details, please refer to Deepin Privacy Policy (%1).

") .arg(http) .arg(normalColor); } else { text = tr("

Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. " "If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit %1.

") .arg(http) .arg(normalColor); } m_model->setUserExperienceProgramText(text); } void SystemInfoWork::deactivate() { } QString SystemInfoWork::getEndUserAgreementText() { if (DSysInfo::uosEditionType() == DSysInfo::UosEuler) { return DCC_LICENSE::getEulerEndUserAgreement(); } else { if (m_model->endUserAgreementPath().has_value()) { return DCC_LICENSE::getEndUserAgreement(m_model->endUserAgreementPath().value()); } } return ""; } void SystemInfoWork::initGnuLicenseData() { QFutureWatcher> *w = new QFutureWatcher>(this); connect(w, &QFutureWatcher>::finished, this, [=] { const auto r = w->result(); m_model->setGnuLinceseTitle(r.first); m_model->setGnuLinceseContent(r.second); }); w->setFuture(QtConcurrent::run([] { return DCC_LICENSE::loadLicenses(); })); } void SystemInfoWork::initUserLicenseData() { DCC_LICENSE::LicenseSearchInfo licensepath = DCC_LICENSE::isEndUserAgreementExist(); if (licensepath.exist) { m_model->setEndUserAgreementPath(licensepath.path); } QFutureWatcher *w = new QFutureWatcher(this); connect(w, &QFutureWatcher::finished, this, [=] { const auto r = w->result(); m_model->setUserLicense(r); }); w->setFuture(QtConcurrent::run([this] { return getEndUserAgreementText(); })); } // Removed the placeholder comment void SystemInfoWork::copyTextToClipboard(const QString &text) { QClipboard *clipboard = QGuiApplication::clipboard(); if (clipboard) { clipboard->setText(text); } } void SystemInfoWork::playSystemSound(int soundType) { DDesktopServices::playSystemSoundEffect(static_cast(soundType)); } void SystemInfoWork::initSystemCopyright() { const QSettings settings("/etc/deepin-installer.conf", QSettings::IniFormat); QString oem_copyright = settings.value("system_info_vendor_name").toString().toUtf8(); const int buildYear = QString(__DATE__).right(4).toInt(); int validYear = QDateTime::currentDateTime().date().year(); validYear = qMax(buildYear, validYear); if (oem_copyright.isEmpty()) { if (DSysInfo::productType() != DSysInfo::ProductType::Uos) oem_copyright = QCoreApplication::translate("LogoModule", "Copyright© 2011-%1 Deepin Community") .arg(validYear); else oem_copyright = QCoreApplication::translate( "LogoModule", "Copyright© 2019-%1 UnionTech Software Technology Co., LTD") .arg(validYear); } m_model->setSystemCopyright(oem_copyright); } void SystemInfoWork::updateFrequency(bool state) { bool useCurrentSpeed = true; double cpuMaxMhz = 0.0; if (state) { useCurrentSpeed = false; } else { QString cpuHardware = m_systemInfoDBusProxy->CPUHardware(); qInfo() << "Current cpu hardware:" << cpuHardware; if (cpuHardware.contains("PANGU")) { useCurrentSpeed = false; } } if (useCurrentSpeed) { cpuMaxMhz = static_cast(m_systemInfoDBusProxy->CurrentSpeed()); } else { cpuMaxMhz = m_systemInfoDBusProxy->CPUMaxMHz(); } if (DSysInfo::cpuModelName().contains("Hz")) { m_model->setProcessor(DSysInfo::cpuModelName()); } else { QString processor = m_systemInfoDBusProxy->Processor(); if (processor.contains("Hz")) { m_model->setProcessor(processor); } else { if (DSysInfo::cpuModelName().isEmpty()) m_model->setProcessor(QString("%1 @ %2GHz").arg(processor) .arg(cpuMaxMhz / 1000)); else m_model->setProcessor(QString("%1 @ %2GHz").arg(DSysInfo::cpuModelName()) .arg(cpuMaxMhz / 1000)); } } } QString SystemInfoWork::getSystemInstallDate(int shortDateFormat, QString timezone) { qDebug() << "ShortDateFormat:" << shortDateFormat << "Timezone:" << timezone; QSettings settings("/etc/deepin-installer/deepin-installer.conf", QSettings::NativeFormat); const QString &inputTime = settings.value("DI_INSTALL_FINISH_TIME").toString(); static const QString fotmatShortDate[] = {"yyyy/M/d", "yyyy-M-d", "yyyy.M.d", "yyyy/MM/dd", "yyyy-MM-dd", "yyyy.MM.dd", "MM.dd.yyyy", "dd.MM.yyyy", "yy/M/d", "yy-M-d", "yy.M.d"}; int offset = 0; QRegularExpression regexUtc("(UTC[+-]\\d{2})"); QRegularExpressionMatch matchUtc = regexUtc.match(inputTime); if (matchUtc.hasMatch()) { QRegularExpression regexUtc("([+-]\\d{2})"); QRegularExpressionMatch matchOffset = regexUtc.match(matchUtc.captured(1)); if (matchOffset.hasMatch()) { offset = matchOffset.captured(1).toInt(); } } qDebug() << "Utc offset:" << offset; QDateTime dateTime = QDateTime::fromString(inputTime, "yyyy-MM-dd hh:mm:ss 'UTC'tt"); QTimeZone offsetTimeZone(offset * 3600); dateTime.setTimeZone(offsetTimeZone); if (dateTime.isValid() && shortDateFormat >= 0 && shortDateFormat <= 10) { // 将时间转换到目标时区 QTimeZone targetTimeZone(timezone.toLocal8Bit()); qDebug() << "targetTimeZone :" << targetTimeZone.isValid() << timezone; QDateTime convertedDateTime = dateTime.toTimeZone(targetTimeZone); qDebug() << "Converted DateTime:" << convertedDateTime; return convertedDateTime.toString(fotmatShortDate[shortDateFormat]); } return ""; } static const QString getLicensePath(const QString &filePath, const QString &type) { const QString& locale { QLocale::system().name() }; QString lang = SYSTEM_LOCAL_LIST.contains(locale) ? locale : "en_US"; QString path = QString(filePath).arg(lang).arg(type); if (QFile(path).exists()) return path; else return QString(filePath).arg("en_US").arg(type); } static QString getUserExpContent() { QString userExpContent = getLicensePath("/usr/share/protocol/userexperience-agreement/User-Experience-Program-License-Agreement-CN-%1.md", ""); if (DSysInfo::isCommunityEdition()) { userExpContent = getLicensePath("/usr/share/deepin-deepinid-client/privacy/User-Experience-Program-License-Agreement-Community/User-Experience-Program-License-Agreement-CN-%1.md", ""); return userExpContent; } QFile newfile(userExpContent); if (false == newfile.exists()) { userExpContent = getLicensePath("/usr/share/deepin-deepinid-client/privacy/User-Experience-Program-License-Agreement/User-Experience-Program-License-Agreement-CN-%1.md", ""); QFile file(userExpContent); if (false == file.exists()) { userExpContent = getLicensePath("/usr/share/deepin-deepinid-client/privacy/User-Experience-Program-License-Agreement-%1.md", ""); } } return userExpContent; } void SystemInfoWork::setUeProgram(bool enabled) { QDateTime current_date_time = QDateTime::currentDateTime(); QString current_date = current_date_time.toString("yyyy-MM-dd hh:mm::ss.zzz"); if (enabled && (isUeProgramEnabled() != enabled)) { Q_EMIT requestUeProgram(true); qInfo() << "Suser opened experience project switch"; // 打开license-dialog必要的三个参数:标题、license文件路径、checkBtn的Text QString allowContent(tr("Agree and Join User Experience Program")); // license路径 m_content = getUserExpContent(); m_process = new QProcess(this); auto pathType = "-c"; const QStringList &sl { "zh_CN", "zh_HK", "zh_TW", "ug_CN", // 维语 "bo_CN" // 藏语 }; if (!sl.contains(QLocale::system().name())) pathType = "-e"; auto themeType = Dtk::Gui::DGuiApplicationHelper::instance()->themeType(); QString theme = themeType == Dtk::Gui::DGuiApplicationHelper::DarkType ? "dark" : "light"; m_process->start("dde-license-dialog", QStringList() << "-t" << m_title << pathType << m_content << "-a" << allowContent << "-p" << theme << "-i" << "preferences-system"); qDebug()<<" Deliver content QStringList() = "<<"dde-license-dialog" << "-t" << m_title << pathType << m_content << "-a" << allowContent << "-p" << theme << "-i" << "preferences-system"; connect(m_process, static_cast(&QProcess::finished), this, [=](int result) { if (96 == result) { if (!m_model->joinUeProgram()) { m_model->setJoinUeProgram(enabled); qInfo() << QString("On %1, users open the switch to join the user experience program!").arg(current_date); } setUeProgramEnabled(enabled); } else { m_model->setJoinUeProgram(isUeProgramEnabled()); qInfo() << QString("On %1, users cancel the switch to join the user experience program!").arg(current_date); } Q_EMIT requestUeProgram(false); m_process->deleteLater(); m_process = nullptr; }); } else { if (isUeProgramEnabled() != enabled) { setUeProgramEnabled(enabled); qDebug() << QString("On %1, users close the switch to join the user experience program!").arg(current_date); } if (m_model->joinUeProgram() != enabled) { m_model->setJoinUeProgram(enabled); qDebug() << QString("On %1, users cancel the switch to join the user experience program!").arg(current_date); } } } void SystemInfoWork::showActivatorDialog() { m_systemInfoDBusProxy->Show(); } void SystemInfoWork::showDetail() { m_model->setShowDetail(true); } void SystemInfoWork::onSetHostname(const QString &hostname) { m_systemInfoDBusProxy->setStaticHostname(hostname, this, SLOT(onSetHostnameFinish()), SLOT(onSetHostnameFinish())); } void SystemInfoWork::onSetHostnameFinish() { m_model->setHostName(m_systemInfoDBusProxy->staticHostname()); } void SystemInfoWork::onTimezoneChanged(const QString) { m_model->setSystemInstallationDate(getSystemInstallDate(m_systemInfoDBusProxy->shortDateFormat(), m_systemInfoDBusProxy->timezone())); } void SystemInfoWork::onShortDateFormatChanged(const int) { m_model->setSystemInstallationDate(getSystemInstallDate(m_systemInfoDBusProxy->shortDateFormat(), m_systemInfoDBusProxy->timezone())); } void SystemInfoWork::onThemeTypeChanged() { updateUserExperienceProgramText(); } bool SystemInfoWork::isUeProgramEnabled() { if (!m_dBusUeProgram || !m_dBusUeProgram->isValid()) return false; if (m_dBusUeProgram->service() == USER_EXPERIENCE_SERVICE) { QDBusMessage reply = m_dBusUeProgram->call("IsEnabled"); QList outArgs = reply.arguments(); if (QDBusMessage::ReplyMessage == reply.type() && !outArgs.isEmpty()) { return outArgs.first().toBool(); } } return m_dBusUeProgram->property("Enabled").toBool(); } void SystemInfoWork::setUeProgramEnabled(bool enabled) { if (!m_dBusUeProgram || !m_dBusUeProgram->isValid()) return; if (m_dBusUeProgram->service() == USER_EXPERIENCE_SERVICE) { m_dBusUeProgram->asyncCall("Enable", enabled); return; } m_dBusUeProgram->asyncCall("Enable", enabled); } void SystemInfoWork::onLicenseAuthorizationProperty() { if (DSysInfo::isDeepin()) { ActiveState newLicenseState = static_cast(m_systemInfoDBusProxy->authorizationState()); m_model->setLicenseState(newLicenseState); } // 从授权服务器获取授权类型 QString authorizationProperty = getLicenseAuthorizationPropertyString(); QString version = ""; if (authorizationProperty != "") { version = QString("%1 (%2) (%3)").arg(DSysInfo::uosEditionName()) .arg(authorizationProperty) .arg(DSysInfo::minorVersion()); } else { version = QString("%1 (%2)").arg(DSysInfo::uosEditionName()) .arg(DSysInfo::minorVersion()); } if (m_model) { m_model->setVersion(version); } } QString SystemInfoWork::getLicenseAuthorizationPropertyString() { QDBusInterface licenseInfo("com.deepin.license", "/com/deepin/license/Info", "com.deepin.license.Info", QDBusConnection::systemBus()); if (!licenseInfo.isValid()) { qWarning() << "Servie: com.deepin.license error: " << licenseInfo.lastError().name(); return ""; } return licenseInfo.property("AuthorizationPropertyString").toString(); } } ================================================ FILE: src/plugin-systeminfo/operation/systeminfowork.h ================================================ //SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef SYSTEMINFOWORK_H #define SYSTEMINFOWORK_H #include #include #include #include class QApplication; class SystemInfoDBusProxy; namespace DCC_NAMESPACE{ class SystemInfoModel; class SystemInfoWork : public QObject { Q_OBJECT public: explicit SystemInfoWork(SystemInfoModel* model, QObject* parent = nullptr); virtual ~SystemInfoWork(); void activate(); void deactivate(); //void loadGrubSettings(); QString getEndUserAgreementText(); void initGnuLicenseData(); void initUserLicenseData(); void initSystemCopyright(); void updateFrequency(bool state); QString getSystemInstallDate(int shortDateFormat, QString timezone); Q_INVOKABLE void setUeProgram(bool enabled); Q_INVOKABLE void showActivatorDialog(); Q_INVOKABLE void showDetail(); Q_INVOKABLE void copyTextToClipboard(const QString &text); // Add new invokable method Q_INVOKABLE void playSystemSound(int soundType); bool isUeProgramEnabled(); void setUeProgramEnabled(bool enabled); QString getLicenseAuthorizationPropertyString(); Q_SIGNALS: void requestSetAutoHideDCC(const bool visible) const; void requestUeProgram(bool visible) const; public Q_SLOTS: void onSetHostname(const QString &hostname); void onSetHostnameFinish(); void onTimezoneChanged(const QString timezone); void onShortDateFormatChanged(const int shortDateFormate); void onLicenseAuthorizationProperty(); void onThemeTypeChanged(); private: void getLicenseState(); void updateUserExperienceProgramText(); private: SystemInfoModel *m_model; SystemInfoDBusProxy *m_systemInfoDBusProxy; QProcess *m_process = nullptr; QString m_content; QString m_title; QDBusInterface *m_dBusUeProgram; // for user experience program }; } #endif // SYSTEMINFOWORK_H ================================================ FILE: src/plugin-systeminfo/operation/utils.h ================================================ // SPDX-FileCopyrightText: 2018 - 2026 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef UTILS_H #define UTILS_H #include #include #include #include #define IS_SERVER_SYSTEM (DSysInfo::UosServer == DSysInfo::uosType()) // 是否是服务器版 #define IS_COMMUNITY_SYSTEM (DSysInfo::UosCommunity == DSysInfo::uosEditionType()) // 是否是社区版 #define IS_PROFESSIONAL_SYSTEM (DSysInfo::UosProfessional == DSysInfo::uosEditionType()) // 是否是专业版 #define IS_HOME_SYSTEM (DSysInfo::UosHome == DSysInfo::uosEditionType()) // 是否是个人版 #define IS_EDUCATION_SYSTEM (DSysInfo::UosEducation == DSysInfo::uosEditionType()) // 是否是教育版 #define IS_DEEPIN_DESKTOP (DSysInfo::DeepinDesktop == DSysInfo::deepinType()) // 是否是Deepin桌面 inline const static QString serverEnduserAgreement_new = "/usr/share/protocol/enduser-agreement/End-User-License-Agreement-Server-CN-%1.%2"; inline const static QString serverEnduserAgreement_old = "/usr/share/deepin-deepinid-client/privacy/End-User-License-Agreement-Server/" "End-User-License-Agreement-Server-CN-%1.%2"; inline const static QString eulerServerEnduserAgreement_new = "/usr/share/protocol/enduser-agreement/End-User-License-Agreement-Server-Euler-%1.%2"; inline const static QString homeEnduserAgreement_new = "/usr/share/protocol/enduser-agreement/End-User-License-Agreement-Home-CN-%1.%2"; inline const static QString homeEnduserAgreement_old = "/usr/share/deepin-deepinid-client/privacy/End-User-License-Agreement-Home/" "End-User-License-Agreement-Home-CN-%1.%2"; inline const static QString militaryEnduserAgreement = "/usr/share/protocol/enduser-agreement/End-User-License-Agreement-Military-%1.%2"; inline const static QString professionalEnduserAgreement_new = "/usr/share/protocol/enduser-agreement/End-User-License-Agreement-Professional-CN-%1.%2"; inline const static QString professionalEnduserAgreement_old = "/usr/share/deepin-deepinid-client/privacy/End-User-License-Agreement-Professional/" "End-User-License-Agreement-Professional-CN-%1.%2"; inline const static QString educationEnduserAgreement = "/usr/share/protocol/enduser-agreement/End-User-License-Agreement-Education-CN-%1.%2"; inline const static QString oldAgreement = "/usr/share/deepin-deepinid-client/privacy/End-User-License-Agreement-%1.%2"; inline static const QStringList DCC_CONFIG_FILES{ "/etc/deepin/dde-control-center.conf", "/usr/share/dde-control-center/dde-control-center.conf" }; inline static const QMap SYSTEM_LOCAL_MAP{ { "zh_CN", "zh_CN" }, { "zh_HK", "zh_HK" }, { "zh_TW", "zh_TW" }, }; inline static const QStringList SYSTEM_LOCAL_LIST{ "zh_CN", "zh_HK", "zh_TW", "ug_CN", // 维语 "bo_CN" // 藏语 }; inline bool isFileExist(const QString &path) { QFile file(path); return file.exists(); } namespace DCC_LICENSE { using Dtk::Core::DSysInfo; static const QString getLicensePath(const QString &filePath, const QString &type) { const QString &locale{ QLocale::system().name() }; QString lang = SYSTEM_LOCAL_LIST.contains(locale) ? locale : "en_US"; QString path = QString(filePath).arg(lang).arg(type); if (isFileExist(path)) return path; else return QString(filePath).arg("en_US").arg(type); } inline const QString getLicenseText(const QString &filePath, const QString &type) { QFile license(getLicensePath(filePath, type)); if (!license.open(QIODevice::ReadOnly)) return QString(); const QByteArray buf = license.readAll(); license.close(); return buf; } [[maybe_unused]] inline const QString getDevelopModeLicense(const QString &filePath, const QString &type) { const QString &locale{ QLocale::system().name() }; QString lang; if (SYSTEM_LOCAL_MAP.keys().contains(locale)) { lang = { SYSTEM_LOCAL_MAP.value(QLocale::system().name(), "en_US") }; } if (lang.isEmpty()) { lang = { SYSTEM_LOCAL_MAP.value(QLocale::system().name(), "en_US") }; } QString path = QString(filePath).arg(lang).arg(type); QFile license(path); if (!license.open(QIODevice::ReadOnly)) return QString(); const QByteArray buf = license.readAll(); license.close(); return buf; } [[maybe_unused]] inline void getPrivacyFile(QString &zhCNContent, QString &enUSContent) { // 使用新的协议文档路径 const QString newCNContent = "/usr/share/protocol/privacy-policy/Privacy-Policy-CN-zh_CN.md"; const QString newENContent = "/usr/share/protocol/privacy-policy/Privacy-Policy-CN-en_US.md"; const QString oldCNContent = "/usr/share/deepin-deepinid-client/privacy/deepinid-CN-zh_CN.md"; const QString oldENContent = "/usr/share/deepin-deepinid-client/privacy/deepinid-CN-en_US.md"; QFile privacyzhCNFile(newCNContent); zhCNContent = privacyzhCNFile.exists() ? newCNContent : oldENContent; QFile privacyenUSFile(newENContent); enUSContent = privacyzhCNFile.exists() ? newENContent : oldENContent; // 目前社区版的协议只放在这个路径下,后续如果修改了,再作适配 if (DSysInfo::isCommunityEdition()) { zhCNContent = "/usr/share/deepin-deepinid-client/privacy/Privacy-Policy-Community/" "Privacy-Policy-CN-zh_CN.md"; enUSContent = "/usr/share/deepin-deepinid-client/privacy/Privacy-Policy-Community/" "Privacy-Policy-CN-en_US.md"; } } [[maybe_unused]] inline QString getUserExpContent() { QString userExpContent = getLicensePath("/usr/share/protocol/userexperience-agreement/" "User-Experience-Program-License-Agreement-CN-%1.%2", "md"); if (DSysInfo::isCommunityEdition()) { userExpContent = getLicensePath("/usr/share/deepin-deepinid-client/privacy/" "User-Experience-Program-License-Agreement-Community/" "User-Experience-Program-License-Agreement-CN-%1.%2", "md"); return userExpContent; } QFile newfile(userExpContent); if (false == newfile.exists()) { userExpContent = getLicensePath("/usr/share/deepin-deepinid-client/privacy/" "User-Experience-Program-License-Agreement/" "User-Experience-Program-License-Agreement-CN-%1.%2", "md"); QFile file(userExpContent); if (false == file.exists()) { userExpContent = getLicensePath("/usr/share/deepin-deepinid-client/privacy/" "User-Experience-Program-License-Agreement-%1.%2", "md"); } } return userExpContent; } struct LicenseSearchInfo { bool exist; QString path; }; inline LicenseSearchInfo isEndUserAgreementExist() { auto pathIfExists = [](const QString &pattern, const QString &type = "") -> QString { if (type.isEmpty()) { const QString mdPath = getLicensePath(pattern, "md"); if (QFile::exists(mdPath)) return mdPath; const QString txtPath = getLicensePath(pattern, "txt"); return QFile::exists(txtPath) ? txtPath : QString(); } const QString p = getLicensePath(pattern, type); return QFile::exists(p) ? p : QString(); }; QString candidate; if (DSysInfo::uosType() == DSysInfo::UosType::UosServer) { candidate = pathIfExists(serverEnduserAgreement_new, "txt"); if (candidate.isEmpty()) candidate = pathIfExists(serverEnduserAgreement_old, "txt"); } else if (DSysInfo::uosEditionType() == DSysInfo::UosEdition::UosHome) { candidate = pathIfExists(homeEnduserAgreement_new, "txt"); if (candidate.isEmpty()) candidate = pathIfExists(homeEnduserAgreement_old, "txt"); } else if (DSysInfo::isCommunityEdition()) { candidate = pathIfExists( "/usr/share/deepin-deepinid-client/privacy/End-User-License-Agreement-Community/" "End-User-License-Agreement-CN-%1.%2", "txt"); } else if (DSysInfo::uosEditionType() == DSysInfo::UosEdition::UosEducation) { candidate = pathIfExists(educationEnduserAgreement, "txt"); } else if (DSysInfo::uosEditionType() == DSysInfo::UosEdition::UosMilitary) { candidate = pathIfExists(militaryEnduserAgreement, "txt"); } else { candidate = pathIfExists(professionalEnduserAgreement_new); if (candidate.isEmpty()) candidate = pathIfExists(professionalEnduserAgreement_old, "txt"); } if (candidate.isEmpty()) candidate = pathIfExists(oldAgreement, "txt"); if (!candidate.isEmpty()) return { true, candidate }; return { false, QString() }; } inline QString getEndUserAgreement(const QString &licensePath) { QFile license(licensePath); if (!license.open(QIODevice::ReadOnly)) return QString(); const QByteArray buf = license.readAll(); license.close(); return buf; } inline QString getEulerEndUserAgreement() { const QString bodypath_new = getLicensePath(eulerServerEnduserAgreement_new, "txt"); if (QFile::exists(bodypath_new)) { return getLicenseText(eulerServerEnduserAgreement_new, "txt"); } else { return getLicenseText( "/usr/share/deepin-deepinid-client/privacy/End-User-License-Agreement-%1.%2", "txt"); } } inline QPair loadLicenses() { const QString title = getLicenseText(":/systeminfo/gpl/gpl-3.0-%1-%2.txt", "title"); const QString body = getLicenseText(":/systeminfo/gpl/gpl-3.0-%1-%2.txt", "body"); return QPair(title, body); } } // namespace DCC_LICENSE template T valueByQSettings(const QStringList &configFiles, const QString &group, const QString &key, const QVariant &failback) { for (const QString &path : configFiles) { QSettings settings(path, QSettings::IniFormat); if (!group.isEmpty()) { settings.beginGroup(group); } const QVariant &v = settings.value(key); if (v.isValid()) { T t = v.value(); return t; } } return failback.value(); } #endif // UTILS_H ================================================ FILE: src/plugin-systeminfo/qml/NativeInfoPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import org.deepin.dtk 1.0 as D import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Controls.Material 2.15 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 import org.deepin.dcc 1.0 import org.deepin.dtk.style 1.0 as DS DccObject { id: root11 DccObject { name: "systemLogo" weight: 10 parentName: "systemInfo" pageType: DccObject.Item backgroundType: DccObject.Normal visible: !dccData.systemInfoMode().showDetail page: RowLayout { Image { source: "file://" + DTK.deepinDistributionOrgLogo } ColumnLayout { Label { font.bold: true font.pixelSize: 22 horizontalAlignment: Text.AlignLeft text: qsTr("UOS") } Label { Layout.alignment: Qt.AlignHCenter text: dccData.systemInfoMode().systemCopyright horizontalAlignment: Text.AlignHCenter wrapMode: Text.Wrap Layout.preferredWidth: parent ? parent.width : implicitWidth } } } } DccObject { name: "systemDetailLogo" weight: 20 parentName: "systemInfo" pageType: DccObject.Item backgroundType: DccObject.Normal visible: dccData.systemInfoMode().showDetail page: ColumnLayout{ Image { Layout.topMargin: 25 Layout.alignment: Qt.AlignHCenter source: "file://" + dccData.systemInfoMode().logoPath } Label { Layout.alignment: Qt.AlignHCenter text: dccData.systemInfoMode().systemCopyright Layout.bottomMargin: 25 horizontalAlignment: Text.AlignHCenter wrapMode: Text.Wrap Layout.preferredWidth: parent ? parent.width : implicitWidth } } } DccObject { name: "nativeInfoGrp" parentName: "systemInfo" weight: 40 pageType: DccObject.Item page: ColumnLayout { DccGroupView { } } DccObject { name: "productName" weight: 10 parentName: "nativeInfoGrp" displayName: qsTr("Computer name") + ":" backgroundType: DccObject.Normal visible: dccData.systemInfoMode().showDetail pageType: DccObject.Editor page: RowLayout { Label { id: hostNameLabel Layout.alignment: Qt.AlignRight | Qt.AlignVCenter text: dccData.systemInfoMode().hostName ToolTip { text: hostNameLabel.text delay: 500 visible: hostNameArea.containsMouse } MouseArea { id: hostNameArea anchors.fill: parent hoverEnabled: true } } ActionButton { id: editBtn icon.name: "dcc_systemInfo_edit" icon.width: 16 icon.height: 16 implicitWidth: 30 implicitHeight: 30 flat: !hovered Layout.alignment: Qt.AlignRight | Qt.AlignVCenter palette.windowText: ColorSelector.textColor background: Rectangle { property Palette pressedColor: Palette { normal: Qt.rgba(0, 0, 0, 0.2) normalDark: Qt.rgba(0, 0, 0, 0.15) } property Palette hoveredColor: Palette { normal: Qt.rgba(0, 0, 0, 0.1) normalDark: Qt.rgba(1, 1, 1, 0.1) } radius: DS.Style.control.radius color: parent.pressed ? ColorSelector.pressedColor : (parent.hovered ? ColorSelector.hoveredColor : "transparent") border { color: parent.palette.highlight width: parent.visualFocus ? DS.Style.control.focusBorderWidth : 0 } } onClicked: { editBtn.visible = false hostNameLabel.visible = false hostNameEdit.visible = true hostNameEdit.text = dccData.systemInfoMode().hostName hostNameEdit.selectAll() hostNameEdit.forceActiveFocus() } } LineEdit { id: hostNameEdit horizontalAlignment: TextInput.AlignLeft text: dccData.systemInfoMode().hostName visible: false showAlert: false alertDuration: 3000 MouseArea { anchors.fill: parent acceptedButtons: Qt.RightButton onClicked: function(mouse) { mouse.accepted = true } } onVisibleChanged: { if (!visible && showAlert) { showAlert = false } } Connections { target: DccApp function onActiveObjectChanged(object) { if (hostNameEdit.showAlert) { hostNameEdit.showAlert = false } } } onTextChanged: { if (showAlert) showAlert = false if (text.length > 63) { var cursorPos = cursorPosition text = text.slice(0, 63) cursorPosition = Math.min(cursorPos, text.length) showAlert = true alertText = qsTr("1~63 characters please") dccData.systemInfoWork().playSystemSound(14) return } if (!/^[A-Za-z0-9-]{0,63}$/.test(text)) { var cursorPos = cursorPosition var filteredText = text.replace(/[^A-Za-z0-9-]/g, "") filteredText = filteredText.slice(0, 63) if (filteredText !== text) { text = filteredText cursorPosition = Math.min(cursorPos, text.length) dccData.systemInfoWork().playSystemSound(14) } } } onEditingFinished: { editBtn.forceActiveFocus() if (hostNameEdit.text.length === 0) { editBtn.visible = true hostNameLabel.visible = true hostNameEdit.visible = false hostNameEdit.showAlert = false return } if ((hostNameEdit.text.indexOf('-') === 0 || hostNameEdit.text.lastIndexOf('-') === hostNameEdit.text.length - 1) && hostNameEdit.text.length <= 63) { hostNameEdit.showAlert = true hostNameEdit.alertText = qsTr("It cannot start or end with dashes") dccData.systemInfoWork().playSystemSound(14) return } editBtn.visible = true hostNameLabel.visible = true hostNameEdit.visible = false hostNameEdit.showAlert = false dccData.systemInfoWork().onSetHostname(hostNameEdit.text) } Keys.onPressed: function(event) { if (event.key === Qt.Key_Return) { hostNameEdit.forceActiveFocus(false); } else if ((event.modifiers & Qt.ControlModifier) && (event.key === Qt.Key_C || event.key === Qt.Key_V || event.key === Qt.Key_X)) { event.accepted = true } } } } } DccObject { name: "hostName" weight: 20 parentName: "nativeInfoGrp" displayName: qsTr("OS Name") + ":" backgroundType: DccObject.Normal pageType: DccObject.Editor page: Label { Layout.alignment: Qt.AlignRight | Qt.AlignTop text: dccData.systemInfoMode().productName } } DccObject { name: "version" weight: 30 parentName: "nativeInfoGrp" pageType: DccObject.Editor displayName: qsTr("Version") + ":" page: Label { horizontalAlignment: Text.AlignLeft text: dccData.systemInfoMode().versionNumber } } DccObject { name: "edition" weight: 40 parentName: "nativeInfoGrp" pageType: DccObject.Editor displayName: qsTr("Edition") + ":" page: Label { horizontalAlignment: Text.AlignLeft text: dccData.systemInfoMode().version } } DccObject { name: "type" weight: 50 parentName: "nativeInfoGrp" pageType: DccObject.Editor displayName: qsTr("Type") + ":" page: Label { horizontalAlignment: Text.AlignLeft text: dccData.systemInfoMode().type + qsTr("bit") } } DccObject { name: "authorization" weight: 60 parentName: "nativeInfoGrp" pageType: DccObject.Editor displayName: qsTr("Authorization") + ":" visible: dccData.systemInfoMode().showAuthorization() page: RowLayout { spacing: 8 Label { id: jihuo color: dccData.systemInfoMode().licenseStatusColor horizontalAlignment: Text.AlignLeft text: dccData.systemInfoMode().licenseStatusText } Button { id: licenseActionBtn text: dccData.systemInfoMode().licenseActionText ColorSelector.family: Palette.CommonColor implicitHeight: 30 implicitWidth: licenseActionBtnMetrics.width + 2 * (DS.Style.button.hPadding + DS.Style.control.borderWidth) flat: false visible: dccData.systemInfoMode().showDetail onClicked: { dccData.systemInfoWork().showActivatorDialog() } ToolTip.visible: licenseActionBtn.hovered && licenseActionBtnMetrics.width > licenseActionBtn.availableWidth ToolTip.text: licenseActionBtn.text ToolTip.delay: 500 TextMetrics { id: licenseActionBtnMetrics font: licenseActionBtn.font text: licenseActionBtn.text } } } } DccObject { name: "systemInstallationTime" weight: 70 visible: dccData.systemInfoMode().showAuthorization() parentName: "nativeInfoGrp" pageType: DccObject.Editor displayName: qsTr("System installation time") + ":" page: Label { horizontalAlignment: Text.AlignLeft text: dccData.systemInfoMode().systemInstallationDate } } DccObject { name: "kernel" weight: 80 parentName: "nativeInfoGrp" pageType: DccObject.Editor displayName: qsTr("Kernel") + ":" page: Label { horizontalAlignment: Text.AlignLeft text: dccData.systemInfoMode().kernel } } DccObject { name: "graphicsPlatform" weight: 90 parentName: "nativeInfoGrp" pageType: DccObject.Editor visible: dccData.systemInfoMode().showGraphicsPlatform() displayName: qsTr("Graphics Platform") + ":" page: Label { horizontalAlignment: Text.AlignLeft text: dccData.systemInfoMode().graphicsPlatform } } DccObject { id: processorObj name: "processor" weight: 100 parentName: "nativeInfoGrp" pageType: DccObject.Editor displayName: qsTr("Processor") + ":" page: Label { id: processorLabel horizontalAlignment: Text.AlignRight wrapMode: Text.Wrap width: processorObj.parentItem ? Math.max(0, processorObj.parentItem.width - displayNameMetrics.width - processorObj.parentItem.leftPadding - 30) : implicitWidth TextMetrics { id: displayNameMetrics text: processorObj.displayName font: processorLabel.font } text: dccData.systemInfoMode().processor } } DccObject { name: "memory" weight: 100 parentName: "nativeInfoGrp" pageType: DccObject.Editor displayName: qsTr("Memory") + ":" page: Label { horizontalAlignment: Text.AlignLeft text: dccData.systemInfoMode().memory } } } DccObject { name: "detailBtn" weight: 60 parentName: "systemInfo" pageType: DccObject.Item visible: !dccData.systemInfoMode().showDetail page: RowLayout { Button { Layout.topMargin: 10 implicitWidth: 250 implicitHeight: 30 Layout.alignment: Qt.AlignHCenter text: "显示详细信息" font: DTK.fontManager.t6 opacity: 0.7 onClicked: { dccData.systemInfoWork().showDetail() } } } } } ================================================ FILE: src/plugin-systeminfo/qml/PrivacyPolicyPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import org.deepin.dtk 1.0 as D import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 import org.deepin.dcc 1.0 //import org.deepin.dcc.systemInfo 1.0 DccObject { DccObject { name: "title" parentName: "system/privacyPolicy" pageType: DccObject.Item weight: 20 page: Label { Layout.alignment: Qt.AlignHCenter horizontalAlignment: Text.AlignHCenter font: DTK.fontManager.t4 text: qsTr("Privacy Policy") } } DccObject { name: "content" parentName: "system/privacyPolicy" pageType: DccObject.Item weight: 30 page: Label { id: policyLabel textFormat: Text.RichText font: DTK.fontManager.t6 horizontalAlignment: Text.AlignLeft text: dccData.systemInfoMode().privacyPolicy wrapMode: Text.WordWrap opacity: 0.7 property string currentLinkUrl: "" // 超链接点击事件 onLinkActivated: function(url) { console.log("点击的链接是: " + url) Qt.openUrlExternally(url) // 使用默认浏览器打开链接 } MouseArea { id: labelMouseArea anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton hoverEnabled: true cursorShape: policyLabel.linkAt(mouseX, mouseY) ? Qt.PointingHandCursor : Qt.ArrowCursor // Change cursor over links onPressed: (mouse)=> { if (mouse.button === Qt.RightButton) { var link = policyLabel.linkAt(mouse.x, mouse.y) if (link) { console.log("Right-clicked on link: " + link) policyLabel.currentLinkUrl = link contextMenu.popup() } mouse.accepted = true } else { mouse.accepted = false } } } Menu { id: contextMenu MenuItem { id: copyLinkMenuItem text: qsTr("Copy Link Address") + "(L)" onTriggered: { console.log("Copying link: " + policyLabel.currentLinkUrl) dccData.systemInfoWork().copyTextToClipboard(policyLabel.currentLinkUrl) } } Shortcut { sequence: "L" onActivated: { console.log("Shortcut L activated to select copy link") if (contextMenu.visible) { contextMenu.currentIndex = 0 contextMenu.focus = true } } } } } } } ================================================ FILE: src/plugin-systeminfo/qml/SystemInfo.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 DccTitleObject { id: root name: "auxiliaryInfo" parentName: "system" displayName: qsTr("Auxiliary Information") weight: 1000 onParentItemChanged: { if (parentItem) { parentItem.topPadding = 10 } } } ================================================ FILE: src/plugin-systeminfo/qml/SystemInfoMain.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import org.deepin.dtk 1.0 as D import QtQuick 2.15 import QtQuick.Controls 2.0 import org.deepin.dcc 1.0 import QtQuick.Layouts 1.15 DccObject { DccObject { name: "systemInfo" parentName: "system" displayName: qsTr("About This PC") description: qsTr("System version, device information") icon: "about" weight: 1010 NativeInfoPage{} } DccObject { name: "versionProtocol" parentName: "system" displayName: qsTr("Open Source Software Notice") description: qsTr("View the notice of open source software") icon: "software_declaration" weight: 1020 VersionProtocolPage{} } DccObject { name: "userExperienceProgram" parentName: "system" displayName: qsTr("User Experience Program") description: qsTr("Join the user experience program to help improve the product") icon: "user_experience_plan" weight: 1030 visible: dccData.systemInfoMode().showUserExperienceProgram() UserExperienceProgramPage{} } DccObject { name: "userLicense" parentName: "system" displayName: qsTr("End User License Agreement") description: qsTr("View the end user license agreement") icon: "user_license_agreement" visible: true weight: 1040 UserLicensePage{} } DccObject { name: "privacyPolicy" parentName: "system" displayName: qsTr("Privacy Policy") description: qsTr("View information about privacy policy") icon: "privacy_policy" weight: 1050 PrivacyPolicyPage{} } } ================================================ FILE: src/plugin-systeminfo/qml/UserExperienceProgramPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import org.deepin.dtk 1.0 as D import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dcc 1.0 DccObject { name: "userExperienceProgramGrp" parentName: "system/userExperienceProgram" pageType: DccObject.Item weight: 20 page: DccGroupView {} DccObject { name: "userExperienceProgramSwitch" weight: 20 parentName: "system/userExperienceProgram/userExperienceProgramGrp" displayName: qsTr("Join User Experience Program") pageType: DccObject.Editor page: ColumnLayout { D.Switch { Layout.alignment: Qt.AlignRight | Qt.AlignTop checked: dccData.systemInfoMode().joinUeProgram onCheckedChanged: { console.log("userExperienceProgramSwitch clicked ") dccData.systemInfoWork().setUeProgram(checked) } } Window { id: modalDialog visible: false flags: Qt.Window modality: Qt.ApplicationModal color: "transparent" D.DWindow.enabled: true opacity: 0.0 } Connections { target: dccData function onRequestUeProgram(visible) { if (visible) { modalDialog.show() } else { modalDialog.close() } } } } } DccObject { name: "userExperienceProgramContent" weight: 30 parentName: "system/userExperienceProgram/userExperienceProgramGrp" pageType: DccObject.Item page: D.Label { id: userExperienceLabel leftPadding: 10 rightPadding: 10 topPadding: 10 bottomPadding: 10 font: D.DTK.fontManager.t6 horizontalAlignment: Text.AlignLeft wrapMode: Text.WordWrap textFormat: Text.RichText width: parent ? parent.width : implicitWidth text: dccData.systemInfoMode().userExperienceProgramText property string currentLinkUrl: "" // 超链接点击事件 onLinkActivated: function(url) { console.log("点击的链接是: " + url) Qt.openUrlExternally(url) // 使用默认浏览器打开链接 } MouseArea { id: labelMouseArea anchors.fill: parent acceptedButtons: Qt.LeftButton | Qt.RightButton hoverEnabled: true cursorShape: userExperienceLabel.linkAt(mouseX, mouseY) ? Qt.PointingHandCursor : Qt.ArrowCursor onPressed: (mouse)=> { if (mouse.button === Qt.RightButton) { var link = userExperienceLabel.linkAt(mouse.x, mouse.y) if (link) { userExperienceLabel.currentLinkUrl = link contextMenu.popup() } mouse.accepted = true } else { mouse.accepted = false } } } Menu { id: contextMenu MenuItem { text: qsTr("Copy Link Address") + "(L)" onTriggered: { dccData.systemInfoWork().copyTextToClipboard(userExperienceLabel.currentLinkUrl) } } Shortcut { sequence: "L" onActivated: { if (contextMenu.visible) { contextMenu.currentIndex = 0 contextMenu.focus = true } } } } } } } ================================================ FILE: src/plugin-systeminfo/qml/UserLicensePage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import org.deepin.dtk 1.0 as D import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 import org.deepin.dcc 1.0 DccObject { id: userLicensePage name: "content" parentName: "system/userLicense" pageType: DccObject.Item weight: 20 page: Label { Layout.alignment: Qt.AlignHCenter horizontalAlignment: Text.AlignLeft font: DTK.fontManager.t6 text: dccData.systemInfoMode().userLicense wrapMode: Text.WordWrap textFormat: dccData.systemInfoMode().userLicenseFormat === Qt.MarkdownText ? Text.MarkdownText : Text.PlainText onLinkActivated: (link) => Qt.openUrlExternally(link) HoverHandler { cursorShape: parent.hoveredLink ? Qt.PointingHandCursor : Qt.ArrowCursor } } } ================================================ FILE: src/plugin-systeminfo/qml/VersionProtocolPage.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later // import org.deepin.dtk 1.0 as D import QtQuick 2.15 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 import org.deepin.dcc 1.0 DccObject { DccObject { id: versionProtocolPage name: "title" parentName: "system/versionProtocol" pageType: DccObject.Item weight: 20 page: Label { Layout.alignment: Qt.AlignHCenter horizontalAlignment: Text.AlignHCenter font: DTK.fontManager.t4 text: dccData.systemInfoMode().gnuLinceseTitle } } DccObject { id: versionProtocolPageContent name: "content" parentName: "system/versionProtocol" pageType: DccObject.Item weight: 30 page: Label { Layout.alignment: Qt.AlignVCenter font: DTK.fontManager.t6 horizontalAlignment: Text.AlignLeft text: dccData.systemInfoMode().gnuLinceseContent wrapMode: Text.WordWrap opacity: 0.7 } } } ================================================ FILE: src/plugin-systeminfo/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-touchscreen/CMakeLists.txt ================================================ if (BUILD_PLUGIN) set(touchscreen_Name touchscreen) file(GLOB_RECURSE touchscreen_SRCS "operation/*.cpp" "operation/qrc/touchscreen.qrc" ) file(GLOB_RECURSE touchscreen_qml_SRCS "qml/*.qml" ) # pkg_check_modules(QGSettings REQUIRED IMPORTED_TARGET gsettings-qt) add_library(${touchscreen_Name} MODULE ${touchscreen_SRCS} ) set(touchscreen_Includes src/plugin-touchscreen/operation ) set(touchscreen_Libraries ${DCC_FRAME_Library} ${DTK_NS}::Gui ${QT_NS}::DBus ${QT_NS}::Qml ) target_include_directories(${touchscreen_Name} PUBLIC ${touchscreen_Includes} ) target_link_libraries(${touchscreen_Name} PRIVATE ${touchscreen_Libraries} ) dcc_install_plugin(NAME ${touchscreen_Name} TARGET ${touchscreen_Name}) # dcc_handle_plugin_translation(NAME ${touchscreen_Name} QML_FILES ${touchscreen_qml_SRCS} SOURCE_FILES ${touchscreen_SRCS}) endif() ================================================ FILE: src/plugin-touchscreen/operation/monitordbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "monitordbusproxy.h" #include #include #include #include #include #include MonitorDBusProxy::MonitorDBusProxy(QString monitorPath, QObject *parent) : QObject(parent) , m_monitorUserPath(monitorPath) { init(); } void MonitorDBusProxy::init() { m_dBusMonitorInter = new QDBusInterface("org.deepin.dde.Display1", m_monitorUserPath, "org.deepin.dde.Display1.Monitor", QDBusConnection::sessionBus(), this); } QString MonitorDBusProxy::name() { return qvariant_cast(m_dBusMonitorInter->property("Name")); } ================================================ FILE: src/plugin-touchscreen/operation/monitordbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef MONITORDBUSPROXY_H #define MONITORDBUSPROXY_H #include #include #include class QDBusInterface; class QDBusMessage; class MonitorDBusProxy : public QObject { Q_OBJECT public: static inline const char *staticInterfaceName() { return "org.deepin.dde.Display1.Monitor"; } public: explicit MonitorDBusProxy(QString monitorPath, QObject *parent = nullptr); Q_PROPERTY(QString Name READ name NOTIFY NameChanged) QString name(); private: void init(); Q_SIGNALS: // SIGNALS void NameChanged(const QString & value) const; private: QDBusInterface *m_dBusMonitorInter; QDBusInterface *m_dBusMonitorPropertiesInter; QString m_monitorUserPath; }; #endif // MONITORDBUSPROXY_H ================================================ FILE: src/plugin-touchscreen/operation/qrc/touchscreen.qrc ================================================ icons/dcc_nav_touchscreen_42px.svg icons/dcc_nav_touchscreen_84px.svg ================================================ FILE: src/plugin-touchscreen/operation/touchscreenmatchmodel.cpp ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #include "touchscreenmatchmodel.h" #include "touchscreenmodel.h" TouchScreenMatchModel::TouchScreenMatchModel(TouchScreenModel *parent) : QAbstractItemModel{ parent } , m_touchScreenModel(parent) { init(); } QHash TouchScreenMatchModel::roleNames() const { QHash names= QAbstractItemModel::roleNames(); names[IdRole] = "id"; names[NameRole] = "name"; names[DeviceNodeRole] = "deviceNode"; names[SerialNumberRole] = "serialNumber"; names[UUIDRole] = "UUID"; names[ScreenNameRole] = "screenName"; return names; } QModelIndex TouchScreenMatchModel::index(int row, int column, const QModelIndex &) const { if (row < 0 || row >= m_touchScreenList.size()) { return QModelIndex(); } return createIndex(row, column); } QModelIndex TouchScreenMatchModel::parent(const QModelIndex &) const { return QModelIndex(); } int TouchScreenMatchModel::rowCount(const QModelIndex &) const { return m_touchScreenList.size(); } int TouchScreenMatchModel::columnCount(const QModelIndex &) const { return 1; } QVariant TouchScreenMatchModel::data(const QModelIndex &index, int role) const { if (index.row() < 0 || index.row() >= m_touchScreenList.size()) { return QVariant(); } qWarning()<<__FUNCTION__<<__LINE__<touchMap(); for (const auto &touchscreen : m_touchScreenModel->touchScreenList()) { if (touchMap.contains(touchscreen.UUID)) m_touchScreenList.append(QPair(touchscreen, touchMap[touchscreen.UUID])); else m_touchScreenList.append(QPair(touchscreen, QString())); } endResetModel(); } ================================================ FILE: src/plugin-touchscreen/operation/touchscreenmatchmodel.h ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later #ifndef TOUCHSCREENMATCHMODEL_H #define TOUCHSCREENMATCHMODEL_H #include "touchscreenmodel.h" #include class TouchScreenModel; enum TouchScreenMatchRole { IdRole = Qt::UserRole + 1, NameRole, DeviceNodeRole, SerialNumberRole, UUIDRole, ScreenNameRole, }; class TouchScreenMatchModel : public QAbstractItemModel { Q_OBJECT public: explicit TouchScreenMatchModel(TouchScreenModel *parent); // Basic functionality: QHash roleNames() const override; QModelIndex index(int row, int column, const QModelIndex &parentIndex = QModelIndex()) const override; QModelIndex parent(const QModelIndex &index) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; int columnCount(const QModelIndex &parent = QModelIndex()) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; private: void init(); void resetItems(); QList> m_touchScreenList; TouchScreenModel *m_touchScreenModel; }; #endif // TOUCHSCREENMATCHMODEL_H ================================================ FILE: src/plugin-touchscreen/operation/touchscreenmodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "touchscreenmodel.h" #include "touchscreenmodel_p.h" #include "monitordbusproxy.h" #include "dccfactory.h" #include "touchscreenmatchmodel.h" #include #include #include #include TouchScreenModel::TouchScreenModel(QObject *parent) : QObject(parent) , DCC_INIT_PRIVATE(TouchScreenModel) , m_touchScreenMatchModel(new TouchScreenMatchModel(this)) { qmlRegisterType("org.deepin.dcc.touchscreen", 1, 0, "TouchScreenMatchModel"); } TouchScreenModel::~TouchScreenModel() { m_touchScreenMatchModel->deleteLater(); } const TouchscreenInfoList_V2 &TouchScreenModel::touchScreenList() const { Q_D(const TouchScreenModel); return d->m_touchScreenList; } const QStringList &TouchScreenModel::monitors() { Q_D(const TouchScreenModel); return d->m_monitors; } const TouchscreenMap &TouchScreenModel::touchMap() const { Q_D(const TouchScreenModel); return d->m_touchMap; } void TouchScreenModel::assoiateTouch(const QString &monitor, const QString &touchscreenUUID) { Q_D(TouchScreenModel); d->assoiateTouch(monitor, touchscreenUUID); } void TouchScreenModel::assoiateTouchNotify() { Q_D(TouchScreenModel); d->assoiateTouchNotify(); } void TouchScreenModelPrivate::monitorsChanged(const QList &monitors) { if (monitors.empty()) return; Q_Q(TouchScreenModel); m_monitors.clear(); for (const QDBusObjectPath &path : monitors) { MonitorDBusProxy *inter = new MonitorDBusProxy(path.path()); m_monitors << inter->name(); } Q_EMIT q->monitorsChanged(m_monitors); } void TouchScreenModelPrivate::assoiateTouch(const QString &monitor, const QString &touchscreenUUID) { m_displayProxy->AssociateTouchByUUID(monitor, touchscreenUUID); } void TouchScreenModelPrivate::assoiateTouchNotify() { DDBusSender() .service("org.freedesktop.Notifications") .path("/org/freedesktop/Notifications") .interface("org.freedesktop.Notifications") .method("Notify") .arg(QString("dde-control-center")) .arg(static_cast(QDateTime::currentMSecsSinceEpoch())) .arg(QString("preferences-system")) .arg(QObject::tr("Touch Screen Settings")) .arg(QObject::tr("The settings of touch screen changed")) .arg(QStringList()) .arg(QVariantMap()) .arg(3000) .call(); } DCC_FACTORY_CLASS(TouchScreenModel) #include "touchscreenmodel.moc" ================================================ FILE: src/plugin-touchscreen/operation/touchscreenmodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef TOUCHSCREENMODEL_H #define TOUCHSCREENMODEL_H #include "types/touchscreeninfolist_v2.h" #include "types/touchscreenmap.h" #include #define DCC_DECLARE_PRIVATE(Class) \ private: \ QScopedPointer d_ptr##Class; \ Q_DECLARE_PRIVATE_D(d_ptr##Class, Class)\ Q_DISABLE_COPY(Class) #define DCC_INIT_PRIVATE(Class) d_ptr##Class(new Class##Private(this)) class TouchScreenMatchModel; class TouchScreenModelPrivate; class TouchScreenModel : public QObject { Q_OBJECT DCC_DECLARE_PRIVATE(TouchScreenModel) public: explicit TouchScreenModel(QObject *parent = nullptr); ~TouchScreenModel(); Q_PROPERTY(const TouchscreenInfoList_V2 touchScreenList READ touchScreenList NOTIFY touchScreenListChanged) Q_PROPERTY(const QStringList monitors READ monitors NOTIFY monitorsChanged) Q_PROPERTY(TouchscreenMap touchMap READ touchMap NOTIFY touchMapChanged) const TouchscreenInfoList_V2 &touchScreenList() const; const QStringList &monitors(); const TouchscreenMap &touchMap() const; Q_INVOKABLE void assoiateTouch(const QString &monitor, const QString &touchscreenUUID); void assoiateTouchNotify(); public Q_SLOTS: inline TouchScreenMatchModel *touchScreenMatchModel() const { return m_touchScreenMatchModel; } Q_SIGNALS: void touchScreenListChanged(const TouchscreenInfoList_V2 &newTouchScreenList); void monitorsChanged(const QStringList monitors); void touchMapChanged(); private: TouchscreenMap m_touchMap; TouchScreenMatchModel *m_touchScreenMatchModel; }; #endif // TOUCHSCREENMODEL_H ================================================ FILE: src/plugin-touchscreen/operation/touchscreenmodel_p.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef TOUCHSCREENMODEL_P_H #define TOUCHSCREENMODEL_P_H #include "touchscreenmodel.h" #include "touchscreenproxy.h" #include using namespace DCC_NAMESPACE; class TouchScreenModelPrivate { Q_DECLARE_PUBLIC(TouchScreenModel) public: explicit TouchScreenModelPrivate(TouchScreenModel *object) : q_ptr(object) , m_displayProxy(new TouchScreenProxy(q_ptr)) { init(); } public: TouchScreenModel *q_ptr; protected: void touchScreenListChanged(const TouchscreenInfoList_V2 &newTouchScreenList) { Q_Q(TouchScreenModel); if (m_touchScreenList == newTouchScreenList) return; m_touchScreenList = newTouchScreenList; Q_EMIT q->touchScreenListChanged(m_touchScreenList); } void touchMapChanged(const TouchscreenMap &newTouchMap) { Q_Q(TouchScreenModel); if (m_touchMap == newTouchMap) return; m_touchMap = newTouchMap; Q_EMIT q->touchMapChanged(); } void init() { QObject::connect(m_displayProxy, &TouchScreenProxy::TouchscreensV2Changed, q_ptr, [this] (const TouchscreenInfoList_V2 &newTouchScreenList) { touchScreenListChanged({newTouchScreenList}); }); QObject::connect(m_displayProxy, &TouchScreenProxy::MonitorsChanged, q_ptr, [this] (const QList & monitors) { monitorsChanged(monitors); }); QObject::connect(m_displayProxy, &TouchScreenProxy::TouchMapChanged, q_ptr, [this] (TouchscreenMap value) { touchMapChanged(value); }); monitorsChanged(m_displayProxy->monitors()); touchScreenListChanged(m_displayProxy->touchscreensV2()); touchMapChanged(m_displayProxy->touchMap()); return; } void monitorsChanged(const QList & monitors); void assoiateTouch(const QString &monitor, const QString &touchscreenUUID); void assoiateTouchNotify(); private: TouchScreenProxy *m_displayProxy; TouchscreenInfoList_V2 m_touchScreenList; QStringList m_monitors; TouchscreenMap m_touchMap; }; #endif // TOUCHSCREENMODEL_P_H ================================================ FILE: src/plugin-touchscreen/operation/touchscreenproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "touchscreenproxy.h" #include #include DCORE_USE_NAMESPACE // using namespace DCC_NAMESPACE; namespace DCC_NAMESPACE { TouchScreenProxy::TouchScreenProxy(QObject *parent) : QObject(parent) , m_displayInter(new DDBusInterface("org.deepin.dde.Display1", "/org/deepin/dde/Display1", "org.deepin.dde.Display1", QDBusConnection::sessionBus(), this)) { registerTouchscreenInfoList_V2MetaType(); } TouchscreenInfoList_V2 TouchScreenProxy::touchscreensV2() { return qvariant_cast(m_displayInter->property("TouchscreensV2")); } TouchscreenMap TouchScreenProxy::touchMap() { return qvariant_cast(m_displayInter->property("TouchMap")); } QList TouchScreenProxy::monitors() { return qvariant_cast>(m_displayInter->property("Monitors")); } QDBusPendingReply<> TouchScreenProxy::AssociateTouchByUUID(const QString &in0, const QString &in1) { QList argumentList; argumentList << QVariant::fromValue(in0) << QVariant::fromValue(in1); return m_displayInter->asyncCallWithArgumentList(QStringLiteral("AssociateTouchByUUID"), argumentList); } } ================================================ FILE: src/plugin-touchscreen/operation/touchscreenproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef TOUCHSCREENPROXY_H #define TOUCHSCREENPROXY_H #include "types/touchscreeninfolist_v2.h" #include "types/touchscreenmap.h" #include #include #include namespace DCC_NAMESPACE { class QDBusMessage; class TouchScreenProxy : public QObject { Q_OBJECT public: explicit TouchScreenProxy(QObject *parent = nullptr); Q_PROPERTY(TouchscreenInfoList_V2 TouchscreensV2 READ touchscreensV2 NOTIFY TouchscreensV2Changed) TouchscreenInfoList_V2 touchscreensV2(); Q_PROPERTY(TouchscreenMap TouchMap READ touchMap NOTIFY TouchMapChanged) TouchscreenMap touchMap(); Q_PROPERTY(QList Monitors READ monitors NOTIFY MonitorsChanged) QList monitors(); Q_SIGNALS: void TouchscreensV2Changed(TouchscreenInfoList_V2 value); void MonitorsChanged(const QList & value); void TouchMapChanged(TouchscreenMap value); public Q_SLOTS: QDBusPendingReply<> AssociateTouchByUUID(const QString &in0, const QString &in1); private: Dtk::Core::DDBusInterface *m_displayInter; TouchscreenInfoList_V2 m_TouchscreensList; QList m_Monitors; TouchscreenMap m_TouchMap; }; } #endif // TOUCHSCREENPROXY_H ================================================ FILE: src/plugin-touchscreen/operation/types/touchscreeninfolist_v2.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "touchscreeninfolist_v2.h" QDBusArgument &operator<<(QDBusArgument &arg, const TouchscreenInfo_V2 &info) { arg.beginStructure(); arg << info.id << info.name << info.deviceNode << info.serialNumber << info.UUID; arg.endStructure(); return arg; } const QDBusArgument &operator>>(const QDBusArgument &arg, TouchscreenInfo_V2 &info) { arg.beginStructure(); arg >> info.id >> info.name >> info.deviceNode >> info.serialNumber >> info.UUID; arg.endStructure(); return arg; } bool operator==(const TouchscreenInfo_V2 &info1, const TouchscreenInfo_V2 &info2) { { return info1.id == info2.id && info1.name == info2.name && info1.deviceNode == info2.deviceNode && info1.serialNumber == info2.serialNumber && info1.UUID == info2.UUID; } } void registerTouchscreenInfoV2MetaType() { qRegisterMetaType("TouchscreenInfo_V2"); qDBusRegisterMetaType(); } void registerTouchscreenInfoList_V2MetaType() { registerTouchscreenInfoV2MetaType(); qRegisterMetaType("TouchscreenInfoList_V2"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-touchscreen/operation/types/touchscreeninfolist_v2.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef TOUCHSCREENINFOLISTV2_H #define TOUCHSCREENINFOLISTV2_H #include #include #include struct TouchscreenInfo_V2 { qint32 id; QString name; QString deviceNode; QString serialNumber; QString UUID; }; bool operator==(const TouchscreenInfo_V2 &info1, const TouchscreenInfo_V2 &info2); typedef QList TouchscreenInfoList_V2; Q_DECLARE_METATYPE(TouchscreenInfo_V2) Q_DECLARE_METATYPE(TouchscreenInfoList_V2) QDBusArgument &operator<<(QDBusArgument &arg, const TouchscreenInfo_V2 &info); const QDBusArgument &operator>>(const QDBusArgument &arg, TouchscreenInfo_V2 &info); void registerTouchscreenInfoList_V2MetaType(); #endif // !TOUCHSCREENINFOLISTV2_H ================================================ FILE: src/plugin-touchscreen/operation/types/touchscreenmap.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "touchscreenmap.h" void registerTouchscreenMapMetaType() { qRegisterMetaType("TouchscreenMap"); qDBusRegisterMetaType(); } ================================================ FILE: src/plugin-touchscreen/operation/types/touchscreenmap.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef TOUCHSCREENMAP_H #define TOUCHSCREENMAP_H #include #include typedef QMap TouchscreenMap; void registerTouchscreenMapMetaType(); #endif // TOUCHSCREENMAP_H ================================================ FILE: src/plugin-touchscreen/qml/TouchScreen.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 import org.deepin.dcc.touchscreen 1.0 DccObject { DccTitleObject { name: "TouchScreen" weight: 10 parentName: "touchscreen" displayName: qsTr("TouchScreen") } DccObject { name: "TouchScreenTips" parentName: "touchscreen" pageType: DccObject.Item displayName: qsTr("Set up here when connecting the touch screen") page: ColumnLayout { DccLabel { Layout.fillWidth: true Layout.leftMargin: 12 font: D.DTK.fontManager.t8 text: dccObj.displayName } } } DccObject { parentName: "touchscreen" backgroundType: DccObject.Normal pageType: DccObject.Item page: ColumnLayout { Repeater { model: dccData.touchScreenMatchModel() delegate: ItemDelegate{ id: touchItem property var data: model text: model.name checkable: false Layout.fillWidth: true Layout.leftMargin: 8 contentItem: RowLayout { spacing: 8 DccLabel { text: touchItem.text elide: Text.ElideRight Layout.fillWidth: true Layout.fillHeight: true } D.ComboBox{ id: combo flat: true model: dccData.monitors currentIndex: dccData.monitors.indexOf(touchItem.data.screenName) onCurrentIndexChanged: { if (touchItem.data.screenName !== dccData.monitors[currentIndex]) { dccData.assoiateTouch(dccData.monitors[currentIndex],touchItem.data.UUID) } } } } } } } } } ================================================ FILE: src/plugin-touchscreen/qml/Touchscreen.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { id: root name: "touchscreen" parentName: "device" displayName: qsTr("Touchscreen") description: qsTr("Configuring Touchscreen") icon: "device_touchscreen" visible: false weight: 50 DccDBusInterface { property var touchscreensV2 service: "org.deepin.dde.Display1" path: "/org/deepin/dde/Display1" inter: "org.deepin.dde.Display1" connection: DccDBusInterface.SessionBus onTouchscreensV2Changed: { root.visible = touchscreensV2.length !== 0 } } } ================================================ FILE: src/plugin-touchscreen/qml/TouchscreenMain.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.3 import org.deepin.dcc 1.0 import org.deepin.dtk 1.0 as D DccObject { DccObject { name: "touchscreen" parentName: "touchscreen" displayName: qsTr("Common") weight: 10 pageType: DccObject.Item page: DccGroupView { spacing: 5 isGroup: false height: implicitHeight + 20 } TouchScreen {} } } ================================================ FILE: src/plugin-touchscreen/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/plugin-wacom/CMakeLists.txt ================================================ if (BUILD_PLUGIN) set(wacom_Name wacom) file(GLOB_RECURSE wacom_SRCS "operation/*.cpp" "operation/qrc/wacom.qrc" ) file(GLOB_RECURSE wacom_qml_SRCS "qml/*.qml" ) find_package(${QT_NS} COMPONENTS Concurrent REQUIRED COMPONENTS Qml) add_library(${wacom_Name} MODULE ${wacom_SRCS} ) set(wacom_Includes src/plugin-wacom/operation ) set(wacom_Libraries ${DCC_FRAME_Library} ${DTK_NS}::Gui ${QT_NS}::DBus ) target_include_directories(${wacom_Name} PUBLIC ${wacom_Includes} ) target_link_libraries(${wacom_Name} PRIVATE ${wacom_Libraries} ) dcc_install_plugin(NAME ${wacom_Name} TARGET ${wacom_Name}) endif() ================================================ FILE: src/plugin-wacom/operation/qrc/wacom.qrc ================================================ icons/dcc_nav_wacom_42px.svg icons/dcc_nav_wacom_84px.svg ================================================ FILE: src/plugin-wacom/operation/wacomdbusproxy.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "wacomdbusproxy.h" #include #include #include #include const static QString WacomService = "org.deepin.dde.InputDevices1"; const static QString WacomPath = "/org/deepin/dde/InputDevice1/Wacom"; const static QString WacomInterface = "org.deepin.dde.InputDevice1.Wacom"; WacomDBusProxy::WacomDBusProxy(QObject *parent) : QObject (parent) , m_inputWacomInter(new DDBusInterface(WacomService, WacomPath, WacomInterface, QDBusConnection::sessionBus(), this)) { } bool WacomDBusProxy::exist() { return qvariant_cast(m_inputWacomInter->property("Exist")); } uint WacomDBusProxy::stylusPressureSensitive() { return qvariant_cast(m_inputWacomInter->property("StylusPressureSensitive")); } void WacomDBusProxy::setStylusPressureSensitive(uint value) { m_inputWacomInter->setProperty("StylusPressureSensitive", QVariant::fromValue(value)); } bool WacomDBusProxy::cursorMode() { return qvariant_cast(m_inputWacomInter->property("CursorMode")); } void WacomDBusProxy::setCursorMode(bool value) { m_inputWacomInter->setProperty("CursorMode", value); } uint WacomDBusProxy::eraserPressureSensitive() { return qvariant_cast(m_inputWacomInter->property("EraserPressureSensitive")); } void WacomDBusProxy::setEraserPressureSensitive(uint value) { m_inputWacomInter->setProperty("EraserPressureSensitive", value); } ================================================ FILE: src/plugin-wacom/operation/wacomdbusproxy.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef WACOMDBUSPROXY_H #define WACOMDBUSPROXY_H #include #include class QDBusInterface; class QDBusMessage; class QDBusObjectPath; using Dtk::Core::DDBusInterface; class WacomDBusProxy :public QObject { Q_OBJECT public: explicit WacomDBusProxy(QObject *parent = nullptr); Q_PROPERTY(bool Exist READ exist NOTIFY ExistChanged) bool exist(); Q_PROPERTY(uint StylusPressureSensitive READ stylusPressureSensitive WRITE setStylusPressureSensitive NOTIFY StylusPressureSensitiveChanged) uint stylusPressureSensitive(); void setStylusPressureSensitive(uint value); Q_PROPERTY(bool CursorMode READ cursorMode WRITE setCursorMode NOTIFY CursorModeChanged) bool cursorMode(); void setCursorMode(bool value); Q_PROPERTY(uint EraserPressureSensitive READ eraserPressureSensitive WRITE setEraserPressureSensitive NOTIFY EraserPressureSensitiveChanged) uint eraserPressureSensitive(); void setEraserPressureSensitive(uint value); Q_SIGNALS: void ExistChanged(bool value) const; void StylusPressureSensitiveChanged(uint value) const; void CursorModeChanged(bool value) const; void EraserPressureSensitiveChanged(uint value) const; private: DDBusInterface *m_inputWacomInter; }; #endif // WACOMDBUSPROXY_H ================================================ FILE: src/plugin-wacom/operation/wacommodel.cpp ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "wacommodel.h" #include "wacommodelprivate_p.h" #include "dccfactory.h" WacomModel::WacomModel(QObject *parent) : QObject(parent) , d_ptr(new WacomModelPrivate(this)) { } WacomModel::~WacomModel() { } bool WacomModel::exist() const { Q_D(const WacomModel); return d->m_exist; } bool WacomModel::CursorMode() const { Q_D(const WacomModel); return d->m_cursorMode; } void WacomModel::setCursorMode(bool value) { Q_D(WacomModel); d->setCursorMode(value); } uint WacomModel::eraserPressureSensitive() { Q_D(const WacomModel); return d->m_pressureValue; } void WacomModel::setEraserPressureSensitive(uint value) { Q_D(WacomModel); d->setEraserPressureSensitive(value); } void WacomModelPrivate::setCursorMode(bool value) { m_wacomInterfaceProxy->setCursorMode(value); } void WacomModelPrivate::setEraserPressureSensitive(uint value) { m_wacomInterfaceProxy->setEraserPressureSensitive(value); } DCC_FACTORY_CLASS(WacomModel) #include "wacommodel.moc" ================================================ FILE: src/plugin-wacom/operation/wacommodel.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef WACOMMODEL_H #define WACOMMODEL_H #include class WacomModelPrivate; class WacomModel : public QObject { Q_OBJECT public: explicit WacomModel(QObject *parent = nullptr); ~WacomModel(); Q_PROPERTY(bool Exist READ exist NOTIFY ExistChanged) bool exist() const; Q_PROPERTY(bool CursorMode READ CursorMode WRITE setCursorMode NOTIFY CursorModeChanged) bool CursorMode() const; void setCursorMode(bool value); Q_PROPERTY(uint EraserPressureSensitive READ eraserPressureSensitive WRITE setEraserPressureSensitive NOTIFY EraserPressureSensitiveChanged) uint eraserPressureSensitive(); void setEraserPressureSensitive(uint value); Q_SIGNALS: void ExistChanged(bool exist); void CursorModeChanged(const bool cursorMode); void EraserPressureSensitiveChanged(const uint value); private: QScopedPointer d_ptr; Q_DECLARE_PRIVATE_D(qGetPtrHelper(d_ptr), WacomModel) }; #endif // WACOMMODEL_H ================================================ FILE: src/plugin-wacom/operation/wacommodelprivate_p.h ================================================ //SPDX-FileCopyrightText: 2018 - 2023 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #ifndef WACOMMODELPRIVATE_P_H #define WACOMMODELPRIVATE_P_H #include #include "wacomdbusproxy.h" #include "wacommodel.h" class WacomModelPrivate { Q_DECLARE_PUBLIC(WacomModel) public: explicit WacomModelPrivate (WacomModel *object) : q_ptr(object) , m_wacomInterfaceProxy(new WacomDBusProxy(q_ptr)) { initConnect(); } public: WacomModel *q_ptr; protected: void existChanged(bool exist) { Q_Q(WacomModel); if (m_exist == exist) return; m_exist = exist; Q_EMIT q->ExistChanged(exist); }; void cursorModeChanged(const bool cursorMode) { Q_Q(WacomModel); if (m_cursorMode == cursorMode) return; m_cursorMode = cursorMode; Q_EMIT q->CursorModeChanged(cursorMode); } void pressureValueChanged(const uint value) { Q_Q(WacomModel); if (m_pressureValue == value) return; m_pressureValue = value; Q_EMIT q->EraserPressureSensitiveChanged(value); } void initConnect() { QObject::connect(m_wacomInterfaceProxy, &WacomDBusProxy::ExistChanged, q_ptr, [this](bool value) -> void { existChanged(value); }); QObject::connect(m_wacomInterfaceProxy, &WacomDBusProxy::CursorModeChanged, q_ptr, [this](bool value) ->void { cursorModeChanged(value); }); QObject::connect(m_wacomInterfaceProxy, &WacomDBusProxy::EraserPressureSensitiveChanged, q_ptr, [this](uint value) ->void { pressureValueChanged(value); }); existChanged(m_wacomInterfaceProxy->exist()); cursorModeChanged(m_wacomInterfaceProxy->cursorMode()); pressureValueChanged(m_wacomInterfaceProxy->eraserPressureSensitive()); return; } void setCursorMode(bool value); void setEraserPressureSensitive(uint value); private: WacomDBusProxy *m_wacomInterfaceProxy; bool m_exist; bool m_cursorMode; uint m_pressureValue; }; #endif // WACOMMODELPRIVATE_P_H ================================================ FILE: src/plugin-wacom/qml/Wacom.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2027 UnionTech Software Technology Co., Ltd. // // SPDX-License-Identifier: GPL-3.0-or-later import org.deepin.dcc 1.0 DccObject { id: root name: "wacom" parentName: "device" displayName: qsTr("wacom") description: qsTr("Configuring wacom") icon: "dcc_nav_wacom" visible: false weight: 60 DccDBusInterface { property var exist service: "org.deepin.dde.InputDevices1" path: "/org/deepin/dde/InputDevice1/Wacom" inter: "org.deepin.dde.InputDevice1.Wacom" connection: DccDBusInterface.SessionBus onExistChanged: { root.visible = exist } } } ================================================ FILE: src/plugin-wacom/qml/WacomMain.qml ================================================ // SPDX-FileCopyrightText: 2024 - 2026 UnionTech Software Technology Co., Ltd. // SPDX-License-Identifier: GPL-3.0-or-later import QtQuick 2.0 import QtQuick.Controls 2.0 import QtQuick.Layouts 1.15 import QtQuick.Window 2.15 import org.deepin.dtk 1.0 as D import org.deepin.dtk.style 1.0 as DS import org.deepin.dcc 1.0 DccObject { DccObject { name: "wacomTitle" parentName: "wacom" displayName: qsTr("wacom") weight: 10 pageType: DccObject.Item page: ColumnLayout { Label { height: contentHeight Layout.leftMargin: 10 font.family: D.DTK.fontManager.t5.family font.bold: true font.pixelSize: D.DTK.fontManager.t5.pixelSize text: dccObj.displayName } } } DccObject { name: "mode" parentName: "wacom" displayName: qsTr("Model") weight: 20 backgroundType: DccObject.Normal pageType: DccObject.Editor page: ComboBox { model: [qsTr("Pen Mode"), qsTr("Mouse Mode")] currentIndex: dccData.CursorMode onCurrentIndexChanged: { dccData.CursorMode = currentIndex } } } DccObject { name: "pressure" parentName: "wacom" displayName: qsTr("Pressure Sensitivity") backgroundType: DccObject.Normal weight: 30 pageType: DccObject.Item visible: !dccData.CursorMode page: ColumnLayout { Layout.fillHeight: true Label { id: speedText Layout.topMargin: 10 font: D.DTK.fontManager.t6 text: dccObj.displayName Layout.leftMargin: 20 } D.TipsSlider { id: scrollSlider readonly property var tips: [qsTr("Light"), (""), (""), (""), (""), (""), qsTr("Heavy")] Layout.preferredHeight: 90 Layout.alignment: Qt.AlignCenter Layout.margins: 10 Layout.fillWidth: true tickDirection: D.TipsSlider.TickDirection.Back slider.handleType: Slider.HandleType.ArrowBottom slider.value: dccData.EraserPressureSensitive slider.from: 1 slider.to: ticks.length slider.live: true slider.stepSize: 1 slider.snapMode: Slider.SnapAlways ticks: [ D.SliderTipItem { text: scrollSlider.tips[0] highlight: scrollSlider.slider.value === 1 }, D.SliderTipItem { text: scrollSlider.tips[1] highlight: scrollSlider.slider.value === 2 }, D.SliderTipItem { text: scrollSlider.tips[2] highlight: scrollSlider.slider.value === 3 }, D.SliderTipItem { text: scrollSlider.tips[3] highlight: scrollSlider.slider.value === 4 }, D.SliderTipItem { text: scrollSlider.tips[4] highlight: scrollSlider.slider.value === 5 }, D.SliderTipItem { text: scrollSlider.tips[5] highlight: scrollSlider.slider.value === 6 }, D.SliderTipItem { text: scrollSlider.tips[6] highlight: scrollSlider.slider.value === 7 } ] slider.onValueChanged: { if (dccData.EraserPressureSensitive !== slider.value) dccData.EraserPressureSensitive = slider.value } } } } } ================================================ FILE: src/plugin-wacom/qml/metadata.json ================================================ { "Version": "1.0" } ================================================ FILE: src/shared-utils/CMakeLists.txt ================================================ # SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. # # SPDX-License-Identifier: GPL-3.0-or-later add_library(dcc-shared-utils OBJECT) find_package(ICU COMPONENTS i18n uc) set(DCC_SHARED_UTILS_SOURCES "dcclocale.h" "dcclocale.cpp" ) target_sources(dcc-shared-utils PRIVATE ${DCC_SHARED_UTILS_SOURCES} ) target_include_directories(dcc-shared-utils PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} ) target_link_libraries(dcc-shared-utils PRIVATE ICU::i18n ICU::uc ${QT_NS}::Core ) ================================================ FILE: src/shared-utils/dcclocale.cpp ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #include "dcclocale.h" #include #include #include #include #include using namespace icu; using namespace Qt::Literals::StringLiterals; namespace { // Cache LocaleDisplayNames instance struct DisplayNamesHolder { DisplayNamesHolder() : displayNames(icu::LocaleDisplayNames::createInstance( icu::Locale::getDefault(), ULDN_DIALECT_NAMES)) {} std::unique_ptr displayNames; }; Q_GLOBAL_STATIC(DisplayNamesHolder, globalDisplayNames); icu::LocaleDisplayNames* getDisplayNames() { return globalDisplayNames()->displayNames.get(); } [[maybe_unused]] icu::UnicodeString fromQString(const QString& qstr) { return icu::UnicodeString(qstr.utf16(), qstr.length()); } QString toQString(const icu::UnicodeString& icuString) { // Get a pointer to the internal UTF-16 buffer of the icu::UnicodeString. // The buffer is not necessarily null-terminated, so we also need the length. const UChar* ucharData = icuString.getBuffer(); int32_t length = icuString.length(); // QString has a constructor that takes a const QChar* and a length. // UChar is typically a 16-bit unsigned integer, which is compatible with QChar. // Static_cast is used here for explicit type conversion, though often // UChar and QChar are typedefs to the same underlying type (e.g., unsigned short). return QString(reinterpret_cast(ucharData), length); } } QStringList DCCLocale::dialectNames(const QStringList &localeCodes) { QStringList results; results.reserve(localeCodes.size()); // 预分配空间 icu::LocaleDisplayNames* displayNames = getDisplayNames(); for (const QString &localeCode : std::as_const(localeCodes)) { // locale code might contain something like @latin, we need to remove such suffix QString localeCodeWithoutSuffix = localeCode.split("@").first(); if (localeCode.startsWith("zh_HK")) { results.append(QCoreApplication::translate("dcc::Locale::dialectNames", "Traditional Chinese (Chinese Hong Kong)")); continue; } else if (localeCode.startsWith("zh_TW")) { results.append(QCoreApplication::translate("dcc::Locale::dialectNames", "Traditional Chinese (Chinese Taiwan)")); continue; } else if (localeCode.startsWith("nan_TW")) { results.append(QCoreApplication::translate("dcc::Locale::dialectNames", "Min Nan Chinese")); continue; } icu::UnicodeString dialectName; displayNames->localeDisplayName(localeCodeWithoutSuffix.toLatin1().constData(), dialectName); results.append(toQString(dialectName)); } return results; } QPair DCCLocale::languageAndRegionName(const QString &localeCode) { const icu::Locale& systemLocale = icu::Locale::getDefault(); icu::UnicodeString localeUString; icu::Locale icuLocale(localeCode.toLatin1().constData()); auto regionCode = QString(icuLocale.getCountry()); QString displayLanguage = toQString(icuLocale.getDisplayLanguage(systemLocale, localeUString)); QString displayCountry = toQString(icuLocale.getDisplayCountry(systemLocale, localeUString)); if (regionCode == u"TW"_s) { displayCountry = QCoreApplication::translate("dcc::Locale::regionNames", "Taiwan China"); } return { displayLanguage, displayCountry }; } ================================================ FILE: src/shared-utils/dcclocale.h ================================================ //SPDX-FileCopyrightText: 2025 UnionTech Software Technology Co., Ltd. // //SPDX-License-Identifier: GPL-3.0-or-later #pragma once #include #include #include class DCCLocale { public: //! Get the dialect names of the given \a languageCodes in current system locale. static QStringList dialectNames(const QStringList &localeCodes); static QPair languageAndRegionName(const QString &localeName); }; ================================================ FILE: tests/CMakeLists.txt ================================================ set(BIN_NAME unit-test) ================================================ FILE: toolGenerate/dconfig2cpp/org_deepin_dde_control-center.hpp ================================================ /** * This file is generated by dconfig2cpp. * Command line arguments: ./dconfig2cpp -p ./dde-control-center/toolGenerate/dconfig2cpp ./dde-control-center/misc/configs/org.deepin.dde.control-center.json * Generation time: 2025-01-14T10:54:58 * JSON file version: 1.0 * * WARNING: DO NOT MODIFY THIS FILE MANUALLY. * If you need to change the content, please modify the dconfig2cpp tool. */ #ifndef ORG_DEEPIN_DDE_CONTROL-CENTER_H #define ORG_DEEPIN_DDE_CONTROL-CENTER_H #include #include #include #include #include #include class org_deepin_dde_control-center : public QObject { Q_OBJECT Q_PROPERTY(QList disableModule READ disableModule WRITE setDisableModule NOTIFY disableModuleChanged) Q_PROPERTY(double height READ height WRITE setHeight NOTIFY heightChanged) Q_PROPERTY(QList hideModule READ hideModule WRITE setHideModule NOTIFY hideModuleChanged) Q_PROPERTY(double width READ width WRITE setWidth NOTIFY widthChanged) public: explicit org_deepin_dde_control-center(QThread *thread, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center(QThread *thread, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } ~org_deepin_dde_control-center() { if (m_config.loadRelaxed()) { m_config.loadRelaxed()->deleteLater(); } } QList disableModule() const { return p_disableModule; } void setDisableModule(const QList &value) { auto oldValue = p_disableModule; p_disableModule = value; markPropertySet(0); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("disableModule"), value); }); } if (p_disableModule != oldValue) { Q_EMIT disableModuleChanged(); } } double height() const { return p_height; } void setHeight(const double &value) { auto oldValue = p_height; p_height = value; markPropertySet(1); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("height"), value); }); } if (p_height != oldValue) { Q_EMIT heightChanged(); } } QList hideModule() const { return p_hideModule; } void setHideModule(const QList &value) { auto oldValue = p_hideModule; p_hideModule = value; markPropertySet(2); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("hideModule"), value); }); } if (p_hideModule != oldValue) { Q_EMIT hideModuleChanged(); } } double width() const { return p_width; } void setWidth(const double &value) { auto oldValue = p_width; p_width = value; markPropertySet(3); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("width"), value); }); } if (p_width != oldValue) { Q_EMIT widthChanged(); } } Q_SIGNALS: void disableModuleChanged(); void heightChanged(); void hideModuleChanged(); void widthChanged(); private: void initialize(DTK_CORE_NAMESPACE::DConfig *config) { Q_ASSERT(!m_config.loadRelaxed()); m_config.storeRelaxed(config); if (testPropertySet(0)) { config->setValue(QStringLiteral("disableModule"), QVariant::fromValue(p_disableModule)); } else { updateValue(QStringLiteral("disableModule"), QVariant::fromValue(p_disableModule)); } if (testPropertySet(1)) { config->setValue(QStringLiteral("height"), QVariant::fromValue(p_height)); } else { updateValue(QStringLiteral("height"), QVariant::fromValue(p_height)); } if (testPropertySet(2)) { config->setValue(QStringLiteral("hideModule"), QVariant::fromValue(p_hideModule)); } else { updateValue(QStringLiteral("hideModule"), QVariant::fromValue(p_hideModule)); } if (testPropertySet(3)) { config->setValue(QStringLiteral("width"), QVariant::fromValue(p_width)); } else { updateValue(QStringLiteral("width"), QVariant::fromValue(p_width)); } connect(config, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, [this](const QString &key) { updateValue(key); }, Qt::DirectConnection); } void updateValue(const QString &key, const QVariant &fallback = QVariant()) { Q_ASSERT(QThread::currentThread() == m_config.loadRelaxed()->thread()); const QVariant &value = m_config.loadRelaxed()->value(key, fallback); if (key == QStringLiteral("disableModule")) { auto newValue = qvariant_cast>(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_disableModule != newValue) { p_disableModule = newValue; Q_EMIT disableModuleChanged(); } }); return; } if (key == QStringLiteral("height")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_height != newValue) { p_height = newValue; Q_EMIT heightChanged(); } }); return; } if (key == QStringLiteral("hideModule")) { auto newValue = qvariant_cast>(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_hideModule != newValue) { p_hideModule = newValue; Q_EMIT hideModuleChanged(); } }); return; } if (key == QStringLiteral("width")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_width != newValue) { p_width = newValue; Q_EMIT widthChanged(); } }); return; } } inline void markPropertySet(const int index) { if (index < 32) { m_propertySetStatus0.fetchAndOrOrdered(1 << (index - 0)); return; } Q_UNREACHABLE(); } inline bool testPropertySet(const int index) const { if (index < 32) { return (m_propertySetStatus0.loadRelaxed() & (1 << (index - 0))); } Q_UNREACHABLE(); } QAtomicPointer m_config = nullptr; QList p_disableModule { QList{} }; double p_height { 600 }; QList p_hideModule { QList{} }; double p_width { 800 }; QAtomicInteger m_propertySetStatus0 = 0; }; #endif // ORG_DEEPIN_DDE_CONTROL-CENTER_H ================================================ FILE: toolGenerate/dconfig2cpp/org_deepin_dde_control-center_accounts.hpp ================================================ /** * This file is generated by dconfig2cpp. * Command line arguments: ./dconfig2cpp -p ./dde-control-center/toolGenerate/dconfig2cpp ./dde-control-center/misc/configs/org.deepin.dde.control-center.accounts.json * Generation time: 2025-01-14T10:54:58 * JSON file version: 1.0 * * WARNING: DO NOT MODIFY THIS FILE MANUALLY. * If you need to change the content, please modify the dconfig2cpp tool. */ #ifndef ORG_DEEPIN_DDE_CONTROL-CENTER_ACCOUNTS_H #define ORG_DEEPIN_DDE_CONTROL-CENTER_ACCOUNTS_H #include #include #include #include #include #include class org_deepin_dde_control-center_accounts : public QObject { Q_OBJECT Q_PROPERTY(QString avatarPath READ avatarPath WRITE setAvatarPath NOTIFY avatarPathChanged) public: explicit org_deepin_dde_control-center_accounts(QThread *thread, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_accounts(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_accounts(QThread *thread, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_accounts(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } ~org_deepin_dde_control-center_accounts() { if (m_config.loadRelaxed()) { m_config.loadRelaxed()->deleteLater(); } } QString avatarPath() const { return p_avatarPath; } void setAvatarPath(const QString &value) { auto oldValue = p_avatarPath; p_avatarPath = value; markPropertySet(0); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("avatarPath"), value); }); } if (p_avatarPath != oldValue) { Q_EMIT avatarPathChanged(); } } Q_SIGNALS: void avatarPathChanged(); private: void initialize(DTK_CORE_NAMESPACE::DConfig *config) { Q_ASSERT(!m_config.loadRelaxed()); m_config.storeRelaxed(config); if (testPropertySet(0)) { config->setValue(QStringLiteral("avatarPath"), QVariant::fromValue(p_avatarPath)); } else { updateValue(QStringLiteral("avatarPath"), QVariant::fromValue(p_avatarPath)); } connect(config, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, [this](const QString &key) { updateValue(key); }, Qt::DirectConnection); } void updateValue(const QString &key, const QVariant &fallback = QVariant()) { Q_ASSERT(QThread::currentThread() == m_config.loadRelaxed()->thread()); const QVariant &value = m_config.loadRelaxed()->value(key, fallback); if (key == QStringLiteral("avatarPath")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_avatarPath != newValue) { p_avatarPath = newValue; Q_EMIT avatarPathChanged(); } }); return; } } inline void markPropertySet(const int index) { if (index < 32) { m_propertySetStatus0.fetchAndOrOrdered(1 << (index - 0)); return; } Q_UNREACHABLE(); } inline bool testPropertySet(const int index) const { if (index < 32) { return (m_propertySetStatus0.loadRelaxed() & (1 << (index - 0))); } Q_UNREACHABLE(); } QAtomicPointer m_config = nullptr; QString p_avatarPath { QStringLiteral("") }; QAtomicInteger m_propertySetStatus0 = 0; }; #endif // ORG_DEEPIN_DDE_CONTROL-CENTER_ACCOUNTS_H ================================================ FILE: toolGenerate/dconfig2cpp/org_deepin_dde_control-center_datetime.hpp ================================================ /** * This file is generated by dconfig2cpp. * Command line arguments: ./dconfig2cpp -p ./toolGenerate/dconfig2cpp/org_deepin_dde_control-center_datetime.hpp ./misc/configs/org.deepin.dde.control-center.datetime.json * Generation time: 2025-09-23T10:04:59 * JSON file version: 1.0 * * WARNING: DO NOT MODIFY THIS FILE MANUALLY. * If you need to change the content, please modify the dconfig2cpp tool. */ #ifndef DCONFIG_ORG_DEEPIN_DDE_CONTROL-CENTER_DATETIME_H #define DCONFIG_ORG_DEEPIN_DDE_CONTROL-CENTER_DATETIME_H #include #include #include #include #include #include #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) #include #endif #include #include class dconfig_org_deepin_dde_control-center_datetime : public QObject { Q_OBJECT Q_PROPERTY(QString customNtpServer READ customNtpServer WRITE setCustomNtpServer NOTIFY customNtpServerChanged RESET resetCustomNtpServer) Q_CLASSINFO("DConfigKeyList", "customNtpServer") Q_CLASSINFO("DConfigFileName", "org.deepin.dde.control-center.datetime") Q_CLASSINFO("DConfigFileVersion", "1.0") public: explicit dconfig_org_deepin_dde_control-center_datetime(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &appId, const QString &subpath, bool isGeneric, QObject *parent) : QObject(nullptr) { if (!thread->isRunning()) { qWarning() << QLatin1String("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QPointer watcher(parent); QMetaObject::invokeMethod(worker, [=, this]() { DTK_CORE_NAMESPACE::DConfig *config = nullptr; if (isGeneric) { if (backend) { config = DTK_CORE_NAMESPACE::DConfig::createGeneric(backend, name, subpath, nullptr); } else { config = DTK_CORE_NAMESPACE::DConfig::createGeneric(name, subpath, nullptr); } } else { if (backend) { if (appId.isNull()) { config = DTK_CORE_NAMESPACE::DConfig::create(backend, DTK_CORE_NAMESPACE::DSGApplication::id(), name, subpath, nullptr); } else { config = DTK_CORE_NAMESPACE::DConfig::create(backend, appId, name, subpath, nullptr); } } else { if (appId.isNull()) { config = DTK_CORE_NAMESPACE::DConfig::create(DTK_CORE_NAMESPACE::DSGApplication::id(), name, subpath, nullptr); } else { config = DTK_CORE_NAMESPACE::DConfig::create(appId, name, subpath, nullptr); } } } if (!config) { qWarning() << QLatin1String("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initializeInConfigThread(config); if (watcher != parent) { // delete this if watcher is changed to nullptr. deleteLater(); } else if (!this->parent() && parent) { // !parent() means that parent is not changed. this->setParent(watcher); } worker->deleteLater(); }); } static dconfig_org_deepin_dde_control-center_datetime* create(const QString &appId = {}, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread()) { return new dconfig_org_deepin_dde_control-center_datetime(thread, nullptr, QStringLiteral(u"\u006f\u0072\u0067\u002e\u0064\u0065\u0065\u0070\u0069\u006e\u002e\u0064\u0064\u0065\u002e\u0063\u006f\u006e\u0074\u0072\u006f\u006c\u002d\u0063\u0065\u006e\u0074\u0065\u0072\u002e\u0064\u0061\u0074\u0065\u0074\u0069\u006d\u0065"), appId, subpath, false, parent); } static dconfig_org_deepin_dde_control-center_datetime* create(DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &appId = {}, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread()) { return new dconfig_org_deepin_dde_control-center_datetime(thread, backend, QStringLiteral(u"\u006f\u0072\u0067\u002e\u0064\u0065\u0065\u0070\u0069\u006e\u002e\u0064\u0064\u0065\u002e\u0063\u006f\u006e\u0074\u0072\u006f\u006c\u002d\u0063\u0065\u006e\u0074\u0065\u0072\u002e\u0064\u0061\u0074\u0065\u0074\u0069\u006d\u0065"), appId, subpath, false, parent); } static dconfig_org_deepin_dde_control-center_datetime* createByName(const QString &name, const QString &appId = {}, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread()) { return new dconfig_org_deepin_dde_control-center_datetime(thread, nullptr, name, appId, subpath, false, parent); } static dconfig_org_deepin_dde_control-center_datetime* createByName(DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &appId = {}, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread()) { return new dconfig_org_deepin_dde_control-center_datetime(thread, backend, name, appId, subpath, false, parent); } static dconfig_org_deepin_dde_control-center_datetime* createGeneric(const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread()) { return new dconfig_org_deepin_dde_control-center_datetime(thread, nullptr, QStringLiteral(u"\u006f\u0072\u0067\u002e\u0064\u0065\u0065\u0070\u0069\u006e\u002e\u0064\u0064\u0065\u002e\u0063\u006f\u006e\u0074\u0072\u006f\u006c\u002d\u0063\u0065\u006e\u0074\u0065\u0072\u002e\u0064\u0061\u0074\u0065\u0074\u0069\u006d\u0065"), {}, subpath, true, parent); } static dconfig_org_deepin_dde_control-center_datetime* create(DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread()) { return new dconfig_org_deepin_dde_control-center_datetime(thread, backend, QStringLiteral(u"\u006f\u0072\u0067\u002e\u0064\u0065\u0065\u0070\u0069\u006e\u002e\u0064\u0064\u0065\u002e\u0063\u006f\u006e\u0074\u0072\u006f\u006c\u002d\u0063\u0065\u006e\u0074\u0065\u0072\u002e\u0064\u0061\u0074\u0065\u0074\u0069\u006d\u0065"), {}, subpath, true, parent); } static dconfig_org_deepin_dde_control-center_datetime* createGenericByName(const QString &name, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread()) { return new dconfig_org_deepin_dde_control-center_datetime(thread, nullptr, name, {}, subpath, true, parent); } static dconfig_org_deepin_dde_control-center_datetime* createGenericByName(DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &subpath = {}, QObject *parent = nullptr, QThread *thread = DTK_CORE_NAMESPACE::DConfig::globalThread()) { return new dconfig_org_deepin_dde_control-center_datetime(thread, backend, name, {}, subpath, true, parent); } ~dconfig_org_deepin_dde_control-center_datetime() { if (m_config.loadRelaxed()) { m_config.loadRelaxed()->deleteLater(); } } Q_INVOKABLE DTK_CORE_NAMESPACE::DConfig *config() const { return m_config.loadRelaxed(); } Q_INVOKABLE bool isInitializeSucceed() const { return m_status.loadRelaxed() == static_cast(Status::Succeed); } Q_INVOKABLE bool isInitializeFailed() const { return m_status.loadRelaxed() == static_cast(Status::Failed); } Q_INVOKABLE bool isInitializing() const { return m_status.loadRelaxed() == static_cast(Status::Invalid); } Q_INVOKABLE QStringList keyList() const { return { QStringLiteral("customNtpServer")}; } Q_INVOKABLE bool isDefaultValue(const QString &key) const { if (key == QStringLiteral("customNtpServer")) return customNtpServerIsDefaultValue(); return false; } QString customNtpServer() const { return p_customNtpServer; } void setCustomNtpServer(const QString &value) { auto oldValue = p_customNtpServer; p_customNtpServer = value; markPropertySet(0); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("customNtpServer"), value); }); } if (p_customNtpServer != oldValue) { Q_EMIT customNtpServerChanged(); Q_EMIT valueChanged(QStringLiteral("customNtpServer"), value); } } void resetCustomNtpServer() { if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this]() { m_config.loadRelaxed()->reset(QStringLiteral("customNtpServer")); }); } } #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0) QBindable bindableCustomNtpServer() { return QBindable(this, "customNtpServer"); } #endif Q_INVOKABLE bool customNtpServerIsDefaultValue() const { return !testPropertySet(0); } Q_SIGNALS: void configInitializeFailed(DTK_CORE_NAMESPACE::DConfig *config); void configInitializeSucceed(DTK_CORE_NAMESPACE::DConfig *config); void valueChanged(const QString &key, const QVariant &value); void customNtpServerChanged(); private: void initializeInConfigThread(DTK_CORE_NAMESPACE::DConfig *config) { Q_ASSERT(!m_config.loadRelaxed()); m_config.storeRelaxed(config); if (!config->isValid()) { m_status.storeRelaxed(static_cast(Status::Failed)); Q_EMIT configInitializeFailed(config); return; } if (testPropertySet(0)) { config->setValue(QStringLiteral("customNtpServer"), QVariant::fromValue(p_customNtpServer)); } else { updateValue(QStringLiteral("customNtpServer"), QVariant::fromValue(p_customNtpServer)); } connect(config, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, [this](const QString &key) { updateValue(key); }, Qt::DirectConnection); m_status.storeRelaxed(static_cast(Status::Succeed)); Q_EMIT configInitializeSucceed(config); } void updateValue(const QString &key, const QVariant &fallback = QVariant()) { Q_ASSERT(QThread::currentThread() == m_config.loadRelaxed()->thread()); const QVariant &value = m_config.loadRelaxed()->value(key, fallback); if (key == QStringLiteral("customNtpServer")) { markPropertySet(0, !m_config.loadRelaxed()->isDefaultValue(key)); auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue, key, value]() { Q_ASSERT(QThread::currentThread() == this->thread()); if (p_customNtpServer != newValue) { p_customNtpServer = newValue; Q_EMIT customNtpServerChanged(); Q_EMIT valueChanged(key, value); } }); return; } } inline void markPropertySet(const int index, bool on = true) { if (index < 32) { if (on) m_propertySetStatus0.fetchAndOrOrdered(1 << (index - 0)); else m_propertySetStatus0.fetchAndAndOrdered(~(1 << (index - 0))); return; } Q_UNREACHABLE(); } inline bool testPropertySet(const int index) const { if (index < 32) { return (m_propertySetStatus0.loadRelaxed() & (1 << (index - 0))); } Q_UNREACHABLE(); } QAtomicPointer m_config = nullptr; public: enum class Status { Invalid = 0, Succeed = 1, Failed = 2 }; private: QAtomicInteger m_status = static_cast(Status::Invalid); // Default value: "" QString p_customNtpServer { QLatin1String("") }; QAtomicInteger m_propertySetStatus0 = 0; }; #endif // DCONFIG_ORG_DEEPIN_DDE_CONTROL-CENTER_DATETIME_H ================================================ FILE: toolGenerate/dconfig2cpp/org_deepin_dde_control-center_display.hpp ================================================ /** * This file is generated by dconfig2cpp. * Command line arguments: ./dconfig2cpp -p ./dde-control-center/toolGenerate/dconfig2cpp ./dde-control-center/misc/configs/org.deepin.dde.control-center.display.json * Generation time: 2025-01-14T10:54:58 * JSON file version: 1.0 * * WARNING: DO NOT MODIFY THIS FILE MANUALLY. * If you need to change the content, please modify the dconfig2cpp tool. */ #ifndef ORG_DEEPIN_DDE_CONTROL-CENTER_DISPLAY_H #define ORG_DEEPIN_DDE_CONTROL-CENTER_DISPLAY_H #include #include #include #include #include #include class org_deepin_dde_control-center_display : public QObject { Q_OBJECT Q_PROPERTY(double minBrightnessValue READ minBrightnessValue WRITE setMinBrightnessValue NOTIFY minBrightnessValueChanged) public: explicit org_deepin_dde_control-center_display(QThread *thread, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_display(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_display(QThread *thread, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_display(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } ~org_deepin_dde_control-center_display() { if (m_config.loadRelaxed()) { m_config.loadRelaxed()->deleteLater(); } } double minBrightnessValue() const { return p_minBrightnessValue; } void setMinBrightnessValue(const double &value) { auto oldValue = p_minBrightnessValue; p_minBrightnessValue = value; markPropertySet(0); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("minBrightnessValue"), value); }); } if (p_minBrightnessValue != oldValue) { Q_EMIT minBrightnessValueChanged(); } } Q_SIGNALS: void minBrightnessValueChanged(); private: void initialize(DTK_CORE_NAMESPACE::DConfig *config) { Q_ASSERT(!m_config.loadRelaxed()); m_config.storeRelaxed(config); if (testPropertySet(0)) { config->setValue(QStringLiteral("minBrightnessValue"), QVariant::fromValue(p_minBrightnessValue)); } else { updateValue(QStringLiteral("minBrightnessValue"), QVariant::fromValue(p_minBrightnessValue)); } connect(config, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, [this](const QString &key) { updateValue(key); }, Qt::DirectConnection); } void updateValue(const QString &key, const QVariant &fallback = QVariant()) { Q_ASSERT(QThread::currentThread() == m_config.loadRelaxed()->thread()); const QVariant &value = m_config.loadRelaxed()->value(key, fallback); if (key == QStringLiteral("minBrightnessValue")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_minBrightnessValue != newValue) { p_minBrightnessValue = newValue; Q_EMIT minBrightnessValueChanged(); } }); return; } } inline void markPropertySet(const int index) { if (index < 32) { m_propertySetStatus0.fetchAndOrOrdered(1 << (index - 0)); return; } Q_UNREACHABLE(); } inline bool testPropertySet(const int index) const { if (index < 32) { return (m_propertySetStatus0.loadRelaxed() & (1 << (index - 0))); } Q_UNREACHABLE(); } QAtomicPointer m_config = nullptr; double p_minBrightnessValue { 0.1 }; QAtomicInteger m_propertySetStatus0 = 0; }; #endif // ORG_DEEPIN_DDE_CONTROL-CENTER_DISPLAY_H ================================================ FILE: toolGenerate/dconfig2cpp/org_deepin_dde_control-center_personalization.hpp ================================================ /** * This file is generated by dconfig2cpp. * Command line arguments: ./dconfig2cpp -p ./dde-control-center/toolGenerate/dconfig2cpp ./dde-control-center/misc/configs/org.deepin.dde.control-center.personalization.json * Generation time: 2025-01-14T10:54:58 * JSON file version: 1.0 * * WARNING: DO NOT MODIFY THIS FILE MANUALLY. * If you need to change the content, please modify the dconfig2cpp tool. */ #ifndef ORG_DEEPIN_DDE_CONTROL-CENTER_PERSONALIZATION_H #define ORG_DEEPIN_DDE_CONTROL-CENTER_PERSONALIZATION_H #include #include #include #include #include #include class org_deepin_dde_control-center_personalization : public QObject { Q_OBJECT Q_PROPERTY(QString compactDisplayStatus READ compactDisplayStatus WRITE setCompactDisplayStatus NOTIFY compactDisplayStatusChanged) Q_PROPERTY(QList hideIconThemes READ hideIconThemes WRITE setHideIconThemes NOTIFY hideIconThemesChanged) Q_PROPERTY(QString scrollbarPolicyStatus READ scrollbarPolicyStatus WRITE setScrollbarPolicyStatus NOTIFY scrollbarPolicyStatusChanged) Q_PROPERTY(QString titleBarHeightStatus READ titleBarHeightStatus WRITE setTitleBarHeightStatus NOTIFY titleBarHeightStatusChanged) Q_PROPERTY(bool titleBarHeightSupportCompactDisplay READ titleBarHeightSupportCompactDisplay WRITE setTitleBarHeightSupportCompactDisplay NOTIFY titleBarHeightSupportCompactDisplayChanged) public: explicit org_deepin_dde_control-center_personalization(QThread *thread, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_personalization(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_personalization(QThread *thread, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_personalization(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } ~org_deepin_dde_control-center_personalization() { if (m_config.loadRelaxed()) { m_config.loadRelaxed()->deleteLater(); } } QString compactDisplayStatus() const { return p_compactDisplayStatus; } void setCompactDisplayStatus(const QString &value) { auto oldValue = p_compactDisplayStatus; p_compactDisplayStatus = value; markPropertySet(0); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("compactDisplayStatus"), value); }); } if (p_compactDisplayStatus != oldValue) { Q_EMIT compactDisplayStatusChanged(); } } QList hideIconThemes() const { return p_hideIconThemes; } void setHideIconThemes(const QList &value) { auto oldValue = p_hideIconThemes; p_hideIconThemes = value; markPropertySet(1); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("hideIconThemes"), value); }); } if (p_hideIconThemes != oldValue) { Q_EMIT hideIconThemesChanged(); } } QString scrollbarPolicyStatus() const { return p_scrollbarPolicyStatus; } void setScrollbarPolicyStatus(const QString &value) { auto oldValue = p_scrollbarPolicyStatus; p_scrollbarPolicyStatus = value; markPropertySet(2); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("scrollbarPolicyStatus"), value); }); } if (p_scrollbarPolicyStatus != oldValue) { Q_EMIT scrollbarPolicyStatusChanged(); } } QString titleBarHeightStatus() const { return p_titleBarHeightStatus; } void setTitleBarHeightStatus(const QString &value) { auto oldValue = p_titleBarHeightStatus; p_titleBarHeightStatus = value; markPropertySet(3); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("titleBarHeightStatus"), value); }); } if (p_titleBarHeightStatus != oldValue) { Q_EMIT titleBarHeightStatusChanged(); } } bool titleBarHeightSupportCompactDisplay() const { return p_titleBarHeightSupportCompactDisplay; } void setTitleBarHeightSupportCompactDisplay(const bool &value) { auto oldValue = p_titleBarHeightSupportCompactDisplay; p_titleBarHeightSupportCompactDisplay = value; markPropertySet(4); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("titleBarHeightSupportCompactDisplay"), value); }); } if (p_titleBarHeightSupportCompactDisplay != oldValue) { Q_EMIT titleBarHeightSupportCompactDisplayChanged(); } } Q_SIGNALS: void compactDisplayStatusChanged(); void hideIconThemesChanged(); void scrollbarPolicyStatusChanged(); void titleBarHeightStatusChanged(); void titleBarHeightSupportCompactDisplayChanged(); private: void initialize(DTK_CORE_NAMESPACE::DConfig *config) { Q_ASSERT(!m_config.loadRelaxed()); m_config.storeRelaxed(config); if (testPropertySet(0)) { config->setValue(QStringLiteral("compactDisplayStatus"), QVariant::fromValue(p_compactDisplayStatus)); } else { updateValue(QStringLiteral("compactDisplayStatus"), QVariant::fromValue(p_compactDisplayStatus)); } if (testPropertySet(1)) { config->setValue(QStringLiteral("hideIconThemes"), QVariant::fromValue(p_hideIconThemes)); } else { updateValue(QStringLiteral("hideIconThemes"), QVariant::fromValue(p_hideIconThemes)); } if (testPropertySet(2)) { config->setValue(QStringLiteral("scrollbarPolicyStatus"), QVariant::fromValue(p_scrollbarPolicyStatus)); } else { updateValue(QStringLiteral("scrollbarPolicyStatus"), QVariant::fromValue(p_scrollbarPolicyStatus)); } if (testPropertySet(3)) { config->setValue(QStringLiteral("titleBarHeightStatus"), QVariant::fromValue(p_titleBarHeightStatus)); } else { updateValue(QStringLiteral("titleBarHeightStatus"), QVariant::fromValue(p_titleBarHeightStatus)); } if (testPropertySet(4)) { config->setValue(QStringLiteral("titleBarHeightSupportCompactDisplay"), QVariant::fromValue(p_titleBarHeightSupportCompactDisplay)); } else { updateValue(QStringLiteral("titleBarHeightSupportCompactDisplay"), QVariant::fromValue(p_titleBarHeightSupportCompactDisplay)); } connect(config, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, [this](const QString &key) { updateValue(key); }, Qt::DirectConnection); } void updateValue(const QString &key, const QVariant &fallback = QVariant()) { Q_ASSERT(QThread::currentThread() == m_config.loadRelaxed()->thread()); const QVariant &value = m_config.loadRelaxed()->value(key, fallback); if (key == QStringLiteral("compactDisplayStatus")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_compactDisplayStatus != newValue) { p_compactDisplayStatus = newValue; Q_EMIT compactDisplayStatusChanged(); } }); return; } if (key == QStringLiteral("hideIconThemes")) { auto newValue = qvariant_cast>(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_hideIconThemes != newValue) { p_hideIconThemes = newValue; Q_EMIT hideIconThemesChanged(); } }); return; } if (key == QStringLiteral("scrollbarPolicyStatus")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_scrollbarPolicyStatus != newValue) { p_scrollbarPolicyStatus = newValue; Q_EMIT scrollbarPolicyStatusChanged(); } }); return; } if (key == QStringLiteral("titleBarHeightStatus")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_titleBarHeightStatus != newValue) { p_titleBarHeightStatus = newValue; Q_EMIT titleBarHeightStatusChanged(); } }); return; } if (key == QStringLiteral("titleBarHeightSupportCompactDisplay")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_titleBarHeightSupportCompactDisplay != newValue) { p_titleBarHeightSupportCompactDisplay = newValue; Q_EMIT titleBarHeightSupportCompactDisplayChanged(); } }); return; } } inline void markPropertySet(const int index) { if (index < 32) { m_propertySetStatus0.fetchAndOrOrdered(1 << (index - 0)); return; } Q_UNREACHABLE(); } inline bool testPropertySet(const int index) const { if (index < 32) { return (m_propertySetStatus0.loadRelaxed() & (1 << (index - 0))); } Q_UNREACHABLE(); } QAtomicPointer m_config = nullptr; QString p_compactDisplayStatus { QStringLiteral("Enabled") }; QList p_hideIconThemes { QList{QVariant(QStringLiteral("Papirus")), QVariant(QStringLiteral("Papirus-Dark")), QVariant(QStringLiteral("Papirus-Light")), QVariant(QStringLiteral("ePapirus")), QVariant(QStringLiteral("ePapirus-Dark"))} }; QString p_scrollbarPolicyStatus { QStringLiteral("Enabled") }; QString p_titleBarHeightStatus { QStringLiteral("Enabled") }; bool p_titleBarHeightSupportCompactDisplay { true }; QAtomicInteger m_propertySetStatus0 = 0; }; #endif // ORG_DEEPIN_DDE_CONTROL-CENTER_PERSONALIZATION_H ================================================ FILE: toolGenerate/dconfig2cpp/org_deepin_dde_control-center_power.hpp ================================================ /** * This file is generated by dconfig2cpp. * Command line arguments: ./dconfig2cpp -p ./dde-control-center/toolGenerate/dconfig2cpp ./dde-control-center/misc/configs/org.deepin.dde.control-center.power.json * Generation time: 2025-01-14T10:54:58 * JSON file version: 1.0 * * WARNING: DO NOT MODIFY THIS FILE MANUALLY. * If you need to change the content, please modify the dconfig2cpp tool. */ #ifndef ORG_DEEPIN_DDE_CONTROL-CENTER_POWER_H #define ORG_DEEPIN_DDE_CONTROL-CENTER_POWER_H #include #include #include #include #include #include class org_deepin_dde_control-center_power : public QObject { Q_OBJECT Q_PROPERTY(QList batteryLockDelay READ batteryLockDelay WRITE setBatteryLockDelay NOTIFY batteryLockDelayChanged) Q_PROPERTY(QList batteryScreenBlackDelay READ batteryScreenBlackDelay WRITE setBatteryScreenBlackDelay NOTIFY batteryScreenBlackDelayChanged) Q_PROPERTY(QList batterySleepDelay READ batterySleepDelay WRITE setBatterySleepDelay NOTIFY batterySleepDelayChanged) Q_PROPERTY(QString enableScheduledShutdown READ enableScheduledShutdown WRITE setEnableScheduledShutdown NOTIFY enableScheduledShutdownChanged) Q_PROPERTY(QList linePowerLockDelay READ linePowerLockDelay WRITE setLinePowerLockDelay NOTIFY linePowerLockDelayChanged) Q_PROPERTY(QList linePowerScreenBlackDelay READ linePowerScreenBlackDelay WRITE setLinePowerScreenBlackDelay NOTIFY linePowerScreenBlackDelayChanged) Q_PROPERTY(QList linePowerSleepDelay READ linePowerSleepDelay WRITE setLinePowerSleepDelay NOTIFY linePowerSleepDelayChanged) Q_PROPERTY(bool showHibernate READ showHibernate WRITE setShowHibernate NOTIFY showHibernateChanged) Q_PROPERTY(bool showShutdown READ showShutdown WRITE setShowShutdown NOTIFY showShutdownChanged) Q_PROPERTY(bool showSuspend READ showSuspend WRITE setShowSuspend NOTIFY showSuspendChanged) public: explicit org_deepin_dde_control-center_power(QThread *thread, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_power(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_power(QThread *thread, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_power(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } ~org_deepin_dde_control-center_power() { if (m_config.loadRelaxed()) { m_config.loadRelaxed()->deleteLater(); } } QList batteryLockDelay() const { return p_batteryLockDelay; } void setBatteryLockDelay(const QList &value) { auto oldValue = p_batteryLockDelay; p_batteryLockDelay = value; markPropertySet(0); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("batteryLockDelay"), value); }); } if (p_batteryLockDelay != oldValue) { Q_EMIT batteryLockDelayChanged(); } } QList batteryScreenBlackDelay() const { return p_batteryScreenBlackDelay; } void setBatteryScreenBlackDelay(const QList &value) { auto oldValue = p_batteryScreenBlackDelay; p_batteryScreenBlackDelay = value; markPropertySet(1); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("batteryScreenBlackDelay"), value); }); } if (p_batteryScreenBlackDelay != oldValue) { Q_EMIT batteryScreenBlackDelayChanged(); } } QList batterySleepDelay() const { return p_batterySleepDelay; } void setBatterySleepDelay(const QList &value) { auto oldValue = p_batterySleepDelay; p_batterySleepDelay = value; markPropertySet(2); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("batterySleepDelay"), value); }); } if (p_batterySleepDelay != oldValue) { Q_EMIT batterySleepDelayChanged(); } } QString enableScheduledShutdown() const { return p_enableScheduledShutdown; } void setEnableScheduledShutdown(const QString &value) { auto oldValue = p_enableScheduledShutdown; p_enableScheduledShutdown = value; markPropertySet(3); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("enableScheduledShutdown"), value); }); } if (p_enableScheduledShutdown != oldValue) { Q_EMIT enableScheduledShutdownChanged(); } } QList linePowerLockDelay() const { return p_linePowerLockDelay; } void setLinePowerLockDelay(const QList &value) { auto oldValue = p_linePowerLockDelay; p_linePowerLockDelay = value; markPropertySet(4); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("linePowerLockDelay"), value); }); } if (p_linePowerLockDelay != oldValue) { Q_EMIT linePowerLockDelayChanged(); } } QList linePowerScreenBlackDelay() const { return p_linePowerScreenBlackDelay; } void setLinePowerScreenBlackDelay(const QList &value) { auto oldValue = p_linePowerScreenBlackDelay; p_linePowerScreenBlackDelay = value; markPropertySet(5); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("linePowerScreenBlackDelay"), value); }); } if (p_linePowerScreenBlackDelay != oldValue) { Q_EMIT linePowerScreenBlackDelayChanged(); } } QList linePowerSleepDelay() const { return p_linePowerSleepDelay; } void setLinePowerSleepDelay(const QList &value) { auto oldValue = p_linePowerSleepDelay; p_linePowerSleepDelay = value; markPropertySet(6); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("linePowerSleepDelay"), value); }); } if (p_linePowerSleepDelay != oldValue) { Q_EMIT linePowerSleepDelayChanged(); } } bool showHibernate() const { return p_showHibernate; } void setShowHibernate(const bool &value) { auto oldValue = p_showHibernate; p_showHibernate = value; markPropertySet(7); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("showHibernate"), value); }); } if (p_showHibernate != oldValue) { Q_EMIT showHibernateChanged(); } } bool showShutdown() const { return p_showShutdown; } void setShowShutdown(const bool &value) { auto oldValue = p_showShutdown; p_showShutdown = value; markPropertySet(8); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("showShutdown"), value); }); } if (p_showShutdown != oldValue) { Q_EMIT showShutdownChanged(); } } bool showSuspend() const { return p_showSuspend; } void setShowSuspend(const bool &value) { auto oldValue = p_showSuspend; p_showSuspend = value; markPropertySet(9); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("showSuspend"), value); }); } if (p_showSuspend != oldValue) { Q_EMIT showSuspendChanged(); } } Q_SIGNALS: void batteryLockDelayChanged(); void batteryScreenBlackDelayChanged(); void batterySleepDelayChanged(); void enableScheduledShutdownChanged(); void linePowerLockDelayChanged(); void linePowerScreenBlackDelayChanged(); void linePowerSleepDelayChanged(); void showHibernateChanged(); void showShutdownChanged(); void showSuspendChanged(); private: void initialize(DTK_CORE_NAMESPACE::DConfig *config) { Q_ASSERT(!m_config.loadRelaxed()); m_config.storeRelaxed(config); if (testPropertySet(0)) { config->setValue(QStringLiteral("batteryLockDelay"), QVariant::fromValue(p_batteryLockDelay)); } else { updateValue(QStringLiteral("batteryLockDelay"), QVariant::fromValue(p_batteryLockDelay)); } if (testPropertySet(1)) { config->setValue(QStringLiteral("batteryScreenBlackDelay"), QVariant::fromValue(p_batteryScreenBlackDelay)); } else { updateValue(QStringLiteral("batteryScreenBlackDelay"), QVariant::fromValue(p_batteryScreenBlackDelay)); } if (testPropertySet(2)) { config->setValue(QStringLiteral("batterySleepDelay"), QVariant::fromValue(p_batterySleepDelay)); } else { updateValue(QStringLiteral("batterySleepDelay"), QVariant::fromValue(p_batterySleepDelay)); } if (testPropertySet(3)) { config->setValue(QStringLiteral("enableScheduledShutdown"), QVariant::fromValue(p_enableScheduledShutdown)); } else { updateValue(QStringLiteral("enableScheduledShutdown"), QVariant::fromValue(p_enableScheduledShutdown)); } if (testPropertySet(4)) { config->setValue(QStringLiteral("linePowerLockDelay"), QVariant::fromValue(p_linePowerLockDelay)); } else { updateValue(QStringLiteral("linePowerLockDelay"), QVariant::fromValue(p_linePowerLockDelay)); } if (testPropertySet(5)) { config->setValue(QStringLiteral("linePowerScreenBlackDelay"), QVariant::fromValue(p_linePowerScreenBlackDelay)); } else { updateValue(QStringLiteral("linePowerScreenBlackDelay"), QVariant::fromValue(p_linePowerScreenBlackDelay)); } if (testPropertySet(6)) { config->setValue(QStringLiteral("linePowerSleepDelay"), QVariant::fromValue(p_linePowerSleepDelay)); } else { updateValue(QStringLiteral("linePowerSleepDelay"), QVariant::fromValue(p_linePowerSleepDelay)); } if (testPropertySet(7)) { config->setValue(QStringLiteral("showHibernate"), QVariant::fromValue(p_showHibernate)); } else { updateValue(QStringLiteral("showHibernate"), QVariant::fromValue(p_showHibernate)); } if (testPropertySet(8)) { config->setValue(QStringLiteral("showShutdown"), QVariant::fromValue(p_showShutdown)); } else { updateValue(QStringLiteral("showShutdown"), QVariant::fromValue(p_showShutdown)); } if (testPropertySet(9)) { config->setValue(QStringLiteral("showSuspend"), QVariant::fromValue(p_showSuspend)); } else { updateValue(QStringLiteral("showSuspend"), QVariant::fromValue(p_showSuspend)); } connect(config, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, [this](const QString &key) { updateValue(key); }, Qt::DirectConnection); } void updateValue(const QString &key, const QVariant &fallback = QVariant()) { Q_ASSERT(QThread::currentThread() == m_config.loadRelaxed()->thread()); const QVariant &value = m_config.loadRelaxed()->value(key, fallback); if (key == QStringLiteral("batteryLockDelay")) { auto newValue = qvariant_cast>(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_batteryLockDelay != newValue) { p_batteryLockDelay = newValue; Q_EMIT batteryLockDelayChanged(); } }); return; } if (key == QStringLiteral("batteryScreenBlackDelay")) { auto newValue = qvariant_cast>(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_batteryScreenBlackDelay != newValue) { p_batteryScreenBlackDelay = newValue; Q_EMIT batteryScreenBlackDelayChanged(); } }); return; } if (key == QStringLiteral("batterySleepDelay")) { auto newValue = qvariant_cast>(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_batterySleepDelay != newValue) { p_batterySleepDelay = newValue; Q_EMIT batterySleepDelayChanged(); } }); return; } if (key == QStringLiteral("enableScheduledShutdown")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_enableScheduledShutdown != newValue) { p_enableScheduledShutdown = newValue; Q_EMIT enableScheduledShutdownChanged(); } }); return; } if (key == QStringLiteral("linePowerLockDelay")) { auto newValue = qvariant_cast>(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_linePowerLockDelay != newValue) { p_linePowerLockDelay = newValue; Q_EMIT linePowerLockDelayChanged(); } }); return; } if (key == QStringLiteral("linePowerScreenBlackDelay")) { auto newValue = qvariant_cast>(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_linePowerScreenBlackDelay != newValue) { p_linePowerScreenBlackDelay = newValue; Q_EMIT linePowerScreenBlackDelayChanged(); } }); return; } if (key == QStringLiteral("linePowerSleepDelay")) { auto newValue = qvariant_cast>(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_linePowerSleepDelay != newValue) { p_linePowerSleepDelay = newValue; Q_EMIT linePowerSleepDelayChanged(); } }); return; } if (key == QStringLiteral("showHibernate")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_showHibernate != newValue) { p_showHibernate = newValue; Q_EMIT showHibernateChanged(); } }); return; } if (key == QStringLiteral("showShutdown")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_showShutdown != newValue) { p_showShutdown = newValue; Q_EMIT showShutdownChanged(); } }); return; } if (key == QStringLiteral("showSuspend")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_showSuspend != newValue) { p_showSuspend = newValue; Q_EMIT showSuspendChanged(); } }); return; } } inline void markPropertySet(const int index) { if (index < 32) { m_propertySetStatus0.fetchAndOrOrdered(1 << (index - 0)); return; } Q_UNREACHABLE(); } inline bool testPropertySet(const int index) const { if (index < 32) { return (m_propertySetStatus0.loadRelaxed() & (1 << (index - 0))); } Q_UNREACHABLE(); } QAtomicPointer m_config = nullptr; QList p_batteryLockDelay { QList{QVariant(QStringLiteral("1m")), QVariant(QStringLiteral("5m")), QVariant(QStringLiteral("10m")), QVariant(QStringLiteral("15m")), QVariant(QStringLiteral("30m")), QVariant(QStringLiteral("1h"))} }; QList p_batteryScreenBlackDelay { QList{QVariant(QStringLiteral("1m")), QVariant(QStringLiteral("5m")), QVariant(QStringLiteral("10m")), QVariant(QStringLiteral("15m")), QVariant(QStringLiteral("30m")), QVariant(QStringLiteral("1h"))} }; QList p_batterySleepDelay { QList{QVariant(QStringLiteral("10m")), QVariant(QStringLiteral("15m")), QVariant(QStringLiteral("30m")), QVariant(QStringLiteral("1h")), QVariant(QStringLiteral("2h")), QVariant(QStringLiteral("3h"))} }; QString p_enableScheduledShutdown { QStringLiteral("Enabled") }; QList p_linePowerLockDelay { QList{QVariant(QStringLiteral("10m")), QVariant(QStringLiteral("15m")), QVariant(QStringLiteral("30m")), QVariant(QStringLiteral("1h")), QVariant(QStringLiteral("2h")), QVariant(QStringLiteral("3h"))} }; QList p_linePowerScreenBlackDelay { QList{QVariant(QStringLiteral("1m")), QVariant(QStringLiteral("5m")), QVariant(QStringLiteral("10m")), QVariant(QStringLiteral("15m")), QVariant(QStringLiteral("30m")), QVariant(QStringLiteral("1h"))} }; QList p_linePowerSleepDelay { QList{QVariant(QStringLiteral("10m")), QVariant(QStringLiteral("15m")), QVariant(QStringLiteral("30m")), QVariant(QStringLiteral("1h")), QVariant(QStringLiteral("2h")), QVariant(QStringLiteral("3h"))} }; bool p_showHibernate { true }; bool p_showShutdown { true }; bool p_showSuspend { true }; QAtomicInteger m_propertySetStatus0 = 0; }; #endif // ORG_DEEPIN_DDE_CONTROL-CENTER_POWER_H ================================================ FILE: toolGenerate/dconfig2cpp/org_deepin_dde_control-center_update.hpp ================================================ /** * This file is generated by dconfig2cpp. * Command line arguments: ./dconfig2cpp -p ./dde-control-center/toolGenerate/dconfig2cpp ./dde-control-center/misc/configs/org.deepin.dde.control-center.update.json * Generation time: 2025-01-14T10:54:58 * JSON file version: 1.0 * * WARNING: DO NOT MODIFY THIS FILE MANUALLY. * If you need to change the content, please modify the dconfig2cpp tool. */ #ifndef ORG_DEEPIN_DDE_CONTROL-CENTER_UPDATE_H #define ORG_DEEPIN_DDE_CONTROL-CENTER_UPDATE_H #include #include #include #include #include #include class org_deepin_dde_control-center_update : public QObject { Q_OBJECT Q_PROPERTY(bool backup READ backup WRITE setBackup NOTIFY backupChanged) Q_PROPERTY(QString updateLogAddress READ updateLogAddress WRITE setUpdateLogAddress NOTIFY updateLogAddressChanged) public: explicit org_deepin_dde_control-center_update(QThread *thread, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_update(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_update(QThread *thread, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_dde_control-center_update(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } ~org_deepin_dde_control-center_update() { if (m_config.loadRelaxed()) { m_config.loadRelaxed()->deleteLater(); } } bool backup() const { return p_backup; } void setBackup(const bool &value) { auto oldValue = p_backup; p_backup = value; markPropertySet(0); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("backup"), value); }); } if (p_backup != oldValue) { Q_EMIT backupChanged(); } } QString updateLogAddress() const { return p_updateLogAddress; } void setUpdateLogAddress(const QString &value) { auto oldValue = p_updateLogAddress; p_updateLogAddress = value; markPropertySet(1); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("updateLogAddress"), value); }); } if (p_updateLogAddress != oldValue) { Q_EMIT updateLogAddressChanged(); } } Q_SIGNALS: void backupChanged(); void updateLogAddressChanged(); private: void initialize(DTK_CORE_NAMESPACE::DConfig *config) { Q_ASSERT(!m_config.loadRelaxed()); m_config.storeRelaxed(config); if (testPropertySet(0)) { config->setValue(QStringLiteral("backup"), QVariant::fromValue(p_backup)); } else { updateValue(QStringLiteral("backup"), QVariant::fromValue(p_backup)); } if (testPropertySet(1)) { config->setValue(QStringLiteral("updateLogAddress"), QVariant::fromValue(p_updateLogAddress)); } else { updateValue(QStringLiteral("updateLogAddress"), QVariant::fromValue(p_updateLogAddress)); } connect(config, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, [this](const QString &key) { updateValue(key); }, Qt::DirectConnection); } void updateValue(const QString &key, const QVariant &fallback = QVariant()) { Q_ASSERT(QThread::currentThread() == m_config.loadRelaxed()->thread()); const QVariant &value = m_config.loadRelaxed()->value(key, fallback); if (key == QStringLiteral("backup")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_backup != newValue) { p_backup = newValue; Q_EMIT backupChanged(); } }); return; } if (key == QStringLiteral("updateLogAddress")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_updateLogAddress != newValue) { p_updateLogAddress = newValue; Q_EMIT updateLogAddressChanged(); } }); return; } } inline void markPropertySet(const int index) { if (index < 32) { m_propertySetStatus0.fetchAndOrOrdered(1 << (index - 0)); return; } Q_UNREACHABLE(); } inline bool testPropertySet(const int index) const { if (index < 32) { return (m_propertySetStatus0.loadRelaxed() & (1 << (index - 0))); } Q_UNREACHABLE(); } QAtomicPointer m_config = nullptr; bool p_backup { true }; QString p_updateLogAddress { QStringLiteral("https://update-platform.uniontech.com/api/v1/systemupdatelogs") }; QAtomicInteger m_propertySetStatus0 = 0; }; #endif // ORG_DEEPIN_DDE_CONTROL-CENTER_UPDATE_H ================================================ FILE: toolGenerate/dconfig2cpp/org_deepin_region-format.hpp ================================================ /** * This file is generated by dconfig2cpp. * Command line arguments: ./dconfig2cpp -p ./dde-control-center/toolGenerate/dconfig2cpp ./dde-control-center/misc/configs/common/org.deepin.region-format.json * Generation time: 2025-01-14T10:54:58 * JSON file version: 1.0 * * WARNING: DO NOT MODIFY THIS FILE MANUALLY. * If you need to change the content, please modify the dconfig2cpp tool. */ #ifndef ORG_DEEPIN_REGION-FORMAT_H #define ORG_DEEPIN_REGION-FORMAT_H #include #include #include #include #include #include class org_deepin_region-format : public QObject { Q_OBJECT Q_PROPERTY(QString country READ country WRITE setCountry NOTIFY countryChanged) Q_PROPERTY(QString currencyFormat READ currencyFormat WRITE setCurrencyFormat NOTIFY currencyFormatChanged) Q_PROPERTY(double firstDayOfWeek READ firstDayOfWeek WRITE setFirstDayOfWeek NOTIFY firstDayOfWeekChanged) Q_PROPERTY(QString languageRegion READ languageRegion WRITE setLanguageRegion NOTIFY languageRegionChanged) Q_PROPERTY(QString localeName READ localeName WRITE setLocaleName NOTIFY localeNameChanged) Q_PROPERTY(QString longDateFormat READ longDateFormat WRITE setLongDateFormat NOTIFY longDateFormatChanged) Q_PROPERTY(QString longTimeFormat READ longTimeFormat WRITE setLongTimeFormat NOTIFY longTimeFormatChanged) Q_PROPERTY(QString numberFormat READ numberFormat WRITE setNumberFormat NOTIFY numberFormatChanged) Q_PROPERTY(QString paperFormat READ paperFormat WRITE setPaperFormat NOTIFY paperFormatChanged) Q_PROPERTY(QString shortDateFormat READ shortDateFormat WRITE setShortDateFormat NOTIFY shortDateFormatChanged) Q_PROPERTY(QString shortTimeFormat READ shortTimeFormat WRITE setShortTimeFormat NOTIFY shortTimeFormatChanged) public: explicit org_deepin_region-format(QThread *thread, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_region-format(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &appId, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, appId, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_region-format(QThread *thread, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } explicit org_deepin_region-format(QThread *thread, DTK_CORE_NAMESPACE::DConfigBackend *backend, const QString &name, const QString &subpath, QObject *parent = nullptr) : QObject(parent) { if (!thread->isRunning()) { qWarning() << QStringLiteral("Warning: The provided thread is not running."); } Q_ASSERT(QThread::currentThread() != thread); auto worker = new QObject(); worker->moveToThread(thread); QMetaObject::invokeMethod(worker, [=]() { auto config = DTK_CORE_NAMESPACE::DConfig::create(backend, name, subpath, nullptr); if (!config) { qWarning() << QStringLiteral("Failed to create DConfig instance."); worker->deleteLater(); return; } config->moveToThread(QThread::currentThread()); initialize(config); worker->deleteLater(); }); } ~org_deepin_region-format() { if (m_config.loadRelaxed()) { m_config.loadRelaxed()->deleteLater(); } } QString country() const { return p_country; } void setCountry(const QString &value) { auto oldValue = p_country; p_country = value; markPropertySet(0); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("country"), value); }); } if (p_country != oldValue) { Q_EMIT countryChanged(); } } QString currencyFormat() const { return p_currencyFormat; } void setCurrencyFormat(const QString &value) { auto oldValue = p_currencyFormat; p_currencyFormat = value; markPropertySet(1); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("currencyFormat"), value); }); } if (p_currencyFormat != oldValue) { Q_EMIT currencyFormatChanged(); } } double firstDayOfWeek() const { return p_firstDayOfWeek; } void setFirstDayOfWeek(const double &value) { auto oldValue = p_firstDayOfWeek; p_firstDayOfWeek = value; markPropertySet(2); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("firstDayOfWeek"), value); }); } if (p_firstDayOfWeek != oldValue) { Q_EMIT firstDayOfWeekChanged(); } } QString languageRegion() const { return p_languageRegion; } void setLanguageRegion(const QString &value) { auto oldValue = p_languageRegion; p_languageRegion = value; markPropertySet(3); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("languageRegion"), value); }); } if (p_languageRegion != oldValue) { Q_EMIT languageRegionChanged(); } } QString localeName() const { return p_localeName; } void setLocaleName(const QString &value) { auto oldValue = p_localeName; p_localeName = value; markPropertySet(4); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("localeName"), value); }); } if (p_localeName != oldValue) { Q_EMIT localeNameChanged(); } } QString longDateFormat() const { return p_longDateFormat; } void setLongDateFormat(const QString &value) { auto oldValue = p_longDateFormat; p_longDateFormat = value; markPropertySet(5); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("longDateFormat"), value); }); } if (p_longDateFormat != oldValue) { Q_EMIT longDateFormatChanged(); } } QString longTimeFormat() const { return p_longTimeFormat; } void setLongTimeFormat(const QString &value) { auto oldValue = p_longTimeFormat; p_longTimeFormat = value; markPropertySet(6); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("longTimeFormat"), value); }); } if (p_longTimeFormat != oldValue) { Q_EMIT longTimeFormatChanged(); } } QString numberFormat() const { return p_numberFormat; } void setNumberFormat(const QString &value) { auto oldValue = p_numberFormat; p_numberFormat = value; markPropertySet(7); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("numberFormat"), value); }); } if (p_numberFormat != oldValue) { Q_EMIT numberFormatChanged(); } } QString paperFormat() const { return p_paperFormat; } void setPaperFormat(const QString &value) { auto oldValue = p_paperFormat; p_paperFormat = value; markPropertySet(8); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("paperFormat"), value); }); } if (p_paperFormat != oldValue) { Q_EMIT paperFormatChanged(); } } QString shortDateFormat() const { return p_shortDateFormat; } void setShortDateFormat(const QString &value) { auto oldValue = p_shortDateFormat; p_shortDateFormat = value; markPropertySet(9); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("shortDateFormat"), value); }); } if (p_shortDateFormat != oldValue) { Q_EMIT shortDateFormatChanged(); } } QString shortTimeFormat() const { return p_shortTimeFormat; } void setShortTimeFormat(const QString &value) { auto oldValue = p_shortTimeFormat; p_shortTimeFormat = value; markPropertySet(10); if (auto config = m_config.loadRelaxed()) { QMetaObject::invokeMethod(config, [this, value]() { m_config.loadRelaxed()->setValue(QStringLiteral("shortTimeFormat"), value); }); } if (p_shortTimeFormat != oldValue) { Q_EMIT shortTimeFormatChanged(); } } Q_SIGNALS: void countryChanged(); void currencyFormatChanged(); void firstDayOfWeekChanged(); void languageRegionChanged(); void localeNameChanged(); void longDateFormatChanged(); void longTimeFormatChanged(); void numberFormatChanged(); void paperFormatChanged(); void shortDateFormatChanged(); void shortTimeFormatChanged(); private: void initialize(DTK_CORE_NAMESPACE::DConfig *config) { Q_ASSERT(!m_config.loadRelaxed()); m_config.storeRelaxed(config); if (testPropertySet(0)) { config->setValue(QStringLiteral("country"), QVariant::fromValue(p_country)); } else { updateValue(QStringLiteral("country"), QVariant::fromValue(p_country)); } if (testPropertySet(1)) { config->setValue(QStringLiteral("currencyFormat"), QVariant::fromValue(p_currencyFormat)); } else { updateValue(QStringLiteral("currencyFormat"), QVariant::fromValue(p_currencyFormat)); } if (testPropertySet(2)) { config->setValue(QStringLiteral("firstDayOfWeek"), QVariant::fromValue(p_firstDayOfWeek)); } else { updateValue(QStringLiteral("firstDayOfWeek"), QVariant::fromValue(p_firstDayOfWeek)); } if (testPropertySet(3)) { config->setValue(QStringLiteral("languageRegion"), QVariant::fromValue(p_languageRegion)); } else { updateValue(QStringLiteral("languageRegion"), QVariant::fromValue(p_languageRegion)); } if (testPropertySet(4)) { config->setValue(QStringLiteral("localeName"), QVariant::fromValue(p_localeName)); } else { updateValue(QStringLiteral("localeName"), QVariant::fromValue(p_localeName)); } if (testPropertySet(5)) { config->setValue(QStringLiteral("longDateFormat"), QVariant::fromValue(p_longDateFormat)); } else { updateValue(QStringLiteral("longDateFormat"), QVariant::fromValue(p_longDateFormat)); } if (testPropertySet(6)) { config->setValue(QStringLiteral("longTimeFormat"), QVariant::fromValue(p_longTimeFormat)); } else { updateValue(QStringLiteral("longTimeFormat"), QVariant::fromValue(p_longTimeFormat)); } if (testPropertySet(7)) { config->setValue(QStringLiteral("numberFormat"), QVariant::fromValue(p_numberFormat)); } else { updateValue(QStringLiteral("numberFormat"), QVariant::fromValue(p_numberFormat)); } if (testPropertySet(8)) { config->setValue(QStringLiteral("paperFormat"), QVariant::fromValue(p_paperFormat)); } else { updateValue(QStringLiteral("paperFormat"), QVariant::fromValue(p_paperFormat)); } if (testPropertySet(9)) { config->setValue(QStringLiteral("shortDateFormat"), QVariant::fromValue(p_shortDateFormat)); } else { updateValue(QStringLiteral("shortDateFormat"), QVariant::fromValue(p_shortDateFormat)); } if (testPropertySet(10)) { config->setValue(QStringLiteral("shortTimeFormat"), QVariant::fromValue(p_shortTimeFormat)); } else { updateValue(QStringLiteral("shortTimeFormat"), QVariant::fromValue(p_shortTimeFormat)); } connect(config, &DTK_CORE_NAMESPACE::DConfig::valueChanged, this, [this](const QString &key) { updateValue(key); }, Qt::DirectConnection); } void updateValue(const QString &key, const QVariant &fallback = QVariant()) { Q_ASSERT(QThread::currentThread() == m_config.loadRelaxed()->thread()); const QVariant &value = m_config.loadRelaxed()->value(key, fallback); if (key == QStringLiteral("country")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_country != newValue) { p_country = newValue; Q_EMIT countryChanged(); } }); return; } if (key == QStringLiteral("currencyFormat")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_currencyFormat != newValue) { p_currencyFormat = newValue; Q_EMIT currencyFormatChanged(); } }); return; } if (key == QStringLiteral("firstDayOfWeek")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_firstDayOfWeek != newValue) { p_firstDayOfWeek = newValue; Q_EMIT firstDayOfWeekChanged(); } }); return; } if (key == QStringLiteral("languageRegion")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_languageRegion != newValue) { p_languageRegion = newValue; Q_EMIT languageRegionChanged(); } }); return; } if (key == QStringLiteral("localeName")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_localeName != newValue) { p_localeName = newValue; Q_EMIT localeNameChanged(); } }); return; } if (key == QStringLiteral("longDateFormat")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_longDateFormat != newValue) { p_longDateFormat = newValue; Q_EMIT longDateFormatChanged(); } }); return; } if (key == QStringLiteral("longTimeFormat")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_longTimeFormat != newValue) { p_longTimeFormat = newValue; Q_EMIT longTimeFormatChanged(); } }); return; } if (key == QStringLiteral("numberFormat")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_numberFormat != newValue) { p_numberFormat = newValue; Q_EMIT numberFormatChanged(); } }); return; } if (key == QStringLiteral("paperFormat")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_paperFormat != newValue) { p_paperFormat = newValue; Q_EMIT paperFormatChanged(); } }); return; } if (key == QStringLiteral("shortDateFormat")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_shortDateFormat != newValue) { p_shortDateFormat = newValue; Q_EMIT shortDateFormatChanged(); } }); return; } if (key == QStringLiteral("shortTimeFormat")) { auto newValue = qvariant_cast(value); QMetaObject::invokeMethod(this, [this, newValue]() { if (p_shortTimeFormat != newValue) { p_shortTimeFormat = newValue; Q_EMIT shortTimeFormatChanged(); } }); return; } } inline void markPropertySet(const int index) { if (index < 32) { m_propertySetStatus0.fetchAndOrOrdered(1 << (index - 0)); return; } Q_UNREACHABLE(); } inline bool testPropertySet(const int index) const { if (index < 32) { return (m_propertySetStatus0.loadRelaxed() & (1 << (index - 0))); } Q_UNREACHABLE(); } QAtomicPointer m_config = nullptr; QString p_country { QStringLiteral("") }; QString p_currencyFormat { QStringLiteral("") }; double p_firstDayOfWeek { 0 }; QString p_languageRegion { QStringLiteral("") }; QString p_localeName { QStringLiteral("") }; QString p_longDateFormat { QStringLiteral("") }; QString p_longTimeFormat { QStringLiteral("") }; QString p_numberFormat { QStringLiteral("") }; QString p_paperFormat { QStringLiteral("") }; QString p_shortDateFormat { QStringLiteral("") }; QString p_shortTimeFormat { QStringLiteral("") }; QAtomicInteger m_propertySetStatus0 = 0; }; #endif // ORG_DEEPIN_REGION-FORMAT_H ================================================ FILE: toolGenerate/qdbusxml2cpp/org.deepin.dde.controlcenter.metainfoAdaptor.cpp ================================================ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-control-center/misc/org.deepin.dde.controlcenter.metainfo.xml -a ./dde-control-center/toolGenerate/qdbusxml2cpp/org.deepin.dde.controlcenter.metainfoAdaptor -i ./dde-control-center/toolGenerate/qdbusxml2cpp/org.deepin.dde.controlcenter.metainfo.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #include "./dde-control-center/toolGenerate/qdbusxml2cpp/org.deepin.dde.controlcenter.metainfoAdaptor.h" #include #include #include #include #include #include #include ================================================ FILE: toolGenerate/qdbusxml2cpp/org.deepin.dde.controlcenter.metainfoAdaptor.h ================================================ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-control-center/misc/org.deepin.dde.controlcenter.metainfo.xml -a ./dde-control-center/toolGenerate/qdbusxml2cpp/org.deepin.dde.controlcenter.metainfoAdaptor -i ./dde-control-center/toolGenerate/qdbusxml2cpp/org.deepin.dde.controlcenter.metainfo.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #ifndef ORG_DEEPIN_DDE_CONTROLCENTER_METAINFOADAPTOR_H #define ORG_DEEPIN_DDE_CONTROLCENTER_METAINFOADAPTOR_H #include #include #include "./dde-control-center/toolGenerate/qdbusxml2cpp/org.deepin.dde.controlcenter.metainfo.h" QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE #endif ================================================ FILE: toolGenerate/qdbusxml2cpp/org.desktopspec.ApplicationManager1.ApplicationAdaptor.cpp ================================================ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-control-center/src/plugin-notification/operation/xml/org.desktopspec.ApplicationManager1.Application.xml -a ./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ApplicationManager1.ApplicationAdaptor -i ./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ApplicationManager1.Application.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #include "./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ApplicationManager1.ApplicationAdaptor.h" #include #include #include #include #include #include #include /* * Implementation of adaptor class ApplicationAdaptor */ ApplicationAdaptor::ApplicationAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent) { // constructor setAutoRelaySignals(true); } ApplicationAdaptor::~ApplicationAdaptor() { // destructor } PropMap ApplicationAdaptor::actionName() const { // get the value of property ActionName return qvariant_cast< PropMap >(parent()->property("ActionName")); } QStringList ApplicationAdaptor::actions() const { // get the value of property Actions return qvariant_cast< QStringList >(parent()->property("Actions")); } bool ApplicationAdaptor::autoStart() const { // get the value of property AutoStart return qvariant_cast< bool >(parent()->property("AutoStart")); } void ApplicationAdaptor::setAutoStart(bool value) { // set the value of property AutoStart parent()->setProperty("AutoStart", QVariant::fromValue(value)); } QStringList ApplicationAdaptor::categories() const { // get the value of property Categories return qvariant_cast< QStringList >(parent()->property("Categories")); } QString ApplicationAdaptor::environ() const { // get the value of property Environ return qvariant_cast< QString >(parent()->property("Environ")); } void ApplicationAdaptor::setEnviron(const QString &value) { // set the value of property Environ parent()->setProperty("Environ", QVariant::fromValue(value)); } QStringMap ApplicationAdaptor::genericName() const { // get the value of property GenericName return qvariant_cast< QStringMap >(parent()->property("GenericName")); } QString ApplicationAdaptor::iD() const { // get the value of property ID return qvariant_cast< QString >(parent()->property("ID")); } QStringMap ApplicationAdaptor::icons() const { // get the value of property Icons return qvariant_cast< QStringMap >(parent()->property("Icons")); } qlonglong ApplicationAdaptor::installedTime() const { // get the value of property InstalledTime return qvariant_cast< qlonglong >(parent()->property("InstalledTime")); } QList ApplicationAdaptor::instances() const { // get the value of property Instances return qvariant_cast< QList >(parent()->property("Instances")); } qlonglong ApplicationAdaptor::lastLaunchedTime() const { // get the value of property LastLaunchedTime return qvariant_cast< qlonglong >(parent()->property("LastLaunchedTime")); } qlonglong ApplicationAdaptor::launchedTimes() const { // get the value of property LaunchedTimes return qvariant_cast< qlonglong >(parent()->property("LaunchedTimes")); } QStringList ApplicationAdaptor::mimeTypes() const { // get the value of property MimeTypes return qvariant_cast< QStringList >(parent()->property("MimeTypes")); } void ApplicationAdaptor::setMimeTypes(const QStringList &value) { // set the value of property MimeTypes parent()->setProperty("MimeTypes", QVariant::fromValue(value)); } QStringMap ApplicationAdaptor::name() const { // get the value of property Name return qvariant_cast< QStringMap >(parent()->property("Name")); } bool ApplicationAdaptor::noDisplay() const { // get the value of property NoDisplay return qvariant_cast< bool >(parent()->property("NoDisplay")); } bool ApplicationAdaptor::terminal() const { // get the value of property Terminal return qvariant_cast< bool >(parent()->property("Terminal")); } QString ApplicationAdaptor::x_Deepin_Vendor() const { // get the value of property X_Deepin_Vendor return qvariant_cast< QString >(parent()->property("X_Deepin_Vendor")); } bool ApplicationAdaptor::x_Flatpak() const { // get the value of property X_Flatpak return qvariant_cast< bool >(parent()->property("X_Flatpak")); } bool ApplicationAdaptor::x_linglong() const { // get the value of property X_linglong return qvariant_cast< bool >(parent()->property("X_linglong")); } bool ApplicationAdaptor::isOnDesktop() const { // get the value of property isOnDesktop return qvariant_cast< bool >(parent()->property("isOnDesktop")); } QDBusObjectPath ApplicationAdaptor::Launch(const QString &action, const QStringList &fields, const QVariantMap &options) { // handle method call org.desktopspec.ApplicationManager1.Application.Launch QDBusObjectPath job; QMetaObject::invokeMethod(parent(), "Launch", Q_RETURN_ARG(QDBusObjectPath, job), Q_ARG(QString, action), Q_ARG(QStringList, fields), Q_ARG(QVariantMap, options)); return job; } bool ApplicationAdaptor::RemoveFromDesktop() { // handle method call org.desktopspec.ApplicationManager1.Application.RemoveFromDesktop bool success; QMetaObject::invokeMethod(parent(), "RemoveFromDesktop", Q_RETURN_ARG(bool, success)); return success; } bool ApplicationAdaptor::SendToDesktop() { // handle method call org.desktopspec.ApplicationManager1.Application.SendToDesktop bool success; QMetaObject::invokeMethod(parent(), "SendToDesktop", Q_RETURN_ARG(bool, success)); return success; } ================================================ FILE: toolGenerate/qdbusxml2cpp/org.desktopspec.ApplicationManager1.ApplicationAdaptor.h ================================================ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-control-center/src/plugin-notification/operation/xml/org.desktopspec.ApplicationManager1.Application.xml -a ./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ApplicationManager1.ApplicationAdaptor -i ./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ApplicationManager1.Application.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #ifndef ORG_DESKTOPSPEC_APPLICATIONMANAGER1_APPLICATIONADAPTOR_H #define ORG_DESKTOPSPEC_APPLICATIONMANAGER1_APPLICATIONADAPTOR_H #include #include #include "./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ApplicationManager1.Application.h" QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE /* * Adaptor class for interface org.desktopspec.ApplicationManager1.Application */ class ApplicationAdaptor: public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.desktopspec.ApplicationManager1.Application") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") public: ApplicationAdaptor(QObject *parent); virtual ~ApplicationAdaptor(); public: // PROPERTIES Q_PROPERTY(PropMap ActionName READ actionName) PropMap actionName() const; Q_PROPERTY(QStringList Actions READ actions) QStringList actions() const; Q_PROPERTY(bool AutoStart READ autoStart WRITE setAutoStart) bool autoStart() const; void setAutoStart(bool value); Q_PROPERTY(QStringList Categories READ categories) QStringList categories() const; Q_PROPERTY(QString Environ READ environ WRITE setEnviron) QString environ() const; void setEnviron(const QString &value); Q_PROPERTY(QStringMap GenericName READ genericName) QStringMap genericName() const; Q_PROPERTY(QString ID READ iD) QString iD() const; Q_PROPERTY(QStringMap Icons READ icons) QStringMap icons() const; Q_PROPERTY(qlonglong InstalledTime READ installedTime) qlonglong installedTime() const; Q_PROPERTY(QList Instances READ instances) QList instances() const; Q_PROPERTY(qlonglong LastLaunchedTime READ lastLaunchedTime) qlonglong lastLaunchedTime() const; Q_PROPERTY(qlonglong LaunchedTimes READ launchedTimes) qlonglong launchedTimes() const; Q_PROPERTY(QStringList MimeTypes READ mimeTypes WRITE setMimeTypes) QStringList mimeTypes() const; void setMimeTypes(const QStringList &value); Q_PROPERTY(QStringMap Name READ name) QStringMap name() const; Q_PROPERTY(bool NoDisplay READ noDisplay) bool noDisplay() const; Q_PROPERTY(bool Terminal READ terminal) bool terminal() const; Q_PROPERTY(QString X_Deepin_Vendor READ x_Deepin_Vendor) QString x_Deepin_Vendor() const; Q_PROPERTY(bool X_Flatpak READ x_Flatpak) bool x_Flatpak() const; Q_PROPERTY(bool X_linglong READ x_linglong) bool x_linglong() const; Q_PROPERTY(bool isOnDesktop READ isOnDesktop) bool isOnDesktop() const; public Q_SLOTS: // METHODS QDBusObjectPath Launch(const QString &action, const QStringList &fields, const QVariantMap &options); bool RemoveFromDesktop(); bool SendToDesktop(); Q_SIGNALS: // SIGNALS }; #endif ================================================ FILE: toolGenerate/qdbusxml2cpp/org.desktopspec.ObjectManager1Adaptor.cpp ================================================ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-control-center/src/plugin-notification/operation/xml/org.desktopspec.ObjectManager1.xml -a ./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ObjectManager1Adaptor -i ./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ObjectManager1.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #include "./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ObjectManager1Adaptor.h" #include #include #include #include #include #include #include /* * Implementation of adaptor class ObjectManagerAdaptor */ ObjectManagerAdaptor::ObjectManagerAdaptor(QObject *parent) : QDBusAbstractAdaptor(parent) { // constructor setAutoRelaySignals(true); } ObjectManagerAdaptor::~ObjectManagerAdaptor() { // destructor } ObjectMap ObjectManagerAdaptor::GetManagedObjects() { // handle method call org.desktopspec.DBus.ObjectManager.GetManagedObjects ObjectMap objpath_interfaces_and_properties; QMetaObject::invokeMethod(parent(), "GetManagedObjects", Q_RETURN_ARG(ObjectMap, objpath_interfaces_and_properties)); return objpath_interfaces_and_properties; } ================================================ FILE: toolGenerate/qdbusxml2cpp/org.desktopspec.ObjectManager1Adaptor.h ================================================ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-control-center/src/plugin-notification/operation/xml/org.desktopspec.ObjectManager1.xml -a ./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ObjectManager1Adaptor -i ./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ObjectManager1.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #ifndef ORG_DESKTOPSPEC_OBJECTMANAGER1ADAPTOR_H #define ORG_DESKTOPSPEC_OBJECTMANAGER1ADAPTOR_H #include #include #include "./dde-control-center/toolGenerate/qdbusxml2cpp/org.desktopspec.ObjectManager1.h" QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE /* * Adaptor class for interface org.desktopspec.DBus.ObjectManager */ class ObjectManagerAdaptor: public QDBusAbstractAdaptor { Q_OBJECT Q_CLASSINFO("D-Bus Interface", "org.desktopspec.DBus.ObjectManager") Q_CLASSINFO("D-Bus Introspection", "" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" " \n" "") public: ObjectManagerAdaptor(QObject *parent); virtual ~ObjectManagerAdaptor(); public: // PROPERTIES public Q_SLOTS: // METHODS ObjectMap GetManagedObjects(); Q_SIGNALS: // SIGNALS void InterfacesAdded(const QDBusObjectPath &object_path, ObjectInterfaceMap interfaces_and_properties); void InterfacesRemoved(const QDBusObjectPath &object_path, const QStringList &interfaces); }; #endif ================================================ FILE: toolGenerate/qdbusxml2cpp/treeland-output-managementAdaptor.cpp ================================================ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-control-center/dcc-old/src/plugin-display/wayland/libwayqt/protocols/treeland-output-management.xml -a ./dde-control-center/toolGenerate/qdbusxml2cpp/treeland-output-managementAdaptor -i ./dde-control-center/toolGenerate/qdbusxml2cpp/treeland-output-management.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #include "./dde-control-center/toolGenerate/qdbusxml2cpp/treeland-output-managementAdaptor.h" #include #include #include #include #include #include #include ================================================ FILE: toolGenerate/qdbusxml2cpp/treeland-output-managementAdaptor.h ================================================ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-control-center/dcc-old/src/plugin-display/wayland/libwayqt/protocols/treeland-output-management.xml -a ./dde-control-center/toolGenerate/qdbusxml2cpp/treeland-output-managementAdaptor -i ./dde-control-center/toolGenerate/qdbusxml2cpp/treeland-output-management.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #ifndef TREELAND-OUTPUT-MANAGEMENTADAPTOR_H #define TREELAND-OUTPUT-MANAGEMENTADAPTOR_H #include #include #include "./dde-control-center/toolGenerate/qdbusxml2cpp/treeland-output-management.h" QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE #endif ================================================ FILE: toolGenerate/qdbusxml2cpp/wlr-output-management-unstable-v1Adaptor.cpp ================================================ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-control-center/dcc-old/src/plugin-display/wayland/libwayqt/protocols/wlr-output-management-unstable-v1.xml -a ./dde-control-center/toolGenerate/qdbusxml2cpp/wlr-output-management-unstable-v1Adaptor -i ./dde-control-center/toolGenerate/qdbusxml2cpp/wlr-output-management-unstable-v1.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * Do not edit! All changes made to it will be lost. */ #include "./dde-control-center/toolGenerate/qdbusxml2cpp/wlr-output-management-unstable-v1Adaptor.h" #include #include #include #include #include #include #include ================================================ FILE: toolGenerate/qdbusxml2cpp/wlr-output-management-unstable-v1Adaptor.h ================================================ /* * This file was generated by qdbusxml2cpp version 0.8 * Command line was: qdbusxml2cpp ./dde-control-center/dcc-old/src/plugin-display/wayland/libwayqt/protocols/wlr-output-management-unstable-v1.xml -a ./dde-control-center/toolGenerate/qdbusxml2cpp/wlr-output-management-unstable-v1Adaptor -i ./dde-control-center/toolGenerate/qdbusxml2cpp/wlr-output-management-unstable-v1.h * * qdbusxml2cpp is Copyright (C) 2017 The Qt Company Ltd. * * This is an auto-generated file. * This file may have been hand-edited. Look for HAND-EDIT comments * before re-generating it. */ #ifndef WLR-OUTPUT-MANAGEMENT-UNSTABLE-V1ADAPTOR_H #define WLR-OUTPUT-MANAGEMENT-UNSTABLE-V1ADAPTOR_H #include #include #include "./dde-control-center/toolGenerate/qdbusxml2cpp/wlr-output-management-unstable-v1.h" QT_BEGIN_NAMESPACE class QByteArray; template class QList; template class QMap; class QString; class QStringList; class QVariant; QT_END_NAMESPACE #endif ================================================ FILE: translations/dde-control-center_ady.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_af.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Verbind Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Kanselleer Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Vertoonskerm Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Invoer Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Muis en Voelblok Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Verpersoonliking PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Verspersoonlik PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Beheersentrum Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Klank Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Skakel af Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Maak Asblik Leeg Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Modus Output Volume Uitset Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Links Right Regs Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Keer terug Save Stoor TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Tradisionele Chinees (Hong Kong) Traditional Chinese (Chinese Taiwan) Tradisionele Chinees (Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Hierdie snelkoppeling kollideer met [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Stelsel Window Venster Workspace Werkarea AssistiveTools Hulpprogramme Custom Eie None Geen ================================================ FILE: translations/dde-control-center_af_ZA.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_ak.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit <a href="%1"> %1</a>.</p> Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. DisclaimerControl Disclaimer Cancel Agree FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device MousePage Mouse Pointer Speed Slow Fast Pointer Size Short Long Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel PersonalizationInterface Light Auto Dark PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts Custom done edit Click Cancel or Replace Restore default Add custom shortcut please enter a shortcut key SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundModel Boot up Shut down Shut down Log out Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar Accounts Account Account manager AccountsMain Other accounts Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... BlueTooth Bluetooth settings, devices Bluetooth CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options Datetime Time and date Time and date, time zone settings Language and region System language, regional formats dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None Deepinid deepin ID UOS ID Cloud services Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal Device Device Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound Personalization Personalization PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders Sound Sound Output, input, sound effects, devices SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model ================================================ FILE: translations/dde-control-center_am.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed የ መጠቆሚያው ፍጥነት Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling መሸብለያ Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed የ መጠቆሚያው ፍጥነት Slow Fast Disable touchpad during input Tap to Click Natural Scrolling መሸብለያ Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_am_ET.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected ተገናኝቷል Not connected አልተገናኘም BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel መሰረዣ Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display ማሳያ Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume የ መጠን ማሳገቢያ Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization የ ግል ማድረጊያ PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom ማስተካከያ PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center መቆጣጠሪያ ማእከል Activated View መመልከቻ To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound ድምፅ Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects የ ድምፅ ውጤቶች SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down ማጥፊያ Log out መውጫ Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash ቆሻሻውን ባዶ ማድረጊያ Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode ዘዴ Output Volume የ መጠን ውጤት Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left የ ግራ Right የ ቀኝ Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert ወደ ነበረበት መመለሻ Save ማስቀመጫ TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_ar.ts ================================================ AccountSettings edit تعديل Add new user إضافة مستخدم جديد Set fullname تعيين الاسم الكامل Login settings إعدادات تسجيل الدخول Login without password تسجيل الدخول بدون كلمة مرور Delete current account حذف الحساب الحالي Group setting إعداد المجموعة Account groups مجموعات الحسابين done تم Group name اسم المجموعة Add group إضافة مجموعة Auto login تسجيل الدخول التلقائي Account Information معلومات الحساب Account name, account fullname, account type اسم الحساب، الاسم الكامل للحساب، نوع الحساب Account name اسم الحساب Account fullname اسم الحساب الكامل Account type نوع الحساب The full name is too long اسمك الكامل طويل جدًا Group names should be no more than 32 characters يجب أن لا يتجاوز اسم المجموعة 32 حرفًا Group names cannot only have numbers لا يمكن أن يحتوي اسم المجموعة فقط على الأرقام Use letters,numbers,underscores and dashes only, and must start with a letter استخدم الحروف والأرقام والشرطيات والشرطيات فقط واحصل على البدء بحرف The group name has been used تم استخدام اسم المجموعة بالفعل quick login, Auto login, login without password تسجيل الدخول السريع، تسجيل الدخول التلقائي، تسجيل الدخول بدون كلمة مرور Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face تسجيل الوجه I have read and agree to the لقد قرأت وقبلت REGARDING TO Disclaimer tuyên殃 Next التالي Face enrolled تم تسجيل الوجه Failed to enroll your face فشل تسجيل وجهك Done تم Cancel إلغاء Retry Enroll حاول التسجيل مرة أخرى Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel إلغاء Done تم Enroll Finger تسجيل الإصبع Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. ضع الإصبع الذي سيتم تسجيله في مستشعر بصمات الأصابع وتحركه من الأسفل إلى الأعلى. بعد إكمال الإجراء، يرجى رفع الإصبع. I have read and agree to the لقد قرأت ووافقت على Disclaimer إقرار Next التالي Retry Enroll حاول التسجيل مرة أخرى "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. "التحقق البيومטרי" هو وظيفة لتأكيد هوية المستخدم تقدمها شركة تكنولوجيا البرمجيات المتحدة. من خلال "التحقق البيومטרי"، سيتم مقارنة البيانات البيومترية المجمعة مع البيانات المخزنة في الجهاز، وسيتم التحقق من هوية المستخدم بناءً على نتيجة المقارنة. يرجى الملاحظة أن شركة تكنولوجيا البرمجيات المتحدة لن تجمع أو تُدخل بياناتك البيومترية، والتي سيتم تخزينها على جهازك المحلي. يرجى تمكين "التحقق البيومטרי" فقط في جهازك الشخصي واستخدم بياناتك البيومترية الخاصة لإجراء العمليات المرتبطة، وقم بتعطيل أو حذف بيانات البيومترية الأخرى على ذلك الجهاز في أقرب وقت، وإلا فإنك ستحمل المخاطر الناشئة عن ذلك. تلتزم شركة تكنولوجيا البرمجيات المتحدة ببحث وتحسين أمان ودقة وثبات "التحقق البيومטרי". ومع ذلك، لا يوجد ضمان بأنك ستمكين "التحقق البيومטרי" مؤقتًا بسبب عوامل بيئية وتقنية وآلاتية وغيرها من عوامل التحكم في المخاطر. لذلك، يرجى عدم الاعتماد على "التحقق البيومטרי" كالطريقة الوحيدة لتسجيل الدخول إلى نظام التشغيل UOS. إذا كانت لديك أي أسئلة أو ملاحظات عند استخدام "التحقق البيومטרי"، يمكنك إعطاء ملاحظات عبر "الدعم والمساعدة" في نظام التشغيل UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first "تسجيل الدخول التلقائي" يمكن تمكينه فقط لحساب واحد، يرجى تعطيله أولاً لحساب "%1". Ok موافق AvatarSettingsDialog Images الصور Human إنسان Animal حيوان Scenery المناظر Illustration الرسم Emoji الإيموجي custom مخصصة Cartoon style نمط كاريكاتوري Dimensional style نمط ثلاثي الأبعاد Flat style نمط فلات Cancel إلغاء Save حفظ BatteryPage Screen and Suspend شاشة ونوم Turn off the monitor after إطفاء الشاشة بعد Lock screen after قفل الشاشة بعد Computer suspends after الحاسوب لنوم بعد When the lid is closed عند إغلاق قover When the power button is pressed عند الضغط على زر الطاقة Low Battery بطارية منخفضة Low battery notification إشعار البطارية المنخفضة Auto suspend نوم تلقائي Auto Hibernate oficial حibernation تلقائي Low battery threshold حد البطارية المنخفضة Battery Management إدارة البطارية Display remaining using and charging time عرض الوقت المتبقی للاستخدام والشح詄 Maximum capacity �عیة البطارية القصیة Low battery level مستوی البطارية المنخفض Disable де فعالة BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" البلوتوث معطيل واسم dispositivo يظهر كـ "%1" Bluetooth is turned on, and the name is displayed as "%1" البلوتوث مُ@Enable واسم الجهاز يُظهر كـ "%1" BlueToothDeviceListView Disconnect إلغاء الاتصال Connect اتصال Send Files إرسال الملفات Rename إعادة назвان Remove Device حذف جهاز Select file اختيار ملف BluetoothCtl Edit تحرير Allow other Bluetooth devices to find this device سماح للجهازات الأخرى بت cuerص مركز To use the Bluetooth function, please turn off لمستخدم خدمة الاتصال من خلال Bluetтьth، من فضلك قم بإغلاق Airplane Mode الوضع القاسي Bluetooth name cannot exceed 64 characters لا يمكن تجاوز اسم البلوتوث 64 حرفًا BluetoothDeviceModel Connected متصل Not connected غير متصل BootPage Startup Settings إعدادات التشغيل You can click the menu to change the default startup items, or drag the image to the window to change the background image. يمكنك النقر على القائمة للتغيير الإعدادات الافتراضية للتشغيل، أو سحب الصورة إلى النافذة لتغيير صورة الخلفية grub start delay تأخير grub عند تشغيل الأجهزة theme التيم After turning on the theme, you can see the theme background when you turn on the computer بعد فتح التيم، ستتمكن من رؤية خلفية التيم عند بدء تشغيل الحاسوب Boot menu verification إيقاف تعريف القائمة عند التشغيل After opening, entering the menu editing requires a password. بعد فتح القائمة، يتطلب التعديل على القائمة اسم مستخدم وكلمة سر Change Password تغيير كلمة السر Change boot menu verification password تغيير كلمة المرور لمصادقة قائمة التشغيل Set the boot menu authentication password تمثيل كلمة السر لمصادقة قائمة التشغيل User Name : اسم المستخدم : root root New Password : كلمة السر الجديدة : Required مطلوب Password cannot be empty لا يمكن أن يكون كلمة المرور فارغة Passwords do not match كلمة المرورات لا تت protagonir Repeat password: تكرار كلمة المرور: Cancel إلغاء Sure بالتأكيد Start animation بدء الرسم التحريدي Adjust the size of the logo animation on the system startup interface 凋整系统启动界面中图标动画的大小 Camera Allow below apps to access your camera: 허용 아래 앱이 카메라에 접근하게 하세요: CharaMangerModel Fingerprint1 بصمة الإصبع1 Fingerprint2 بصمة الإصبع2 Fingerprint3 بصمة الإصبع3 Fingerprint4 بصمة الإصبع4 Fingerprint5 بصمة الإصبع5 Fingerprint6 بصمة الإصبع6 Fingerprint7 بصمة الإصبع7 Fingerprint8 بصمة الإصبع8 Fingerprint9 بصمة الإصبع9 Fingerprint10 بصمة الإصبع10 Scan failed فشل�认 The fingerprint already exists تعتبر البصمة موجودة أساسا Please scan other fingers رجو استهلال أصابع أخرى Unknown error خطأ غير معروف Scan suspended وقف تصوير Cannot recognize لا يمكن التعرف عليه Moved too fast تحرك太快了 Finger moved too fast, please do not lift until prompted 上班族ErrMsg1 Unclear fingerprint 印 fingerprint 不清楚 Clean your finger or adjust the finger position, and try again 清洁你的手指或调整手指位置,再试一次 Already scanned 已扫描 Adjust the finger position to scan your fingerprint fully 调整手指位置以完整扫描您的指纹 Finger moved too fast. Please do not lift until prompted 指纹移动过快。请在提示时抬起 Lift your finger and place it on the sensor again 抬起您的手指并将其放在传感器上 Position your face inside the frame 将您的脸置于框内 Face enrolled 面部录入 Position a human face please 请放置一个人类面孔 Keep away from the camera 远离相机 Get closer to the camera 靠近相机 Do not position multiple faces inside the frame 不要将多个面孔置于框内 Make sure the camera lens is clean 确保相机镜头是干净的 Do not enroll in dark, bright or backlit environments 不要在暗、亮或背光环境中录入 Keep your face uncovered 确保面部未覆盖 Scan timed out 扫描超时 Cancel 取消 Camera occupied! الكاميرا محتلة! ColorAndIcons Accent Color 强调色 Icon Settings 图标设置 Icon Theme 图标主题 Customize your theme icon تعديل شعار محرّك التتييه Cursor Theme chủ靓丽的光标主题 Customize your theme cursor تعديل أقفال محرّك التتييه ComfirmDeleteDialog Are you sure you want to delete this account? هل أنت متأكد من أنك تريد حذف هذا الحساب؟ Delete account directory حذف مسارات حسابات المستخدمين Cancel إلغاء Delete حذف ComfirmSafePage Go to settings اذهب إلى الإعدادات Cancel إلغاء Common Common général Repeat delay زمن التكرار Short قصيرة Long طويلة Repeat rate سرعة التكرار Slow بطيئة Fast سريعة Numeric Keypad engravier test here اختبار هنا Caps lock prompt تعطيل نقل الحروف إلى أولى Renders Double Click Speed سرعة النقر المزدوج Double Click Test اختبار النقر المزدوج Left Hand Mode وضع اليدين الإ快讯 Enable Keyboard تمكين لوحة المفاتيح General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size حجم كبير Small size حجم صغير Failed to get root access فشل في تقديم الوصول الجذري Please sign in to your Union ID first يرجى تسجيل الدخول أولاً إلى عنوان البريد الإلكتروني الخاص بك Cannot read your PC information لا يمكن قراءة معلومات الكمبيوتر الخاص بك No network connection لا يوجد اتصال بالشبكة Certificate loading failed, unable to get root access فشل تحميل сертификата ، لا يمكن تقديم الوصول الجذري Signature verification failed, unable to get root access failed to verify the signature ، cannot obtain root access Agree and Join User Experience Program تفيق وانضم الى برنامج تجربة المستخدم The Disclaimer of Developer Mode رفض استخدام وضع التطوير Agree and Request Root Access تفيق وطلبات الوصول الجذري Start setting the new boot animation, please wait for a minute بدء وضع التمثيلية الجديدة ، يرجى الانتظار لمدة دقيقة واحدة Setting new boot animation finished تم إعداد التمثيلية الجديدة The settings will be applied after rebooting the system سيتم تطبيق الإعدادات بعد إعادة تشغيل النظام Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters يجب أن يحتوي كلمة المرور على أرقام وحروف Password must be between 8 and 64 characters يجب أن تكون كلمة المرور بين 8 و 64 حرفًا CreateAccountDialog Create a new account إنشاء حساب جديد Account type نوع الحساب UserName اسم المستخدم Required مطلوب FullName الاسم الكامل Optional اختيزي Cancel إلغاء Create account إنشاء حساب Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. لم تقم بتحميل رمز الشخص بالفعل. نقر أو اسحب وتنقش الصورة. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available متاحة DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/隱私-en.html https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/用户体验-en.html Agree and Join User Experience Program 晚间启动器 <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting إعداد التاريخ والساعة Date التاريخ Year السنة Month الشهر Day اليوم Time الوقت Cancel إلغاء Confirm ยืนยัน Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow غدا Yesterday اليوم السابق Today اليوم %1 hours earlier than local %1 ساعة مسبقاً عن المحلي %1 hours later than local %1 ساعة بعد المحلي Space فض Dunn Week الأسبوع First day of week أول يوم في الأسبوع Short date تاريخ قصير Long date تاريخ طويل Short time وقت قصير Long time زمن طويل Currency symbol رمز العملة Positive currency عملة إيجابية Negative currency عملة سلبية Decimal symbol رمز العشري Digit grouping symbol رمز تجميع الأرقام Digit grouping تجميع الأرقام Page size حجم الصفحة Example DatetimeWorker Authentication is required to change NTP server مطلوب المصادقة لتغيير خادم NTP Authentication is required to set the system timezone المصادقة مطلوبة لضبط المنطقة الزمنية للنظام DccColorDialog Cancel إلغاء Save حفظ DccWindow Control Center provides the options for system settings. يوفر مركز التحكم الخيارات لضبط النظام. DeepinIDAccountSecurity Bind WeChat ربط واتساب By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. بربط واتساب، يمكنك تسجيل الدخول بامن وسرعة إلى حسابك %1 وحساباتك المحلية. Unlinked غير مرتبط Unbinding إلغاء الربط Link ربط Are you sure you want to unbind WeChat? هل أنت متأكد من أنك تريد إلغاء ربط واتساب؟ After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. بعد إلغاء ربط واتساب، لن تستطيع استخدام واتساب لمسcan الكود البريدي لتسجيل دخول حسابك %1 أو حساباتك المحلية. Let me think it over دعني أفكر فيه Local Account Binding ربط حساب الحاسوب المحلي After binding your local account, you can use the following functions: بعد ربط حساب الحاسوب المحلي، يمكنك استخدام الوظائف التالية: WeChat Scan Code Login System نظام تسجيل الدخول عن طريق مسcan الكود من واتساب Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. استخدم واتساب، المرتبط بحسابك %1، لمسcan الكود لتسجيل الدخول إلى حساب الحاسوب المحلي الخاص بك. Reset password via %1 ID إعادة تعيين كلمة المرور عبر حساب %1 Reset your local password via %1 ID in case you forget it. إعادة ضبط كلمة المرور المحلية من خلال %1 ID في حالة نسيانها. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. للوصول إلى الميزات السابقة، الرجاء الذهاب إلى مركز التحكم - حسابات وتفعيل الخيارات المقابلة. DeepinIDInterface deepin ديوين UOS يواس DeepinIDLogin Cloud Sync inks الإلكتروني Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. إدارة %1 ID الخاص بك وإنشاء نسخ طبق الأصل لن våائل الخاص بك عبر الأجهزة. تسجيل الدخول إلى %1 ID للوصول إلى الميزات والميزات الشخصية والخدمات في متصفح الويب، متجر التطبيقات، وغيرها. Sign In to %1 ID تسجيل الدخول إلى %1 ID DeepinIDSyncService Auto Sync inks التلقائي Securely store system settings and personal data in the cloud, and keep them in sync across devices احفظ إعدادات النظام والحواوises الشخصية في السحابة eاحة إنهم متطابقين عبر الأجهزة System Settings إعدادات النظام Last sync time: %1 الوقت الأخير للinks: %1 Clear cloud data مسح البيانات السحابية Are you sure you want to clear your system settings and personal data saved in the cloud? هل أنت متأكد من نيةك في مسح إعدادات النظام والحواوises الشخصية المحفوظة في السحابة؟ Once the data is cleared, it cannot be recovered! قد لا تتمكن من استرداد البيانات بعد مس heapqها! Cancel إلغاء Clear مسح DeepinIDUserInfo Synchronization Service خدمة الinks Account and Security الحساب والحماية Sign out تسجيل الخروج Go to web settings ذهاب إلى إعدادات الويب The nickname must be 1~32 characters long DeepinWorker encrypt password failed فشل التشفير كلمة المرور Wrong password, %1 chances left كلمة مرور خاطئة، %1 فرصة بقيت The login error has reached the limit today. You can reset the password and try again. استنفد الخطأ في تسجيل الدخول الحد اليومي. يمكنك إعادة ضبط كلمة المرور ومحاولة مرة أخرى. Operation Successful العمل العملية تمت بنجاح The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China الصين القارية Other regions 其他国家和地区 The feature is not available at present, please activate your system first 当前功能不可用,请先激活您的系统 Subject to your local laws and regulations, it is currently unavailable in your region. 根据当地法律法规,当前在您的地区不可用。 Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' 请选择默认程序打开 '%1 add 添加 Open Desktop file 打开桌面文件 Apps (*.desktop) 应用程序 (*.desktop All files (*) 所有文件 (*) DevelopModePage Root Access 根权限 Request Root Access 申请根权限 After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. 进入开发者模式后,您可以获得根权限,但仍可能损害系统的完整性,请谨慎使用。 Allowed 允许 Enter 进入 Online 在线 Login UOS ID 登录 UOS ID Offline 离线 Import Certificate 导入证书 Select file 选择文件 Your UOS ID has been logged in, click to enter developer mode 您的 UOS ID 已登录,请点击进入开发者模式 Please sign in to your UOS ID first and continue 请先登录您的 UOS ID,然后继续 1.Export PC Info 1.导出 PC 信息 Export 导出 3.Import Certificate 3.导入证书 Development and debugging options خيارات التطوير والإصلاح System logging level مستوى سجل النظام Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. تغيير الخيارات قد يؤدي إلى سجل أكثر تفصيلاً قد يقلل أداء النظام و/أو يستهلك مساحة تخزين أكبر. Off إيقاف تشغيل Debug تجهيزات التصحيح Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. قد يستغرق تطبيق الخيار دقيقة واحدة، بعد استلام تعليمات التعيين بنجاح، يرجى إعادة تشغيل الجهاز لتطبيق التغييرات. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. لتنصيب وتشغيل التطبيقات غير الموقعة، يرجى الانتقال إلى <a style='text-decoration: none;' href='Security Center'> مركز الأمان </a> لتغيير الإعدادات. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer الإفصاح Cancel إلغاء Agree الموافقة Display Display العرض Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: إعطاء التطبيقات التالية م权力访问这些文件和文件夹: Documents ملفات الوثائق Desktop السطح المكتب Pictures صور Videos فيديوهات Music موسيقى Downloads تنزيلات folder مجلد FontSizePage Size حجم Standard Font خط معايير Monospaced Font خط متساوي الأبعاد GeneralPage Power Plans خطط الطاقة Power Saving Settings إعدادات الحفاظ على الطاقة Auto power saving on low battery حفظ الطاقة التلقائي عند البطارية المنخفضة Low battery threshold حد البطارية المنخفضة Auto power saving on battery حفظ الطاقة التلقائي عند البطارية Wakeup Settings إعدادات الاستيقاظ Password is required to wake up the computer يتم مطلوب كلمة المرور لاستيقاظ الكمبيوتر Password is required to wake up the monitor يتم مطلوب كلمة المرور لاستيقاظ الشاشة Shutdown Settings إعدادات الدعم الكام Scheduled Shutdown إغلاق مجدول Time الوقت Repeat تكرار Once مرة واحدة Every day كل يوم Working days أيام العمل Custom Time وقت مخصص Decrease screen brightness on power saver أنصاف قوة شد الألوان GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ، ... InterfaceEffectListview Optimal Performance أداء مثالي Balance قراءة متناسقة Best Visuals أفضل الألوان Disable all interface and window effects for efficient system performance. تعطيل جميع تأثيرات واجهة النظام والنوافذ لتحقيق أداء أكثر كفاءة. Limit some window effects for excellent visuals while maintaining smooth system performance. تقييد بعض تأثيرات النوافذ لتحقيق مظهر متميز مع الحفاظ على أداء سلس للنظام. Enable all interface and window effects for the best visual experience. تمكين جميع تأثيرات واجهة النظام والنوافذ لتحقيق أفضل تجربة بصرية. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language لغة done كامل edit 편집 Other languages لغات أخرى add إضافة Region منطقة Area منطقة Operating system and applications may provide you with local content based on your country and region قد يوفر نظام التشغيل والبرامج المحلية محتوى محلي استنادًا إلى بلدك ومستواه الإقليمي Operating system and applications may set date and time formats based on regional formats قد يتحديد نظام التشغيل والبرامج تشكيلات التاريخ والأوقات استنادًا إلى التشكيلات الإقليمية Regional format LangsChooserDialog Add language إضافة لغة Search بحث Cancel إلغاء Add إضافة LoginMethod Login method طريقة تسجيل الدخول Password, wechat, biometric authentication, security key كلمة المرور، و챗، تحقق مادي، جهاز أمان Password كلمة المرور Modify password تعديل كلمة المرور Validity days عدد أيام الانتهاء Always תמיד Reset password LogoModule Copyright© 2011-%1 Deepin Community �权©2011-%1 深圳市深贝科技有限公司所有 Copyright© 2019-%1 UnionTech Software Technology Co., LTD 版权所有©2019-%1 武汉深淘治科技有限公司 MicrophonePage Automatic Noise Suppression المuffledة التلقائية Input Volume حجم المدخل Input Level 高出量级 Input المدخل No input device for sound found لم يتم العثور على جهاز للمدخلات الصوتية Input Device Mouse Mouse and Touchpad الفأرة ولوح اللمس Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices أجهزةي NativeInfoPage UOS UOS Computer name اسم الحاسوب It cannot start or end with dashes لا يمكن أن يبدأ أو ينتهي بالشطارات OS Name اسم ويدس Version الإصدار Edition إصدار Type النوع bit بيت Authorization التوثيق System installation time وقت تثبيت نظام التشغيل Kernel كernerl Graphics Platform منصة الرسومات Processor معالج Memory ذاكرة 1~63 characters please يرجى 1 إلى 63 حرفًا Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices أجهزة أخرى Show Bluetooth devices without names إظهار أجهزة البلوتوث دون الأسماء PasswordLayout Current password كلمه السر الحالية Required مطلوب Weak ضعيف Medium متوسط Strong つ嘉唬 spoil translation, but keeping within context: قوي Repeat Password تأكيد كلمة المرور Password hint نهاية كلمة المرور Optional اختياري Password cannot be empty لا يمكن أن تكون كلمة المرور فارغة Passwords do not match كلمات المرور غير متطابقة The hint is visible to all users. Do not include the password here. ستكون الإجابة المرئية لجميع المستخدمين. لا تضمن كلمة المرور هنا. New password New password should differ from the current one يجب أن يختلف كلمة المرور الجديدة عن الكلمة المرور الحالية The password cannot be the same as the username. PasswordModifyDialog Modify password تعديل كلمة المرور Reset password استعادة كلمة المرور Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. الطول الطويل والأحرف الكبيرة، والأحرف الصغرى، والمتغيرات، والأحرف البيانية. هذا النوع من كلمات المرور أمن. Resetting the password will clear the data stored in the keyring. 将会清除密钥环中存储的数据。 Cancel إلغاء Personalization Personalization التخصيص PersonalizationInterface Light 脆弱 (翻译错误,但在上下文中): كلاش Auto وتو Dark ساري Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom مخصص PluginArea Plugin Area منطقة الموديل Select which icons appear in the Dock حدد أي أيقونات تظهر في الظهر Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down إغلاق Suspend ��挂 Hibernate مُنَوّتة Turn off the monitor إطفاء حواسب Ekran Show the shutdown Interface إظهار واجهة الخروج Do nothing لا شيء PowerPage Screen and Suspend شاشة وпаUSED Turn off the monitor after إطفاء ekran بعد Lock screen after قفل ekran بعد Computer suspends after حواسب تمط بعدها When the lid is closed عندما يغلق الريموت When the power button is pressed عند الضغط على زر القوة PowerPlansListview High Performance outing، لها ظهور Balance Performance رقي مزن Aggressively adjust CPU operating frequency based on CPU load condition تبديل تشغيل cpu بتقدير شروط cpu بشكل معتدل Balanced تعادل Power Saver presenter Prioritize performance, which will significantly increase power consumption and heat generation تتميز الأداء ستعزز الاستهلاك الكهربائي والتوليد الحراري بشكل كبير Balancing performance and battery life, automatically adjusted according to usage تعادل بين الأداء والحياة البطارية، ومنظم تلقائيًا حسب الاستخدام Prioritize battery life, which the system will sacrifice some performance to reduce power consumption تقدم حياة البطارية، وي 의사 على الأداء لتقليل استهلاك الطاقة PowerWorker Minutes دقيقة Hour ساعة Never لأبد Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy سياسة الخصوصية Copy Link Address نسخ عنوان الرابط PwqualityManager Password cannot be empty كلمة المرور لا يمكن أن تكون فارغة Password must have at least %1 characters كلمة المرور يجب أن تحتوي على الأقل على %1 حروف Password must be no more than %1 characters كلمة المرور يجب أن لا تزيد عن %1 حروف Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) يمكن أن يحتوي كلمة المرور على حروف الإنجليزية (حساسية الحالة)، الأرقام أو الرموز الخاصة (~`!@#$%^&*()-_+=|{}[]:\"'<>?,./+()) No more than %1 palindrome characters please لا تستخدم أكثر من %1 حرف زماني يقرأ بنفس الطريقة للأمام والخلف No more than %1 monotonic characters please لا تستخدم أكثر من %1 حرف متسلسل يقرأ بنفس الطريقة دون تغيير No more than %1 repeating characters please لا تستخدم رمز مكرر أكثر من %1 مرة Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) يجب أن تحتوي كلمة المرور على حروف م,:, حروف صغرى، أرقام ورموز (~`!@#$%^&*()-_+=|{}[]:\"'<>?,./+()) Password must not contain more than 4 palindrome characters لا يجب أن تحتوي كلمة المرور على أكثر من 4 علامات زماني يقرأ بنفس الطريقة للأمام والخلف Do not use common words and combinations as password لا تستخدم كلمات أو مزيجات شائعة ككلمة مرور Create a strong password please يرجى إنشاء كلمة مرور قوية It does not meet password rules لا تستوفِ شروط كلمة المرور QObject Control Center مركز التحكم Activated Emanuel View عرض To be activated ل Serialize Activate ivating Expired منتهي الصلاحية In trial period في فترة اختبار Trial expired انتهت مدة الاختبار dde-control-center dde-control-center Touch Screen Settings إعدادات الشاشة اللمسية The settings of touch screen changed تم تغيير إعدادات الشاشة اللمسية This system wallpaper is locked. Please contact your admin. هذه ورقة خلفية النظام مقفلة. يرجى التواصل مع أمينك. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search بحث Default formats الصيغ الافتراضية First day of week أول يوم من الأسبوع Short date التاريخ القصير Long date التاريخ الطويل Short time الوقت القصير Long time الوقت الطويل Currency symbol رمز العملة Digit أرقام Paper size حجم الورق Cancel إلغاء Save حفظ Regional format RegionsChooserWindow Search بحث RegisterDialog Set a Password إSet u_password 8-64 characters 8-64 رمز Repeat the password كرر пароль Cancel إلغاء Confirm تاكيد Passwords don't match كلمة السر لا تتطابق ScheduledShutdownDialog Customize repetition time تعديل وقت التكرار Cancel إلغاء Save حفظ ScreenSaverPage Screensaver شاشة فاقد الحركة preview عرض المعاينة Personalized screensaver شاشة فاقد الحركة الشخصية setting الفكالة idle time وقت الفراغ 1 minute 1 دقيقة 5 minute 5 دقيقة 10 minute 10 دقائق 15 minute 15 دقيقة 30 minute 30 دقيقة 1 hour ساعة واحدة never أبدا Password required for recovery يرforder كلمة المرور لإعادة الاسترجاع Picture slideshow screensaver سافنر عرض الصور المتحركة System screensaver سافنر الشاشة النظامي SearchableListViewPopup Search بحث No search results لا توجد نتائج بحث ShortcutSettingDialog Add custom shortcut أضف وصلة قصيرة مخصصة Name: الاسم: Required مطلوب Command: أوامرك: Shortcut وصلة قصيرة None لا يوجد Cancel إلغاء Add إضافة The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts وصلات قصيرة System shortcut, custom shortcut وصلة قصيرة نظامية، وصلة قصيرة مخصصة Search shortcuts وصلات البحث done نفّذ edit تعديل Click انقر Cancel إلغاء or أو Replace استبدال Restore default استعادة الافتراضي Add custom shortcut إضافة حرف سريّة قسّم please enter a new shortcut key Sound Sound الصوت Output, input, sound effects, devices SoundDevicemanagesPage Output Devices أجهزة الاسترجاع Select whether to enable the devices حدد ما إذا كنت تريد تفعيل الأجهزة Input Devices أجهزة الدخل SoundEffectsPage Sound Effects أصوات التأثيرات SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up الرّفق Shut down إقفال Log out تسجيل الخروج Wake up استيقاظ Volume +/- صوت +/- Notification إشعار Low battery بطارية منخفضة Send icon in Launcher to Desktop نقل أيقونة المنتج في أمر الأيقونات إلى م rajitah Empty Trash فراغ سلة المهملات Plug in إدخال Plug out انسحاب Removable device connected أجهزة الاستبدال متصلة Removable device removed أجهزة الاستبدال إزالتها Error خطأ SpeakerPage Mode النمط Output Volume حجم الصوت الإخراج Volume Boost تضخيم الصوت If the volume is louder than 100%, it may distort audio and be harmful to output devices إذا كانت الصوت أعلى من 100٪، فقد يفسد الصوت ويضر بالأجهزة المخرجة Left يسار Right يمين Output الصوت No output device for sound found لم يتم العثور على جهاز صوت للإرسال Left Right Balance 균형 Merge left and right channels into a single channel دمج قنوات اليسار واليمين في قناة واحدة Whether the audio will be automatically paused when the current audio device is unplugged إيقاف الصوت تلقائيًا عند سحب جهاز الصوت الحالي Mono Audio Auto Pause Output Device SyncInfoListModel Sound الصوت Power الطاقة Mouse المouse Update تحديث Screensaver محتوى الشاشة الثابتة System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers ورق الجدران الإضافية TimeAndDate Auto sync time استعادة الوقت تلقائيًا Ntp server خادم NTP System date and time التاريخ والوقت النظامي Customize خصائص Settings الإعدادات Server address عنوان الخادم Required مطلوبة The ntp server address cannot be empty lokale اسم خادم ntp لا يمكن أن يكون فارغ Use 24-hour format استخدم لون بالformat 24 system time zone تقاسيم التوقيت المضيف Timezone list قائمة تقاسيم التوقيت Add TimeRange from من to إلى TimeoutDialog Save the display settings? احفظ تعيينات العرض Settings will be reverted in %1s. سوف يلغى تطبيق التغذية بال Maulana %1s. Revert إلغاء Save حفظ TimezoneDialog Add time zone أضف تقزيم توقيت Determine the time zone based on the current location تحديد تقزيم التوقيت بناء على الموقع الحالي Time zone: تقاسيم التوقيت: Nearest City: أقرب مدينة: Cancel إلغاء Save حفظ TouchScreen TouchScreen מסך اللمس Set up here when connecting the touch screen استعد هنا عند اتصال الشاشة اللمسية Touchpad Basic Settings الإعدادات الأساسية Touchpad estates اللمس Pointer Speed سرعة الرمز Slow بطيء Fast سرعى Disable touchpad during input تعطيل لوحة اللمس أثناء الإدخال Tap to Click اضغط لتنشيط Natural Scrolling التنقل الطبيعي Three-finger gestures USPS3 من الإصبع Four-finger gestures USPS4 من الإصبع Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Присоединиться к программе опыта пользователей Copy Link Address نسخ عنوان الرابط VerifyDialog Security Verification Безопасная проверка The action is sensitive, please enter the login password first Действие чувствительное, пожалуйста, введите пароль от учетной записи сначала 8-64 characters 8-64 символа Forgot Password? Забыли пароль? Cancel Отмена Confirm Подтвердить Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper обои My pictures Мои изображения System Wallpaper Офисные обои Solid color wallpaper ورق الجدران موحد اللون Customizable wallpapers ورق الجدران قابل للتخصيص fill style نمط التعبئة Automatic wallpaper change تغيير ورق الجدران تلقائيًا never لا أبدا 30 second 30 ثانية 1 minute دقيقة 5 minute 5 دقائق 10 minute 10 دقائق 15 minute 15 دقيقة 30 minute 30 دقيقة login تسجيل الدخول wake up يقظة Live Wallpaper خلفية حية 1 hour ساعة System Wallpapers WallpaperSelectView unfold فك التوسيل Set lock screen تعيين ekلو ekشين Set desktop تعيين ekدرشة ekشين show all - %1 items Add Picture WindowEffectPage Interface and Effects واجهة وتأثيرات Window Settings إعدادات ekنووين Window rounded corners زوايا مستديرة ekنووين None لا شيء Small صغير Large كبير Enable transparent effects when moving windows تفعيل تأثيرات الشفافية عند إعادة توجيه ekنووين Window Minimize Effect تأثير إخفاء النافذة Scale التكبير Magic Lamp ل expulsion السحرية Opacity الشفافية Low منخفض High عالي Scroll Bars أشرطة التمرير Show on scrolling إظهار أثناء التمرير Keep shown إبقاء الإظهار Compact Display عرض مコンpact If enabled, more content is displayed in the window. إذا تم تفعيله، يتم عرض محتوى إضافي في النافذة. Title Bar Height ارتفاع رأس النافذة Only suitable for application window title bars drawn by the window manager. لا يناسب إلا نوافذ الرؤوس المكتوبة بواسطة مدير النافذة. Extremely small مصغر جداً Medium describe size of window rounded corners متوسط Medium describe height of window title bar متوسط dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) الصينية التقليدية (الهونغ كونغ) Traditional Chinese (Chinese Taiwan) الصينية التقليدية (تايوان) Min Nan Chinese dcc::Locale::regionNames Taiwan China تايوان الصين dccV25::AccountsController Username must be between 3 and 32 characters اسم المستخدم يجب أن يكون بين 3 و 32 حرفًا The first character must be a letter or number الأحرف الأولى يجب أن تكون حرفًا أو رقمًا Your username should not only have numbers اسم المستخدم الخاص بك يجب أن يكون له حروف أيضًا The username has been used by other user accounts اسم المستخدم مستخدم من قبل حسابات مستخدم أخرى The full name is too long اسم المستخدم طويل جدًا The full name has been used by other user accounts اسم المستخدم المستخدم من قبل حسابات مستخدم أخرى Wrong password كلمة المرور غير صحيحة Standard User مستخدم قياسي Administrator مدير Customized مخصص dccV25::AccountsWorker Your host was removed from the domain server successfully تم إزالة مضيفك بنجاح من خادم النطاق Your host joins the domain server successfully انضم حاسوبك بنجاح إلى خادم النطاق Your host failed to leave the domain server فشل حاسوبك في الخروج من خادم النطاق Your host failed to join the domain server فشل حاسوبك في الانضمام إلى خادم النطاق AD domain settings إعدادات النطاق AD Password not match كلمة المرور غير متطابقة dccV25::AvatarTypesModel Dimensional مكاني Flat سطح dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] هذا القصير يتعارض مع [%1] dccV25::PwqualityManager Password cannot be empty لا يمكن أن تكون كلمة المرور فارغة Password must have at least %1 characters يجب أن تحتوي كلمة المرور على الأقل على %1 حرف Password must be no more than %1 characters يجب أن لا تكون كلمة المرور أكثر من %1 حرف Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) يجب أن تحتوي كلمة المرور على حروف الإنجليزية (حساسة للحالة)، الأرقام أو الرموز الخاصة (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please الرجاء عدم استخدام أكثر من %1 حرف متكرر No more than %1 monotonic characters please الرجاء عدم استخدام أكثر من %1 حرف متسلسل No more than %1 repeating characters please الرجاء عدم استخدام أكثر من %1 حرف مكرر Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) يجب أن تحتوي كلمة المرور على حروف كبيرة وصغيرة ورقميات ورموز (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters لا يجب أن تحتوي كلمة المرور على أكثر من 4 حروف متكررة Do not use common words and combinations as password لا تستخدم كلمات شائعة أو تجميعات ككلمة المرور Create a strong password please الرجاء إنشاء كلمة مرور قوية It does not meet password rules لا يتوافق مع قواعد كلمة المرور At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System النظام Window النافذة Workspace منطقة العمل AssistiveTools أدوات المساعدة Custom مخصص None لا شيء ================================================ FILE: translations/dde-control-center_ar_EG.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel أغلق Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel أغلق Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel أغلق Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel أغلق Save إحفظ BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel أغلق Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel أغلق Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel أغلق Delete ComfirmSafePage Go to settings Cancel أغلق Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel أغلق Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel أغلق Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel أغلق Save إحفظ DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel أغلق Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel أغلق Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel أغلق Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel أغلق Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel أغلق Save إحفظ Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel أغلق Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel أغلق Save إحفظ ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel أغلق Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save إحفظ click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel أغلق or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save إحفظ TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel أغلق Save إحفظ TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel أغلق Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_ast.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Coneutáu Not connected Nun se coneutó BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Encaboxar Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Pantalla Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Volume d'entrada Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Mur y touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personalización PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Personalizáu PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Centru de control Activated View Ver To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Soníu Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Efeutos de soníu SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Apagar Log out Zarrar sesión Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Balerar papelera Plug in Plug out Removable device connected Removable device removed Error Fallu SpeakerPage Mode Mou Output Volume Volume de salida Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Izquierda Right Drecha Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Desfacer Save Guardar TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_az.ts ================================================ AccountSettings edit تعديل Add new user إضافة مستخدم جديد Set fullname تحديد الاسم الكامل Login settings إعدادات الدخول Login without password الدخول بدون كلمة مرور Delete current account حذف الحساب الحالي Group setting إعداد المجموعة Account groups مجموعات الحسابات done تم Group name اسم المجموعة Add group إضافة مجموعة Auto login تسجيل الدخول التلقائي Account Information معلومات الحساب Account name, account fullname, account type اسم الحساب، الاسم الكامل للحساب، نوع الحساب Account name اسم الحساب Account fullname اسم الحساب الكامل Account type نوع الحساب The full name is too long Adınız uzun olamaz Group names should be no more than 32 characters Grup adları 32 karakterden uzun olamaz Group names cannot only have numbers Grup adları yalnızca rakamlardan oluşabilir Use letters,numbers,underscores and dashes only, and must start with a letter Harfler, rakamlar, alt çizgi ve tire karakterlerini sadece kullanın ve isimler harfle başlamalıdır The group name has been used Grup adı zaten kullanılmış quick login, Auto login, login without password hızlı giriş, otomatik giriş, şifresiz giriş Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face تسجيل الوجه I have read and agree to the أقر وأوافق على Disclaimer الشروط والأحكام Next التالي Face enrolled تم تسجيل الوجه Failed to enroll your face Yüzünüzü kaydettirmek başarısız oldu Done Tamamlandı Cancel İptal et Retry Enroll Kaydı Tekrar Deneyin Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel İmtina Done Tamamlandı Enroll Finger Parmağını Kaydet Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Kaydederken parmağınızı parmak izi sensörüne koyun ve alttan üste doğru hareket ettirin. Eylemi tamamladıktan sonra parmağınızı kaldırın. I have read and agree to the Okudum ve aşağıdaki ifadeye katılırım Disclaimer Bildirim Next İleri Retry Enroll Kaydı Tekrar Deneyin "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. "Biometrik kimlik doğrulama" fonksiyonu, kullanıcı kimlik doğrulama için UnionTech Yazılım Teknoloji A.Ş. tarafından sağlanmaktadır. "Biometrik kimlik doğrulama" yoluyla toplanan biyometrik veriler, cihazda saklanan verilerle karşılaştırılır ve karşılaştırma sonucuna göre kullanıcı kimliği doğrulanır. UnionTech Yazılım Teknoloji A.Ş., yerel cihazda saklanan biyometrik bilgileri toplamayacak ve erişmeyecektir. Lütfen sadece kendi kişisel cihazınızda biyometrik kimlik doğrulamayı etkinleştirin ve bu işlemle ilgili işlemler için kendi biyometrik bilgilerinizi kullanın. Bu cihazda başkalarının biyometrik bilgilerini hızlıca devre dışı bırakın veya silin, aksi halde bu riskten sorumlu olursunuz. UnionTech Yazılım Teknoloji A.Ş., biyometrik kimlik doğrulamanın güvenliğini, doğruluğunu ve kararlılığını araştırmaya ve geliştirmeye devam etmektedir. Ancak, çevre, cihaz, teknik ve diğer faktörler nedeniyle risk kontrolü kapsamında, geçici olarak biyometrik kimlik doğrulamadan geçmeniz garanti edilmemektedir. Bu yüzden, biyometrik kimlik doğrulamayı UOS girişi için tek tek yolu olarak almayın. Biyometrik kimlik doğrulama kullanırken herhangi bir sorunuz veya öneriniz varsa, UOS'daki "Hizmet ve Destek" bölümünden geri bildirim verin. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first "Otomatik Giriş" yalnızca bir hesap için etkinleştirilebilir, lütfen önce "%1" hesabı için devre dışı bırakın Ok Tamam AvatarSettingsDialog Images Görseller Human İnsan Animal Hayvan Scenery البيئة Illustration Sembol Emoji Emoji custom özel Cartoon style النمط الكاريكاتيري Dimensional style Boyutlu tarz Flat style المظهر البسيط Cancel إلغاء Save حفظ BatteryPage Screen and Suspend شاشة ونوم Turn off the monitor after إطفاء الشاشة بعد Lock screen after إغلاق الشاشة بعد Computer suspends after الكمبيوتر ينام بعد When the lid is closed عند إغلاق غطاء اللمس When the power button is pressed عند الضغط على زر الطاقة Low Battery بطارية منخفضة Low battery notification إشعار البطارية المنخفضة Auto suspend نوم تلقائي Auto Hibernate Hibernate تلقائي Low battery threshold حد البطارية المنخفضة Battery Management إدارة البطارية Display remaining using and charging time عرض الوقت المتبقى للإستخدام والشحن Maximum capacity ������������ Low battery level مستوى البطارية المنخفض Disable تعطيل BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" تم إطفاء البلوتوث، والاسم يظهر كـ "%1" Bluetooth is turned on, and the name is displayed as "%1" تم تشغيل البلوتوث، والاسم يظهر كـ "%1" BlueToothDeviceListView Disconnect فصل Connect اتصال Send Files إرسال ملفات Rename إعادة назвان Remove Device حذف جهاز Select file اختر ملف BluetoothCtl Edit تحرير Allow other Bluetooth devices to find this device إذا كنت ترغب في استخدام وظيفة البلوتوث ، يرجى إغلاق وضع الطائرة To use the Bluetooth function, please turn off إذا كنت ترغب في استخدام وظيفة البلوتوث ، يرجى إغلاق وضع الطائرة Airplane Mode وضع الطائرة Bluetooth name cannot exceed 64 characters Bluetooth ismi 64 karakterden uzun olamaz BluetoothDeviceModel Connected متصل Not connected غير متصل BootPage Startup Settings إعدادات البدء You can click the menu to change the default startup items, or drag the image to the window to change the background image. يمكنك النقر على القائمة لتغيير العناصر الافتراضية للبدء ، أو سحب الصورة إلى النافذة لتغيير صورة الخلفية grub start delay تأخير grub البدء theme التصميم After turning on the theme, you can see the theme background when you turn on the computer بعد تشغيل التصميم ، يمكنك رؤية خلفية التصميم عند تشغيل الكمبيوتر Boot menu verification تحقق قائمة البدء After opening, entering the menu editing requires a password. بعد فتحه، يتطلب الدخول إلى تحرير القائمة كلمة مرور. Change Password 更改密码 Change boot menu verification password تغيير كلمة مرور تحقق قائمة البدء Set the boot menu authentication password 设置启动菜单认证密码 User Name : 用户名 : root root New Password : 新密码 : Required مطلوب Password cannot be empty لا يمكن أن تكون كلمة المرور فارغة Passwords do not match كلمتي المرور لا تتطابقان Repeat password: 重复密码: Cancel إلغاء Sure بالتأكيد Start animation بدء الرسوم المتحركة Adjust the size of the logo animation on the system startup interface 凋整系统启动界面logo动画的大小 Camera Allow below apps to access your camera: 允许以下应用程序访问您的摄像头: CharaMangerModel Fingerprint1 指纹1 Fingerprint2 指纹2 Fingerprint3 指纹3 Fingerprint4 指纹4 Fingerprint5 指纹5 Fingerprint6 指纹6 Fingerprint7 指纹7 Fingerprint8 指纹8 Fingerprint9 指纹9 Fingerprint10 指纹10 Scan failed 扫描失败 The fingerprint already exists 指纹已存在 Please scan other fingers 请扫描其他手指 Unknown error 未知错误 Scan suspended 扫描暂停 Cannot recognize 无法识别 Moved too fast 移动过快 Finger moved too fast, please do not lift until prompted العندم حركت أظافرك بسرعة، يرجى عدم رفعها حتى يتم استدعاؤك Unclear fingerprint بصمة غير واضحة Clean your finger or adjust the finger position, and try again نظف أظافرك أو قم بتعديل موقعها ثم حاول مرة أخرى Already scanned تم� التصوير بالفعل Adjust the finger position to scan your fingerprint fully قم بتعديل موقع أظافرك لتصوير بصمتك بالكامل Finger moved too fast. Please do not lift until prompted العندم حركت أظافرك بسرعة، يرجى عدم رفعها حتى يتم استدعاؤك Lift your finger and place it on the sensor again قم برفع أظافرك ووضعها على المستشعر مرة أخرى Position your face inside the frame قم بتوجيه وجهك داخل الإطار Face enrolled تم تسجيل وجهك Position a human face please من فضلك قم بتوجيه وجه إنسان Keep away from the camera ابعث عن الكاميرا Get closer to the camera اقرب وجهك من الكاميرا Do not position multiple faces inside the frame لا تقم بتوجيه أكثر من وجه داخل الإطار Make sure the camera lens is clean تأكد من نظافة عدسة الكاميرا Do not enroll in dark, bright or backlit environments لا تقم بالتسجيل في ظروف مظلمة أو مضيئة أو ذات إضاءة خلفية Keep your face uncovered تأكد من عدم تغطية وجهك Scan timed out انتهت فترة التصوير Cancel إلغاء Camera occupied! Kamera meşgul! ColorAndIcons Accent Color اللون الفائق Icon Settings إعدادات الرموز Icon Theme موضوع الرموز Customize your theme icon قم بخصيص رمز موضوعك Cursor Theme موضوع الماوس Customize your theme cursor قم بخصيص ماوس موضوعك ComfirmDeleteDialog Are you sure you want to delete this account? هل أنت متأكد من أنك تريد حذف هذا الحساب؟ Delete account directory حذف دليل الحساب Cancel إلغاء Delete حذف ComfirmSafePage Go to settings اذهب إلى الإعدادات Cancel إلغاء Common Common مُستخدَم بشكل عام Repeat delay زمن التكرار Short قصير Long طويل Repeat rate سرعة التكرار Slow بطيء Fast عَجل Numeric Keypad لوحة الأرقام test here قم بتجربة هنا Caps lock prompt تنبيه لوحة الأحرف الكبيرة Double Click Speed سرعة النقر مرتين Double Click Test اختبار النقر مرتين Left Hand Mode وضع اليد اليسرى Enable Keyboard Klavyeyi Etkinleştir General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size حجم كبير Small size حجم صغير Failed to get root access فشل في الحصول على الوصول root Please sign in to your Union ID first يرجى تسجيل الدخول أولاً باستخدام اسم مستخدم التحالف Cannot read your PC information لا يمكن قراءة معلومات جهاز الكمبيوتر الخاص بك No network connection لا يوجد اتصال بالشبكة Certificate loading failed, unable to get root access فشل في تحميل الشهادة، لا يمكن الحصول على الوصول root Signature verification failed, unable to get root access فشل في تحقق التوقيع، لا يمكن الحصول على الوصول root Agree and Join User Experience Program соглашайтесь и присоединяйтесь к Программе опыта пользователя The Disclaimer of Developer Mode الإ DECLARATION режим разработчика Agree and Request Root Access соглашайтесь и запрашиваете доступ root Start setting the new boot animation, please wait for a minute ابدأ في تعيين الرسالة عند التشغيل الجديدة، يرجى الانتظار دقيقة واحدة Setting new boot animation finished تم تعيين الرسالة عند التشغيل الجديدة The settings will be applied after rebooting the system ستتم تطبيق الإعدادات بعد إعادة تشغيل النظام Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters كلمة المرور يجب أن تحتوي على أرقام وحروف Password must be between 8 and 64 characters كلمة المرور يجب أن تكون بين 8 و 64 حرف CreateAccountDialog Create a new account إنشاء حساب جديد Account type نوع الحساب UserName اسم المستخدم Required مطلوب FullName اسم الكامل Optional اختياري Cancel إلغاء Create account إنشاء الحساب Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. لم تقم بعد بتحميل صورة الشعار. انقر أو سحب واسقط لتحميل الصورة. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available متاح DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time وقت طويل Currency symbol رمز العملة Positive currency عملة موجبة Negative currency عملة سالبة Decimal symbol رمز العقد Digit grouping symbol رمز تجميع الأرقام Digit grouping تجميع الأرقام Page size حجم الصفحة Example DatetimeWorker Authentication is required to change NTP server يحتاج التحقق للانتقال إلى خادم NTP Authentication is required to set the system timezone Sistem ssat qurşağının təyin olunması üçün doğrulama tələb olunur DccColorDialog Cancel إلغاء Save حفظ DccWindow Control Center provides the options for system settings. يقدم مركز التحكم الخيارات لضبط النظام DeepinIDAccountSecurity Bind WeChat ربط واتساب By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. بواسطة ربط واتساب، يمكنك تسجيل الدخول بامن وسرعة إلى حسابك %1 وحساباتك المحلية. Unlinked غير مرتبط Unbinding إلغاء الربط Link ربط Are you sure you want to unbind WeChat? هل أنت متأكد من رغبتك في إلغاء ربط واتساب؟ After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. بعد فك تying WeChat، لن يمكنك استخدام WeChat لتقديم الرمز الضوئي لتسجيل الدخول إلى %1 ID أو الحساب المحلي. Let me think it over دعني أفكر فيه Local Account Binding ربط حساب محلي After binding your local account, you can use the following functions: بعد ربط حسابك المحلي، يمكنك استخدام الوظائف التالية: WeChat Scan Code Login System نظام تسجيل الدخول عن طريق معرف الكود من واتساب Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. استخدم واتساب المرتبط بحسابك %1 لمسح كود تسجيل الدخول إلى حسابك المحلي. Reset password via %1 ID إعادة تعيين كلمة المرور بواسطة %1 Reset your local password via %1 ID in case you forget it. إعادة تعيين كلمة المرور المحلية بواسطة %1 في حالة نسيانك لها. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. لإستخدام الميزات السابقة ، يرجى الذهاب إلى مركز التحكم - حسابات وتفعيل الخيارات المقابلة. DeepinIDInterface deepin ديبين UOS UOS DeepinIDLogin Cloud Sync تنزيل السحابة Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. إدارة %1 ID وتنزيل بياناتك الشخصية على الأجهزة المختلفة. تسجيل الدخول إلى %1 ID للاستفادة من ميزات وخدمات مخصصة لمتصفح ومتجر التطبيقات وغيرها. Sign In to %1 ID تسجيل الدخول إلى %1 ID DeepinIDSyncService Auto Sync تنزيل تلقائي Securely store system settings and personal data in the cloud, and keep them in sync across devices احفظ الإعدادات النظامية والبيانات الشخصية في السحابة بطريقة آمنة وحافظ على تزامنها على الأجهزة المختلفة System Settings إعدادات النظام Last sync time: %1 آخر وقت تزامن: %1 Clear cloud data مسح بيانات السحابة Are you sure you want to clear your system settings and personal data saved in the cloud? هل أنت متأكد من أنك تريد مسح إعدادات نظامك وبياناتك الشخصية المسجلة في السحابة؟ Once the data is cleared, it cannot be recovered! ستكون البيانات غير قابلة للإعادة إذا تم المسح! Cancel إلغاء Clear مسح DeepinIDUserInfo Synchronization Service خدمة التزامن Account and Security الحساب والأمان Sign out تسجيل الخروج Go to web settings اذهب إلى إعدادات الويب The nickname must be 1~32 characters long DeepinWorker encrypt password failed فشل تشفير كلمة المرور Wrong password, %1 chances left كلمة المرور нاقصة، %1 المحاولة الباقي The login error has reached the limit today. You can reset the password and try again. أخطاء تسجيل الدخول قد وصلت إلى الحد اليومي. يمكنك اعادة تعيين كلمة المرور وتجربة مرة أخرى. Operation Successful عملية ناجحة The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China الصين القارية Other regions 其他国家/地区 The feature is not available at present, please activate your system first 当前该功能不可用,请先激活您的系统 Subject to your local laws and regulations, it is currently unavailable in your region. 根据您所在地区的法律法规,目前在您所在的地区不可用。 Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' 请选择默认程序以打开 '%1' add 添加 Open Desktop file 打开桌面文件 Apps (*.desktop) 应用程序 (*.desktop), All files (*) 所有文件 (*), DevelopModePage Root Access root访问 Request Root Access 请求root访问 After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. 进入开发者模式后,您可以获得root权限,但这可能会损害系统完整性,请谨慎使用。 Allowed 允许 Enter 进入 Online 在线 Login UOS ID 登录UOS ID Offline 离线 Import Certificate 导入证书 Select file 选择文件 Your UOS ID has been logged in, click to enter developer mode 您的UOS ID已登录,请点击进入开发者模式 Please sign in to your UOS ID first and continue 请先登录您的UOS ID并继续 1.Export PC Info 1.导出PC信息 Export 导出 3.Import Certificate 3.إدخال شهادة Development and debugging options 开发和调试选项 System logging level مستوى سجل النظام Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. تغيير الخيارات يؤدي إلى سجل أكثر تفصيلاً قد يقلل أداء النظام و/أو يستهلك مساحة تخزين أكبر Off إيقاف Debug تشخيص Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. قد يستغرق تغيير الخيار دقيقة واحدة للمعالجة، بعد استلام إشعار التعيين الناجح يرجى إعادة تشغيل الجهاز لتوليد النتيجة To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: إذا سمحت للتطبيقات التالية بالوصول إلى هذه الملفات والدossiers: Documents الملفات الشخصية Desktop السطح المعرفي Pictures الصور Videos الفيديوهات Music الموسيقى Downloads التنزيلات folder ال dossier FontSizePage Size حجم Standard Font خط معياري Monospaced Font خط متساوي الأبعاد GeneralPage Power Plans مخططات الطاقة Power Saving Settings إعدادات توفير الطاقة Auto power saving on low battery توفير الطاقة التلقائي عند البطارية المنخفضة Low battery threshold حد البطارية المنخفضة Auto power saving on battery توفير الطاقة التلقائي عند البطارية Wakeup Settings إعدادات الاستيقاظ Password is required to wake up the computer يتم إلزام كلمة المرور لاستيقاظ الكمبيوتر Password is required to wake up the monitor يتم إلزام كلمة المرور لاستيقاظ الشاشة Shutdown Settings إعدادات الإغلاق Scheduled Shutdown إغلاق مخطط له Time الوقت Repeat الإعادة Once مرة واحدة Every day كل يوم Working days أيام العمل Custom Time وقت مخصص Decrease screen brightness on power saver خفض إضاءة الشاشة في وضع توفير الطاقة GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ، ... InterfaceEffectListview Optimal Performance أداء оптимальное Balance 균형 Best Visuals أفضل الرؤية Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Təsərrüfatı tənzimləyərək yaxşı vizual effekt yaratmaq və səmərəli sistem performansını saxlamaq üçün bir neçə təsərrüfatı məhdudlaşdırın. Enable all interface and window effects for the best visual experience. Ən yaxşı vizual təcrübə üçün bütün arayüz və təsərrüfatları aktiv edin. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language لغة done تم edit تحرير Other languages لغات أخرى add إضافة Region منطقة Area منطقة Operating system and applications may provide you with local content based on your country and region قد يوفر نظام التشغيل والتطبيقات محتوى محلي بناءً على بلدك ومنطقتك Operating system and applications may set date and time formats based on regional formats قد يحدد نظام التشغيل والتطبيقات تنسيقات التاريخ والوقت بناءً على تنسيقات المنطقة Regional format LangsChooserDialog Add language إضافة لغة Search بحث Cancel إلغاء Add إضافة LoginMethod Login method طريقة تسجيل الدخول Password, wechat, biometric authentication, security key كلمة المرور، واتساب، التحقق من بصمة اليد، مفتاح الأمان Password كلمة المرور Modify password تعديل كلمة المرور Validity days عدد أيام ال صالحية Always دائماً Reset password LogoModule Copyright© 2011-%1 Deepin Community حقوق الطبع والنشر © 2011-%1 مجتمع ديبين Copyright© 2019-%1 UnionTech Software Technology Co., LTD حقوق الطبع والنشر © 2019-%1 شركة يونيونเทค للبرمجيات MicrophonePage Automatic Noise Suppression تمكين إزالة الضوضاء التلقائية Input Volume حجم المدخلات Input Level مستوى المدخلات Input المدخلات No input device for sound found لم يتم العثور على جهاز مدخل للصوت Input Device Giriş cihazı Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices أجهزةي NativeInfoPage UOS UOS Computer name اسم الكمبيوتر It cannot start or end with dashes لا يمكن أن يبدأ أو ينتهي بفواصل OS Name اسم نظام التشغيل Version الإصدار Edition الطبعة Type نوع bit ビット Authorization الترخيص System installation time وقت تثبيت النظام Kernel كرنل Graphics Platform منصة الرسومات Processor معالج Memory ذاكرة 1~63 characters please Lütfən 1-63 simvoldan ibarət olun Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices أجهزة أخرى Show Bluetooth devices without names عرض أجهزة البلوتوث دون الأسماء PasswordLayout Current password كلمة المرور الحالية Required مطلوب Weak ضعيف Medium متوسط Strong قوي Repeat Password تكرار كلمة المرور Password hint ملاحظة كلمة المرور Optional اختياري Password cannot be empty لا يمكن أن تكون كلمة المرور فارغة Passwords do not match كلمات المرور غير متطابقة The hint is visible to all users. Do not include the password here. تظهر الملاحظة لجميع المستخدمين. لا تضمن كلمة المرور هنا. New password New password should differ from the current one يجب أن تختلف كلمة المرور الجديدة عن الكلمة المرور الحالية The password cannot be the same as the username. PasswordModifyDialog Modify password تعديل كلمة المرور Reset password إعادة تعيين كلمة المرور Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. يجب أن يكون طول كلمة المرور على الأقل 8 أحرف، ويجب أن تحتوي على مزيج من الأحرف الكبيرة والصغيرة والأرقام والرموز. هذا النوع من كلمات المرور أكثر أمانًا. Resetting the password will clear the data stored in the keyring. إعادة تعيين كلمة المرور ستقوم بحذف البيانات المخزنة في حافظة المفاتيح. Cancel إلغاء Personalization Personalization PersonalizationInterface Light ضوء Auto אוטומטי Dark ظلام Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom مخصص PluginArea Plugin Area منطقة الظفر Select which icons appear in the Dock اختر أيقونات تظهر في الشريط Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down إغلاق Suspend ��眠 Hibernate النوم Turn off the monitor إطفاء الشاشة Show the shutdown Interface عرض واجهة إيقاف التشغيل Do nothing لا شيء PowerPage Screen and Suspend شاشة وتعليق Turn off the monitor after إطفاء الشاشة بعد Lock screen after إغلاق الشاشة بعد Computer suspends after تعليق الحاسوب بعد When the lid is closed عند إغلاق الغطاء When the power button is pressed عند الضغط على زر الطاقة PowerPlansListview High Performance أداء عالي Balance Performance أداء متوازن Aggressively adjust CPU operating frequency based on CPU load condition 凋整CPU运行频率以适应CPU负载条件 Balanced متوازن Power Saver موفّق للطاقة Prioritize performance, which will significantly increase power consumption and heat generation تفضيل الأداء، مما سيزيد بشكل كبير استهلاك الطاقة وتدفقات الحرارة Balancing performance and battery life, automatically adjusted according to usage توفير التوازن بين الأداء والحياة البطارية، مع تعديل تلقائي وفقًا للاستخدام Prioritize battery life, which the system will sacrifice some performance to reduce power consumption تفضيل عمر البطارية، مما سيؤدي النظام إلى تضحية بعض الأداء لتقليل استهلاك الطاقة PowerWorker Minutes دقائق Hour ساعة Never أبداً Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy سياسة الخصوصية Copy Link Address Link ünvanını kopyalayın PwqualityManager Password cannot be empty لا يمكن إدخال كلمة مرور فارغة Password must have at least %1 characters يجب أن يحتوي كلمة المرور على الأقل %1 حرف Password must be no more than %1 characters يجب أن لا يزيد طول كلمة المرور عن %1 حرف Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) يمكن أن يحتوي كلمة المرور على حروف إنجليزية ( حساسية الحرف كبيرة)، أرقام أو رموز خاصة (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please الرجاء عدم استخدام أكثر من %1 حرف متوازي No more than %1 monotonic characters please الرجاء عدم استخدام أكثر من %1 حرف متتابع No more than %1 repeating characters please الرجاء عدم استخدام أكثر من %1 حرف متكرر Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) يجب أن تحتوي كلمة المرور على حروف كبيرة، حروف صغيرة، أرقام ورموز (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) Password must not contain more than 4 palindrome characters لا يجب أن تحتوي كلمة المرور على أكثر من 4 حروف متوازية Do not use common words and combinations as password لا تستخدم كلمات أو مجموعات شائعة ككلمة المرور Create a strong password please الرجاء إنشاء كلمة مرور قوية It does not meet password rules لا تتوافق مع قواعد كلمة المرور QObject Control Center مركز التحكم Activated مفعل View عرض To be activated سوف يتم تفعيله Activate تفعيل Expired مرت الأجل In trial period في فترة تجريبية Trial expired انتهت فترة التجربة dde-control-center dde-control-center Touch Screen Settings إعدادات الشاشة اللمسية The settings of touch screen changed تم تغيير إعدادات الشاشة اللمسية This system wallpaper is locked. Please contact your admin. هذا ورقة خلفية نظام مخزن. يرجى الاتصال بمسؤول النظام. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search بحث Default formats تنسيق الافتراضي First day of week أول يوم في الأسبوع Short date التاريخ القصير Long date التاريخ الطويل Short time الوقت القصير Long time الوقت الطويل Currency symbol رمز العملة Digit رقم Paper size حجم الورق Cancel إلغاء Save حفظ Regional format RegionsChooserWindow Search بحث RegisterDialog Set a Password قم بتعيين كلمة مرور 8-64 characters 8-64 حرف Repeat the password قم بتكرار كلمة المرور Cancel إلغاء Confirm تأكيد Passwords don't match كلمات المرور لا تتطابق ScheduledShutdownDialog Customize repetition time Təkrar vaxtını tənzimləyin Cancel Ləğv et Save Yadda saxla ScreenSaverPage Screensaver شاشة حماية preview 睥览 Personalized screensaver شاشة حماية شخصية setting الإعداد idle time وقت الاستراحة 1 minute دقيقة واحدة 5 minute خمس دقائق 10 minute عشر دقائق 15 minute fifteen minutes 30 minute ثلاثين دقيقة 1 hour ساعة واحدة never никогда Password required for recovery يرتبط مطلوب كلمة المرور للتعافي Picture slideshow screensaver شاشة حماية عرض الصور المتحركة System screensaver شاشة حماية النظام SearchableListViewPopup Search بحث No search results Axtarış nəticəsi yoxdur ShortcutSettingDialog Add custom shortcut إضافة اختصار مخصص Name: الاسم: Required مطلوب Command: 명령: Shortcut اختصار None لا شيء Cancel إلغاء Add إضافة The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts اختصارات System shortcut, custom shortcut اختصارات النظام، اختصارات شخصية Search shortcuts بحث عن الاختصارات done انجز edit تحرير Click انقر Cancel إلغاء or أو Replace استبدل Restore default اعاده الاعدادات الافتراضية Add custom shortcut إضافة اختصارات شخصية please enter a new shortcut key Sound Sound Səs Output, input, sound effects, devices SoundDevicemanagesPage Output Devices أجهزة الإخراج Select whether to enable the devices حدد ما إذا كنت تريد تفعيل هذه الأجهزة Input Devices أجهزة الإدخال SoundEffectsPage Sound Effects أصوات مخصصة SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up التشغيل Shut down إغلاق Log out تسجيل الخروج Wake up استعادة العمل Volume +/- الصوت +/- Notification إشعارات Low battery بطارية منخفضة Send icon in Launcher to Desktop إرسال رمز التطبيق من пуск на рабочий стол Empty Trash 清除废纸篓 Plug in إدخال Plug out إخراج Removable device connected جهاز مستتر متصل Removable device removed جهاز مستتر تم إخراجه Error خطأ SpeakerPage Mode الوضع Output Volume مستوى الصوت Volume Boost زيادة الصوت If the volume is louder than 100%, it may distort audio and be harmful to output devices إذا كان الصوت أعلى من 100٪، فقد يسبب تشويه الصوت وقد يكون ضارًا لجهاز الإخراج Left اليسار Right اليمين Output الإخراج No output device for sound found لم يتم العثور على جهاز إخراج للصوت Left Right Balance تعادل اليسار واليمين Merge left and right channels into a single channel دمج قنوات اليسار واليمين في قناة واحدة Whether the audio will be automatically paused when the current audio device is unplugged هل سيتم تثبيت توقف الصوت التلقائي عند سحب جهاز الصوت الحالي؟ Mono Audio Auto Pause Output Device Çıxış cihazı SyncInfoListModel Sound الصوت Power الطاقة Mouse المouse Update تحديث Screensaver شاشة الحماية System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers 查看更多壁纸 TimeAndDate Auto sync time تثبيت تزامن الوقت التلقائي Ntp server خادم NTP System date and time التاريخ والوقت النظامي Customize خصيص Settings إعدادات Server address عنوان الخادم Required مطلوب The ntp server address cannot be empty عنوان الخادم ntp لا يمكن أن يكون فارغًا Use 24-hour format استخدم تنسيق 24 ساعة system time zone منطقة час النظام Timezone list قائمة المناطق الزمنية Add TimeRange from من to إلى TimeoutDialog Save the display settings? حفظ إعدادات الشاشة؟ Settings will be reverted in %1s. سيتم استعادة الإعدادات في %1 ثانية. Revert استعادة Save حفظ TimezoneDialog Add time zone إضافة منطقة زمنية Determine the time zone based on the current location تحديد المنطقة الزمنية بناءً على الموقع الحالي Time zone: منطقة زمنية: Nearest City: أقرب مدينة: Cancel إلغاء Save حفظ TouchScreen TouchScreen شاشة اللمس Set up here when connecting the touch screen قم بتوصيل الشاشة اللمسية هنا عند الاتصال Touchpad Basic Settings إعدادات أساسية Touchpad شريط اللمس Pointer Speed سرعة المؤشر Slow بطيء Fast سريع Disable touchpad during input تعطيل لوحة اللمس أثناء الكتابة Tap to Click النقر للنقر Natural Scrolling تنقل طبيعي Three-finger gestures حركات الأصابع الثلاثة Four-finger gestures حركات الأصابع الأربعة Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program انضم إلى برنامج تجربة المستخدم Copy Link Address Link ünvanını kopyalayın VerifyDialog Security Verification التحقق الأمني The action is sensitive, please enter the login password first العملية حساسة، يرجى إدخال كلمة المرور أولاً 8-64 characters 8-64 حرف Forgot Password? نسيت كلمة المرور؟ Cancel إلغاء Confirm تأكيد Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper خلفية الشاشة My pictures صورتي System Wallpaper خلفية النظام Solid color wallpaper خلفية اللون الواحد Customizable wallpapers خلفيات قابلة للتعديل fill style نمط التعبئة Automatic wallpaper change تغيير خلفية تلقائي never أبداً 30 second 30 ثانية 1 minute 1 دقيقة 5 minute 5 دقائق 10 minute 10 دقائق 15 minute 15 دقيقة 30 minute 30 دقيقة login تسجيل الدخول wake up وقوع Live Wallpaper خلفية حية 1 hour ساعة واحدة System Wallpapers WallpaperSelectView unfold فك التموج Set lock screen إعداد ekالصفحة الرئيسية Set desktop إعداد سطح المكتب show all - %1 items Add Picture WindowEffectPage Interface and Effects واجهة وتأثيرات Window Settings إعدادات النافذة Window rounded corners زوايا نافذة منحنية None لا شيء Small صغير Large كبير Enable transparent effects when moving windows تفعيل التأثيرات الشفافة عند تحرير النوافذ Window Minimize Effect تأثير الحدث عند تقليل النافذة Scale قياس Magic Lamp لُبَاس السحر Opacity الشفافية Low منخفض High عالي Scroll Bars أشرطة التمرير Show on scrolling покажите при прокрутке Keep shown احتفظ بالظهور Compact Display عرض مコンパクト If enabled, more content is displayed in the window. إذا تم تفعيله، يتم عرض المزيد من المحتوى في النافذة. Title Bar Height ارتفاع بار العنوان Only suitable for application window title bars drawn by the window manager. مُناسب فقط للنُوافذ الخاصة بتطبيقات تُرسم عنوانها مُحرِّر النُوافذ. Extremely small مُشِغر جدا Medium describe size of window rounded corners Orta Medium describe height of window title bar Orta dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) İstinadın İslam Cibiri (İslam Cibiri) Traditional Chinese (Chinese Taiwan) İstinadın İslam Cibiri (İslam Cibiri) Min Nan Chinese dcc::Locale::regionNames Taiwan China İslam Cibiri dccV25::AccountsController Username must be between 3 and 32 characters اسم المستخدم يجب أن يكون بين 3 و32 حرفًا The first character must be a letter or number يجب أن يكون الحرف الأول حرفًا أو رقمًا Your username should not only have numbers اسم المستخدم不应包含仅数字 The username has been used by other user accounts اسم المستخدم مستخدم من قبل حسابات مستخدم أخرى The full name is too long اسم المستخدم الكاملtoo long The full name has been used by other user accounts اسم المستخدم الكامل مستخدم من قبل حسابات مستخدم أخرى Wrong password كلمة المرور غير صحيحة Standard User مستخدم معياري Administrator مدير Customized مخصص dccV25::AccountsWorker Your host was removed from the domain server successfully تم إزالة جهازك من خادم النطاق بنجاح Your host joins the domain server successfully انضم جهازك إلى خادم النطاق بنجاح Your host failed to leave the domain server فشل جهازك في مغادرة خادم النطاق Your host failed to join the domain server فشل جهازك في الانضمام إلى خادم النطاق AD domain settings إعدادات النطاق AD Password not match الكلمة السرية غير متطابقة dccV25::AvatarTypesModel Dimensional متعدد الأبعاد Flat سطح dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] 此快捷键与 [%1] 冲突 dccV25::PwqualityManager Password cannot be empty لا يمكن أن يكون كلمة المرور فارغة Password must have at least %1 characters يجب أن يحتوي كلمة المرور على الأقل على %1 حرف Password must be no more than %1 characters يجب أن لا يتجاوز طول كلمة المرور %1 حرف Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) تستطيع كلمة المرور أن تحتوي فقط على حروف الإنجليزية ( حساسية الحالة )، الأرقام أو الرموز الخاصة (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please لا تتجاوز %1 حرفًا متوازيًا No more than %1 monotonic characters please لا تتجاوز %1 حرفًا متتابعًا No more than %1 repeating characters please لا تتجاوز %1 حرفًا مكررًا Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) يجب أن تحتوي كلمة المرور على حروف كبيرة، حروف صغيرة، أرقام ورموز (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) Password must not contain more than 4 palindrome characters لا يجب أن يحتوي كلمة المرور على أكثر من 4 حروف متوازي Do not use common words and combinations as password لا تستخدم كلمات شائعة وسلاسل حروف ككلمة المرور Create a strong password please استعرض كلمة مرور قوية It does not meet password rules لا يتوافق مع قواعد كلمة المرور At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System النظام Window النافذة Workspace منطقة العمل AssistiveTools أدوات المساعدة Custom مخصص None لا يوجد ================================================ FILE: translations/dde-control-center_bg.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Свързано Not connected Няма връзка BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Отказ Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone Идентификацията е необходима, за да настроите системния часови пояс DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Дисплей Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Сила на звука на входа Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Мишка и Тъчпад Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Персонализация PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Потребителски PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Контролен център Activated View Изглед To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Звук Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Звукови ефекти SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Зареждане Shut down Изключване Log out Излизане Wake up Събуждане Volume +/- Сила на звука +/- Notification Известяване Low battery Изтощена батерия Send icon in Launcher to Desktop Изпратете икона в Стартера на работния плот. Empty Trash Изпразване на Кошчето Plug in Свържи Plug out Извади Removable device connected Преносимото устройство е свързано Removable device removed Преносимото устройство е извадено Error Грешка SpeakerPage Mode Режим Output Volume Сила на звука на изхода Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Ляво Right Дясно Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Връщане Save Запазване TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Традиционна китайска (Хонконг) Traditional Chinese (Chinese Taiwan) Традиционна китайска (Тайван) Min Nan Chinese dcc::Locale::regionNames Taiwan China Тайван Китай dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Този късоуказател конфликтува с [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Система Window Прозорец Workspace Работно пространство AssistiveTools Помощни инструменти Custom Потребителски None Няма ================================================ FILE: translations/dde-control-center_bn.ts ================================================ AccountSettings edit সম্পাদনা Add new user নতুন ইউজার যোগ করুন Set fullname পূর্ণনাম নির্ধারণ করুন Login settings লগইন সেটিংস Login without password পাসওয়ার্ড ব্যবহার করে লগইন করুন Delete current account বর্তমান অ্যাকাউন্ট ডিলিট করুন Group setting গ্রুপ সেটিংস Account groups অ্যাকাউন্ট গ্রুপস done মন্তব্য Group name গ্রুপের নাম Add group গ্রুপ যোগ করুন Auto login অটো লগইন Account Information অ্যাকাউন্ট তথ্য Account name, account fullname, account type অ্যাকাউন্ট নাম, পূর্ণ নাম, অ্যাকাউন্ট টাইপ Account name অ্যাকাউন্ট নাম Account fullname পূর্ণ নাম Account type অ্যাকাউন্ট টাইপ The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face ফেস এন্রোল করুন I have read and agree to the আমি পড়েছি এবং আমি এটির সহমতি দিয়েছি Disclaimer রিজার্মেন্ট Next পরবর্তী Face enrolled ফেস এন্রোল হয়েছে Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style কার্টোন স্টাইল Dimensional style মাত্রাগত স্টাইল Flat style ফ্ল্যাট স্টাইল Cancel বাতিল Save পরিবর্তন সংরক্ষণ BatteryPage Screen and Suspend স্ক্রিন এবং সাময়িক অবস্থান Turn off the monitor after মনিটর বন্ধ করা হবে %1 এর পরে Lock screen after স্ক্রিন লোক করা হবে %1 এর পরে Computer suspends after কম্পিউটার সাময়িক অবস্থান করবে %1 এর পরে When the lid is closed কাঠের বন্ধ হলে When the power button is pressed পার্স বীটন চাপানোর সময়ে Low Battery লো ব্যাটারি Low battery notification লো ব্যাটারি সূচনা Auto suspend অটো সাময়িক অবস্থান Auto Hibernate অটো হিব্রিম Low battery threshold লো ব্যাটারি গন্তব্য Battery Management ব্যাটারি ম্যানেজমেন্ট Display remaining using and charging time ব্যবহার ও চার্জিং সময়ের বাকি পরিমাপ প্রদর্শন Maximum capacity মাক্সিমাল ক্যাপাসিটি Low battery level লো ব্যাটারি হিসাব Disable দেবু করা BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" ব্লুটুথ বন্ধ করা হয়েছে, এবং নামটি %1 হিসাবে প্রদর্শিত হবে Bluetooth is turned on, and the name is displayed as "%1" ব্লুটুথ চালু করা হয়েছে, এবং নামটি %1 হিসাবে প্রদর্শিত হবে BlueToothDeviceListView Disconnect বন্ধ করা Connect যুক্ত করা Send Files ফাইল পাঠান Rename পুনর্নামকরণ Remove Device ডিভাইস মুছে ফেলুন Select file ফাইল নির্বাচন করুন BluetoothCtl Edit সম্পাদনা Allow other Bluetooth devices to find this device অন্যান্য ব্লুটুথ ডিভাইসগুলি এই ডিভাইসকে খুঁজতে দাও To use the Bluetooth function, please turn off ব্লুটুথ ফাংশন ব্যবহার করতে এই ডিভাইসটি বন্ধ করুন Airplane Mode অফিসেন্ট মোড Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected যুক্ত Not connected যুক্ত নয় BootPage Startup Settings প্রারম্ভিক সংস্থাপনা You can click the menu to change the default startup items, or drag the image to the window to change the background image. প্রোগ্রামের মূল শুরু উপাদানগুলি পরিবর্তন করতে মেনু ক্লিক করুন বা চিত্রটি টাইম্বারে ট্র্যাগ করে পোস্টারিক চিত্র পরিবর্তন করুন. grub start delay grub শুরু দেস্ট্যান্ড theme থিম After turning on the theme, you can see the theme background when you turn on the computer থিম চালানোর পর, কম্পিউটার চালালে থিমের পেছনের চিত্র দেখতে পাবেন Boot menu verification প্রারম্ভিক মেনু চেক After opening, entering the menu editing requires a password. প্রদর্শন খুললে, মেনু সম্পাদনার জন্য একটি পাসওয়ার্ড প্রয়োজন। Change Password পাসওয়ার্ড পরিবর্তন Change boot menu verification password প্রারম্ভিক মেনু চেক পাসওয়ার্ড পরিবর্তন Set the boot menu authentication password প্রারম্ভিক মেনু চেক পাসওয়ার্ড সেট করুন User Name : ব্যবহারকারী নাম : root root New Password : নতুন পাসওয়ার্ড : Required প্রয়োজনীয় Password cannot be empty পাসওয়ার্ড খালি থাকতে পারে না Passwords do not match পাসওয়ার্ড সুমিটিশ্যু হয়নি Repeat password: পাসওয়ার্ড পুনরায় লিখুন: Cancel বাতাস Sure আচ্ছা Start animation অ্যানিমেশন শুরু করুন Adjust the size of the logo animation on the system startup interface সিস্টেম শুরু করার সুইচের লোগো অ্যানিমেশনের আকার রাস্তায় রাখুন Camera Allow below apps to access your camera: নীচের অ্যাপ্সকে আপনার ক্যামেরার এ্যাক্সেস দাও: CharaMangerModel Fingerprint1 পিংপ্রিংট1 Fingerprint2 পিংপ্রিংট2 Fingerprint3 পিংপ্রিংট3 Fingerprint4 পিংপ্রিংট4 Fingerprint5 পিংপ্রিংট5 Fingerprint6 পিংপ্রিংট6 Fingerprint7 পিংপ্রিংট7 Fingerprint8 পিংপ্রিংট8 Fingerprint9 পিংপ্রিংট9 Fingerprint10 পিংপ্রিংট10 Scan failed স্ক্যান সমাধান হয়নি The fingerprint already exists পিংপ্রিংট নিঃসন্দেহেই অন্তত একটি উপস্থিত Please scan other fingers অন্যান্য হাতের পিংপ্রিংট স্ক্যান করুন Unknown error অজানা ত্রুটি Scan suspended স্ক্যান বন্ধ Cannot recognize ইন্ডিকেট করা যায় না Moved too fast তারা হাল্কা হয়ে গেছে Finger moved too fast, please do not lift until prompted নাড়ো যতক্ষণ না এটি প্রার্থনা করা হয়, বাহিরে নেই Unclear fingerprint অস্পষ্ট হাতের চিহ্ন Clean your finger or adjust the finger position, and try again পায়ে নিষ্পাষ্ট করুন বা হাতের স্থান রুক্ষ করুন এবং আবার চেষ্টা করুন Already scanned আগেই স্ফটিক্যাল্যাস্কেড Adjust the finger position to scan your fingerprint fully হাতের স্থান রুক্ষ করুন যাতে পূর্ণ হাতের চিহ্ন স্ফটিক্যাল্যাস্কেড হয় Finger moved too fast. Please do not lift until prompted নাড়ো যতক্ষণ না এটি প্রার্থনা করা হয়, বাহিরে নেই Lift your finger and place it on the sensor again পায়ে উঠিয়ে দিন এবং আবার সেন্সরে রাখুন Position your face inside the frame আপনার মুখ চিত্রে অন্তর্ভুক্ত করুন Face enrolled মুখ রেজিস্ট্রেট করা হয়েছে Position a human face please অন্য একজন মানুষের মুখ অন্তর্ভুক্ত করুন Keep away from the camera ক্যামেরা থেকে দূরে থাকুন Get closer to the camera ক্যামেরায় আসুন Do not position multiple faces inside the frame চিত্রে অন্য কোনও মুখ অন্তর্ভুক্ত করবেন না Make sure the camera lens is clean ক্যামেরার লেন্সটি নিরাদর্শ হয়ে থাকে কেনার করুন Do not enroll in dark, bright or backlit environments নিঃশ্বাস, আলোয় বা পিছনে আলোয় রেজিস্ট্রেট করবেন না Keep your face uncovered আপনার মুখটি খোলা রাখুন Scan timed out স্ফটিক্যাল সময় অপরাধ Cancel বাতিল Camera occupied! ColorAndIcons Accent Color সাজার রঙ Icon Settings ইকন সেটিংস Icon Theme ইকন থিম Customize your theme icon বিষয় স্বরূপের ইকন পরিস্থিতি নির্দেশিকা করুন Cursor Theme কার্সর স্বরূপ Customize your theme cursor বিষয় স্বরূপের কার্সর নির্দেশিকা করুন ComfirmDeleteDialog Are you sure you want to delete this account? আপনি কি এই অ্যাকাউন্টটি হ্যালো করতে চান? Delete account directory অ্যাকাউন্ট ডাটারেক্টরি মুছে ফেলুন Cancel বাতিল Delete মুছে ফেলুন ComfirmSafePage Go to settings সেটিংসে যান Cancel বাতিল Common Common সামান্য Repeat delay পুনরাবৃত্তি দীর্ঘ Short ছোট Long দীর্ঘ Repeat rate পুনরাবৃত্তি হার Slow গতিশীল Fast গতিশীল না Numeric Keypad সংখ্যাক্রমিক ক্যাবেট test here এখানে পরীক্ষা করুন Caps lock prompt ক্যাপ্স লক প্রোম্প্ট Double Click Speed দ্বিগুণ ক্লিক গতি Double Click Test দ্বিগুণ ক্লিক পরীক্ষা Left Hand Mode বাম হাতের ম ode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size বড় আকার Small size ছোট আকার Failed to get root access রূট এ্যাক্সেস পাওয়া ব্যর্থ হয়েছে Please sign in to your Union ID first প্রথমে আপনার যুনিয়ন আইডি দিয়ে লগইন করুন Cannot read your PC information আপনার কম্পিউটারের তথ্য পড়তে পারা যায় না No network connection নেটওয়ার্ক কনেকশন নেই Certificate loading failed, unable to get root access সাইনেটাফিকেট লোড করার ফেইলার, রূট এ্যাক্সেস পাওয়া যায় না Signature verification failed, unable to get root access সাইনচেক পরীক্ষা ফেইলার, রূট এ্যাক্সেস পাওয়া যায় না Agree and Join User Experience Program সম্মত হলে ইউজার এক্সপারিয়েন্স প্রোগ্রামে যোগ দিন The Disclaimer of Developer Mode ডেভেলপার মোডের অনুমোদন নিরপেক্ষতা Agree and Request Root Access সম্মত হলে রূট এ্যাক্সেস প্রার্থনা করুন Start setting the new boot animation, please wait for a minute নতুন বুট এন্ডিমেশন সেটিং শুরু করুন, এক মিনিট অপেক্ষা করুন Setting new boot animation finished নতুন বুট এন্ডিমেশন সেটিং শেষ The settings will be applied after rebooting the system সিস্টেম রিবুট করার পর সেটিংগুলি প্রযোগ করা হবে Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters পাসওয়ার্ডে সংখ্যা এবং বাক্যের অক্ষর থাকতে হবে Password must be between 8 and 64 characters পাসওয়ার্ডের দৈর্ঘ্য 8 থেকে 64 অক্ষর হতে হবে CreateAccountDialog Create a new account নতুন একাউন্ট তৈরি করুন Account type একাউন্ট তাইপ UserName ব্যবহারকারী নাম Required প্রয়োজনীয় FullName পুরো নাম Optional পছন্দ করলে ব্যবহার করুন Cancel বাতাস Create account একাউন্ট তৈরি করুন Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. আপনি এখনো এভারেট আপলোড করেনি। ক্লিক করুন বা অ্যাক্সেস টু ড্র এবং ড্রপ করুন একটি ছবি আপলোড করার জন্য The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available ব্যবহারযোগ্য DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time দীর্ঘ সময় Currency symbol মূল্য চিহ্ন Positive currency দুর্লভ মূল্য Negative currency মূল্যায়িত মূল্য Decimal symbol দশমিক চিহ্ন Digit grouping symbol সংখ্যা গ্রুপিং চিহ্ন Digit grouping সংখ্যা গ্রুপিং Page size পাতা পরিমাণ Example DatetimeWorker Authentication is required to change NTP server NTP সার্ভার পরিবর্তন করার জন্য আইデンটিফিকেশন প্রয়োজন Authentication is required to set the system timezone সিস্টেমের টাইমজোন সেট করার জন্য প্রমাণীকরণ প্রয়োজন। DccColorDialog Cancel বাতিল Save সংরক্ষণ DccWindow Control Center provides the options for system settings. কন্ট্রোল টেন্ডার সিস্টেম সেটিংসের প্রকল্পগুলি প্রদান করে। DeepinIDAccountSecurity Bind WeChat WeChat বাঁধুন By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. WeChat বাঁধার মাধ্যমে, আপনি নিরাপদ এবং ত্রুটি হার কম হিসাবে %1 ID এবং স্থানীয় অ্যাকাউন্টে লগইন করতে পারেন। Unlinked বাঁধা হয়নি Unbinding বাঁধা হচ্ছে না Link বাঁধা Are you sure you want to unbind WeChat? আপনি নিশ্চিত যে আপনি আবারও WeChat বাঁধার হতে চান? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. WeChat বাঁধার হতে পরে, আপনি WeChat ব্যবহার করে QR কোড ফেরত লগইন করতে পারবেন না %1 ID বা স্থানীয় অ্যাকাউন্টে। Let me think it over আমি এটা ভাবছি Local Account Binding স্থানীয় অ্যাকাউন্ট বাঁধন After binding your local account, you can use the following functions: স্থানীয় অ্যাকাউন্ট বাঁধার পরে, আপনি নিম্নলিখিত ফাংশনগুলি ব্যবহার করতে পারেন: WeChat Scan Code Login System WeChat স্ক্যান কোড লগইন সিস্টেম Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. আপনি আপনার %1 ID এ বাঁধা WeChat ব্যবহার করে কোড স্ক্যান করে আপনার স্থানীয় অ্যাকাউন্টে লগইন করতে পারেন। Reset password via %1 ID %1 ID এর মাধ্যমে পাসওয়ার্ড রিসেট করুন Reset your local password via %1 ID in case you forget it. তুমি ভুলে গেলে %1 ID দিয়ে লোকাল পাসওয়ার্ডটি ফিরে নেও। To use the above features, please go to Control Center - Accounts and turn on the corresponding options. আগের বিশিষ্ট ফিচার ব্যবহার করতে কন্ট্রোল সেন্টার - অ্যাকাউন্টস এবং তাদের যুক্ত প্রত্যাশিত প্রক্রিয়াগুলি চালু করুন। DeepinIDInterface deepin দিপিন UOS UOS DeepinIDLogin Cloud Sync ক্লাউড সিংক Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. তোমার %1 ID এর পরিচয় রাখো এবং তোমার ব্যক্তিগত ডেটা একাধিক ডিভাইসে সিংক করো। %1 ID এ লগইন করে ব্রাউজার, অ্যাপ স্টোর এবং অন্যান্য ব্যক্তিগত ফিচার এবং সেবা পাও। Sign In to %1 ID %1 ID এ লগইন করো DeepinIDSyncService Auto Sync অটো সিংক Securely store system settings and personal data in the cloud, and keep them in sync across devices সিস্টেম সেটিংস এবং ব্যক্তিগত ডেটা ক্লাউডে উপার্জনকারীভাবে রাখো এবং তাদের একাধিক ডিভাইসে সিংক রাখো System Settings সিস্টেম সেটিংস Last sync time: %1 শেষ সিংক সময়: %1 Clear cloud data ক্লাউডের ডেটা হুঁরো Are you sure you want to clear your system settings and personal data saved in the cloud? তুমি কি ক্লাউডে রাখা সিস্টেম সেটিংস এবং ব্যক্তিগত ডেটা হুঁরতে চাও? Once the data is cleared, it cannot be recovered! এক্ষেত্রে ডেটা হুরানো হলে তা পুনরায় পাওয়া যাবে না! Cancel বাতিল Clear হুরো DeepinIDUserInfo Synchronization Service সিংক সেবা Account and Security অ্যাকাউন্ট এবং উপাধি Sign out লগআউট করো Go to web settings ওয়েব সেটিংসে যাও The nickname must be 1~32 characters long DeepinWorker encrypt password failed পাসওয়ার্ড সিক্রেটারিতে তোলাই ব্যর্থ হয়েছে Wrong password, %1 chances left গ্রাহক পাসওয়ার্ড গ্রাহক পাসওয়ার্ড যদি ভুল হয়, তাহলে %1 পরিবর্তন থাকে The login error has reached the limit today. You can reset the password and try again. আজ লগইন ত্রুটিটি সীমার সাথে পৌঁছেছে। তুমি পাসওয়ার্ড রিসেট করতে পারো এবং আবার চেষ্টা করো। Operation Successful পরিকল্পনা সফল The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China চীন প্রাদেশিক Other regions অন্যান্য অঞ্চল The feature is not available at present, please activate your system first এই ফিচার এখন উপলব্ধ নয়, প্রথমে আপনার সিস্টেম অক্টিভ করুন Subject to your local laws and regulations, it is currently unavailable in your region. অন্যান্য অঞ্চলে আপনার স্থানীয় বিধি এবং নীতি অনুযায়ী, এটি এখন উপলব্ধ নয়। Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' প্রোগ্রামটি '%1' খোলার জন্য ডিফল্ট প্রোগ্রামটি নির্বাচন করুন add প্রাইম Open Desktop file ডেস্কটপ ফাইল খোলুন Apps (*.desktop) প্রোগ্রাম (*.desktop), All files (*) সকল ফাইল (*) DevelopModePage Root Access রূট অ্যাক্সেস Request Root Access রূট অ্যাক্সেস প্রার্থনা করুন After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. ডেভেলপার মোডে প্রবেশ করার পর, আপনি রূট অ্যাক্সেস পাতে পারেন, কিন্তু এটি সিস্টেম অন্তর্নির্মাণকে নষ্ট করার সম্ভাবনা থাকতে পারে, তাই এটি ব্যবহার করতে অনুরোধ করে সুরক্ষার জন্য এটি ব্যবহার করতে একটু এক্ষুনি হতে হবে। Allowed সম্মত Enter প্রবেশ করুন Online অনলাইন Login UOS ID UOS ID লগইন করুন Offline অফলাইন Import Certificate কার্টিফিকেট ইমপোর্ট করুন Select file ফাইল নির্বাচন করুন Your UOS ID has been logged in, click to enter developer mode আপনার UOS ID লগইন করা হয়েছে, ডেভেলপার মোডে প্রবেশ করতে ক্লিক করুন Please sign in to your UOS ID first and continue প্রথমে আপনার UOS ID দিয়ে লগইন করুন এবং পরবর্তী করুন 1.Export PC Info 1. ডাটা রিপোর্ট তৈরি করুন Export ইমপোর্ট 3.Import Certificate 3. কার্টিফিকেট ইমপোর্ট করুন Development and debugging options নিয়ন্ত্রণ এবং ডিভাইজ ট্র্যাস্ট অপশনস System logging level সিস্টেম লগিং লেভেল Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. অপশন পরিবর্তন করার ফলে বিস্তারিত লগ সংরক্ষিত হবে যা সিস্টেম পরিকল্পনার কাজের কোন ক্ষতি করতে পারে এবং / বা স্টোরেজ অ্যাস্পেক্টে বেশি অ্যাসাইন করতে পারে Off ফোর্সড Debug ডিভাইজ Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. অপশন পরিবর্তন করার প্রসেস সম্পূর্ণ হতে প্রায় এক মিনিট লাগতে পারে, একটি সফল সেটিং প্রোমপ্ট পেয়ে পরে ডিভাইসটি রিবুট করে অপশনটি প্রভাবিত করতে হবে To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: এই ফাইলস এবং ফোল্ডারগুলো নিম্নলিখিত এ্যাপ্সে এক্সেস দাও: Documents ডকুমেন্টস Desktop ডেস্কটপ Pictures ছবি Videos ভিডিও Music মিউজিক Downloads ডাউনলোড folder ফোল্ডার FontSizePage Size সাইজ Standard Font স্ট্যান্ডার্ড ফন্ট Monospaced Font মোনোস্পেসেড ফন্ট GeneralPage Power Plans পাউর প্লানস Power Saving Settings পাউর সেভিং সেটিংস Auto power saving on low battery লোই ব্যাটারি উপর আটু পাউর সেভিং Low battery threshold লোই ব্যাটারি থ্রেশহল্ড Auto power saving on battery ব্যাটারি উপর আটু পাউর সেভিং Wakeup Settings ওয়াকাপ সেটিংস Password is required to wake up the computer কম্পিউটার ওয়াকাপ করতে কোড প্রয়োজন Password is required to wake up the monitor মনিটর ওয়াকাপ করতে কোড প্রয়োজন Shutdown Settings শাডওয়ার সেটিংস Scheduled Shutdown সেইন্ডার শাডওয়ার Time সময় Repeat পুনরায় চালান Once একবার Every day প্রতিদিন Working days কাজের দিন Custom Time মূল্যায়ন সময় Decrease screen brightness on power saver পার্টি সেভারে স্ক্রিন ব্রিজ্যাস কমান GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , , ... ... InterfaceEffectListview Optimal Performance সুস্থাপিত পরিকল্পনা Balance খাড়াবার্ষিকি Best Visuals সুন্দর দৃশ্য Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language ভাষা done কর্ম সম্পন্ন edit সম্পাদনা Other languages অন্যান্য ভাষা add যোগ করুন Region প্রদেশ Area ঊষ্মানীয় অঞ্চল Operating system and applications may provide you with local content based on your country and region প্রদেশ ও অঞ্চল অনুযায়ী, সিস্টেম ও অ্যাপ্লিকেশনগুলি আপনাকে দেশ ও প্রদেশ ভিত্তিক স্থানীয় কন্টেন্ট দিতে পারে। Operating system and applications may set date and time formats based on regional formats প্রদেশ অনুযায়ী, সিস্টেম ও অ্যাপ্লিকেশনগুলি তারিখ ও সময় আকার নির্ধারণ করতে পারে। Regional format LangsChooserDialog Add language ভাষা যোগ করুন Search অনুসন্ধান Cancel বন্ধ Add যোগ করুন LoginMethod Login method স্থাপনা পদ্ধতি Password, wechat, biometric authentication, security key পাসওয়ার্ড, ওয়েচাট, জীবনী উপর ভিত্তি করে আইデン্টিফিকেশন, উপার্জ্জন কুইক Password পাসওয়ার্ড Modify password পাসওয়ার্ড পরিবর্তন করুন Validity days মূল্যায়ন দিন Always সবসময় Reset password LogoModule Copyright© 2011-%1 Deepin Community সংক্রান্ত অধিকার © 2011-%1 ডিপিন কমিউনিটি Copyright© 2019-%1 UnionTech Software Technology Co., LTD সংক্রান্ত অধিকার © 2019-%1 যুনিয়নটেক সফটওয়্যার টেকনোলজি কো., ল্টড MicrophonePage Automatic Noise Suppression ট্যাটিক্যাল শব্দ স্থানান্তরন Input Volume ইনপুট আওয়াজ Input Level ইনপুট স্তর Input ইনপুট No input device for sound found স্বরের জন্য ইনপুট ডিভাইস পাওয়া যায়নি Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices আমার ডিভাইসেস NativeInfoPage UOS UOS Computer name কম্পিউটারের নাম It cannot start or end with dashes এটি ত্রিশটা দিয়ে শুরু করা বা শেষ করা যায় না OS Name অপারেটিং সিস্টেমের নাম Version ভার্সিয়ন Edition এডিশন Type টাইপ bit বিট Authorization অ্যাথোরাইজেশন System installation time সিস্টেম ইনস্টলেশন সময় Kernel কার্নেল Graphics Platform গ্রাফিক্স প্ল্যাটফর্ম Processor প্রসেসর Memory মেমরি 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices অন্যান্য ডিভাইসেস Show Bluetooth devices without names নাম থাকার বিন্দুমাত্র ব্লুটুথ ডিভাইস প্রদর্শন করুন PasswordLayout Current password বর্তমান পাসওয়ার্ড Required অনুরোধিত Weak বেশিরভাগ Medium মধ্যরেখা Strong ঝুঁকিপূর্ণ Repeat Password পাসওয়ার্ড পুনরায় লিখুন Password hint পাসওয়ার্ডের হিন্ট Optional অপশনাল Password cannot be empty পাসওয়ার্ড অবশ্যই হওয়া দরকার Passwords do not match পাসওয়ার্ড মিলছে না The hint is visible to all users. Do not include the password here. হিন্ট সব উপযোক্তার দৃশ্যমান। এখানে পাসওয়ার্ড লিখবেন না। New password New password should differ from the current one নতুন পাসওয়ার্ড বর্তমানের সাথে ভিন্ন হওয়া দরকার The password cannot be the same as the username. PasswordModifyDialog Modify password পাসওয়ার্ড পরিবর্তন করুন Reset password পাসওয়ার্ড পুনরায় সেট করুন Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. পাসওয়ার্ডের দৈর্ঘ্য কমপক্ষে ৮ অক্ষর হওয়া দরকার এবং পাসওয়ার্ডে নাম্বার, সিম্বল এবং উভয় ক্যাডার্সের মধ্যে কমপক্ষে ৩টি প্রকার অক্ষর অথবা সংখ্যার মিশ্রণ রয়েছে এটি নিরাপদতর। Resetting the password will clear the data stored in the keyring. পাসওয়ার্ড পুনরায় সেট করা প্রার্থনা করার সূচনায় স্টোরেড ডেটা পুরণ হবে। Cancel বাতিল Personalization Personalization PersonalizationInterface Light আলো Auto টুকরো Dark ট্যাগ Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom মোটামুটি PluginArea Plugin Area প্লাগইন ইউনিট Select which icons appear in the Dock ডকে দেখানো চিহ্নগুলি কোনগুলি নির্বাচন করুন Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down ফাঁকানাক করুন Suspend প্রাক্তন Hibernate হাইব্রিডিটি Turn off the monitor মনিটর বন্ধ করুন Show the shutdown Interface ফাইন্ড করার পরবর্তী পরিস্থিতি দেখান Do nothing কিছুই করবেন না PowerPage Screen and Suspend স্ক্রিন এবং স্পাংজ Turn off the monitor after মনিটর বন্ধ করুন Lock screen after স্ক্রিন লোক করুন Computer suspends after প্রোগ্রাম স্পাংজ করবে When the lid is closed লিড বন্ধ হয়ে থাকলে When the power button is pressed পাউর বীটন প্রেস করার সময় PowerPlansListview High Performance উচ্চ পরিকল্পনা Balance Performance পরিকল্পনা সুরক্ষিত রাখুন Aggressively adjust CPU operating frequency based on CPU load condition CPU ব্যবহারের অবস্থার উপর সেট করে ক্যাপিউ কর্যকালি অ্যারে সার্কিট অবশ্যই পরিবর্তন করুন Balanced সুরক্ষিত রাখুন Power Saver পার্শ্ব সেভার Prioritize performance, which will significantly increase power consumption and heat generation পরিকল্পনার প্রাথমিকতা দেওয়া, যা শক্তি উপাদান ও গরম গенেরেশনের সুনির্দিষ্ট বৃদ্ধি করবে Balancing performance and battery life, automatically adjusted according to usage পরিকল্পনা ও ব্যাটারি জীবনকাল সুরক্ষিত রাখার মাধ্যমে সংগ্রাহক পরিবর্তন করা হবে যেমন ব্যবহার করা হয় Prioritize battery life, which the system will sacrifice some performance to reduce power consumption ব্যাটারি জীবনকাল প্রাথমিকতা দেওয়া, যা শক্তি উপাদান উপাদান কমানোর জন্য কিছু পরিকল্পনা দেখান দেখান PowerWorker Minutes মিনিট Hour ঘন্টা Never সবসময় Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy জায়গার নীতি Copy Link Address PwqualityManager Password cannot be empty পাসওয়ার্ড খালি থাকতে পারে না Password must have at least %1 characters পাসওয়ার্ডের কমপক্ষে %1 অক্ষর থাকতে হবে Password must be no more than %1 characters পাসওয়ার্ডের মোট কর্মকর্তার সংখ্যা %1 থেকে বেশি হতে পারে না Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) পাসওয়ার্ডের মধ্যে শুধু কেস সেন্টিটিভ ইংরেজি বাক্যার্টিয়াল, সংখ্যা বা বিশেষ অক্ষর (~/`!@#$%^&*()-_+=|{}[]:"'<>,.?/) No more than %1 palindrome characters please %1 পলিনড্রোম অক্ষর বেশি নেই No more than %1 monotonic characters please %1 মনোটনিক অক্ষর বেশি নেই No more than %1 repeating characters please %1 পুনরাবৃত্ত অক্ষর বেশি নেই Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) পাসওয়ার্ডে উচ্চ ক্যাডের বাক্যার্টিয়াল, নিচ্ছ ক্যাডের বাক্যার্টিয়াল, সংখ্যা এবং সিমবলগুলি (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) থাকতে হবে Password must not contain more than 4 palindrome characters পাসওয়ার্ডে 4 টি পলিনড্রোম অক্ষর বেশি থাকতে পারে না Do not use common words and combinations as password সাধারণ শব্দ বা কোম্বিনেশন পাসওয়ার্ড হিসাবে ব্যবহার করবেন না Create a strong password please অগ্রাধিকারী পাসওয়ার্ড তৈরি করুন It does not meet password rules এটি পাসওয়ার্ড নিয়মগুলি সিদ্ধান্ত করে নেই QObject Control Center কন্ট্রোল সেন্টার Activated ট্যাক্টিভেড View ভিউ To be activated ট্যাক্টিভেড হবার পর Activate ট্যাক্টিভেট Expired প্রাপ্ত হয়েছে In trial period ট্রিয়াল অবস্থায় Trial expired ট্রিয়াল প্রাপ্ত হয়েছে dde-control-center dde-control-center Touch Screen Settings টাচ সিক্রেন সেটিংস The settings of touch screen changed টাচ সিক্রেনের সেটিংস পরিবর্তিত হয়েছে This system wallpaper is locked. Please contact your admin. এই সিস্টেম পেপারওয়াল লকেড হয়েছে। অপেরেটরের সাথে যোগাযোগ করুন। %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search অনুসন্ধান Default formats স্বামিত্বাধীন ফরম্যাট First day of week সপ্তাহের প্রথম দিন Short date ছুটির তারিখ Long date দীর্ঘ তারিখ Short time ছুটির সময় Long time দীর্ঘ সময় Currency symbol মুদ্রাস্বর Digit সংখ্যা Paper size পেপার সাইজ Cancel বন্ধ করুন Save পরিবর্তন সংরক্ষণ করুন Regional format RegionsChooserWindow Search অনুসন্ধান RegisterDialog Set a Password পাসওয়ার্ড নির্ধারণ করুন 8-64 characters 8-64 ক্যারেক্টার Repeat the password পাসওয়ার্ড পুনরাবৃত্তি করুন Cancel বন্ধ করুন Confirm যাচাই করুন Passwords don't match পাসওয়ার্ড মিলছে না ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver স্ক্রিন সেভার preview প্রাইভিয়ার Personalized screensaver প্রতিষ্ঠিত স্ক্রিন সেভার setting সেটিং idle time অপারেশন অবস্থায় সময় 1 minute 1 মিনিট 5 minute 5 মিনিট 10 minute 10 মিনিট 15 minute 15 মিনিট 30 minute 30 মিনিট 1 hour 1 ঘন্টা never বসে থাকলেও Password required for recovery পুনর্সংযোগের জন্য পাসওয়ার্ড প্রয়োজন Picture slideshow screensaver ছবি স্লাইডশো স্ক্রিনসেভার System screensaver সিস্টেম স্ক্রিনসেভার SearchableListViewPopup Search অনুসন্ধান No search results ShortcutSettingDialog Add custom shortcut নির্দিষ্ট ট্রিভিয়াল যোগ করুন Name: নাম: Required প্রয়োজন Command: কম্যান্ড: Shortcut ট্রিভিয়াল None কোনো একটি নেই Cancel বন্ধ করুন Add যোগ করুন The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts ট্রিভিয়াল System shortcut, custom shortcut সিস্টেম ট্রিভিয়াল, নির্দিষ্ট ট্রিভিয়াল Search shortcuts অনুসন্ধান ট্রিভিয়াল done গোপনীয় edit সম্পাদনা Click ক্লিক করুন Cancel বন্ধন পরিহার or বা Replace পরিবর্তন করুন Restore default মূল অবস্থায় পুনরায় স্থাপন করুন Add custom shortcut কাস্টম চার্জট যোগ করুন please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices আউটপুট ডিভাইস Select whether to enable the devices ডিভাইসগুলি সক্রিয় করতে কি করতে নির্বাচন করুন Input Devices ইনপুট ডিভাইস SoundEffectsPage Sound Effects স্বর প্রভাব SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up নেভার উঠান Shut down ফাউন্ড করান Log out লগ আউট করুন Wake up ঘুম থেকে উঠান Volume +/- গল্ফ সুরের মাত্রা +/- Notification বিনোদন Low battery লোয়া ব্যাটারি Send icon in Launcher to Desktop লঞ্চারে ইকনট ডেস্কটপে পাঠান Empty Trash মেঘাতি খালি করুন Plug in সংযোগ করুন Plug out ঘুঁট দিন Removable device connected অপরিচিত ডিভাইস সংযোগ করা হয়েছে Removable device removed অপরিচিত ডিভাইস বাদ দেওয়া হয়েছে Error ভুল SpeakerPage Mode মড Output Volume আউটপুট সুরের মাত্রা Volume Boost ভার্জুস্ট ভার্জেন্সি If the volume is louder than 100%, it may distort audio and be harmful to output devices যদি গোল্ডের শব্দের স্তর 100% এর বেশি হয়, তাহলে এটি শব্দের স্তরকে পরিবর্তন করতে পারে এবং এটি উত্তরাধিকার ডিভাইসে নিষ্পক্ষ হতে পারে Left বাম Right ডান Output উত্তরাধিকার No output device for sound found �ব্দের উত্তরাধিকার ডিভাইস পাওয়া যায় নি Left Right Balance বাম-ডান সূচনা Merge left and right channels into a single channel বাম এবং ডান চ্যানেল একটি চ্যানেলে মিশান Whether the audio will be automatically paused when the current audio device is unplugged এখন ব্যবহৃত শব্দের ডিভাইস থেকে বাহির করা হলে শব্দটি টুলো আটুটি হবে কি Mono Audio Auto Pause Output Device SyncInfoListModel Sound স্বর Power পাবল্যাট Mouse মিউজ Update আপডেট Screensaver স্ক্রিন সেভার System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers ধারণা পোস্টার TimeAndDate Auto sync time টাইম টুলো আটুটি Ntp server NTP সার্ভার System date and time সিস্টেম তারিখ এবং সময় Customize পরিষেবা করুন Settings সেটিংস Server address সার্ভার ঠিকানা Required অনুগ্রহ করে প্রয়োজনীয় The ntp server address cannot be empty এনটিপি সারভার ঠিকানা খালি থাকতে পারে না Use 24-hour format 24 ঘণ্টা আকার ব্যবহার করুন system time zone সিস্টেম সময় অঞ্চল Timezone list সময় অঞ্চল তালিকা Add TimeRange from সার্বিক to পর্যন্ত TimeoutDialog Save the display settings? প্রদর্শন সেটিংস সংরক্ষণ করুন Settings will be reverted in %1s. সেটিংস %1s পরে পুনরায় সংশোধিত হবে। Revert পুনরায় সংশোধন করুন Save সংরক্ষণ করুন TimezoneDialog Add time zone সময় অঞ্চল যোগ করুন Determine the time zone based on the current location বর্তমান অবস্থান অনুযায়ী সময় অঞ্চল নির্ধারণ করুন Time zone: সময় অঞ্চল: Nearest City: নিকটতম শহর: Cancel বাতাস Save সংরক্ষণ করুন TouchScreen TouchScreen উপরীতাপ্স্ক্রিন Set up here when connecting the touch screen উপরীতাপ্স্ক্রিন সংযোগ করার সময় এখানে নিয়ন্ত্রণ করুন Touchpad Basic Settings ভিত্তি সেটিংস Touchpad টাচপ্যাড Pointer Speed বাইন্ডার গতি Slow কম Fast গ্রাহক Disable touchpad during input প্রবেশ সময়ে টাচপ্যাড ব্যবহার বন্ধ করুন Tap to Click ক্লিক করার জন্য টপ করুন Natural Scrolling নাটীয় পরিস্থিতি পরিবর্তন Three-finger gestures তিন পাত্র গাস্টার Four-finger gestures চার পাত্র গাস্টার Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small ক্ষুদ্র Large ভারী Enable transparent effects when moving windows ウインドウを移動するときに透過効果を有効にする Window Minimize Effect ウインドウの最小化効果 Scale মাত্রা Magic Lamp মজাকি জাম্পান Opacity অপার্সিবিটি Low লোও High হাই Scroll Bars স্ক্রিন স্ক্রিল বার Show on scrolling স্ক্রিন স্ক্রিল করার সময় প্রদর্শন করুন Keep shown প্রদর্শিত রাখুন Compact Display কমপ্লেক্ট ডিস্প্লে If enabled, more content is displayed in the window. যদি সক্রিয় হয়, তাহলে উইন্ডোয়ে বেশি কনটেন্ট প্রদর্শিত হবে। Title Bar Height শিরোনাম বার উচ্চতা Only suitable for application window title bars drawn by the window manager. প্রতিবেদক ম্যানেজার দ্বারা রেখে থাকা উইন্ডোয়ের শিরোনাম বারে ইহা শুধুমাত্র উপযুক্ত। Extremely small অত্যন্ত ক্ষুদ্র Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) ত্রান্সিস্টেন্ট চাইনিজ (চাইনিজ হংকং) Traditional Chinese (Chinese Taiwan) ত্রান্সিস্টেন্ট চাইনিজ (চাইনিজ তাইওয়ান) Min Nan Chinese dcc::Locale::regionNames Taiwan China তাইওয়ান চাইনিজ dccV25::AccountsController Username must be between 3 and 32 characters ইউজারনেম 3 থেকে 32 অক্ষরের মধ্যে থাকতে হবে The first character must be a letter or number প্রথম অক্ষর হতে একটি লিটারাল বা নাম্বার হতে হবে Your username should not only have numbers ইউজারনেমে কেবলমাত্র নাম্বার থাকতে পারে না The username has been used by other user accounts ইউজারনেম অন্যান্য ইউজার অকাউন্টে ব্যবহার হয়েছে The full name is too long মোট নাম খুব দীর্ঘ The full name has been used by other user accounts মোট নাম অন্যান্য ইউজার অকাউন্টে ব্যবহার হয়েছে Wrong password গোঁাব গ্রাহক Standard User ধর্মিয়ান ব্যবহারকারী Administrator প্রশাসক Customized কাস্টমাইজেড dccV25::AccountsWorker Your host was removed from the domain server successfully আপনার হোস্ট সফলভাবে ডোমেইন সারভার থেকে মুছে দেওয়া হয়েছে Your host joins the domain server successfully আপনার হোস্ট সফলভাবে ডোমেইন সারভারে যোগ করা হয়েছে Your host failed to leave the domain server আপনার হোস্ট ডোমেইন সারভার থেকে অবসান করতে সমস্যা হয়েছে Your host failed to join the domain server আপনার হোস্ট ডোমেইন সারভারে যোগ করতে সমস্যা হয়েছে AD domain settings AD ডোমেইন সেটিংস Password not match পাসওয়ার্ড মিলছে না dccV25::AvatarTypesModel Dimensional মাত্রার Flat ফ্ল্যাট dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] এই শক্তিশালী সংক্ষিপ্ত কমান্ড [%1] সাথে যোগাযোগ করছে dccV25::PwqualityManager Password cannot be empty পাসওয়ার্ড খালি থাকতে পারে না Password must have at least %1 characters পাসওয়ার্ডের আগে %1 অক্ষর থাকতে হবে Password must be no more than %1 characters পাসওয়ার্ডের দৈর্ঘ্য %1 অক্ষরের কম হতে হবে Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) পাসওয়ার্ডে শুধুমাত্র ক্যাসেইসেন্টিভ ইংরেজি বাক্য, সংখ্যা বা বিশেষ চিহ্ন (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) দ্বারা সৃষ্ট হতে পারে No more than %1 palindrome characters please %1 বার পলিনড্রোমিক চিহ্ন ব্যবহার করুন No more than %1 monotonic characters please %1 বার সামঞ্জস্যপূর্ণ চিহ্ন ব্যবহার করুন No more than %1 repeating characters please %1 বার পুনরাবৃত্ত চিহ্ন ব্যবহার করুন Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) পাসওয়ার্ডে উঠোন বাক্য, নিচোল বাক্য, সংখ্যা এবং বিশেষ চিহ্ন (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) দ্বারা সৃষ্ট হতে হবে Password must not contain more than 4 palindrome characters পাসওয়ার্ডে 4 বার বেশি পলিনড্রোমিক চিহ্ন দ্বারা সৃষ্ট হতে পারে না Do not use common words and combinations as password সাধারণ শব্দ বা সংশ্লিষ্ট ব্যবহার করতে হবে না Create a strong password please অগ্রাহ্য পাসওয়ার্ড তৈরি করুন It does not meet password rules পাসওয়ার্ডের নিয়ম পূরণ করা হয়নি At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System সিস্টেম Window বিন্ডো Workspace ব্যবস্থাপনা অঞ্চল AssistiveTools অনুরোধ সাহায্য লিংক Custom মূল্যায়ন করা None কোনো একটি নেই ================================================ FILE: translations/dde-control-center_bo.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel འདོར་བ། Done གྲུབ་ཟིན། Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected སྦྲེལ་ཟིན། Not connected སྦྲེལ་མེད་པ། BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 མཛུབ་རིས། 1 Fingerprint2 མཛུབ་རིས། 2 Fingerprint3 མཛུབ་རིས། 3 Fingerprint4 མཛུབ་རིས། 4 Fingerprint5 མཛུབ་རིས། 5 Fingerprint6 མཛུབ་རིས། 6 Fingerprint7 མཛུབ་རིས། 7 Fingerprint8 མཛུབ་རིས། 8 Fingerprint9 མཛུབ་རིས། 9 Fingerprint10 མཛུབ་རིས། 10 Scan failed མཛུབ་རིས་འཇུག་ཐབས་བྲལ། The fingerprint already exists མཛུབ་རིས་འདུག Please scan other fingers མཛུབ་མོ་གཞན་གྱི་མཛུབ་རིས་འཇུག་རོགས། Unknown error རྒྱུ་མཚན་མ་ཤེས་པའི་ནོར་འཁྲུལ། Scan suspended མཛུབ་རིས་འཇུག་མཚམས་ཆད་པ། Cannot recognize ངོས་འཛིན་ཐབས་བྲལ། Moved too fast རེག་པའི་དུས་ཚོད་ཐུང་བ། Finger moved too fast, please do not lift until prompted རེག་ཡུན་ཐུང་བ། ར་སྤཽད་བྱེད་སྐབས་མཛུབ་མོ་ཕྱིར་མ་འཁྱེར། Unclear fingerprint བརྙན་རིས་མི་གསལ་བ། Clean your finger or adjust the finger position, and try again མཛུབ་མོ་གཙང་མར་ཕྱིས་པའམ་རེག་ས་ལེགས་སྒྲིག་བྱས་རྗེས་ཡང་བསྐྱར་མཛུབ་རིས་ངོས་འཛིན་ཆས་ནོན་དང་། Already scanned བརྙན་རིས་བསྐྱར་ཟློས། Adjust the finger position to scan your fingerprint fully མཛུབ་རིས་གནོན་ས་ལེགས་སྒྲིག་བྱས་ནས་མཛུབ་རིས་སྔར་ལས་མང་བ་ནང་འཇུག་བྱེད། Finger moved too fast. Please do not lift until prompted མཛུབ་རིས་འཚོལ་བསྡུ་བྱེད་སྐབས་ཁྱོད་ལ་ཡར་ཁྱོག་ཅེས་གསལ་འདེབས་མ་བྱས་བར་མཛུབ་མོ་ཕྱིར་མ་འཁྱེར། Lift your finger and place it on the sensor again མཛུབ་མོ་ཡར་བཀྱག་ནས་ཡང་བསྐྱར་མནན་རོགས། Position your face inside the frame ཁྱེད་ཀྱི་ངོ་གདོང་ཚང་མ་དབྱེ་འབྱེད་ཁུལ་དུ་ཡོད་པར་ཁག་ཐེག་བྱེད་དགོས། Face enrolled ངོ་གདོང་ནང་འཇུག་བྱས་ཟིན། Position a human face please མིའི་རིགས་ཀྱི་ངོ་གདོང་སྤྱོད་རོགས། Keep away from the camera བཪྙན་ཤེལ་དང་བར་ཐག་འཇོག་དགོས། Get closer to the camera པར་ཆས་དང་ཐག་ཉེ་ཙམ་གནང་དང་། Do not position multiple faces inside the frame མི་མང་པོ་དབྱེ་འབྱེད་ཁུལ་དུ་མ་ཡོང་རོགས། Make sure the camera lens is clean བཪྙན་ཤེལ་གཙང་མ་ཡོད་དགོས། Do not enroll in dark, bright or backlit environments ནག་ཁུང་དང་དྲག་འོད། ཟློག་འོག་སོགས་འོག་བཀོལ་སྤྱོད་མ་བྱེད་རོགས། Keep your face uncovered ངོ་གདོང་བཀབ་མེད་པ་རྒྱུན་འཁྱོངས་བྱེད་དགོས། Scan timed out ནང་འཇུག་བྱེད་ཡུལ་བརྒལ་སོང་། Cancel འདོར་བ། Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-ti https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-ti Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server དུས་ཚོད་ཀྱི་ཞབས་ཞུ་འཕྲུལ་ཆས་བཟོ་བཅོས་བྱེད་པར་ར་སྤྲོད་བྱེད་དགོས། Authentication is required to set the system timezone རྒྱུད་ཁོངས་ཀྱི་དུས་ཁུལ་སྒྲིག་འགོད་བྱེད་པར་ར་སྤྲོད་བྱེད་དགོས། DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright © 2011-%1 གཏིང་ཚད་སྡེ་ཁུལ། Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright © 2019-%1 ཐུང་ཞིན་མཉེན་ཆས་ལག་རྩལ་ཚད་ཡོད་ཀུང་སི། MicrophonePage Automatic Noise Suppression སུན་སྒྲ་ཚོད་འཛིན། Input Volume སྒྲ་ཤུགས་ནང་འཇུག Input Level སྒྲ་ཤུགས་ལྡོག་སྐྱེལ། Input No input device for sound found Input Device ནང་འདྲེན་སྒྲིག་ཆས། Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom རང་སྒྲུབ། PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty གསང་ཨང་སྟོང་པ་ཡིན་མི་རུང་། Password must have at least %1 characters གསང་ཨང་རིང་ཚད་གྲངས་གནས་%1ལས་ཉུང་མི་རུང་། Password must be no more than %1 characters གསང་ཨང་གི་རིང་ཚད་%1གཉིས་ལས་བརྒལ་མི་རུང་། Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) གསང་ཨང་ནི་དབྱིན་ཡིག་(ཡིག་ཆེན་དང་ཡིག་ཆུང་གི་དབྱེ་བ་འབྱེད་དགོས། )དང་། ཨང་ཀི། ཡང་ན་དམིགས་བསལ་མཚོན་རྟགས་(~!@#$%^&*()[]{}\|/?,.<>)བཅས་ལས་གྲུབ་དགོས། No more than %1 palindrome characters please སྐོར་ཟློས་ཡིག་འབྲུ་%1ལས་བརྒལ་མི་རུང་། No more than %1 monotonic characters please གཅིག་རྐྱང་ཅན་གྱི་ཡིག་འབྲུ་%1ལས་བརྒལ་མི་རུང་། No more than %1 repeating characters please བསྐྱར་ཟློས་ཡིག་འབྲུ་%1ལས་བརྒལ་མི་རུང་། Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) གསང་ཨང་ནི་ངེས་པར་དུ་ཡིག་ཆེན་དང་། ཡིག་ཆུང་། གྲངས་ཀ མཚོན་རྟགས་(~!@#$%^&*-+=`|\(){}[]:;"'<>,.?/)བཅས་རིགས་བཞི་ལས་གྲུབ་དགོས། Password must not contain more than 4 palindrome characters གསང་ཨང་ནང་བསྟུད་མར་ཟུང་ལྡན་གྱི་ཡིག་འབྲུ་4ཡན་ཡོད་མི་ཆོག Do not use common words and combinations as password གསང་ཨང་ནི་རྒྱུན་མཐོང་གི་མིང་དང་ཚིག་གྲུབ་ཡིན་མི་ཆོག Create a strong password please གསང་ཨང་སྟབས་བདེ་དྲགས་པས། གསང་ཨང་རྙོག་འཛིང་ཆེ་རུ་གཏོང་། It does not meet password rules གསང་ཨང་བདེ་འཇགས་ཀྱི་བླང་བྱ་དང་མི་འཚམ་པ། QObject Control Center ཚོད་འཛིན་ལྟེ་གནས། Activated སྐུལ་སློང་བྱས་ཟིན། View ལྟ་བཤེར། To be activated སྐུལ་སློང་བྱ་རྒྱུ། Activate སྐུལ་སློང་། Expired དུས་ལས་ཡོལ་བ། In trial period ལས་ཚོད་ལྟ་བའི་དུས་ཡུན། Trial expired ལས་ཚོད་ལྟ་བའི་དུས་ཡུན་ལས་བརྒལ་བ། dde-control-center Touch Screen Settings ཐུག་རེག་བརྙན་ཡོལ་སྒྲིག་འགོད། The settings of touch screen changed ཐུག་རེག་བརྙན་ཡོལ་གྱི་སྒྲིག་བཀོད་སྒྱུར་ཟིན། This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects རྒྱུད་ཁོངས་སྒྲ་ནུས། SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up ཁ་ཕྱེ། Shut down རྩིས་འཁོར་གློག་གསོད། Log out ཐོ་སུབ་པ། Wake up གཉིད་ལས་སད་པ། Volume +/- སྐད་ཤུགས་སྙོམ་སྒྲིག Notification བརྡ་ཐོ། Low battery གློག་མི་འདང་པ། Send icon in Launcher to Desktop འགོ་སློང་ཆས་ནས་རྟགས་རིས་ཅོག་ངོས་སུ་སྐྱེལ་བ། Empty Trash སྙིགས་སྒམ་གཙང་སེལ། Plug in གློག་ཁུངས་དང་མཐུད་པ། Plug out གློག་ཁུངས་བཅད་པ། Removable device connected སྒུལ་བདེའི་སྒྲིག་ཆས་མཐུད་པ། Removable device removed སྒུལ་བདེའི་སྒྲིག་ཆས་འགོག་པ། Error ནོར་འཁྲུལ་གསལ་འདེབས། SpeakerPage Mode དཔེ་རྣམ། Output Volume སྒྲ་ཤུགས་ཕྱིར་འདོན། Volume Boost སྐད་ཤུགས་ཆེ་རུ་གཏོང་བ། If the volume is louder than 100%, it may distort audio and be harmful to output devices སྒྲ་ཤུགས་100%ལས་ཆེ་བ་ཡོད་སྐབས་སྒྲ་ནུས་ཤོར་སྲིད་པ་མ་ཟད། ཁྱོད་ཀྱི་སྒྲ་སྐྱེད་ཆས་ཀྱང་འཕྲོ་བརླག་གཏོང་ཉེན་ཡོད། Left གཡོན། Right གཡས། Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device ཕྱིར་འདྲེན་སྒྲིག་ཆས། SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? མངོན་སྟོན་སྒྲིག་འགོད་ཉར་ཚགས་བྱ་དགོས་སམ། Settings will be reverted in %1s. བཀོལ་སྤྱོད་གང་ཡང་མེད་ཚེ། སྐར་ཆ་%1གི་རྗེས་སོར་ཆུད་རྒྱུ། Revert སོར་ཆུད། Save ཉར་ཚགས། TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System System Window Window Workspace Workspace AssistiveTools AssistiveTools Custom Custom None None ================================================ FILE: translations/dde-control-center_bqi.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit <a href="%1"> %1</a>.</p> Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. DisclaimerControl Disclaimer Cancel Agree FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device MousePage Mouse Pointer Speed Slow Fast Pointer Size Short Long Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts Custom done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar Accounts Account Account manager AccountsMain Other accounts Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... BlueTooth Bluetooth settings, devices Bluetooth CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options Datetime Time and date Time and date, time zone settings Language and region System language, regional formats dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) ترائیل چینی (چینی ہونگ کانگ) Traditional Chinese (Chinese Taiwan) ترائیل چینی (چینی ٹائوان) Min Nan Chinese dcc::Locale::regionNames Taiwan China ٹائوان چین dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] یہ سورٹ کاٹ [%1] کے ساتھ منسق ہے dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System سسٹم Window ونڈو Workspace ورک سپیس AssistiveTools مددی تواتر Custom آپراٹک ٹولز None کوئی نہیں Deepinid deepin ID UOS ID Cloud services Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal Device Device Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound Personalization Personalization PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders Sound Sound Output, input, sound effects, devices SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model ================================================ FILE: translations/dde-control-center_br.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Nullañ Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Nullañ Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Nullañ Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Nullañ Save Enrollañ BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Nullañ Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Nullañ Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Nullañ Delete ComfirmSafePage Go to settings Cancel Nullañ Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Nullañ Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Nullañ Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Nullañ Save Enrollañ DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Nullañ Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Nullañ Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Nullañ Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Nullañ Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Personnelaet PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View Gweled To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Nullañ Save Enrollañ Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Nullañ Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Nullañ Save Enrollañ ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Hini ebet Cancel Nullañ Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save Enrollañ click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel Nullañ or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System Reizhiad SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save Enrollañ TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Nullañ Save Enrollañ TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Nullañ Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Hini ebet Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Sinaeg hengounel (Sinaeg Hong Kong) Traditional Chinese (Chinese Taiwan) Sinaeg hengounel (Sinaeg Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan Sina dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Ar berradur-mañ a stourm gant [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Reizhiad Window Prenestr Workspace Spas labour AssistiveTools Ostilhoù skoazell Custom Personelaet None Hini ebet ================================================ FILE: translations/dde-control-center_ca.ts ================================================ AccountSettings edit edita Add new user Afegiu-hi un usuari nou Set fullname Estableix el nom complet Login settings Paràmetres de l'inici de sessió Login without password Inici de sessió sense contrasenya Delete current account Elimina el compte actual Group setting Configuració del grup Account groups Grups de comptes done fet Group name Nom del grup Add group Afegeix-hi un grup Auto login Entrada automàtica Account Information Informació del compte Account name, account fullname, account type Nom del compte, nom complet del compte, tipus de compte Account name Nom del compte Account fullname Nom complet del compte Account type Tipus de compte The full name is too long El nom complet és massa llarg. Group names should be no more than 32 characters Els noms dels grups no haurien de superar els 32 caràcters. Group names cannot only have numbers Els noms dels grups no poden contenir només números. Use letters,numbers,underscores and dashes only, and must start with a letter Useu només lletres, números, guions baixos i guions, i ha de començar amb una lletra. The group name has been used Aquest nom de grup ja s'usa. quick login, Auto login, login without password inici de sessió ràpid, entrada automàtica, entrada sense contrasenya Undo Desfés Redo Refés Cut Retalla Copy Copia Paste Enganxa Select All Selecciona-ho tot Quick login Entrada ràpida Accounts Account Compte Account manager Gestor de comptes AccountsMain Other accounts Altres comptes AddFaceinfoDialog Enroll Face Apunteu la cara I have read and agree to the Ho he llegit i ho accepto: Disclaimer Exempció de responsabilitat Next Següent Face enrolled Cara apuntada Failed to enroll your face No s'ha pogut registrar la cara. Done Fet Cancel Cancel·la Retry Enroll Torna a provar la inscripció Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. El reconeixement facial no admet la detecció de la presència viva, i el mètode de verificació pot comportar riscos. Per garantir una entrada correcta: 1. Mantingueu els trets facials clarament visibles i no els cobriu (barrets, ulleres de sol, màscares, etc.). 2. Assegureu-vos que hi hagi prou il·luminació i eviteu la llum solar directa. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. L'autenticació biomètrica ​​és una funció per a l'autenticació de la identitat de l'usuari proporcionada per UnionTech Software Technology Co., Ltd. Mitjançant l'autenticació biomètrica, les dades biomètriques recollides es compararan amb les emmagatzemades al dispositiu i la identitat de l'usuari es verificarà en funció del resultat de la comparació. Tingueu en compte que UnionTech Software Technology Co., Ltd. no recopilarà ni accedirà a la vostra informació biomètrica, que s'emmagatzemarà al vostre dispositiu local. Si us plau, activeu l'autenticació biomètrica només al dispositiu personal i useu la pròpia informació biomètrica per a operacions relacionades, i desactiveu o elimineu immediatament la informació biomètrica d'altres persones en aquest dispositiu; en cas contrari, assumireu el risc que se'n derivi. UnionTech Software Technology Co., Ltd. es compromet a investigar i millorar la seguretat, la precisió i l'estabilitat de l'autenticació biomètrica. Tanmateix, a causa de factors ambientals, d'equipament, tècnics i altres factors, i del control de riscos, no hi ha cap garantia que supereu sempre l'autenticació biomètrica. Per tant, no useu l'autenticació biomètrica com a única manera d'iniciar sessió a l'UOS. Si teniu cap pregunta o suggeriment sobre l'ús de l'autenticació biomètrica, podeu enviar comentaris a través del Servei i assistència a UOS. AddFingerDialog Cancel Cancel·la Done Fet Enroll Finger Apunteu la cara Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Col·loqueu el dit que voleu introduir al sensor d'empremtes digitals i moveu-lo de baix a dalt. Després de completar l'acció, aixequeu-ne el dit. I have read and agree to the Ho he llegit i ho accepto: Disclaimer Exempció de responsabilitat Next Següent Retry Enroll Torna a provar la inscripció "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. L'autenticació biomètrica ​​és una funció per a l'autenticació de la identitat d'usuari proporcionada per UnionTech Software Technology Co., Ltd. Mitjançant l'autenticació biomètrica, les dades biomètriques recollides es compararan amb les emmagatzemades al dispositiu i la identitat de l'usuari es verificarà en funció del resultat de la comparació. Tingueu en compte que UnionTech Software Technology Co., Ltd. no recopilarà ni accedirà a la vostra informació biomètrica, que s'emmagatzemarà al vostre dispositiu local. Si us plau, habiliteu l'autenticació biomètrica només al dispositiu personal i useu la pròpia informació biomètrica per a les operacions relacionades, i desactiveu o suprimiu immediatament la informació biomètrica d'altres persones en aquest dispositiu, en cas contrari assumiu el risc que se'n derivi. UnionTech Software Technology Co., Ltd. es compromet a investigar i millorar la seguretat, la precisió i l'estabilitat de l'autenticació biomètrica. No obstant això, a causa de factors ambientals, d'equipament, tècnics i d'altres, i control de riscos, no hi ha cap garantia que es passi l'autenticació biomètrica temporalment. Per tant, no useu l'autenticació biomètrica com a única manera d'iniciar sessió a UOS. Si teniu cap pregunta o suggeriment quan useu l'autenticació biomètrica, podeu fer comentaris mitjançant Servei i assistència a UOS. AddIrisDialog Enroll Iris Apunteu l'iris I have read and agree to the Ho he llegit i ho accepto: Disclaimer Exempció de responsabilitat Next Següent Done Fet Cancel Cancel·la Retry Enroll Torna a provar la inscripció Iris enrolled Iris apuntat Failed to enroll your iris No s'ha pogut registrar l'iris. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. L'autenticació biomètrica ​​és una funció per a l'autenticació de la identitat de l'usuari proporcionada per UnionTech Software Technology Co., Ltd. Mitjançant l'autenticació biomètrica, les dades biomètriques recollides es compararan amb les emmagatzemades al dispositiu i la identitat de l'usuari es verificarà en funció del resultat de la comparació. Tingueu en compte que UnionTech Software Technology Co., Ltd. no recopilarà ni accedirà a la vostra informació biomètrica, que s'emmagatzemarà al vostre dispositiu local. Si us plau, activeu l'autenticació biomètrica només al dispositiu personal i useu la pròpia informació biomètrica per a operacions relacionades, i desactiveu o elimineu immediatament la informació biomètrica d'altres persones en aquest dispositiu; en cas contrari, assumireu el risc que se'n derivi. UnionTech Software Technology Co., Ltd. es compromet a investigar i millorar la seguretat, la precisió i l'estabilitat de l'autenticació biomètrica. Tanmateix, a causa de factors ambientals, d'equipament, tècnics i altres factors, i del control de riscos, no hi ha cap garantia que supereu sempre l'autenticació biomètrica. Per tant, no useu l'autenticació biomètrica com a única manera d'iniciar sessió a l'UOS. Si teniu cap pregunta o suggeriment sobre l'ús de l'autenticació biomètrica, podeu enviar comentaris a través del Servei i assistència a UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Si us plau, mireu el dispositiu i assegureu-vos que tots dos ulls siguin dins de la zona de captació. Authentication Biometric Authentication Autenticació biomètrica AuthenticationMain Biometric Authentication Autenticació biomètrica Face Cara Up to 5 facial data can be entered Es poden introduir fins a 5 dades facials. Fingerprint Empremta Identifying user identity through scanning fingerprints Identificació de la identitat de l'usuari mitjançant l'escaneig d'empremtes Iris Iris Identity recognition through iris scanning Reconeixement de la identitat mitjançant l'escaneig de l'iris Use letters, numbers and underscores only, and no more than 15 characters Useu només lletres, números i guionets baixos, i no més de 15 caràcters. Use letters, numbers and underscores only Useu només lletres, números i guionets baixos. No more than 15 characters No ha de tenir més de 15 caràcters. This name already exists Aquest nom ja existeix. Add a new %1 ... Afegiu-hi un/a %1 nou/nova... The name cannot be empty El nom no es pot deixar en blanc. AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first L'inici de sessió automàtic només es pot activar per a un compte. Primer desactiveu-lo per al compte %1. Ok D'acord AvatarSettingsDialog Images Imatges Human Humà Animal Animal Scenery Paisatge Illustration Il·lustració Emoji Emoticona custom personalitzat Cartoon style Estil de dibuixos animats Dimensional style Estil dimensional Flat style Estil pla Cancel Cancel·la Save Desa BatteryPage Screen and Suspend Pantalla i suspensió Turn off the monitor after Atura el monitor al cap de... Lock screen after Bloca la pantalla al cap de... Computer suspends after L'ordinador es posarà en suspens al cap de... When the lid is closed Quan la tapa estigui tancada When the power button is pressed Quan es premi el botó d'engegada Low Battery Bateria baixa Low battery notification Notificació de bateria baixa Auto suspend Suspèn automàticament Auto Hibernate Hiberna automàticament Low battery threshold Llindar de bateria baixa Battery Management Gestió de la bateria Display remaining using and charging time Mostra el temps restant d’ús i de càrrega Maximum capacity Capacitat màxima Low battery level Nivell de bateria baix Disable Inhabilita BlueTooth Bluetooth settings, devices Configuració del bluetooth, dispositius Bluetooth Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" El Bluetooth està desactivat i el nom es mostra com a %1 Bluetooth is turned on, and the name is displayed as "%1" El Bluetooth està activat i el nom es mostra com a %1 BlueToothDeviceListView Disconnect Desconnecta Connect Connecta Send Files Envia fitxers Rename Canvia'n el nom Remove Device Elimina el dispositiu Select file Seleccioneu el fitxer BluetoothCtl Edit Edita Allow other Bluetooth devices to find this device Permet que altres dispositius de Bluetooth trobin aquest dispositiu. To use the Bluetooth function, please turn off Per usar la funció de Bluetooth, desactiveu el següent: Airplane Mode Mode d'avió Bluetooth name cannot exceed 64 characters El nom del Bluetooth no pot superar els 64 caràcters. BluetoothDeviceModel Connected Connectat Not connected No connectat BootPage Startup Settings Configuració d'inici You can click the menu to change the default startup items, or drag the image to the window to change the background image. Podeu clicar al menú per canviar els elements d'inici predeterminats o arrossegar la imatge a la finestra per canviar la imatge de fons. grub start delay retard de l'inici del grub theme tema After turning on the theme, you can see the theme background when you turn on the computer Després d'activar el tema, podeu veure'n el fons quan engegueu l'ordinador. Boot menu verification Verificació del menú d'arrencada After opening, entering the menu editing requires a password. Després de l'obertura, entrar al menú d'edició requereix una contrasenya. Change Password Canvia la contrasenya Change boot menu verification password Canvia la contrasenya de verificació del menú d'arrencada. Set the boot menu authentication password Establiu la contrasenya d'autenticació del menú d'arrencada. User Name : Nom d'usuari: root arrel New Password : Contrasenya nova: Required Cal Password cannot be empty La contrasenya no pot estar en blanc. Passwords do not match Les contrasenyes no coincideixen. Repeat password: Repetiu la contrasenya: Cancel Cancel·la Sure Desa Start animation Animació de l'inici Adjust the size of the logo animation on the system startup interface Ajusta la mida de l'animació del logotip a la interfície d'inici del sistema. Camera Allow below apps to access your camera: Permet que les aplicacions següents accedeixin a la càmera: CharaMangerModel Fingerprint1 Empremta1 Fingerprint2 Empremta2 Fingerprint3 Empremta3 Fingerprint4 Empremta4 Fingerprint5 Empremta5 Fingerprint6 Empremta6 Fingerprint7 Empremta7 Fingerprint8 Empremta8 Fingerprint9 Empremta9 Fingerprint10 Empremta10 Scan failed Ha fallat l'escaneig. The fingerprint already exists L'empremta ja existeix. Please scan other fingers Si us plau, escanegeu altres dits. Unknown error Error desconegut Scan suspended Escaneig suspès Cannot recognize No es pot reconèixer Moved too fast S'ha mogut massa de pressa. Finger moved too fast, please do not lift until prompted El dit s'ha mogut massa de pressa. Si us plau, no l'alceu fins que s'avisi. Unclear fingerprint L'empremta no és clara. Clean your finger or adjust the finger position, and try again Netegeu-vos el dit o ajusteu-ne la posició i torneu-ho a provar. Already scanned Ja s'ha escanejat. Adjust the finger position to scan your fingerprint fully Ajusteu la posició del dit per escanejar-ne tota l'empremta. Finger moved too fast. Please do not lift until prompted El dit s'ha mogut massa de pressa. Si us plau, no l'alceu fins que s'avisi. Lift your finger and place it on the sensor again Alceu el dit i torneu-lo a posar sobre el sensor. Position your face inside the frame Col·loqueu la cara dins del marc Face enrolled Cara apuntada Position a human face please Si us plau, col·loqueu-hi una cara humana. Keep away from the camera Allunyeu-vos de la càmera Get closer to the camera Apropeu-vos a la càmera Do not position multiple faces inside the frame No col·loqueu diverses cares dins del marc. Make sure the camera lens is clean Assegureu-vos que la lent de la càmera estigui neta. Do not enroll in dark, bright or backlit environments No us registreu en entorns foscos, lluminosos o retroil·luminats. Keep your face uncovered Mantingueu la cara descoberta. Scan timed out S'ha esgotat el temps d'escaneig. Cancel Cancel·la Camera occupied! Càmera ocupada! ColorAndIcons Accent Color Color del realçament Icon Settings Paràmetres de la icona Icon Theme Tema de les icones Customize your theme icon Personalitzeu el tema de les icones Cursor Theme Tema del cursor Customize your theme cursor Personalitzeu el tema del cursor ComfirmDeleteDialog Are you sure you want to delete this account? Segur que voleu eliminar aquest compte? Delete account directory Elimina el directori del compte Cancel Cancel·la Delete Elimina ComfirmSafePage Go to settings Ves a la configuració Cancel Cancel·la Common Common Comú Repeat delay Retard de la repetició Short Breu Long Llarg Repeat rate Freqüència de la repetició Slow Lenta Fast Ràpida Numeric Keypad Teclat numèric test here prova Caps lock prompt Indicador de blocatge de majúscules Double Click Speed Velocitat del clic doble Double Click Test Prova del clic doble Left Hand Mode Mà esquerra Enable Keyboard Habilita el teclat General General Scrolling Speed Velocitat del desplaçament CommonInfoMain Boot Menu Menú d'arrencada Manage your boot menu Gestioneu el menú d'arrencada Developer root permission management Gestió de permisos d'arrel del desenvolupador Developer Options Opcions de desenvolupament Developer debugging options Opcions de depuració per a desenvolupadors CommonInfoWork Large size Mida grossa Small size Mida petita Failed to get root access Ha fallat obtenir l'accés d'arrel. Please sign in to your Union ID first Si us plau, primer inicieu la sessió a l'ID d'Union. Cannot read your PC information No es pot llegir la informació de l'ordinador. No network connection No hi ha connexió de xarxa. Certificate loading failed, unable to get root access Ha fallat la càrrega del certificat. No s'ha pogut obtenir l'accés d'arrel. Signature verification failed, unable to get root access Ha fallat la verificació de la signatura. No es pot aconseguir accés d'arrel. Agree and Join User Experience Program Hi estic d'acord i m'uneixo al programa d'experiència de l'usuari. The Disclaimer of Developer Mode Exempció de responsabilitat del mode de desenvolumpador Agree and Request Root Access Ho accepto i demana l'accés d'arrel Start setting the new boot animation, please wait for a minute Comenceu a configurar una animació d'arrencada nova. Espereu un minut... Setting new boot animation finished S'ha acabat la configuració de l'animació d'arrencada nova. The settings will be applied after rebooting the system La configuració s'aplicarà després de reiniciar el sistema. Restart now Reinicia't ara Dismiss Descarta-ho Restart device to finish applying Solid System Read-Only Protection settings Reinicieu el dispositiu per acabar d'aplicar la configuració de la protecció de només lectura del sistema sòlid. ConfirmManager Password must contain numbers and letters La contrasenya ha de contenir números i lletres. Password must be between 8 and 64 characters La contrasenya ha de tenir entre 8 i 64 caràcters. CreateAccountDialog Create a new account Crea un compte nou Account type Tipus de compte UserName Nom d'usuari Required Cal FullName Nom complet Optional Opcional Cancel Cancel·la Create account Crea el compte Username cannot exceed 32 characters El nom d'usuari no pot superar els 32 caràcters. Username can only contain letters, numbers, - and _ El nom d'usuari només pot contenir lletres, números, - i _ Full name cannot exceed 32 characters El nom complet no pot superar els 32 caràcters. Full name cannot contain colons El nom complet no pot contenir dos punts. CustomAvatarCropper small petita big grossa CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Encara no heu penjat cap avatar. Cliqueu aquí o arrossegueu-hi una imatge i deixeu-la-hi anar. The uploaded file type is incorrect, please upload it again El tipus de fitxer carregat és incorrecte, torneu-lo a carregar. DCC_NAMESPACE::SystemInfoModel available disponible DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Hi estic d'acord i m'uneixo al programa d'experiència de l'usuari. <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>Som profundament conscients de la importància de la informació personal per a vosaltres. Per això, tenim la Política de privadesa que cobreix com recopilem, usem, compartim, transferim, divulguem públicament i emmagatzemem la vostra informació.</p><p> Podeu <a href="%1">fer clic aquí</a> per veure la nostra política de privadesa més recent i/o veure-la en línia a <a href="%1">%1</a>. Llegiu atentament i mireu d'entendre completament les nostres pràctiques sobre la privadesa del client. Si teniu cap pregunta, poseu-vos en contacte amb nosaltres a %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Unir-se al Programa d'experiència d'usuari significa que ens concediu i ens autoritzeu la recopilació i l'ús de la informació del vostre dispositiu, del sistema i de les aplicacions. Si rebutgeu la recopilació i l'ús de la informació esmentada anteriorment, no us uniu al Programa d'experiència d'usuari. Per a més informació, consulteu la Política de privacitat de Deepin. (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">Unir-se al Programa d'experiència d'usuari significa que ens concediu i ens autoritzeu la recopilació i l'ús de la informació del vostre dispositiu, del sistema i de les aplicacions. Si rebutgeu la recopilació i l'ús de la informació esmentada anteriorment, no us hi uniu. Per obtenir més informació sobre el Programa d'experiència d'usuari, visiteu </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Configuració del dia i l'hora Date Data Year Any Month Mes Day Dia Time Hora Cancel Cancel·la Confirm Confirmeu-ho Datetime Time and date Hora i data Time and date, time zone settings Hora i data, configuració de la zona horària DatetimeMain Language and region Llengua i regió System language, regional formats Llengua del sistema, formats de regió DatetimeModel Tomorrow Demà Yesterday Ahir Today Avui %1 hours earlier than local %1 hores menys que la d'aquí %1 hours later than local %1 hores més que la d'aquí Space Espai Week Setmana First day of week Primer dia de la setmana Short date Data abreujada Long date Data ampliada Short time Hora abreujada Long time Hora ampliada Currency symbol Símbol de la moneda Positive currency Format de moneda positiu Negative currency Format de moneda negatiu Decimal symbol Símbol decimal Digit grouping symbol Símbol d'agrupació de dígits Digit grouping Agrupació de dígits Page size Mida de pàgina Example Exemple DatetimeWorker Authentication is required to change NTP server Cal autenticació per canviar el servidor NTP. Authentication is required to set the system timezone Cal autenticació per establir la zona horària del sistema. DccColorDialog Cancel Cancel·la Save Desa DccWindow Control Center provides the options for system settings. El Centre de control proporciona les opcions per a la configuració del sistema. DeepinIDAccountSecurity Bind WeChat Vincle amb WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. En vincular-hi el WeChat, podeu iniciar sessió de manera segura i ràpida a l'ID d'%1 i als comptes locals. Unlinked Desenllaçat Unbinding Desvinculació Link Enllaça Are you sure you want to unbind WeChat? Segur que voleu desvincular el WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Després de desvincular el WeChat, no podreu usar el WeChat per escanejar el codi QR per iniciar sessió a l'ID d'%1 o al compte local. Let me think it over Deixa-m'ho pensar Local Account Binding Vinculació de comptes locals After binding your local account, you can use the following functions: Després de vincular el compte local, podeu usar les funcions següents: WeChat Scan Code Login System Sistema d'inici de sessió amb escaneig de codi del WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Useu WeChat, que està vinculat a l'ID d'%1, per escanejar el codi per iniciar sessió al vostre compte local. Reset password via %1 ID Restableix la contrasenya amb l'ID d'%1. Reset your local password via %1 ID in case you forget it. Restabliu la contrasenya local mitjançant l'ID d'%1 en cas que l'oblideu. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Per usar les funcions anteriors, aneu al Centre de control - Comptes i activeu les opcions corresponents. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Sincronització amb el núvol Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Gestioneu el vostre ID d'%1 i sincronitzeu les dades personals entre dispositius. Inicieu la sessió a l'ID d'%1 per obtenir funcions i serveis personalitzats del navegador, botiga d'aplicacions, assistència i molt més. Sign In to %1 ID Inicieu la sessió a l'ID d'%1 DeepinIDSyncService Auto Sync Sincronització automàtica Securely store system settings and personal data in the cloud, and keep them in sync across devices Deseu de manera segura la configuració del sistema i les dades personals al núvol i manteniu-les sincronitzades entre dispositius. System Settings Configuració del sistema Last sync time: %1 Darrera sincronització: %1 Clear cloud data Neteja les dades del núvol Are you sure you want to clear your system settings and personal data saved in the cloud? Segur que voleu esborrar la configuració del sistema i les dades personals desades al núvol? Once the data is cleared, it cannot be recovered! Un cop esborrades les dades, no es poden recuperar! Cancel Cancel·la Clear Neteja DeepinIDUserInfo Synchronization Service Serveis de sincronització Account and Security Compte i seguretat Sign out Surt de la sessió Go to web settings Ves a la configuració web The nickname must be 1~32 characters long El sobrenom ha de tenir entre 1 i 32 caràcters. DeepinWorker encrypt password failed ha fallat encriptar la contrasenya Wrong password, %1 chances left Contrasenya incorrecta. Us queden %1 intents. The login error has reached the limit today. You can reset the password and try again. El nombre d'errors d'inici de sessió ha arribat al límit avui. Podeu restablir la contrasenya i tornar-ho a provar. Operation Successful Operació reeixida The nickname can be modified only once a day El sobrenom només es pot modificar una vegada al dia. Deepinid deepin ID ID del Deepin UOS ID ID d'UOS Cloud services Serveis al núvol DeepinidModel Mainland China Xina continental Other regions Altres regions The feature is not available at present, please activate your system first La funció no està disponible actualment. Si us plau, primer activeu el sistema. Subject to your local laws and regulations, it is currently unavailable in your region. D'acord amb les lleis i regulacions locals, actualment no està disponible a la vostra regió. Defaultapp Default App Aplicació per defecte Set the default application for opening various types of files Establiu l'aplicació predeterminada per obrir diferents tipus de fitxers. DefaultappMain Webpage Pàgina web Mail Correu Text Text Music Música Video Vídeo Picture Imatge Terminal Terminal DetailItem Please choose the default program to open '%1' Si us plau, trieu el programa predeterminat per obrir %1. add Afegeix Open Desktop file Obre un fitxer d'escriptori Apps (*.desktop) Aplicacions (*.desktop) All files (*) Tots els fitxers (*) DevelopModePage Root Access Accés d'arrel Request Root Access Demana l'accés d'arrel After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Després d'entrar al mode de desenvolupador, podeu obtenir permisos d'arrel, però això també pot danyar la integritat del sistema, així que useu-lo amb precaució. Allowed Permès Enter Entreu Online En línia Login UOS ID Inici de sessió d'ID d'UOS Offline Fora de línia Import Certificate Importa el certificat Select file Seleccioneu el fitxer Your UOS ID has been logged in, click to enter developer mode S'ha iniciat la sessió amb el vostre ID d'UOS, cliqueu per entrar al mode de desenvolupador. Please sign in to your UOS ID first and continue Si us plau, primer inicieu la sessió a l'ID d'UOS i continueu. 1.Export PC Info 1. Exporteu la informació de l'ordinador Export Exporta 3.Import Certificate 3. Importeu el certificat Development and debugging options Opcions de desenvolupament i depuració System logging level Nivell de registre del sistema Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Canviar les opcions es tradueix en un registre més detallat que pot degradar el rendiment del sistema i/o ocupar més espai d'emmagatzematge. Off Desactivat Debug Depuració Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. El canvi d'opció pot trigar fins a un minut a processar-se; després de rebre una sol·licitud de configuració correcta, reinicieu el dispositiu perquè tingui efecte. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. Per instal·lar i executar aplicacions sense signar, aneu al <a style='text-decoration: none;' href='Security Center'>Centre de seguretat</a> per canviar la configuració. To install and run unsigned apps, please go to Security Center to change the settings. Per instal·lar i executar aplicacions sense signar, aneu al Centre de seguretat per canviar-ne la configuració. You have entered developer mode Heu entrat al mode de desenvolupador OK D'acord 2.please go to %1 to Download offline certificate. 2. Si us plau, aneu a %1 per descarregar el certificat fora de línia. The feature is not available at present, please activate your system first. La funció no està disponible actualment. Si us plau, primer activeu el sistema. Solid System Read-Only Protection Protecció de només lectura de sistema sòlid Disabling protection unlocks system directories,This action carries a high risk of system damage. La desactivació de la protecció desbloca els directoris del sistema. Aquesta acció comporta un risc alt de danys al sistema. Enable protection to lock system directories and ensure optimal stability. Activeu la protecció per blocar els directoris del sistema i garantir una estabilitat òptima. Device Bluetooth and Devices Bluetooth i dispositius DisclaimerControl Disclaimer Exempció de responsabilitat Cancel Cancel·la Agree Hi estic d'acord Display Display Mostra Brightness,resolution,scaling Brillantor, resolució, escala DisplayMain 100% 100 % 125% 125 % 150% 150 % 175% 175 % 200% 200 % 225% 225 % 250% 250 % 275% 275 % 300% 300 % Duplicate Duplica'l Extend Estén-lo Default Per defecte Fit Ajusta'l Stretch Estira'l Center Centra'l Only on %1 Només a %1 Multiple Displays Settings Configuració de pantalles múltiples Identify Identifica-les Screen rearrangement will take effect in %1s after changes El restabliment de la pantalla tindrà efecte %1s després dels canvis. Mode Mode Main Screen Pantalla principal Display And Layout Pantalla i disposició Brightness Brillantor Resolution Resolució Resize Desktop Canvia la mida de l'escriptori Refresh Rate Freqüència d'actualització Rotation Rotació Standard Estàndard 90° 90° 180° 180° 270° 270° The monitor only supports 100% display scaling El monitor només admet un escalatge del 100 %. Eye Comfort Confort ocular Enable eye comfort Activa el confort ocular Adjust screen display to warmer colors, reducing screen blue light Ajusta la visualització de la pantalla a colors més càlids i redueix la llum blava de la pantalla. Time Hora All day Tot el dia Sunset to Sunrise De la posta a la sortida del sol Custom Time Hora personalitzada from de to a Color Temperature Temperatura del color %1x%2 (Recommended) %1 x %2 (recomanat) %1x%2 %1 x %2 %1Hz (Recommended) %1 Hz (recomanat) %1Hz %1 Hz Scaling Escalatge Dock Desktop and taskbar Escriptori i barra de tasques Desktop organization, taskbar mode, plugin area settings Organització de l'escriptori, mode de la barra de tasques, configuració de l'àrea de connectors DockMain Dock Acoblador Mode Mode Classic Mode Mode clàssic Centered Mode Mode centrat Dock size Mida de l'acoblador Small Petita Large Grossa Position on the screen Posició a la pantalla Top A dalt Bottom A baix Left A l'esquerra Right A la dreta Status Estat Keep shown Mantén-lo visible Keep hidden Mantén-lo amagat Smart hide Ocultació intel·ligent Multiple Displays Pantalles múltiples Set the position of the taskbar on the screen Establiu la posició de la barra de tasques a la pantalla. Only on main Només a la principal On screen where the cursor is A la pantalla on hi ha el cursor Plugin Area Àrea de connectors Select which icons appear in the Dock Seleccioneu quines icones apareixen a l'acoblador. Lock the Dock Bloca l'acoblador Combine application icons Combina les icones d'aplicacions FileAndFolder Allow below apps to access these files and folders: Permet que les aplicacions següents accedeixin a aquests fitxers i carpetes: Documents Documents Desktop Escriptori Pictures Imatges Videos Vídeos Music Música Downloads Baixades folder carpeta FontSizePage Size Mida Standard Font Lletra estàndard Monospaced Font Lletra d'un sol espai GeneralPage Power Plans Plans d'energia Power Saving Settings Configuració de l'estalvi d'energia Auto power saving on low battery Estalvi d'energia automàtic amb la bateria baixa Low battery threshold Llindar de bateria baixa Auto power saving on battery Estalvi d'energia automàtic amb la bateria Wakeup Settings Configuració del despertament Password is required to wake up the computer Cal la contrasenya per despertar l'ordinador. Password is required to wake up the monitor Cal la contrasenya per despertar el monitor.. Shutdown Settings Configuració de l'aturada Scheduled Shutdown Aturada programada Time Hora Repeat Repeteix Once Un cop Every day Cada dia Working days Els dies feiners Custom Time Hora personalitzada Decrease screen brightness on power saver Disminueix la brillantor de la pantalla amb l'estalvi d'energia. GestureModel Three-finger up Tres dits cap amunt Three-finger down Tres dits cap avall Three-finger left Tres dits cap a l'esquerra Three-finger right Tres dits cap a la dreta Three-finger tap Toc amb tres dits Four-finger up Quatre dits cap amunt Four-finger down Quatre dits cap avall Four-finger left Quatre dits cap a l'esquerra Four-finger right Quatre dits cap a la dreta Four-finger tap Toc amb quatre dits HomePage , , ... ... InterfaceEffectListview Optimal Performance Rendiment òptim Balance Equilibrat Best Visuals La millor visualització Disable all interface and window effects for efficient system performance. Inhabilita tots els efectes de la interfície i de les finestres per obtenir un rendiment eficient del sistema. Limit some window effects for excellent visuals while maintaining smooth system performance. Limita alguns efectes de les finestres per obtenir una visualització excel·lent i mantenir un bon rendiment del sistema. Enable all interface and window effects for the best visual experience. Habilita tots els efectes de la interfície i les finestres per obtenir la millor experiència visual. Keyboard Keyboard Teclat General Settings, input method, shortcuts Configuració general, mètode d'entrada, dreceres KeyboardMain Common Comú LangAndFormat Language Llengua done fet edit edita Other languages Altres llengües add Afegeix Region Regió Area Àrea Operating system and applications may provide you with local content based on your country and region El sistema operatiu i les aplicacions poden proporcionar-vos contingut local segons el país i regió. Operating system and applications may set date and time formats based on regional formats El sistema operatiu i les aplicacions poden establir formats de data i hora basats en formats regionals. Regional format Format de la regió LangsChooserDialog Add language Afegiu-hi una llengua Search Cerca Cancel Cancel·la Add Afegeix LoginMethod Login method Mètode d'inici de sessió Password, wechat, biometric authentication, security key Contrasenya, wechat, autenticació biomètrica, clau de seguretat Password Contrasenya Modify password Modifica la contrasenya Validity days Dies de validesa Always Sempre Reset password Restableix la contrasenya LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Comunitat del Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Supressió automàtica del soroll Input Volume Volum d'entrada Input Level Nivell d'entrada Input Entrada No input device for sound found No s'ha trobat cap dispositiu d'entrada per al so. Input Device Dispositiu d'entrada Mouse Mouse and Touchpad Ratolí i ratolí tàctil Common、Mouse、Touchpad Comú, ratolí, ratolí tàctil MouseMain Common Comú Mouse Ratolí Touchpad Ratolí tàctil MousePage Mouse Ratolí Pointer Speed Velocitat del punter Slow Lenta Fast Ràpida Pointer Size Mida del punter Mouse Acceleration Acceleració del ratolí Disable touchpad when a mouse is connected Inhabilita el ratolí tàctil en connectar un ratolí. Natural Scrolling Desplaçament natural Small Petita Medium Mitjà Large Grossa X-Large Molt grossa Some apps require logout or system restart to take effect Algunes aplicacions requereixen tancar la sessió o reiniciar el sistema per tenir efecte. MyDevice My Devices Els meus dispositius NativeInfoPage UOS UOS Computer name Nom de l'ordinador It cannot start or end with dashes No pot començar ni acabar amb guionets. OS Name Nom del sistema Version Versió Edition Edició Type Tipus bit bits Authorization Autorització System installation time Hora d'instal·lació del sistema Kernel Nucli Graphics Platform Plataforma gràfica Processor Processador Memory Memòria 1~63 characters please D'1 a 63 caràcters, si us plau. Notification DND mode, app notifications Mode sense destorbs, notificacions d'aplicacions Notification Notificació NotificationMain Do Not Disturb Settings Configuració del mode de no empipar App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Les notificacions d'aplicacions no es mostraran a l'escriptori i no n'hi haurà cap indicació sonora, però les podreu veure totes al centre de notificacions. Enable Do Not Disturb Habilita el mode de no empipar When the screen is locked Quan la pantalla estigui blocada Number of notifications shown on the desktop Nombre de notificacions que es mostren a l'escriptori App Notifications Notificacions de les aplicacions Allow Notifications Permet les notificacions Display notification on desktop or show unread messages in the notification center Mostra la notificació a l'escriptori o mostra missatges no llegits al centre de notificacions. Desktop Escriptori Lock Screen Pantalla de blocatge Notification Center Centre de notificacions Show message preview Mostra la previsualització del missatge Play a sound Reprodueix un so OtherDevice Other Devices Altres dispositius Show Bluetooth devices without names Mostra els dispositius de Bluetooth sense noms. PasswordLayout Current password Contrasenya actual Required Cal Weak Dèbil Medium Mitjana Strong Forta Repeat Password Repetiu la contrasenya Password hint Pista de la contrasenya Optional Opcional Password cannot be empty La contrasenya no pot estar en blanc. Passwords do not match Les contrasenyes no coincideixen. The hint is visible to all users. Do not include the password here. La pista és visible per a tots els usuaris. No hi poseu la contrasenya. New password Contrasenya nova New password should differ from the current one La contrasenya nova hauria de ser diferent de l'actual. The password cannot be the same as the username. La contrasenya no pot ser la mateixa que el nom d'usuari. PasswordModifyDialog Modify password Modifica la contrasenya Reset password Restableix la contrasenya Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. La llargada de la contrasenya ha de ser d'almenys 8 caràcters i ha de contenir una combinació d'almenys 3 dels elements següents: lletres majúscules, lletres minúscules, números i símbols. Aquest tipus de contrasenya és més segura. Resetting the password will clear the data stored in the keyring. Restablir la contrasenya esborrarà les dades emmagatzemades al clauer. Cancel Cancel·la Personalization Personalization Personalització PersonalizationInterface Light Clar Auto Automàtic Dark Fosc Picker service is not available El servei del selector no està disponible. Invalid color format: %1 Format de color no vàlid: %1 PersonalizationMain Theme Tema Appearance Aparença Window effect Efectes de les finestres Personalize your wallpaper and screensaver Personalitzeu el fons i l'estalvi de pantalla Screensaver Estalvi de pantalla Colors and icons Colors i icones Adjust accent color and theme icons Ajusteu el color d'accentuació i les icones del tema Font and font size Tipus i mida de la lletra Change system font and size Canvieu el tipus i la mida de la lletra del sistema Wallpaper Fons de pantalla Select light, dark or automatic theme appearance Seleccioneu l'aspecte del tema: clar, fosc o automàtic. Interface and effects, rounded corners Interfície i efectes, cantons arrodonits PersonalizationWorker Custom Personalitzat PluginArea Plugin Area Àrea de connectors Select which icons appear in the Dock Seleccioneu quines icones apareixen a l'acoblador. Power Power saving settings, screen and suspend Configuració de l'estalvi d'energia, la pantalla i la suspensió Power Energia PowerMain General General Power plans, power saving settings, wakeup settings, shutdown settings Plans d'energia, paràmetres d'estalvi d'energia, paràmetres del despertament, configuració de l'apagada Plugged In Connectat Screen and suspend Pantalla i suspensió On Battery Amb la bateria screen and suspend, low battery, battery management pantalla i suspensió, bateria baixa, gestió de la bateria PowerOperatorModel Shut down Atura't Suspend Suspèn-te Hibernate Hiberna Turn off the monitor Desactiva el monitor Show the shutdown Interface Mostra la interfície d'aturada. Do nothing No facis res. PowerPage Screen and Suspend Pantalla i suspensió Turn off the monitor after Atura el monitor al cap de... Lock screen after Bloca la pantalla al cap de... Computer suspends after L'ordinador es posarà en suspens al cap de... When the lid is closed Quan la tapa estigui tancada When the power button is pressed Quan es premi el botó d'engegada PowerPlansListview High Performance Rendiment alt Balance Performance Rendiment equilibrat Aggressively adjust CPU operating frequency based on CPU load condition Ajusta agressivament la freqüència de funcionament de la CPU segons les condicions de càrrega de la CPU. Balanced Equilibrat Power Saver Estalviador d'energia Prioritize performance, which will significantly increase power consumption and heat generation Prioritza el rendiment. Augmentarà significativament el consum d'energia i la generació de calor. Balancing performance and battery life, automatically adjusted according to usage Equilibra el rendiment i la durada de la bateria. S'ajusta automàticament segons l'ús. Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Prioritza la durada de la bateria. El sistema sacrificarà una mica de rendiment per reduir el consum d'energia. PowerWorker Minutes Minuts Hour Hora Never Mai Privacy Privacy and Security Privadesa i seguretat Camera, folder permissions Càmera, permisos de les carpetes PrivacyMain Camera Càmera Choose whether the application has access to the camera Trieu si l'aplicació té accés a la càmera. Files and Folders Fitxers i carpetes Choose whether the application has access to files and folders Trieu si l'aplicació té accés a fitxers i carpetes. PrivacyPolicyPage Privacy Policy Política de privadesa Copy Link Address Copia l'adreça de l'enllaç PwqualityManager Password cannot be empty La contrasenya no pot estar en blanc. Password must have at least %1 characters La contrasenya ha de tenir com a mínim %1 caràcters. Password must be no more than %1 characters La contrasenya no ha de tenir més de %1 caràcters. Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) La contrasenya només pot contenir caràcters en anglès (majúscules o minúscules), números o símbols especials (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/). No more than %1 palindrome characters please Com a màxim %1 caràcters palíndroms, si us plau. No more than %1 monotonic characters please Com a màxim %1 caràcters monòtons, si us plau. No more than %1 repeating characters please Com a màxim %1 caràcters repetits, si us plau. Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) La contrasenya ha de tenir lletres majúscules, minúscules, números i símbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/). Password must not contain more than 4 palindrome characters La contrasenya no ha de contenir més de 4 caràcters palíndroms. Do not use common words and combinations as password No useu paraules i combinacions habituals com a contrasenya. Create a strong password please Si us plau, creeu una contrasenya forta. It does not meet password rules No compleix les regles de la contrasenya. QObject Control Center Centre de control Activated Activat View Visualització To be activated Per ser activat Activate Activa Expired Caducat In trial period En un període de prova Trial expired S'ha esgotat el període de prova. dde-control-center dde-control-center Touch Screen Settings Configuració de la pantalla tàctil The settings of touch screen changed La configuració de la pantalla tàctil ha canviat. This system wallpaper is locked. Please contact your admin. Aquest fons de pantalla del sistema està blocat. Poseu-vos en contacte amb l'administrador. %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search Cerca Default formats Formats per defecte First day of week Primer dia de la setmana Short date Data abreujada Long date Data ampliada Short time Hora abreujada Long time Hora ampliada Currency symbol Símbol de la moneda Digit Dígit Paper size Mida del paper Cancel Cancel·la Save Desa Regional format Format de la regió RegionsChooserWindow Search Cerca RegisterDialog Set a Password Establiu una contrasenya 8-64 characters 8-64 caràcters Repeat the password Repetiu la contrasenya. Cancel Cancel·la Confirm Confirmeu-ho Passwords don't match Les contrasenyes no coincideixen. ScheduledShutdownDialog Customize repetition time Personalitzeu la repetició Cancel Cancel·la Save Desa ScreenSaverPage Screensaver Estalvi de pantalla preview vista prèvia Personalized screensaver Estalvi de pantalla personalitzat setting configuració idle time temps inactiu 1 minute 1 minut 5 minute 5 minuts 10 minute 10 minuts 15 minute 15 minuts 30 minute 30 minuts 1 hour 1 hora never mai Password required for recovery Cal contrasenya per a la recuperació. Picture slideshow screensaver Estalvi de pantalla de presentació de diapositives System screensaver Estalvi de pantalla del sistema SearchableListViewPopup Search Cerca No search results No hi ha resultats de la cerca. ShortcutSettingDialog Add custom shortcut Afegiu una drecera personalitzada Name: Nom: Required Cal Command: Ordre: Shortcut Drecera None Cap Cancel Cancel·la Add Afegeix The shortcut name is already in use. Choose a different name. El nom de la drecera ja s'usa. Trieu-ne un altre. Change custom shortcut Personalitza la drecera please enter a shortcut key Si us plau, introduïu una tecla de drecera. Save Desa click Save to make this shortcut key effective Cliqueu a Desa per fer efectiva aquesta tecla de drecera. click Add to make this shortcut key effective Cliqueu a Afegeix per fer efectiva aquesta tecla de drecera. Shortcuts Shortcuts Dreceres System shortcut, custom shortcut Drecera del sistema, drecera personalitzada Search shortcuts Cerca dreceres done fet edit edita Click Cliqueu Cancel Cancel·la or o Replace Reemplaça Restore default Restaura els valors per defecte Add custom shortcut Afegiu una drecera personalitzada please enter a new shortcut key Si us plau, introduïu una tecla de drecera nova. Sound Sound So Output, input, sound effects, devices Sortida, entrada, efectes de so, dispositius SoundDevicemanagesPage Output Devices Dispositius de sortida Select whether to enable the devices Seleccioneu si voleu habilitar els dispositius. Input Devices Dispositius d'entrada SoundEffectsPage Sound Effects Efectes de so SoundMain Settings Configuració Sound Effects Efectes de so Enable/disable sound effects Activa / desactiva els efectes de so Enable/disable audio devices Activa / desactiva els dispositius d'àudio Devices Management Gestió de dispositius SoundModel Boot up Arrencada Shut down Atura't Log out Tanca la sessió Wake up Desperta Volume +/- Volum + / - Notification Notificació Low battery Bateria baixa Send icon in Launcher to Desktop Envia la icona del llançador a l'escriptori Empty Trash Buida la paperera Plug in Connecta Plug out Desconnecta Removable device connected Dispositiu extraïble connectat Removable device removed Dispositiu extraïble desconnectat Error Error SpeakerPage Mode Mode Output Volume Volum de sortida Volume Boost Potenciació del volum If the volume is louder than 100%, it may distort audio and be harmful to output devices Si el volum és superior al 100%, es pot distorsionar l'àudio i perjudicar els dispositius de sortida. Left A l'esquerra Right A la dreta Output Sortida No output device for sound found No s'ha trobat cap dispositiu de sortida per al so. Left Right Balance Balanç de dreta / esquerra Merge left and right channels into a single channel Combina els canals esquerre i dret en un sol canal. Whether the audio will be automatically paused when the current audio device is unplugged Si l'àudio es posarà en pausa automàticament quan es desconnecti el dispositiu d'àudio actual. Mono Audio Àudio mono Auto Pause Pausa automàtica Output Device Dispositiu de sortida SyncInfoListModel Sound So Power Energia Mouse Ratolí Update Actualitza Screensaver Estalvi de pantalla System Common settings Configuracions comunes System Sistema SystemInfo Auxiliary Information Informació auxiliar SystemInfoMain About This PC Quant a aquest ordinador System version, device information Versió del sistema, informació del dispositiu View the notice of open source software Vegeu l'avís del programari de codi obert User Experience Program Programa d'experiència d'usuari Join the user experience program to help improve the product Uniu-vos al programa d'experiència d'usuari per ajudar a millorar el producte. End User License Agreement Acord de llicència de l'usuari final View the end user license agreement Vegeu l'acord de llicència d'usuari final Privacy Policy Política de privadesa View information about privacy policy Vegeu informació sobre la política de privadesa Open Source Software Notice Avís de programari de codi obert ThemeSelectView More Wallpapers Més fons de pantalla TimeAndDate Auto sync time Hora de sincronització automàtica Ntp server Servidor NTP System date and time Data i hora del sistema Customize Personalitzeu-ho Settings Configuració Server address Adreça del servidor Required Cal The ntp server address cannot be empty L'adreça del servidor ntp no pot estar buida. Use 24-hour format Usa el format de 24 hores system time zone zona horària del sistema Timezone list Llista de zones horàries Add Afegeix TimeRange from de to a TimeoutDialog Save the display settings? Voleu desar els paràmetres de la pantalla? Settings will be reverted in %1s. La configuració es revertirà d'aquí a %1 s. Revert Reveteix Save Desa TimezoneDialog Add time zone Afegiu una zona horària Determine the time zone based on the current location Determina la zona horària segons la ubicació actual. Time zone: Zona horària: Nearest City: Ciutat més propera: Cancel Cancel·la Save Desa TouchScreen TouchScreen Pantalla tàctil Set up here when connecting the touch screen Configureu aquí quan connectar la pantalla tàctil. Touchpad Basic Settings Configuració bàsica Touchpad Ratolí tàctil Pointer Speed Velocitat del punter Slow Lenta Fast Ràpida Disable touchpad during input Inhabilita el ratolí tàctil mentre s'usi una altra entrada. Tap to Click Un toc per fer clic Natural Scrolling Desplaçament natural Three-finger gestures Gestos amb tres dits Four-finger gestures Gestos amb quatre dits Gestures Gestos Touchscreen Touchscreen Pantalla tàctil Configuring Touchscreen Configuració de la pantalla tàctil TouchscreenMain Common Comú UserExperienceProgramPage Join User Experience Program Uniu-vos al programa d'experiència de l'usuari Copy Link Address Copia l'adreça de l'enllaç VerifyDialog Security Verification Verificació de seguretat The action is sensitive, please enter the login password first L'acció és sensible. Primer introduïu la contrasenya d'inici de sessió. 8-64 characters 8-64 caràcters Forgot Password? Heu oblidat la contrasenya? Cancel Cancel·la Confirm Confirmeu-ho Wacom wacom Wacom Configuring wacom Configuració de la tauleta tàctil WacomMain wacom Wacom Pen Mode Mode de bolígraf Mouse Mode Mode de ratolí Pressure Sensitivity Sensibilitat de la pressió Light Lleugera Heavy Intensa Model Model WallpaperPage wallpaper fons de pantalla My pictures Les meves imatges System Wallpaper Fons de pantalla del sistema Solid color wallpaper Fons de pantalla de color sòlid Customizable wallpapers Fons de pantalla personalitzables fill style estil ple Automatic wallpaper change Canvi automàtic de fons de pantalla never mai 30 second 30 segons 1 minute 1 minut 5 minute 5 minuts 10 minute 10 minuts 15 minute 15 minuts 30 minute 30 minuts login Inici de sessió wake up Desperta Live Wallpaper Fons de pantalla dinàmics 1 hour 1 hora System Wallpapers Fons de pantalla del sistema WallpaperSelectView unfold desplega Set lock screen Estableix la pantalla de blocatge Set desktop Configura l'escriptori show all - %1 items mostra-ho tot - %1 elements Add Picture Afegeix-hi una imatge WindowEffectPage Interface and Effects Interfície i efectes Window Settings Configuració de la finestra Window rounded corners Cantons arrodonits de la finestra None Cap Small Petita Large Grossa Enable transparent effects when moving windows Activa els efectes transparents en moure finestres. Window Minimize Effect Efecte de minimització de la finestra Scale Escala Magic Lamp Làmpada màgica Opacity Opacitat Low Baixa High Alta Scroll Bars Barres de desplaçament Show on scrolling Mostra-ho durant el desplaçament Keep shown Mantén-ho visible Compact Display Pantalla compacta If enabled, more content is displayed in the window. Si s'activa, es mostra més contingut a la finestra. Title Bar Height Alçada de la barra del títol Only suitable for application window title bars drawn by the window manager. Només apte per a les barres de títol de la finestra traçades pel gestor de finestres. Extremely small Extremadament petita Medium describe size of window rounded corners Mitjana Medium describe height of window title bar Mitjana dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Xinès tradicional (xinès de Hong Kong) Traditional Chinese (Chinese Taiwan) Xinès tradicional (xinès taiwanès) Min Nan Chinese Xinès Min Nan dcc::Locale::regionNames Taiwan China Taiwan Xina dccV25::AccountsController Username must be between 3 and 32 characters El nom d'usuari ha de tenir de 3 a 32 caràcters de llargada. The first character must be a letter or number El primer caràcter ha de ser una lletra o un número. Your username should not only have numbers El nom d’usuari no només hauria de tenir números. The username has been used by other user accounts Altres comptes d'usuari ja han usat aquest nom d'usuari. The full name is too long El nom complet és massa llarg. The full name has been used by other user accounts Altres comptes d'usuari ja han usat aquest nom complet. Wrong password Contrasenya incorrecta Standard User Usuari estàndard Administrator Administrador Customized Personalitzat dccV25::AccountsWorker Your host was removed from the domain server successfully L'amfitrió s'ha eliminat del servidor de dominis correctament. Your host joins the domain server successfully L'amfitrió s'ha afegit al servidor de dominis correctament. Your host failed to leave the domain server L'amfitrió ha fallat abandonar el servidor de dominis. Your host failed to join the domain server L'amfitrió ha fallat afegir-se al servidor de dominis. AD domain settings Configuració del domini d'AD Password not match La contrasenya no coincideix. dccV25::AvatarTypesModel Dimensional Dimensional Flat Pla dccV25::FaceAuthController Faceprint Empremta facial Face Cara Use your face to unlock the device and make settings later Useu la cara per desblocar el dispositiu i fer-ne la configuració més tard. dccV25::FingerprintAuthController Fingerprint Empremta Place your finger Poseu-hi el dit. Place your finger firmly on the sensor until you're asked to lift it Poseu el dit amb fermesa sobre el sensor fins que se us digui d'alçar-lo. Lift your finger Alceu el dit. Lift your finger and place it on the sensor again Alceu el dit i torneu-lo a posar sobre el sensor. Lift your finger and do that again Alceu el dit i torneu-ho a fer. Scan Suspended Escaneig suspès Scan the edges of your fingerprint Escanegeu els marges de l'empremta. Place the edges of your fingerprint on the sensor Poseu els marges de l'empremta sobre el sensor. Adjust the position to scan the edges of your fingerprint Ajusteu-ne la posició per escanejar els marges de l'empremta. Fingerprint added Empremta afegida dccV25::IrisAuthController Iris Iris Use your iris to unlock the device and make settings later Useu l'iris per desblocar el dispositiu i fer-ne la configuració més tard. dccV25::KeyboardController This shortcut conflicts with [%1] Aquesta drecera té conflicte amb [%1] dccV25::PwqualityManager Password cannot be empty La contrasenya no pot estar en blanc. Password must have at least %1 characters La contrasenya ha de tenir com a mínim %1 caràcters. Password must be no more than %1 characters La contrasenya no ha de tenir més de %1 caràcters. Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) La contrasenya només pot contenir caràcters en anglès (majúscules o minúscules), números o símbols especials (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/). No more than %1 palindrome characters please Com a màxim %1 caràcters palíndroms, si us plau. No more than %1 monotonic characters please Com a màxim %1 caràcters monòtons, si us plau. No more than %1 repeating characters please Com a màxim %1 caràcters repetits, si us plau. Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) La contrasenya ha de tenir lletres majúscules, minúscules, números i símbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/). Password must not contain more than 4 palindrome characters La contrasenya no ha de contenir més de 4 caràcters palíndroms. Do not use common words and combinations as password No useu paraules i combinacions habituals com a contrasenya. Create a strong password please Si us plau, creeu una contrasenya forta. It does not meet password rules No compleix les regles de la contrasenya. At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. Com a mínim, incloeu %1 tipus de grafies, entre minúscules, majúscules, números i símbols, i la contrasenya no pot ser la mateixa que el nom d'usuari. dccV25::ShortcutModel System Sistema Window Finestra Workspace Espai de treball AssistiveTools Eines d'assistència Custom Personalitzat None Cap ================================================ FILE: translations/dde-control-center_cgg.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_cs.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Zrušit Done Hotovo Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Připojeno Not connected Nepřipojeno BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Otisk 1 Fingerprint2 Otisk 2 Fingerprint3 Otisk 3 Fingerprint4 Otisk 4 Fingerprint5 Otisk 5 Fingerprint6 Otisk 6 Fingerprint7 Otisk 7 Fingerprint8 Otisk 8 Fingerprint9 Otisk 9 Fingerprint10 Otisk 10 Scan failed Nasnímání se nezdařilo The fingerprint already exists Otisk už existuje Please scan other fingers Prosím nasnímejte ostatní prsty Unknown error Neznámá chyba Scan suspended Snímání odloženo Cannot recognize Nedaří se rozpoznat Moved too fast Příliš rychlý pohyb Finger moved too fast, please do not lift until prompted Prstem bylo pohybováno příliš rychle. Nezvedejte prst, dokud k tomu nebudete vyzváni Unclear fingerprint Nezřetelný otisk prstu Clean your finger or adjust the finger position, and try again Očistěte prst nebo upravte jeho polohu a zkuste to znovu Already scanned Už nasnímáno Adjust the finger position to scan your fingerprint fully Upravte polohu prstu tak, aby byl otisk nasnímán celý Finger moved too fast. Please do not lift until prompted Prstem bylo pohybováno příliš rychle. Nezvedejte prst, dokud k tomu nebudete vyzváni Lift your finger and place it on the sensor again Oddalte prst od čtečky a přiložte ho na ni znovu Position your face inside the frame Umístěte svůj obličej do rámečku Face enrolled Obličej zaznamenán Position a human face please Předložte prosím obličej člověka Keep away from the camera Držte se dále od kamery Get closer to the camera Přibližte se ke kameře Do not position multiple faces inside the frame Neumisťujte do rámečku více tváří Make sure the camera lens is clean Ujistěte se, že je čočka kamery čistá Do not enroll in dark, bright or backlit environments Nepřihlašujte se v tmavém ani světlém prostředí, ani v prostředí s protisvětlem Keep your face uncovered Udržujte svůj obličej odkrytý Scan timed out Překročen časový limit pokusu o naskenování Cancel Zrušit Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Pro změnu NTP serveru je vyžadováno ověření se Authentication is required to set the system timezone Pro nastavení časového pásma systému je požadováno ověření se DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Zobrazení Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Autorská práva © 2011-%1 komunita Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD Autorská práva © 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Automatické potlačování okolních ruchů Input Volume Vstupní hlasitost Input Level Vstupní úroveň Input No input device for sound found Input Device Vstupní zařízení Mouse Mouse and Touchpad Myš a dotyková plocha Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Přizpůsobení PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Uživatelsky určené PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Heslo nemůže být prázdné Password must have at least %1 characters Je třeba, aby heslo mělo délku alespoň %1 znaků Password must be no more than %1 characters Heslo může mít délku nejvýše %1 znaků Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Heslo může obsahovat pouze písmena z anglické abecedy (rozlišují se malá a VELKÁ písmena), číslice a dále ještě speciální symboly (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Ne více než %1 znaků, které se tam i zpět čtou stejně (palindrom) No more than %1 monotonic characters please Ne více než %1 v abecedě po sobě jdoucí znaky prosím No more than %1 repeating characters please Ne více než %1 opakující se znaky prosím Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Je třeba, aby heslo obsahovalo velká a malá písmena z (pouze z anglické abecedy), číslice a symboly (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Heslo nemůže obsahovat posloupnost více než 4 znaků, která se čte stejně oběma směry (palindrom) Do not use common words and combinations as password Jako heslo nepoužívejte běžná slova a jejich kombinace Create a strong password please Vytvořte si odolné heslo, prosím It does not meet password rules Nesplňuje pravidla pro hesla QObject Control Center Ovládací panely Activated Aktivováno View Pohled To be activated K zapnutí Activate Zapnout Expired Platnost skončila In trial period Ve zkušebním období Trial expired Zkušební období skončilo dde-control-center Touch Screen Settings Nastavení dotykové obrazovky The settings of touch screen changed Nastavení dotykové obrazovky změněna This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Zvuk Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Zvukové efekty SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Spouštění operačního systému Shut down Vypnout Log out Odhlásit se Wake up Probouzení Volume +/- Hlasitost +/- Notification Upozornění Low battery Nízký stav nabití akumulátoru Send icon in Launcher to Desktop Odeslání ikony ve spouštěči na plochu Empty Trash Vyprázdnění koše Plug in Připojení napájení z elektrické sítě Plug out Odpojení napájení z elektrické sítě Removable device connected Připojení vyjímatelného zařízení Removable device removed Odebrání vyjímatelného zařízení Error Chyba SpeakerPage Mode Režim Output Volume Výstupní hlasitost Volume Boost Zesílení hlasitosti If the volume is louder than 100%, it may distort audio and be harmful to output devices Při nastavení hlasitosti na více než 100 % (softwarově), může být zvuk zkreslený a dojít k poškození reproduktorů Left Vlevo Right Vpravo Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Výstupní zařízení SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Uložit nastavení obrazovky? Settings will be reverted in %1s. Nastavení bude vráceno za %1s. Revert Vrátit Save Uložit TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Tradiční čínština (Čínská Hong Kong) Traditional Chinese (Chinese Taiwan) Tradiční čínština (Čínská Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Čínská Taiwan dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Tento příkaz konfliktuje s [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Systém Window Okno Workspace Pracovní prostor AssistiveTools Nápomocné nástroje Custom Vlastní None Žádné ================================================ FILE: translations/dde-control-center_da.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Tilsluttet Not connected Ikke forbundet BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingeraftryk1 Fingerprint2 Fingeraftryk2 Fingerprint3 Fingeraftryk3 Fingerprint4 Fingeraftryk4 Fingerprint5 Fingeraftryk5 Fingerprint6 Fingeraftryk6 Fingerprint7 Fingeraftryk7 Fingerprint8 Fingeraftryk8 Fingerprint9 Fingeraftryk9 Fingerprint10 Fingeraftryk10 Scan failed Skanning mislykkedes The fingerprint already exists Fingeraftrykket eksisterer allerede Please scan other fingers Skan venligst andre fingre Unknown error Ukendt fejl Scan suspended Skanning suspenderet Cannot recognize Kan ikke genkende Moved too fast Flyttet for hurtigt Finger moved too fast, please do not lift until prompted Fingeren bevægede sig for hurtigt, løft venligst ikke fingeren før du får besked om det Unclear fingerprint Uklart fingeraftryk Clean your finger or adjust the finger position, and try again Rens din finger og juster fingerens placering og prøv igen Already scanned Allerede skannet Adjust the finger position to scan your fingerprint fully Juster din fingers placering og skal hele dit fingeraftryk Finger moved too fast. Please do not lift until prompted Fingeren bevægede sig for hurtigt. Løft venligst ikke fingeren før du får besked om det Lift your finger and place it on the sensor again Løft din finger og placér den igen på sensoren Position your face inside the frame Placér dit ansigt inden for rammen Face enrolled Ansigt indmeldt Position a human face please Placér venligst et menneskeansigt Keep away from the camera Hold dig væk fra kameraet Get closer to the camera Kom tættere på kameraet Do not position multiple faces inside the frame Placér ikke flere ansigter inden for rammen Make sure the camera lens is clean Sørg for at kameralinsen er ren Do not enroll in dark, bright or backlit environments Indmeld ikke i mørke, strålende, eller bagbelyste miljøer Keep your face uncovered Hold dit ansigt utildækket Scan timed out Tidsudløb for skanning Cancel Annuller Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Der kræves autentifikation for at ændre NTP-server Authentication is required to set the system timezone Autentifikation kræves for at sætte systemets tidszone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Skærm Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Ophavsret© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD Ophavsret© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Automatisk Støjdæmpning Input Volume Lydstyrke (input) Input Level Inputniveau Input No input device for sound found Input Device Indgående Enhed Mouse Mouse and Touchpad Mus og touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personlig tilpasning PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Tilpasset PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Adgangskoden må ikke være tom Password must have at least %1 characters Adgangskode skal mindst have %1 tegn Password must be no more than %1 characters Adgangskoden må højst være %1 tegn langt Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Adgangskode må kun indeholde engelske bogstaver (forskel på store og små bogstaver), tal, eller specialtegn (æÆøØåÅ~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Venligst ikke flere end %1 palindrome tegn No more than %1 monotonic characters please Venligst ikke flere end %1 monotone tegn No more than %1 repeating characters please Venligst ikke flere end %1 gentagne tegn Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Adgangskode skal indeholde store bogstaver, små bogstaver, tal, og symboler (æÆøØåÅ~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Adgangskode må ikke indeholde flere end 4 palindrome tegn Do not use common words and combinations as password Anvend ikke almindelige ord og kompinationer som adgangskode Create a strong password please Opret venligst en stærk adgangskode It does not meet password rules Den lever ikke op til adgangskodekravene QObject Control Center Kontrolcenter Activated Aktiveret View Vis To be activated Skal aktiveres Activate Aktivér Expired Udløbet In trial period I prøveperiode Trial expired Prøveperioden er udløbet dde-control-center Touch Screen Settings Indstillinger for Berøringsfølsom Skærm The settings of touch screen changed Berøringsfølsom skærms indstillinger blev ændret This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Lyd Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Lydeffekter SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Opstart Shut down Luk ned Log out Log ud Wake up Vågn op Volume +/- Lydstyrke +/- Notification Notifikation Low battery Lavt batteri Send icon in Launcher to Desktop Send ikon i opstarter til skrivebord Empty Trash Tøm papirkurv Plug in Stik sættes i Plug out Stik tages ud Removable device connected Tilslutning af flytbar enhed Removable device removed Fjernelse af flytbar enhed Error Fejl SpeakerPage Mode Tilstand Output Volume Lydstyrke (output) Volume Boost Boost af lydstyrke If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Venstre Right Højre Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Udgående Enhed SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Vend tilbage Save Gem TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditionel kinesisk (Kinesisk Hong Kong) Traditional Chinese (Chinese Taiwan) Traditionel kinesisk (Kinesisk Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Kinesisk Taiwan dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Denne genvej konflikter med [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System System Window Vindue Workspace Arbejdsområde AssistiveTools Hjælpemidler Custom Tilpasset None Ingen ================================================ FILE: translations/dde-control-center_de.ts ================================================ AccountSettings edit bearbeiten Add new user Neuen Benutzer hinzufügen Set fullname Vollen Namen eingeben Login settings Anmelde-Einstellungen Login without password Anmeldung ohne Passwort Delete current account Aktuelles Konto löschen Group setting Gruppen-Einstellungen Account groups Konto-Gruppen done fertig Group name Gruppenname Add group Gruppe hinzufügen Auto login Auto-Anmeldung Account Information Konto-Informationen Account name, account fullname, account type Kontoname, Voller Kontoname und Kontotyp Account name Konto Name Account fullname Voller Kontoname Account type Kontotyp The full name is too long Der Name ist zu lang Group names should be no more than 32 characters Gruppennamen sollten nicht mehr als 32 Zeichen enthalten Group names cannot only have numbers Gruppennamen dürfen nicht bloß Zahlen enthalten Use letters,numbers,underscores and dashes only, and must start with a letter Verwenden Sie nur Buchstaben, Zahlen, Unterstrich und Striche, beginnen SIe mit einem Buchstaben The group name has been used Dieser Gruppenname wurde schon verwendet quick login, Auto login, login without password Schnellanmeldung, Auto-Anmeldung, Anmeldung ohne Passwort Undo Rückgängig Redo Rückgängig Cut Ausschneiden Copy Kopieren Paste Einfügen Select All Alles auswählen Quick login Schnell-Anmeldung Accounts Account Konto Account manager Kontoverwalter AccountsMain Other accounts Andere Konten AddFaceinfoDialog Enroll Face Gesicht erfassen I have read and agree to the Ich habe gelesen und stimme zu dem Disclaimer Haftungsausschluss Next Weiter Face enrolled Gesicht erfasst Failed to enroll your face Konnte Ihr Gesicht nicht erfassen Done Fertig Cancel Abbrechen Retry Enroll Erfassung wiederholen Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Abbrechen Done Fertig Enroll Finger Finger erfassen Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Bitte legen Sie den Finger mittig auf den Fingerabdrucksensor und bewegen ihn von oben nach unte. Danach entfernen Sie den Finger bitte I have read and agree to the Ich habe gelesen und stimme zu dem Disclaimer Haftungsausschluss Next Weiter Retry Enroll Erfassung wiederholen "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris Iris erfassen I have read and agree to the Ich habe gelesen und stimme zu dem Disclaimer Haftungsausschluss Next Weiter Done Fertig Cancel Abbrechen Retry Enroll Erfassung wiederholen Iris enrolled Iris erfasst Failed to enroll your iris Konnte Ihre Iris nicht erfassen "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Bitte schauen Sie auf das Gerät und stellen sicher, dass beide Augen innerhalb des Erfassungsbereiches liegen Authentication Biometric Authentication Biometrische Authentifizierung AuthenticationMain Biometric Authentication Biometrische Authentifizierung Face Gesicht Up to 5 facial data can be entered Bis zu 5 Gesichtsabbildern können eingegeben werden Fingerprint Fingerabdruck Identifying user identity through scanning fingerprints Benutzeridentität durch Fingerabdruckscan feststellen Iris Iris Identity recognition through iris scanning Benutzeridentität durch Iris-Scan feststellen Use letters, numbers and underscores only, and no more than 15 characters Verwenden Sie nur Buchstaben, Zahlen und Unterstriche, und nicht mehr als 15 Zeichen Use letters, numbers and underscores only Verwenden Sie nur Buchstaben, Zahlen und Unterstriche No more than 15 characters Nicht mehr als 15 Zeichen This name already exists Dieser Name existiert bereits Add a new %1 ... Neuen %1 hinzufügen … The name cannot be empty Benutzername darf nicht leer sein AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Die "automatische Anmeldung" kann nur für ein Benutzerkonto aktiviert werden. Bitte deaktivieren Sie zuerst die "automatische Anmeldung" für das Benutzerkonto "%1" Ok OK AvatarSettingsDialog Images Bilder Human Mensch Animal Tier Scenery Szenisch Illustration Zeichnung Emoji Emoji custom Benutzerdefiniert Cartoon style Comic-Stil Dimensional style Räumlicher Stil Flat style Flacher Stil Cancel Abbrechen Save Speichern BatteryPage Screen and Suspend Bildschirm und Bereitschaftszustand Turn off the monitor after Monitor ausschalten nach Lock screen after Bildschirm sperren nach Computer suspends after Bereitschaftszustand des Computers nach When the lid is closed Wenn der Deckel geschlossen ist When the power button is pressed Wenn der Netzschalter gedrückt wird Low Battery Niedrige Akkuladung Low battery notification Benachrichtigung bei niedriger Akkuladung Auto suspend Automatische Bereitschaft Auto Hibernate Automatischer Ruhezustand Low battery threshold Schwellenwert für niedrigen Akkustand Battery Management Akkuverwaltung Display remaining using and charging time Verbleibende Nutzungs- und Ladezeit anzeigen Maximum capacity Maximale Kapazität Low battery level Niedrige Akkuladung Disable Deaktivieren BlueTooth Bluetooth settings, devices Bluetooth-Einstellungen, Geräte Bluetooth Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth ist abgeschalten, und der Name wird als "%1" angezeigt Bluetooth is turned on, and the name is displayed as "%1" Bluetooth ist angeschalten, und der Name wird als "%1" angezeigt BlueToothDeviceListView Disconnect Trennen Connect Verbinden Send Files Dateien senden Rename Umbenennen Remove Device Gerät entfernen Select file Datei auswählen BluetoothCtl Edit Bearbeiten Allow other Bluetooth devices to find this device Anderen Bluetooth-Geräten das Auffinden dieses Geräts erlauben To use the Bluetooth function, please turn off Um die Bluetoothfunktion zu verwenden, bitte ausschalten Airplane Mode Flugzeugmodus Bluetooth name cannot exceed 64 characters Bluetoothnamen dürfen nicht mehr als 64 Zeichen haben BluetoothDeviceModel Connected Verbunden Not connected Nicht verbunden BootPage Startup Settings Start-Einstellungen You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay GRUB-Startverzögerung theme Design After turning on the theme, you can see the theme background when you turn on the computer Nach Anschalten des Design-Themas sehen Sie den Hintergrund beim Computerstart Boot menu verification Systemstartmenü-Verifizierung After opening, entering the menu editing requires a password. Change Password Passwort ändern Change boot menu verification password Systemstartmenü-Verifizierungs-Passwort ändern Set the boot menu authentication password Stellen Sie das Systemstartmenü-Authentifizierungs-Passwort ein User Name : Benutzername: root root New Password : Neues Passwort: Required Erforderlich Password cannot be empty Passwort darf nicht leer sein Passwords do not match Passwörter stimmen nicht überein Repeat password: Passwort wiederholen: Cancel Abbrechen Sure Sicher Start animation Startanimation Adjust the size of the logo animation on the system startup interface Größe der Logo-Animation in der Startsequenz einstellen Camera Allow below apps to access your camera: Folgenden Programmen die Verwendung der Kamera erlauben: CharaMangerModel Fingerprint1 Fingerabdruck1 Fingerprint2 Fingerabdruck2 Fingerprint3 Fingerabdruck3 Fingerprint4 Fingerabdruck4 Fingerprint5 Fingerabdruck5 Fingerprint6 Fingerabdruck6 Fingerprint7 Fingerabdruck7 Fingerprint8 Fingerabdruck8 Fingerprint9 Fingerabdruck9 Fingerprint10 Fingerabdruck10 Scan failed Scan fehlgeschlagen The fingerprint already exists Der Fingerabdruck existiert bereits Please scan other fingers Bitte scannen Sie andere Finger Unknown error Unbekannter Fehler Scan suspended Scan unterbrochen Cannot recognize Konnte nicht erkannt werden Moved too fast Zu schnell bewegt Finger moved too fast, please do not lift until prompted Finger wurde zu schnell bewegt, bitte nicht abheben, bis Sie dazu aufgefordert werden Unclear fingerprint Unscharfer Fingerabdruck Clean your finger or adjust the finger position, and try again Reinigen Sie Ihren Finger oder passen Sie die Fingerposition an und versuchen Sie es erneut Already scanned Bereits gescannt Adjust the finger position to scan your fingerprint fully Passen Sie die Fingerposition an, um Ihren Fingerabdruck vollständig zu scannen Finger moved too fast. Please do not lift until prompted Der Finger hat sich zu schnell bewegt. Bitte nicht anheben, bis Sie dazu aufgefordert werden Lift your finger and place it on the sensor again Heben Sie Ihren Finger hoch und legen Sie ihn erneut auf den Sensor Position your face inside the frame Positionieren Sie Ihr Gesicht innerhalb des Rahmens Face enrolled Gesicht erfasst Position a human face please Positionieren Sie bitte ein menschliches Gesicht Keep away from the camera Halten Sie sich von der Kamera fern Get closer to the camera Gehen Sie näher an die Kamera heran Do not position multiple faces inside the frame Positionieren Sie nicht mehrere Gesichter innerhalb des Rahmens Make sure the camera lens is clean Stellen Sie sicher, dass die Kameralinse sauber ist Do not enroll in dark, bright or backlit environments Nicht in dunklen, hellen oder von hinten beleuchteten Umgebungen erfassen Keep your face uncovered Halten Sie Ihr Gesicht unbedeckt Scan timed out Zeitüberschreitung der Erfassung Cancel Abbrechen Camera occupied! Kamera belegt! ColorAndIcons Accent Color Akzentfarbe Icon Settings Symbol-Einstellungen Icon Theme Symbolthema Customize your theme icon Symbolthema anpassen Cursor Theme Zeigerthema Customize your theme cursor Zeigerthema anpassen ComfirmDeleteDialog Are you sure you want to delete this account? Sind Sie sicher, dass Sie dieses Konto löschen möchten? Delete account directory Kontoverzeichnis löschen Cancel Abbrechen Delete Löschen ComfirmSafePage Go to settings Gehe zu Einstellungen Cancel Abbrechen Common Common Allgemein Repeat delay Wiederholungsverzögerung Short Kurz Long Lang Repeat rate Wiederhol-Rate Slow Langsam Fast Schnell Numeric Keypad Zahlenfeld test here hier testen Caps lock prompt Festelltasten-Hinweis Double Click Speed Doppelklick-Tempo Double Click Test Doppelklick-Test Left Hand Mode Linke-Hand-Modus Enable Keyboard Tastatur anschalten General Allgemein Scrolling Speed Bildlaufgeschwindigkeit CommonInfoMain Boot Menu Systemstartmenü Manage your boot menu Verwalten Sie Ihr Systemstartmenü Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Bitte warten Sie eine Minute, die neue Systemstartmenü-Animation wird eingerichtet Setting new boot animation finished Einrichten der Systemstartmenü-Animation abgeschlossen. The settings will be applied after rebooting the system Die Einstellungen werden nach einem Systemneustart angewendet Restart now Jetzt neustarten Dismiss Ablehnen Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Passwort muss Zahlen und Buchstaben enthalten Password must be between 8 and 64 characters Passwort muss zwischen 8 und 64 Zeichen lang sein CreateAccountDialog Create a new account Neues Konto erstellen Account type Kontotyp UserName Benutzername Required Erforderlich FullName Vollständiger Name: Optional Optional Cancel Abbrechen Create account Konto erstellen Username cannot exceed 32 characters Benutzernamen dürfen nicht mehr als 32 Zeichen haben Username can only contain letters, numbers, - and _ Benutzername darf nur Buchstaben, Zahlen sowie - und _ enthalten Full name cannot exceed 32 characters Voll-Namen dürfen nicht mehr als 32 Zeichen haben Full name cannot contain colons Voll-Namen dürfen keine Punkte enthalten CustomAvatarCropper small klein big groß CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Sie haben noch keinen Avatar hochgeladen. Um ein Bild hochzuladen klicken Sie entweder oder ziehen Sie ein Bild per Drag&Drop herüber. The uploaded file type is incorrect, please upload it again Der hochgeladene Dateityp ist falsch, bitte mit richtigem hochladen DCC_NAMESPACE::SystemInfoModel available verfügbar DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Zustimmen und am Benutzererfahrungsprogramm teilnehmen <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Datums- und Zeiteinstellungen Date Datum Year Jahr Month Monat Day Tag Time Zeit Cancel Abbrechen Confirm Bestätigen Datetime Time and date Zeit und Datum Time and date, time zone settings Datum und Zeit, Zeitzoneneinstellungen DatetimeMain Language and region Sprache und Region System language, regional formats Systemsprache und Regionalforate DatetimeModel Tomorrow Morgen Yesterday Gestern Today Heute %1 hours earlier than local %1 Stunden früher als lokal %1 hours later than local %1 Stunden später als lokal Space Leerzeichen Week Woche First day of week Erster Tag der Woche Short date Kurzes Datum Long date Langform-Datum Short time Kurze Zeitform Long time Lange Zeitform Currency symbol Währungssymbol Positive currency Positiv-Währungsformat Negative currency Negativ-Währungsformat Decimal symbol Dezimalzeichen Digit grouping symbol Zifferngruppierungszeichen Digit grouping Zifferngruppierung Page size Seitengröße Example Beispiel DatetimeWorker Authentication is required to change NTP server Für den Wechsel des NTP-Servers ist eine Authentifizierung erforderlich Authentication is required to set the system timezone Zum Festlegen der System-Zeitzone ist eine Authentifizierung notwendig DccColorDialog Cancel Abbrechen Save Speichern DccWindow Control Center provides the options for system settings. Das Kontrollzentrum stellt Möglichkeiten zur Systemeinstellung zur Verfügung. DeepinIDAccountSecurity Bind WeChat WeChat verknüpfen By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System WeChat Scan Code Anmelde-System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Passwort mit %1-ID zurücksetzen Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Cloud-Synchronisierung Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID Bei %1-ID anmelden DeepinIDSyncService Auto Sync Automatische Synchronisierung Securely store system settings and personal data in the cloud, and keep them in sync across devices Systemeinstellungen und persönliche Daten sicher in der Cloud speichern und sie geräteübergreifend synchron halten System Settings Systemeinstellungen Last sync time: %1 Letzte Synchronisierung: %1 Clear cloud data Cloud-Daten löschen Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Abbrechen Clear Löschen DeepinIDUserInfo Synchronization Service Synchronisierungsdienst Account and Security Konto & Sicherheit Sign out Abmelden Go to web settings Gehe zu Web-Einstellungen The nickname must be 1~32 characters long Der Spitzname muss 1 bis 32 Zeichen lang sein DeepinWorker encrypt password failed Passwort-Verschlüsselung fehlgeschlagen Wrong password, %1 chances left Falsches Passwort, noch %1 Chancen The login error has reached the limit today. You can reset the password and try again. Das Tageslimit für Anmeldefehler ist erreicht. Sie können das Passwort zurücksetzen und es erneut versuchen. Operation Successful Ausführung erfolgreich The nickname can be modified only once a day Der Spitzname darf nur einmal täglich geändert werden Deepinid deepin ID deepin-ID UOS ID UOS-ID Cloud services Clouddienste DeepinidModel Mainland China Festland-China Other regions Andere Regionen The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Standard-Programm Set the default application for opening various types of files Standard-Programme für verschiedene Datei-Typen einstellen DefaultappMain Webpage Webseiten Mail E-Mail Text Text Music Musik Video Video Picture Bilder Terminal Terminal DetailItem Please choose the default program to open '%1' Bitte wählen Sie das Standard-Programm aus für '%1' add hinzufügen Open Desktop file Schreibtisch-Datei öffnen Apps (*.desktop) Apps (*.desktop) All files (*) Alle Dateien (*) DevelopModePage Root Access Root-Zugang Request Root Access Rootzugang anfordern After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Erlaubt Enter Eingeben Online Online Login UOS ID UOS-ID-Anmeldung Offline Offline Import Certificate Zertifikat importieren Select file Datei auswählen Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info 1. PC-Infos übertragen Export Übertragen 3.Import Certificate 3. Zertifikat einspielen Development and debugging options Entwickler- und Debug-Optionen System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Aus Debug Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode Sie sind nun im Entwickler-Modus OK O.K. 2.please go to %1 to Download offline certificate. 2. Gehen Sie bitte zu %1 um ein Offline-Zertifikat herunterzuladen The feature is not available at present, please activate your system first. Solid System Read-Only Protection Nur-Lese-Schutz für Stabiles System Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Anzeige Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Anmeldemethode Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin-Gemeinschaft Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Automatische Rauschunterdrückung Input Volume Eingangslautstärke Input Level Eingangspegel Input No input device for sound found Input Device Eingabegerät Mouse Mouse and Touchpad Maus und Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personalisierung PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Anwenderspezifisch PluginArea Plugin Area Select which icons appear in the Dock Wählen Sie aus, welche Symbole im Dock erscheinen sollen Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Passwort darf nicht leer sein Password must have at least %1 characters Passwort muss mindestens %1 Zeichen haben Password must be no more than %1 characters Passwort darf nicht mehr als %1 Zeichen haben Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Passwort darf nur englische Buchstaben (Groß- und Kleinschreibung beachten), Zahlen oder Sonderzeichen (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) enthalten No more than %1 palindrome characters please Bitte nicht mehr als %1 Palindrom-Zeichen No more than %1 monotonic characters please Bitte nicht mehr als %1 monotone Zeichen No more than %1 repeating characters please Bitte nicht mehr als %1 sich wiederholende Zeichen Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Passwort muss Großbuchstaben, Kleinbuchstaben, Zahlen und Symbole enthalten (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Passwort darf nicht mehr als 4 Palindromzeichen enthalten Do not use common words and combinations as password Verwenden Sie keine gebräuchlichen Wörter und Kombinationen als Passwort Create a strong password please Bitte erstellen Sie ein sicheres Passwort It does not meet password rules Es erfüllt nicht die Passwortregeln QObject Control Center Kontrollzentrum Activated Aktiviert View Ansicht To be activated Zu aktivieren Activate Aktivieren Expired Abgelaufen In trial period Im Testzeitraum Trial expired Testzeitraum abgelaufen dde-control-center Touch Screen Settings Tastbildschirm-Einstellungen The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Ton Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Toneffekte SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Hochfahren Shut down Herunterfahren Log out Abmelden Wake up Aufwachen Volume +/- Lautstärke +/- Notification Benachrichtigung Low battery Niedrige Akkuladung Send icon in Launcher to Desktop Symbol im Starter zum Desktop hinzufügen Empty Trash Papierkorb leeren Plug in Einstecken Plug out Ausstecken Removable device connected Entfernbares Gerät verbunden Removable device removed Entfernbares Gerät entfernt Error Fehler SpeakerPage Mode Modus Output Volume Ausgabelautstärke Volume Boost Lautstärkenverstärkung If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Links Right Rechts Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Ausgabegerät SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Bildschirmeinstellungen speichern? Settings will be reverted in %1s. Die Einstellungen werden in %1 s rückgängig gemacht. Revert Zurücksetzen Save Speichern TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first Diese Aktion ist heikel, bitte geben Sie zuerst das Anmeldepasswort ein 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login Anmeldung wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditionelles Chinesisch (Chinesisches Hongkong) Traditional Chinese (Chinese Taiwan) Traditionelles Chinesisch (Chinesisches Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Chinesisches Taiwan dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Dieses Tastenkürzel konfliktiert mit [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System System Window Fenster Workspace Arbeitsfläche AssistiveTools Helferprogramme Custom Benutzerdefiniert None Keine ================================================ FILE: translations/dde-control-center_el.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Συνδέθηκε Not connected Δεν Συνδέθηκε BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 ΔακτυλικόΑποτύπωμα1 Fingerprint2 ΔακτυλικόΑποτύπωμα2 Fingerprint3 ΔακτυλικόΑποτύπωμα3 Fingerprint4 ΔακτυλικόΑποτύπωμα4 Fingerprint5 ΔακτυλικόΑποτύπωμα5 Fingerprint6 ΔακτυλικόΑποτύπωμα6 Fingerprint7 ΔακτυλικόΑποτύπωμα7 Fingerprint8 ΔακτυλικόΑποτύπωμα8 Fingerprint9 ΔακτυλικόΑποτύπωμα9 Fingerprint10 ΔακτυλικόΑποτύπωμα10 Scan failed Αποτυχία σάρωσης The fingerprint already exists Το δακτυλικό αποτύπωμα υπάρχει ήδη Please scan other fingers Παρακαλώ σαρώστε άλλα δάκτυλα Unknown error Άγνωστο σφάλμα Scan suspended Αναστολή σάρωσης Cannot recognize Αδυναμία αναγνώρισης Moved too fast Πολύ γρήγορη μετακίνηση Finger moved too fast, please do not lift until prompted Το δάχτυλο κινήθηκε πολύ γρήγορα, παρακαλώ μην σηκώνετε μέχρι να σας ζητηθεί Unclear fingerprint Μη ευκρινές δακτυλικό αποτύπωμα Clean your finger or adjust the finger position, and try again Καθαρίστε το δάκτυλο σας ή προσαρμόστε την θέση του, και προσπαθήστε ξανά Already scanned Σαρώθηκε ήδη Adjust the finger position to scan your fingerprint fully Προσαρμόστε την θέση του δακτύλου σας για να σαρωθεί πλήρως το δακτυλικό σας αποτύπωμα Finger moved too fast. Please do not lift until prompted Το δάκτυλο κινήθηκε πολύ γρήγορα. Παρακαλώ μην το σηκώσετε μέχρι να σας ζητηθεί Lift your finger and place it on the sensor again Σηκώστε το δάκτυλο σας και τοποθετήστε το ξανά στον αισθητήρα Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Ακύρωση Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Απαιτείται πιστοποίηση για αλλαγή του NTP διακομιστή Authentication is required to set the system timezone Απαιτείται πιστοποίηση για ορισμό της ζώνης ώρας του συστήματος DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Εμφάνιση Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Αυτόματη Κατάπνιξη Θορύβου Input Volume Ένταση Εισόδου Input Level Επίπεδο Εισόδου Input No input device for sound found Input Device Συσκευή Εισόδου Mouse Mouse and Touchpad Ποντίκι και Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Εξατομίκευση PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Προσαρμογή PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Ο κωδικός πρόσβασης δεν μπορεί να είναι κενός Password must have at least %1 characters Ο κωδικός πρόσβασης πρέπει να περιέχει τουλάχιστον %1 χαρακτήρες Password must be no more than %1 characters Ο κωδικός πρόσβασης δεν πρέπει να είναι περισσότερο από %1 χαρακτήρες Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Ο κωδικός πρόσβασης μπορεί να περιέχει μόνο λατινικούς χαρακτήρες (με διάκριση πεζών-κεφαλαίων), αριθμούς ή ειδικούς χαρακτήρες (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Ο κωδικός πρόσβασης πρέπει να περιέχει κεφαλαία και πεζά γράμματα, αριθμούς και σύμβολα (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Ο κωδικός πρόσβασης δεν μπορεί να περιέχει πάνω από 4 παλινδρομικούς χαρακτήρες Do not use common words and combinations as password Μην χρησημοποιήτε συνηθείς λέξεις και συνδυασμούς αυτών ως κωδικό πρόσβασης Create a strong password please Παρακαλώ δημιουργήστε έναν ισχυρό κωδικό πρόσβασης It does not meet password rules Δεν πληρεί τις προϋποθέσεις κωδικού πρόσβασης QObject Control Center Κέντρο Ελέγχου Activated Ενεργοποιημένο View Εμφάνιση To be activated Προς ενεργοποιήση Activate Ενεργοποίηση Expired Έχει λήξει In trial period Σε περίδο δοκιμής Trial expired Η περίοδος δοκιμής έληξε dde-control-center Touch Screen Settings Ρυθμίσεις Οθόνης Αφής The settings of touch screen changed Οι ρυθμίσεις της οθόνης αφής άλλαξαν This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Ήχος Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Ηχητικά Εφέ SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Εκκίνηση Shut down Τερματισμός λειτουργίας Log out Έξοδος χρήστη Wake up Αφύπνιση Volume +/- Ένταση +/- Notification Ειδοποίηση Low battery Χαμηλή στάθμη μπαταρίας Send icon in Launcher to Desktop Αποστολή εικονιδίου εκκινητή στην Επιφάνεια Εργασίας Empty Trash Αδειάστε τον κάδο απορριμάτων Plug in Συνδέστε στην πρίζα Plug out Αποσυνδέστε από την πρίζα Removable device connected Αφαιρούμενη συσκευή συνδέθηκε Removable device removed Αφαιρούμενη συσκευή αφαιρέθηκε Error Σφάλμα SpeakerPage Mode Λειτουργία Output Volume Όγκος εξόδου Volume Boost Ενίσχυση Ήχου If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Αριστερά Right Δεξιά Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Συσκευή Εξόδου SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Επαναφορά Save Αποθήκευση TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Παλαιότατο κινέζικο (Κινέζικο Χονγκ Κονγκ) Traditional Chinese (Chinese Taiwan) Παλαιότατο κινέζικο (Κινέζικο Ταϊβάν) Min Nan Chinese dcc::Locale::regionNames Taiwan China Κινέζικο Ταϊβάν dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Αυτή η συντομεύσεις συγκρούεται με [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Σύστημα Window Παράθυρο Workspace Χώρος εργασίας AssistiveTools Βοηθητικά εργαλεία Custom Προσαρμοσμένο None Κανένα ================================================ FILE: translations/dde-control-center_el_GR.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save Αποθήκευση BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save Αποθήκευση DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Κέντρο Ελέγχου Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Αποθήκευση Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save Αποθήκευση ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save Αποθήκευση click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save Αποθήκευση TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save Αποθήκευση TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_en.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_en_AU.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Connected Not connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint1 Fingerprint2 Fingerprint2 Fingerprint3 Fingerprint3 Fingerprint4 Fingerprint4 Fingerprint5 Fingerprint5 Fingerprint6 Fingerprint6 Fingerprint7 Fingerprint7 Fingerprint8 Fingerprint8 Fingerprint9 Fingerprint9 Fingerprint10 Fingerprint10 Scan failed Scan failed The fingerprint already exists The fingerprint already exists Please scan other fingers Please scan other fingers Unknown error Unknown error Scan suspended Scan suspended Cannot recognize Cannot recognise Moved too fast Moved too fast Finger moved too fast, please do not lift until prompted Finger moved too fast, please do not lift until prompted Unclear fingerprint Unclear fingerprint Clean your finger or adjust the finger position, and try again Clean your finger or adjust the finger position, and try again Already scanned Already scanned Adjust the finger position to scan your fingerprint fully Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to change NTP server Authentication is required to set the system timezone Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Volume Input Level Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personalisation PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Control Center Activated Activated View View To be activated To be activated Activate Activate Expired Expired In trial period In trial period Trial expired Trial expired dde-control-center Touch Screen Settings Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Boot up Shut down Shut down Log out Log out Wake up Wake up Volume +/- Volume +/- Notification Notification Low battery Low battery Send icon in Launcher to Desktop Send icon in Launcher to Desktop Empty Trash Empty Trash Plug in Plug in Plug out Plug out Removable device connected Removable device connected Removable device removed Removable device removed Error Error SpeakerPage Mode Mode Output Volume Output Volume Volume Boost Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Left Right Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Revert Save Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System System Window Window Workspace Workspace AssistiveTools AssistiveTools Custom Custom None None ================================================ FILE: translations/dde-control-center_en_GB.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Cancel Save Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Cancel Delete ComfirmSafePage Go to settings Cancel Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Cancel Save Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Cancel Save Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Cancel Save Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Cancel Save Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_en_NO.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_en_US.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Connected Not connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint1 Fingerprint2 Fingerprint2 Fingerprint3 Fingerprint3 Fingerprint4 Fingerprint4 Fingerprint5 Fingerprint5 Fingerprint6 Fingerprint6 Fingerprint7 Fingerprint7 Fingerprint8 Fingerprint8 Fingerprint9 Fingerprint9 Fingerprint10 Fingerprint10 Scan failed Scan failed The fingerprint already exists The fingerprint already exists Please scan other fingers Please scan other fingers Unknown error Unknown error Scan suspended Scan suspended Cannot recognize Cannot recognize Moved too fast Moved too fast Finger moved too fast, please do not lift until prompted Finger moved too fast, please do not lift until prompted Unclear fingerprint Unclear fingerprint Clean your finger or adjust the finger position, and try again Clean your finger or adjust the finger position, and try again Already scanned Already scanned Adjust the finger position to scan your fingerprint fully Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Lift your finger and place it on the sensor again Position your face inside the frame Position your face inside the frame Face enrolled Face enrolled Position a human face please Position a human face please Keep away from the camera Keep away from the camera Get closer to the camera Get closer to the camera Do not position multiple faces inside the frame Do not position multiple faces inside the frame Make sure the camera lens is clean Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Do not enroll in dark, bright or backlit environments Keep your face uncovered Keep your face uncovered Scan timed out Scan timed out Cancel Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to change NTP server Authentication is required to set the system timezone Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Automatic Noise Suppression Input Volume Input Volume Input Level Input Level Input No input device for sound found Input Device Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password cannot be empty Password must have at least %1 characters Password must have at least %1 characters Password must be no more than %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 monotonic characters please No more than %1 repeating characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Do not use common words and combinations as password Create a strong password please Create a strong password please It does not meet password rules It does not meet password rules QObject Control Center Control Center Activated Activated View View To be activated To be activated Activate Activate Expired Expired In trial period In trial period Trial expired Trial expired dde-control-center Touch Screen Settings Touch Screen Settings The settings of touch screen changed The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Boot up Shut down Shut down Log out Log out Wake up Wake up Volume +/- Volume +/- Notification Notification Low battery Low battery Send icon in Launcher to Desktop Send icon in Launcher to Desktop Empty Trash Empty Trash Plug in Plug in Plug out Plug out Removable device connected Removable device connected Removable device removed Removable device removed Error Error SpeakerPage Mode Mode Output Volume Output Volume Volume Boost Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Left Right Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Save the display settings? Settings will be reverted in %1s. Settings will be reverted in %1s. Revert Revert Save Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System System Window Window Workspace Workspace AssistiveTools AssistiveTools Custom Custom None None ================================================ FILE: translations/dde-control-center_eo.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Konektita Not connected Ne konektita BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Nuligi Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Ekrano Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Eniga laŭteco Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Muso kaj tuŝbloko Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personigo PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Personigo PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center kontroloj centro Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Sono Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Elŝaltiti Log out Elsaluti Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Vakigi korbeton Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Maniero Output Volume Eliga laŭteco Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Maldekstra Right Dekstra Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Restarigi Save Gardi TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Tradicia ĉina (Ĉina Hong Kong) Traditional Chinese (Chinese Taiwan) Tradicia ĉina (Ĉina Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Ĉina Taiwan dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Tiu skratio konfliktas kun [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Sistema Window Fenestro Workspace Labora spaco AssistiveTools Helpa iloj Custom Propra None Nenio ================================================ FILE: translations/dde-control-center_es.ts ================================================ AccountSettings edit Editar Add new user Añadir nuevo usuario Set fullname Establecer nombre completo Login settings Configuración de inicio de sesión Login without password Iniciar sesión sin contraseña Delete current account Borrar cuenta actual Group setting Configuración de grupo Account groups Grupos de cuentas done Finalizar Group name Nombre del grupo Add group Añadir grupo Auto login Inicio de sesión automático Account Information Información de la cuenta Account name, account fullname, account type Nombre de la cuenta, nombre completo de la cuenta, tipo de cuenta Account name Nombre de la cuenta Account fullname Nombre completo de la cuenta Account type Tipo de cuenta The full name is too long El nombre completo es muy largo Group names should be no more than 32 characters Los nombres de los grupos no deben tener más de 32 caracteres Group names cannot only have numbers Los nombres de grupo no pueden tener solo números Use letters,numbers,underscores and dashes only, and must start with a letter Use letras, números, guiones bajos y guiones solamente, y debe comenzar con una letra The group name has been used El nombre del grupo ya esta en uso quick login, Auto login, login without password Inicio de sesión automático, inicio de sesión sin contraseña Undo Deshacer Redo Rehacer Cut Cortar Copy Copiar Paste Pegar Select All Seleccionar todo Quick login Inicio de sesión rápido Accounts Account Cuenta Account manager Administrador de cuentas AccountsMain Other accounts Otras cuentas AddFaceinfoDialog Enroll Face Registrar cara I have read and agree to the He leído y acepto los términos y condiciones Disclaimer Aviso legal Next Siguiente Face enrolled Cara registrada Failed to enroll your face Fallo al registrar la cara Done Hecho Cancel Cancelar Retry Enroll Reintentar registro Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. El reconocimiento facial no detecta la vitalidad de la persona, y este método de verificación puede conllevar riesgos. Para garantizar el acceso: 1. Mantenga sus rasgos faciales claramente visibles y no los cubra (con sombreros, gafas de sol, mascarillas, etc.). 2. Asegúrese de tener suficiente iluminación y evite la luz solar directa. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. La autenticación biométrica es una función de verificación de identidad de usuario proporcionada por UnionTech Software Technology Co., Ltd. Mediante la autenticación biométrica, los datos biométricos recopilados se comparan con los almacenados en el dispositivo, y la identidad del usuario se verifica en función del resultado de la comparación. Tenga en cuenta que UnionTech Software Technology Co., Ltd. no recopilará ni accederá a su información biométrica, la cual se almacenará en su dispositivo. Active la autenticación biométrica únicamente en su dispositivo personal y utilice su propia información biométrica para las operaciones relacionadas. Desactive o elimine de inmediato la información biométrica de otras personas en dicho dispositivo; de lo contrario, usted asumirá los riesgos derivados. UnionTech Software Technology Co., Ltd. se compromete a investigar y mejorar la seguridad, precisión y estabilidad de la autenticación biométrica. Sin embargo, debido a factores ambientales, de equipo, técnicos y otros, así como al control de riesgos, no se garantiza que la autenticación biométrica sea exitosa de forma permanente. Por lo tanto, no utilice la autenticación biométrica como único método para iniciar sesión en UOS. Si tiene alguna pregunta o sugerencia al utilizar la autenticación biométrica, puede enviar sus comentarios a través de "Servicio y soporte" en el UOS. AddFingerDialog Cancel Cancelar Done Finalizar Enroll Finger Registrar huella Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Coloque el dedo que desee en el sensor de huellas dactilares y muévalo de abajo a arriba. Tras completar la acción, levante el dedo. I have read and agree to the He leído y acepto los términos y condiciones Disclaimer Aviso legal Next Siguiente Retry Enroll Reintentar registro "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. La autenticación biométrica es una función de autenticación de identidad de usuario proporcionada por UnionTech Software Technology Co., Ltd. Mediante la autenticación biométrica, los datos biométricos recopilados se compararán con los almacenados en el dispositivo y la identidad del usuario se verificará con base en el resultado de la comparación. Tenga en cuenta que UnionTech Software Technology Co., Ltd. no recopilará ni accederá a su información biométrica, que se almacenará en su dispositivo local. Active la autenticación biométrica únicamente en su dispositivo personal y utilice su propia información biométrica para las operaciones relacionadas. Desactive o elimine de inmediato la información biométrica de otras personas en dicho dispositivo; de lo contrario, usted asumirá los riesgos derivados. UnionTech Software Technology Co., Ltd. se compromete a investigar y mejorar la seguridad, precisión y estabilidad de la autenticación biométrica. Sin embargo, debido a factores ambientales, de equipo, técnicos y de otro tipo, y al control de riesgos, no se garantiza que supere temporalmente la autenticación biométrica. Por lo tanto, no considere la autenticación biométrica como la única forma de iniciar sesión en UOS. Si tiene alguna pregunta o sugerencia al utilizar la autenticación biométrica, puede enviar sus comentarios a través de "Servicio y soporte" en el UOS. AddIrisDialog Enroll Iris Registrar iris I have read and agree to the He leído y acepto los términos y condiciones Disclaimer Aviso legal Next Siguiente Done Hecho Cancel Cancelar Retry Enroll Reintentar registro Iris enrolled Iris registrado Failed to enroll your iris No se ha podido regitrar el iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. La autenticación biométrica es una función de verificación de identidad de usuario proporcionada por UnionTech Software Technology Co., Ltd. Mediante la autenticación biométrica, los datos biométricos recopilados se comparan con los almacenados en el dispositivo, y la identidad del usuario se verifica en función del resultado de la comparación. Tenga en cuenta que UnionTech Software Technology Co., Ltd. no recopilará ni accederá a su información biométrica, la cual se almacenará en su dispositivo. Active la autenticación biométrica únicamente en su dispositivo personal y utilice su propia información biométrica para las operaciones relacionadas. Desactive o elimine de inmediato la información biométrica de otras personas en dicho dispositivo; de lo contrario, usted asumirá los riesgos derivados. UnionTech Software Technology Co., Ltd. se compromete a investigar y mejorar la seguridad, precisión y estabilidad de la autenticación biométrica. Sin embargo, debido a factores ambientales, de equipo, técnicos y otros, así como al control de riesgos, no se garantiza que la autenticación biométrica sea exitosa de forma permanente. Por lo tanto, no utilice la autenticación biométrica como único método para iniciar sesión en UOS. Si tiene alguna pregunta o sugerencia al utilizar la autenticación biométrica, puede enviar sus comentarios a través de "Servicio y soporte" en el UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Por favor, mantenga la vista fija en el dispositivo y asegúrese de que ambos ojos estén dentro del área de recolección. Authentication Biometric Authentication Autenticación biométrica AuthenticationMain Biometric Authentication Autenticación biométrica Face Cara Up to 5 facial data can be entered Se pueden ingresar hasta 5 registros faciales Fingerprint Huella dactilar Identifying user identity through scanning fingerprints Identificar al usuario escaneando la huella dactilar Iris Iris Identity recognition through iris scanning Identificar escaneando el iris Use letters, numbers and underscores only, and no more than 15 characters Use solo letras, números y guión bajo, y no más de 15 caracteres Use letters, numbers and underscores only Utilice solo letras, números y guion bajo No more than 15 characters No más de 15 caracteres This name already exists El nombre ya existe Add a new %1 ... Añadir %1 ... The name cannot be empty El nombre no puede estar vacío. AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first El "Inicio de sesión automático" se puede activar solo para una cuenta, desactívelo primero para la cuenta "%1" Ok Aceptar AvatarSettingsDialog Images Imágenes Human Humano Animal Animal Scenery Escenario Illustration Ilustración Emoji Emoji custom Personalizado Cartoon style Estilo dibujo animado Dimensional style Estilo dimensional Flat style Estilo plano Cancel Cancelar Save Guardar BatteryPage Screen and Suspend Pantalla y suspender Turn off the monitor after Apagar el monitor después Lock screen after Bloquear pantalla después Computer suspends after Suspender el equipo después When the lid is closed Cuando la tapa está cerrada When the power button is pressed Cuando se presiona el botón de encendido Low Battery Batería baja Low battery notification Notificación de batería baja Auto suspend Suspensión automática Auto Hibernate Hibernación automática Low battery threshold Umbral de batería baja Battery Management Administración de la bateria Display remaining using and charging time Mostrar capacidad y tiempo de carga restante Maximum capacity Máxima capacidad Low battery level Nivel de batería bajo Disable Desactivar BlueTooth Bluetooth settings, devices Ajustes de Bluetooth, dispositivos Bluetooth Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" El Bluetooth está desactivado y el nombre se muestra como "%1" Bluetooth is turned on, and the name is displayed as "%1" El Bluetooth está desactivado y el nombre se muestra como "%1" BlueToothDeviceListView Disconnect Desconectar Connect Conectar Send Files Enviar archivos Rename Renombrar Remove Device Remover dispositivo Select file Seleccionar archivo BluetoothCtl Edit Editar Allow other Bluetooth devices to find this device Permitir que otros dispositivos Bluetooth encuentren este equipo To use the Bluetooth function, please turn off Para usar la función Bluetooth, por favor apague Airplane Mode Modo avión Bluetooth name cannot exceed 64 characters El nombre de Bluetooth no puede exceder los 64 caracteres BluetoothDeviceModel Connected Conectado Not connected No conectado BootPage Startup Settings Configuración de inicio You can click the menu to change the default startup items, or drag the image to the window to change the background image. Puede hacer clic en el menú para cambiar los elementos de inicio predeterminados, o arrastrar la imagen a la ventana para cambiar la imagen de fondo. grub start delay Demora de inicio de GRUB theme Tema After turning on the theme, you can see the theme background when you turn on the computer Después de activar el tema, podrá ver el fondo del tema cuando encienda el equipo Boot menu verification Verificación del menú de arranque After opening, entering the menu editing requires a password. Una vez abierto, para entrar en el menú de edición es necesario introducir la contraseña. Change Password Cambiar contraseña Change boot menu verification password Cambiar la contraseña de verificación del menú de arranque Set the boot menu authentication password Establecer la contraseña de autenticación del menú de arranque User Name : Nombre de usuario: root raíz New Password : Nueva contraseña: Required Requerido Password cannot be empty La contraseña no puede estar vacía Passwords do not match Las contraseñas no coinciden Repeat password: Repita la contraseña: Cancel Cancelar Sure Seguro Start animation Animación de inicio Adjust the size of the logo animation on the system startup interface Ajustar el tamaño de la animación del logotipo en el inicio del sistema Camera Allow below apps to access your camera: Permitir que las siguientes aplicaciones usen su cámara: CharaMangerModel Fingerprint1 Huella dactilar 1 Fingerprint2 Huella dactilar 2 Fingerprint3 Huella dactilar 3 Fingerprint4 Huella dactilar 4 Fingerprint5 Huella dactilar 5 Fingerprint6 Huella dactilar 6 Fingerprint7 Huella dactilar 7 Fingerprint8 Huella dactilar 8 Fingerprint9 Huella dactilar 9 Fingerprint10 Huella dactilar 10 Scan failed El escaneo falló The fingerprint already exists La huella dactilar ya existe Please scan other fingers Escanee otros dedos Unknown error Error desconocido Scan suspended Escaneo suspendido Cannot recognize No puedo reconocer Moved too fast Lo moviste muy rápido Finger moved too fast, please do not lift until prompted El dedo se movió demasiado rápido. Por favor, no lo levante hasta que se le indique Unclear fingerprint La huella dactilar es ilegible Clean your finger or adjust the finger position, and try again Limpie su dedo o ajuste la posición del mismo, e intente de nuevo Already scanned Escaneo finalizado Adjust the finger position to scan your fingerprint fully Ajuste la posición del dedo para escanear su huella dactilar completamente Finger moved too fast. Please do not lift until prompted Movió el dedo muy rápido. Por favor, no lo levante hasta que se indique Lift your finger and place it on the sensor again Levante su dedo y colóquelo en el sensor nuevamente Position your face inside the frame Coloque su cara dentro del marco Face enrolled Cara registrada Position a human face please Coloque una cara humana por favor Keep away from the camera Aléjese de la cámara Get closer to the camera Acérquese a la cámara Do not position multiple faces inside the frame No coloque varias caras dentro del marco Make sure the camera lens is clean Asegúrese de que el objetivo de la cámara está limpio Do not enroll in dark, bright or backlit environments No se registre en ambientes oscuros, brillantes o a contraluz Keep your face uncovered Mantenga su cara descubierta Scan timed out Tiempo de escaneo agotado Cancel Cancelar Camera occupied! ¡Cámara ocupada! ColorAndIcons Accent Color Color del resaltado Icon Settings Ajustes de iconos Icon Theme Tema de iconos Customize your theme icon Personalizar el tema de iconos Cursor Theme Tema de cursor Customize your theme cursor Personalizar el tema del cursor ComfirmDeleteDialog Are you sure you want to delete this account? ¿Está seguro de que desea borrar esta cuenta? Delete account directory Borrar carpeta de la cuenta Cancel Cancelar Delete Borrar ComfirmSafePage Go to settings Ir a la configuración Cancel Cancelar Common Common General Repeat delay Intervalo de repetición Short Corto Long Largo Repeat rate Tasa de repetición Slow Lento Fast Rápido Numeric Keypad Teclado numérico test here Pruebe aquí Caps lock prompt Indicador de bloqueo de mayúsculas Double Click Speed Velocidad de doble clic Double Click Test Doble clic para probar Left Hand Mode Modo mano izquierda Enable Keyboard Activar teclado General General Scrolling Speed Velocidad de desplazamiento CommonInfoMain Boot Menu Menú de arranque Manage your boot menu Configurar el menú de arranque Developer root permission management Configuración de permisos root para desarrolladores Developer Options Opciones para desarrolladores Developer debugging options Opciones de depuración para desarrolladores CommonInfoWork Large size Tamaño grande Small size Tamaño pequeño Failed to get root access Error al obtener acceso root Please sign in to your Union ID first Primero inicie sesión en su ID de Unión Cannot read your PC information No se puede leer la información del equipo No network connection Sin conexión a red Certificate loading failed, unable to get root access La carga del certificado falló, no es posible obtener acceso root Signature verification failed, unable to get root access La verificación de la firma falló, no es posible obtener acceso root Agree and Join User Experience Program Aceptar y unirse al programa de experiencia de usuario The Disclaimer of Developer Mode Descargo de responsabilidad del modo desarrollador Agree and Request Root Access Aceptar y solicitar el acceso root Start setting the new boot animation, please wait for a minute Configurando la nueva animación de inicio, espere un minuto Setting new boot animation finished Configuración de la nueva animación de inicio finalizada The settings will be applied after rebooting the system La configuración se aplicará después de reiniciar el sistema. Restart now Reinicar ahora Dismiss Rechazar Restart device to finish applying Solid System Read-Only Protection settings Reinicie el dispositivo para aplicar la configuración de protección de solo lectura del sistema. ConfirmManager Password must contain numbers and letters La contraseña debe contener números y letras Password must be between 8 and 64 characters La contraseña debe tener entre 8 y 64 caracteres CreateAccountDialog Create a new account Crear cuenta nueva Account type Tipo de cuenta UserName Nombre de usuario Required Requerido FullName Nombre completo Optional Opcional Cancel Cancelar Create account Crear cuenta Username cannot exceed 32 characters El nombre de usuario no puede exceder los 32 caracteres Username can only contain letters, numbers, - and _ El nombre de usuario solo puede contener letras, números, - y _ Full name cannot exceed 32 characters El nombre completo no puede exceder los 32 caracteres Full name cannot contain colons El nombre completo no puede contener dos puntos CustomAvatarCropper small Pequeño big grande CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Aún no ha subido un avatar, puede hacer clic o arrastrar para cargar una imagen. The uploaded file type is incorrect, please upload it again El tipo de archivo subido es incorrecto, súbalo de nuevo DCC_NAMESPACE::SystemInfoModel available disponible DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Aceptar y unirse al programa de experiencia de usuario <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>Somos plenamente conscientes de la importancia que tiene su información personal para usted. Por ello, contamos con una Política de Privacidad que describe cómo recopilamos, usamos, compartimos, transferimos, divulgamos públicamente y almacenamos su información.</p> <p>Puede hacer <a href="%1">clic aquí </a>para ver nuestra política de privacidad más reciente o consultarla en línea visitando<a href="%1"> %1</a>. Lea atentamente y comprenda completamente nuestras prácticas en materia de privacidad del cliente. Si tiene alguna pregunta, póngase en contacto con nosotros en: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Al unirte al Programa de Experiencia de Usuario, nos autoriza a recopilar y utilizar la información de tu dispositivo, sistema y aplicaciones. Si rechazas la recopilación y el uso de dicha información, no te unas al Programa de Experiencia de Usuario. Para más detalles, consulta la Política de Privacidad de Deepin. (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">Al unirte al Programa de Experiencia del Usuario, nos otorga y autoriza a recopilar y utilizar la información de tu dispositivo, sistema y aplicaciones. Si rechazas la recopilación y el uso de dicha información, no te unas. Para obtener más detalles sobre el Programa de Experiencia del Usuario, visita</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Configuración de fecha y hora Date Fecha Year Año Month Mes Day Día Time Hora Cancel Cancelar Confirm Confirmar Datetime Time and date Fecha y hora Time and date, time zone settings Ajustes de fecha, hora y zona horaria DatetimeMain Language and region Idioma y región System language, regional formats Idioma del sistema, formato regional DatetimeModel Tomorrow Mañana Yesterday Ayer Today Hoy %1 hours earlier than local %1 horas antes que la local %1 hours later than local %1 hora más tarde que la local Space Espacio Week Semana First day of week Primer día de la semana Short date Fecha corta Long date Fecha larga Short time Hora corta Long time Hora larga Currency symbol Símbolo de moneda Positive currency Formato de moneda positivo Negative currency Formato de moneda negativo Decimal symbol Símbolo decimal Digit grouping symbol Símbolo de agrupación de dígitos Digit grouping Agrupación de dígitos Page size Tamaño de la página Example Ejemplo DatetimeWorker Authentication is required to change NTP server Se requiere autenticación para cambiar el servidor NTP Authentication is required to set the system timezone Se requiere autenticación para configurar la zona horaria del sistema. DccColorDialog Cancel Cancelar Save Guardar DccWindow Control Center provides the options for system settings. Centro de control proporciona las opciones para la configuración del sistema. DeepinIDAccountSecurity Bind WeChat Vincular WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Al vincular WeChat, puede iniciar sesión de forma segura y rápida en su ID %1 y en sus cuentas locales. Unlinked Desvinculado Unbinding Desvinculando Link Vincular Are you sure you want to unbind WeChat? ¿Está seguro de que quiere desvincular WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Después de desvincular WeChat, no podrá utilizar WeChat para escanear el código QR para iniciar sesión en UOS ID o cuenta local. Let me think it over Dejame pensarlo. Local Account Binding Vinculación de cuenta local After binding your local account, you can use the following functions: Después de vincular su cuenta local, puede utilizar las siguientes funciones: WeChat Scan Code Login System Sistema de inicio de sesión con código de escaneo WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Utilice WeChat, que está vinculado a su ID %1, para escanear el código para iniciar sesión en su cuenta local. Reset password via %1 ID Restablecer contraseña a través de %1 ID Reset your local password via %1 ID in case you forget it. Restablezca su contraseña local a través de %1 ID en caso de que la olvide. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Para utilizar las funciones anteriores, vaya al Centro de control - Cuentas y active las opciones correspondientes. DeepinIDInterface deepin Deepin UOS UOS DeepinIDLogin Cloud Sync Sincronización en la nube Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Administre su Deepin ID y sincronice sus datos personales entre dispositivos. Inicie sesión en Deepin ID para obtener funciones y servicios personalizados del navegador, tienda de aplicaciones, soporte y más. Sign In to %1 ID Iniciar sesión en %1 ID DeepinIDSyncService Auto Sync Sincronización automática Securely store system settings and personal data in the cloud, and keep them in sync across devices Almacene de forma segura la configuración del sistema y los datos personales en la nube, y manténgalos sincronizados en todos los dispositivos. System Settings Ajustes del sistema Last sync time: %1 Última sincronización: %1 Clear cloud data Borrar datos de la nube Are you sure you want to clear your system settings and personal data saved in the cloud? ¿Está seguro de que desea borrar la configuración del sistema y los datos personales guardados en la nube? Once the data is cleared, it cannot be recovered! Una vez que se borran los datos, ¡no se pueden recuperar! Cancel Cancelar Clear Limpiar DeepinIDUserInfo Synchronization Service Servicios de sincronización Account and Security Cuenta y seguridad Sign out Cerrar sesión Go to web settings Ir a la configuración web The nickname must be 1~32 characters long El apodo debe tener entre 1~32 caracteres DeepinWorker encrypt password failed Error al cifrar la contraseña Wrong password, %1 chances left Contraseña incorrecta, quedan %1 posibilidades The login error has reached the limit today. You can reset the password and try again. Alcanzó el límite de fallos de inicio de sesión de hoy. Puede restablecer la contraseña e interntarlo de nuevo. Operation Successful Operación exitosa The nickname can be modified only once a day El apodo se puede modificar solo una vez al día. Deepinid deepin ID Deepin ID UOS ID UOS ID Cloud services Servicios en la nube DeepinidModel Mainland China China continental Other regions Otras regiones The feature is not available at present, please activate your system first La función no está disponible, primero active su sistema Subject to your local laws and regulations, it is currently unavailable in your region. Sujeto a leyes y regulaciones locales, actualmente no está disponible en su región. Defaultapp Default App Aplicación predeterminada Set the default application for opening various types of files Establecer la aplicación predeterminada para abrir varios tipos de archivos DefaultappMain Webpage Página web Mail Correo Text Texto Music Música Video Vídeo Picture Imagen Terminal Terminal DetailItem Please choose the default program to open '%1' Seleccione la aplicación predeterminada para abrir '%1' add Añadir Open Desktop file Abrir un archivo del escritorio Apps (*.desktop) Aplicaciones (*.desktop) All files (*) Todos los archivos (*) DevelopModePage Root Access Acceso de superusuario Request Root Access Solicitar acceso de superusuario After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Después de ingresar al modo de desarrollador, puede obtener permisos de root, pero también puede dañar la integridad del sistema, así que úselo con precaución. Allowed Permitido Enter Entrar Online En línea Login UOS ID Iniciar sesión con UOS ID Offline Fuera de línea Import Certificate Importar certificado Select file Seleccionar archivo Your UOS ID has been logged in, click to enter developer mode Su ID de UOS ha iniciado sesión, haga clic para ingresar al modo de desarrollador Please sign in to your UOS ID first and continue Inicie sesión primero con su ID de UOS y continúe 1.Export PC Info 1.Exportar información del PC Export Exportar 3.Import Certificate 3.Importar certificado Development and debugging options Opciones de depuración para desarrolladores System logging level Nivel de registro del sistema Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Cambiar las opciones da como resultado un registro más detallado que puede degradar el rendimiento del sistema y/o ocupar más espacio de almacenamiento. Off Apagado Debug Depurar Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. El cambio de opción puede tardar hasta un minuto en procesarse. Después de recibir un mensaje de configuración exitosa, reinicie el dispositivo para que surta efecto. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. Para instalar y ejecutar aplicaciones sin firmar, vaya al <a style='text-decoration: none;' href='Security Center'> Centro de seguridad </a> para cambiar la configuración. To install and run unsigned apps, please go to Security Center to change the settings. Para instalar y ejecutar aplicaciones sin firmar, vaya al Centro de seguridad para cambiar la configuración. You have entered developer mode Ha entrado en el modo desarrollador. OK Aceptar 2.please go to %1 to Download offline certificate. 2. Por favor, diríjase a %1 para descargar el certificado sin conexión. The feature is not available at present, please activate your system first. Esta función no está disponible; actívela primero en el sistema. Solid System Read-Only Protection Protección de solo lectura del sistema Disabling protection unlocks system directories,This action carries a high risk of system damage. Deshabilitar la protección desbloquea los directorios del sistema. Esta acción conlleva un alto riesgo de daños al sistema. Enable protection to lock system directories and ensure optimal stability. Habilite la protección de bloqueo de los directorios del sistema para garantizar una estabilidad óptima. Device Bluetooth and Devices Dispositivos y Bluetooth DisclaimerControl Disclaimer Aviso legal Cancel Cancelar Agree Aceptar Display Display Pantalla Brightness,resolution,scaling Brillo, resolución, escalado DisplayMain 100% 100% 125% 125% 150% 150% 175% 175% 200% 200% 225% 225% 250% 250% 275% 275% 300% 300% Duplicate Duplicada Extend Extendida Default Por defecto Fit Ajustar Stretch Estirar Center Centro Only on %1 Solo mostrada en %1 Multiple Displays Settings Ajustes de pantalla múltiple Identify Identificar Screen rearrangement will take effect in %1s after changes La reorganización de la pantalla tendrá efecto en %1s después de los cambios Mode Modo Main Screen Pantalla principal Display And Layout Visualización y diseño Brightness Brillo Resolution Resolución Resize Desktop Cambiar el tamaño del escritorio Refresh Rate Tasa de refresco Rotation Rotación Standard Estándar 90° 90° 180° 180° 270° 270° The monitor only supports 100% display scaling Este monitor solo soporta escalado del 100% Eye Comfort Descanso visual Enable eye comfort Activar descanso visual Adjust screen display to warmer colors, reducing screen blue light Configura la pantalla para mostrar colores más cálidos, reduciendo la luz azúl Time Hora All day Todo el día Sunset to Sunrise Del atardecer al amanecer Custom Time Horario personalizado from De to a Color Temperature Temperatura del color %1x%2 (Recommended) %1x%2 (Recomendado) %1x%2 %1x%2 %1Hz (Recommended) %1Hz (Recomendado) %1Hz %1Hz Scaling Escalado Dock Desktop and taskbar Escritorio y barra de tareas Desktop organization, taskbar mode, plugin area settings Organización del escritorio, modo de barra de tareas, ajustes del área de complementos DockMain Dock Muelle Mode Modo Classic Mode Modo clásico Centered Mode Modo centrado Dock size Altura del muelle Small Pequeño Large Grande Position on the screen Posición en pantalla Top Arriba Bottom Abajo Left Izquierda Right Derecha Status Estado Keep shown Mantener visible Keep hidden Mantener oculto Smart hide Ocultado inteligente Multiple Displays Múltiples pantallas Set the position of the taskbar on the screen Establecer posición de la barra de tareas en la pantalla Only on main Solo en principal On screen where the cursor is En la pantalla donde está el cursor Plugin Area Área de complementos Select which icons appear in the Dock Seleccione los iconos que aparecerán en el muelle Lock the Dock Bloquear el muelle Combine application icons Agrupar iconos de las aplicaciones FileAndFolder Allow below apps to access these files and folders: Permitir que las siguientes aplicaciones accedan a estos archivos y carpetas: Documents Documentos Desktop Escritorio Pictures Imágenes Videos Vídeos Music Música Downloads Descargas folder Carpeta FontSizePage Size Tamaño Standard Font Fuente estándar Monospaced Font Fuente monoespaciada GeneralPage Power Plans Perfiles de energía Power Saving Settings Configuración de ahorro de energía Auto power saving on low battery Ahorro de energía automático cuando la batería está baja Low battery threshold Umbral de batería baja Auto power saving on battery Ahorro automático de energía en la batería Wakeup Settings Ajustes de reactivación Password is required to wake up the computer Se requiere contraseña para reactivar el equipo Password is required to wake up the monitor Se requiere contraseña para activar el monitor Shutdown Settings Configuración de apagado Scheduled Shutdown Apagado programado Time Hora Repeat Repetir Once Una vez Every day Cada día Working days Días laborables Custom Time Horario personalizado Decrease screen brightness on power saver Disminuir el brillo de la pantalla en el modo de ahorro de energía GestureModel Three-finger up Tres dedos hacia arriba Three-finger down Tres dedos hacia abajo Three-finger left Tres dedos a la izquierda Three-finger right Tres dedos a la derecha Three-finger tap Toque con tres dedos Four-finger up Cuatro dedos hacia arriba Four-finger down Cuatro dedos hacia abajo Four-finger left Cuatro dedos a la izquierda Four-finger right Cuatro dedos a la derecha Four-finger tap Toque con cuatro dedos HomePage , , ... ... InterfaceEffectListview Optimal Performance Optimizar rendimiento Balance Equilibrado Best Visuals Optimizar efectos visuales Disable all interface and window effects for efficient system performance. Desactiva todos los efectos de ventana para mejorar rendimiento del sistema. Limit some window effects for excellent visuals while maintaining smooth system performance. Limita algunos efectos de ventana manteniendo buenos efectos visuales y una experiencia fluida del sistema. Enable all interface and window effects for the best visual experience. Activa todos los efectos de ventana para tener la mejor experiencia visual. Keyboard Keyboard Teclado General Settings, input method, shortcuts Ajustes generales, método de entrada, atajos KeyboardMain Common General LangAndFormat Language Idioma done Finalizar edit Editar Other languages Otros idiomas add Añadir Region Región Area Área Operating system and applications may provide you with local content based on your country and region El sistema operativo y las aplicaciones pueden brindarle contenido local según su país y región. Operating system and applications may set date and time formats based on regional formats El sistema operativo y las aplicaciones pueden establecer formatos de fecha y hora según formatos regionales. Regional format Formato regional LangsChooserDialog Add language Añadir idioma Search Buscar Cancel Cancelar Add Añadir LoginMethod Login method Método de inicio de sesión Password, wechat, biometric authentication, security key Contraseña, WeChat, autenticación biométrica, clave de seguridad Password Contraseña Modify password Modificar contraseña Validity days Días vigentes Always Siempre Reset password Restablecer contraseña LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Comunidad Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Supresión automática de ruido Input Volume Volumen de entrada Input Level Nivel de entrada Input Entrada No input device for sound found No se encontró ningún dispositivo de entrada de sonido Input Device Dispositivo de entrada Mouse Mouse and Touchpad Ratón y Panel táctil Common、Mouse、Touchpad Ajustes generales, ratón, panel táctil MouseMain Common General Mouse Ratón Touchpad Panel táctil MousePage Mouse Ratón Pointer Speed Velocidad del puntero Slow Lento Fast Rápido Pointer Size Tamaño del puntero Mouse Acceleration Acceleración del ratón Disable touchpad when a mouse is connected Desactivar el panel táctil cuando el ratón está conectado Natural Scrolling Desplazamiento natural Small Pequeño Medium Mediano Large Grande X-Large Extra grande Some apps require logout or system restart to take effect Algunas aplicaciones requieren cerrar sesión o reiniciar el sistema para que surja efecto. MyDevice My Devices Mis dispositivos NativeInfoPage UOS UOS Computer name Nombre del equipo It cannot start or end with dashes No puede empezar ni terminar con guiones OS Name Nombre del SO Version Versión Edition Edición Type Tipo bit bit Authorization Autorización System installation time Fecha de instalación del sistema Kernel Kernel Graphics Platform Gráfica Processor Procesador Memory Memoria 1~63 characters please De 1 a 63 caracteres, por favor Notification DND mode, app notifications Modo no molestar, notificaciones de aplicaciones Notification Notificaciones NotificationMain Do Not Disturb Settings Ajustes de no molestar App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Las notificaciones de las aplicaciones no se mostrarán en el escritorio y los sonidos estarán silenciados, pero podrás ver todos los mensajes en el centro de notificaciones. Enable Do Not Disturb Activar no molestar When the screen is locked Cuando la pantalla está bloqueada Number of notifications shown on the desktop Número de notificaciones mostradas en el escritorio App Notifications Notificaciones de las aplicaciones Allow Notifications Permitir notificaciones Display notification on desktop or show unread messages in the notification center Las notificaciones se mostrarán en el escritorio o en mensajes sin leer en el centro de notificaciones Desktop Escritorio Lock Screen Bloquear pantalla Notification Center Centro de notificaciones Show message preview Mostrar vista previa del mensaje Play a sound Reproducir un sonido OtherDevice Other Devices Otros dispositivos Show Bluetooth devices without names Mostrar dispositivos Bluetooth sin nombre PasswordLayout Current password Contraseña actual Required Requerido Weak Débil Medium Medio Strong Fuerte Repeat Password Repita la contraseña Password hint Pista de contraseña Optional Opcional Password cannot be empty La contraseña no puede estar vacía Passwords do not match Las contraseñas no coinciden The hint is visible to all users. Do not include the password here. La pista es visible para todos. No incluya la contraseña. New password Nueva contraseña New password should differ from the current one La nueva contraseña debe ser diferente a la actual The password cannot be the same as the username. La contraseña no puede ser igual al nombre de usuario. PasswordModifyDialog Modify password Modificar contraseña Reset password Restablecer contraseña Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. La contraseña debe tener al menos 8 caracteres y contener al menos 3 de los siguientes elementos: mayúsculas, minúsculas, números y símbolos. Este tipo de contraseña es más segura. Resetting the password will clear the data stored in the keyring. Restablecer la contraseña borrará los datos almacenados en el llavero. Cancel Cancelar Personalization Personalization Personalización PersonalizationInterface Light Claro Auto Automático Dark Oscuro Picker service is not available El servicio de selección no está disponible. Invalid color format: %1 Formato de color no válido: %1 PersonalizationMain Theme Tema Appearance Apariencia Window effect Efectos de ventana Personalize your wallpaper and screensaver Personalice el fondo de pantalla y salvapantallas Screensaver Salvapantallas Colors and icons Colores e iconos Adjust accent color and theme icons Ajustar el color de acento y los iconos del tema Font and font size Fuente y tamaño de fuente Change system font and size Cambie la fuente y el tamaño de fuente del sistema Wallpaper Fondo de pantalla Select light, dark or automatic theme appearance Seleccione tema claro, oscuro o automático Interface and effects, rounded corners Ajuste efectos y esquinas de ventana PersonalizationWorker Custom Personalizar PluginArea Plugin Area Área de complementos Select which icons appear in the Dock Seleccione los iconos que aparecerán en el muelle Power Power saving settings, screen and suspend Ajustes de energía, pantalla y suspención Power Energía PowerMain General General Power plans, power saving settings, wakeup settings, shutdown settings Planes de energía y ajustes de energía, encendido y apagado Plugged In Conectado Screen and suspend Pantalla y suspención On Battery Con batería screen and suspend, low battery, battery management Pantalla, suspensión, batería baja y ajustes de la batería PowerOperatorModel Shut down Apagar Suspend Suspender Hibernate Hibernar Turn off the monitor Apagar el monitor Show the shutdown Interface Mostrar interfaz de apagado Do nothing No hacer nada PowerPage Screen and Suspend Pantalla y suspender Turn off the monitor after Apagar el monitor después Lock screen after Bloquear pantalla después Computer suspends after Suspender el equipo después When the lid is closed Cuando la tapa está cerrada When the power button is pressed Cuando se presiona el botón de encendido PowerPlansListview High Performance Alto rendimiento Balance Performance Rendimiento equilibrado Aggressively adjust CPU operating frequency based on CPU load condition Ajuste agresivo de la frecuencia de funcionamiento de la CPU según la condición de carga de la CPU Balanced Equilibrado Power Saver Ahorro de energía Prioritize performance, which will significantly increase power consumption and heat generation Priorizar el rendimiento, lo que aumentará significativamente el consumo de energía y la generación de calor. Balancing performance and battery life, automatically adjusted according to usage Equilibrio entre rendimiento y duración de la batería, ajustado automáticamente según el uso Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Priorizar la duración de la batería, con lo cual el sistema sacrificará algo de rendimiento para reducir el consumo de energía. PowerWorker Minutes Minutos Hour Hora Never Nunca Privacy Privacy and Security Privacidad y seguridad Camera, folder permissions Cámara, permisos de carpetas PrivacyMain Camera Cámara Choose whether the application has access to the camera Selecione cuáles aplicaciones pueden acceder a la cámara Files and Folders Archivos y carpetas Choose whether the application has access to files and folders Selecione cuáles aplicaciones pueden acceder a sus archivos y carpetas PrivacyPolicyPage Privacy Policy Política de privacidad Copy Link Address Copiar dirección del enlace PwqualityManager Password cannot be empty La contraseña no puede estar vacía Password must have at least %1 characters La contraseña debe tener al menos %1 caracteres Password must be no more than %1 characters La contraseña no debe tener más de %1 caracteres Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) La contraseña debe contener letras latinas (sensible a mayúsculas), números o símbolos (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No más de %1 caracteres palíndromos No more than %1 monotonic characters please No más de %1 caracteres monótonos por favor No more than %1 repeating characters please No más de %1 caracteres repetidos, por favor Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) La contraseña debe contener letras mayúsculas, minúsculas, números y símbolos (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters La contraseña no debe contener más de 4 caracteres palíndromos Do not use common words and combinations as password No use palabras o combinaciones comunes como contraseña Create a strong password please Por favor, cree una contraseña fuerte It does not meet password rules No cumple con las reglas de contraseñas QObject Control Center Centro de control Activated Activado View Ver To be activated Activación pendiente Activate Activar Expired Vencido In trial period En período de prueba Trial expired Período de prueba finalizado dde-control-center centro-de-control-dde Touch Screen Settings Ajustes de pantalla táctil The settings of touch screen changed La configuración de la pantalla táctil cambió This system wallpaper is locked. Please contact your admin. Este fondo de pantalla del sistema está bloqueado. Póngase en contacto con su administrador. %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search Buscar Default formats Formato predeterminado First day of week Primer día de la semana Short date Fecha corta Long date Fecha larga Short time Hora corta Long time Hora larga Currency symbol Símbolo de moneda Digit Dígito Paper size Tamaño de la página Cancel Cancelar Save Guardar Regional format Formato regional RegionsChooserWindow Search Buscar RegisterDialog Set a Password Establecer una contraseña 8-64 characters 8-64 caracteres Repeat the password Repetir contraseña Cancel Cancelar Confirm Confirmar Passwords don't match Las contraseñas no coinciden ScheduledShutdownDialog Customize repetition time Tiempo de repetición personalizado Cancel Cancelar Save Guardar ScreenSaverPage Screensaver Salvapantallas preview Vista previa Personalized screensaver Salvapantallas personalizado setting Ajustes idle time Tiempo de inactividad 1 minute 1 minuto 5 minute 5 minutos 10 minute 10 minutos 15 minute 15 minutos 30 minute 30 minutos 1 hour 1 hora never Nunca Password required for recovery Se requiere contraseña para la recuperación Picture slideshow screensaver Salvapantallas de presentación de imágenes System screensaver Salvapantallas del sistema SearchableListViewPopup Search Buscar No search results Sin resultados ShortcutSettingDialog Add custom shortcut Añadir atajo personalizado Name: Nombre: Required Requerido Command: Comando: Shortcut Atajo None Ninguno Cancel Cancelar Add Añadir The shortcut name is already in use. Choose a different name. El nombre del acceso directo ya está en uso. Elija un nombre diferente. Change custom shortcut Modificar el acceso directo personalizado please enter a shortcut key Introduzca una tecla de acceso directo. Save Guardar click Save to make this shortcut key effective Haz clic en Guardar para que esta tecla de acceso directo sea efectiva. click Add to make this shortcut key effective Haz clic en Agregar para que esta tecla de acceso directo sea efectiva. Shortcuts Shortcuts Atajos System shortcut, custom shortcut Atajos del sistema, atajo personalizado Search shortcuts Buscar atajos done Finalizar edit Editar Click Clic Cancel Cancelar or o Replace Reemplazar Restore default Restaurar valores predeterminados Add custom shortcut Añadir atajo personalizado please enter a new shortcut key Introduzca una tecla de acceso directo. Sound Sound Sonido Output, input, sound effects, devices Entradas y salidas de audio, efectos de sonido y dispositivos de audio SoundDevicemanagesPage Output Devices Dispositivos de salida Select whether to enable the devices Seleccione para activar los dispositivos Input Devices Dispositivos de entrada SoundEffectsPage Sound Effects Efectos de sonido SoundMain Settings Ajustes Sound Effects Efectos de sonido Enable/disable sound effects Activar/desactivar efectos de sonido Enable/disable audio devices Activar/desactivar dispositivos de audio Devices Management Gestión de dispositivos SoundModel Boot up Arrancar Shut down Apagar Log out Cerrar sesión Wake up Despertar Volume +/- Volumen +/- Notification Notificaciones Low battery Batería baja Send icon in Launcher to Desktop Enviar icono del lanzador al escritorio Empty Trash Vaciar papelera Plug in Enchufar Plug out Desenchufar Removable device connected Dispositivo extraíble conectado Removable device removed Dispositivo extraíble retirado Error Error SpeakerPage Mode Modo Output Volume Volumen de salida Volume Boost Amplificar el volumen If the volume is louder than 100%, it may distort audio and be harmful to output devices Si el volumen es más fuerte que el 100%, puede distorsionar el audio y ser dañino para los dispositivos de salida Left Izquierda Right Derecha Output Salida No output device for sound found No se encontró ningún dispositivo de salida de sonido Left Right Balance Balance izquierda/derecha Merge left and right channels into a single channel Fusionar los canales izquierdo y derecho en un solo canal Whether the audio will be automatically paused when the current audio device is unplugged El audio se pausará automáticamente cuando se desconecte el dispositivo de audio actual Mono Audio Audio mono Auto Pause Pausa automática Output Device Dispositivo de salida SyncInfoListModel Sound Sonido Power Energía Mouse Ratón Update Actualizar Screensaver Salvapantallas System Common settings Ajustes generales System Sistema SystemInfo Auxiliary Information Información adicional SystemInfoMain About This PC Acerca del equipo System version, device information Versión del sistema e información del hardware View the notice of open source software Declaración del software de código abierto User Experience Program Experiencia de usuario Join the user experience program to help improve the product Unase al programa de experiencia de usuario para ayudar a mejorar este producto End User License Agreement Acuerdo de licencia de usuario final View the end user license agreement Muestra el acuerdo de licencia de usuario final Privacy Policy Política de privacidad View information about privacy policy Muestra información sobre la política de seguridad Open Source Software Notice Declaración de software de código abierto ThemeSelectView More Wallpapers Más fondos de pantalla TimeAndDate Auto sync time Sincronizar hora automáticamente Ntp server Servidor Ntp System date and time Fecha y hora del sistema Customize Personalizar Settings Ajustes Server address Dirección del servidor Required Requerido The ntp server address cannot be empty La dirección del servidor ntp no puede estar vacía Use 24-hour format Usar formato de 24 horas system time zone Zona horaria del sistema Timezone list Lista de zonas horarias Add Añadir TimeRange from de to a TimeoutDialog Save the display settings? ¿Guardar los ajustes de pantalla? Settings will be reverted in %1s. Los ajustes se revertirán en %1s. Revert Revertir Save Guardar TimezoneDialog Add time zone Añadir zona horaria Determine the time zone based on the current location Determinar la zona horaria en función de la ubicación actual Time zone: Zona horaria: Nearest City: Ciudad más cercana: Cancel Cancelar Save Guardar TouchScreen TouchScreen Pantalla táctil Set up here when connecting the touch screen Configure aquí al conectar la pantalla táctil Touchpad Basic Settings Configuración básica Touchpad Panel táctil Pointer Speed Velocidad del puntero Slow Lento Fast Rápido Disable touchpad during input Desactivar el panel táctil mientras escribe Tap to Click Toque para hacer clic Natural Scrolling Desplazamiento natural Three-finger gestures Gestos de tres dedos Four-finger gestures Gestos de cuatro dedos Gestures Gestos Touchscreen Touchscreen Pantalla táctil Configuring Touchscreen Ajustes de pantalla táctil TouchscreenMain Common General UserExperienceProgramPage Join User Experience Program Unirme al programa de experiencia de usuario Copy Link Address Copiar dirección del enlace VerifyDialog Security Verification Verificación de seguridad The action is sensitive, please enter the login password first La acción es confidencial, ingrese primero la contraseña de inicio de sesión 8-64 characters 8-64 caracteres Forgot Password? ¿Olvidó la contraseña? Cancel Cancelar Confirm Confirmar Wacom wacom Wacom Configuring wacom Ajustes de Wacom WacomMain wacom Wacom Pen Mode Modo lápiz Mouse Mode Modo ratón Pressure Sensitivity Sensibilidad de la presión Light Claro Heavy Intensa Model Modelo WallpaperPage wallpaper fondo de pantalla My pictures Mis imágenes System Wallpaper Fondo de pantalla Solid color wallpaper Fondo de pantalla de color sólido Customizable wallpapers Fondos de pantalla personalizados fill style Estilo de relleno Automatic wallpaper change Cambiar fondos automáticamente never Nunca 30 second 30 segundos 1 minute 1 minuto 5 minute 5 minutos 10 minute 10 minutos 15 minute 15 minutos 30 minute 30 minutos login Iniciar sesión wake up Despertar Live Wallpaper Fondo de pantalla animado 1 hour 1 hora System Wallpapers Fondos de pantalla del sistema WallpaperSelectView unfold Contraer Set lock screen Establecer pantalla de bloqueo Set desktop Establecer escritorio show all - %1 items Mostrar todo - %1 elementos Add Picture Agregar imagen WindowEffectPage Interface and Effects Interfaz y efectos Window Settings Ajustes de ventana Window rounded corners Esquinas redondeadas None Ninguno Small Pequeño Large Grande Enable transparent effects when moving windows Activar efecto de transparencia al mover la ventana Window Minimize Effect Efecto al minimizar ventana Scale Escala Magic Lamp Lámpara mágica Opacity Opacidad Low Bajo High Alto Scroll Bars Barras de desplazamiento Show on scrolling Mostrar al desplazar Keep shown Mantener visible Compact Display Vista compacta If enabled, more content is displayed in the window. Si está activado, se mostrará más contenido en la ventana. Title Bar Height Altura de la barra de título Only suitable for application window title bars drawn by the window manager. Aplica solo a barras de título de ventanas con tema nativo del sistema. Extremely small Extremadamente pequeño Medium describe size of window rounded corners Mediano Medium describe height of window title bar Mediano dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Chino tradicional (Hong Kong) Traditional Chinese (Chinese Taiwan) Chino tradicional (Taiwan) Min Nan Chinese Min Nan Chino dcc::Locale::regionNames Taiwan China Taiwan dccV25::AccountsController Username must be between 3 and 32 characters El nombre de usuario debe tener entre 3 y 32 caracteres The first character must be a letter or number El primer carácter debe ser una letra o número Your username should not only have numbers El nombre de usuario no puede tener solo números The username has been used by other user accounts El nombre de usuario ha sido utilizado por otra cuenta de usuario The full name is too long El nombre completo es muy largo The full name has been used by other user accounts El nombre completo ha sido utilizado por otra cuenta de usuario Wrong password Contraseña incorrecta Standard User Usuario estándar Administrator Administrador Customized Personalizado dccV25::AccountsWorker Your host was removed from the domain server successfully Su host se removió del servidor de dominio exitosamente. Your host joins the domain server successfully Su host se unió al servidor de dominio exitosamente Your host failed to leave the domain server Su host no se pudo remover del servidor de dominio Your host failed to join the domain server Su host no pudo unirse al servidor de dominio AD domain settings Ajustes de dominio AD Password not match La contraseña no coincide dccV25::AvatarTypesModel Dimensional Dimensional Flat Plano dccV25::FaceAuthController Faceprint Huella facial Face Cara Use your face to unlock the device and make settings later Usar su cara para desbloquear el dispositivo y hacer ajustes más tarde dccV25::FingerprintAuthController Fingerprint Huella dactilar Place your finger Coloque su dedo Place your finger firmly on the sensor until you're asked to lift it Coloque su dedo firmemente en el sensor hasta que le pida que lo levante Lift your finger Suelte su dedo Lift your finger and place it on the sensor again Levante su dedo y colóquelo en el sensor nuevamente Lift your finger and do that again Levante su dedo y hágalo nuevamente Scan Suspended Escaneo suspendido Scan the edges of your fingerprint Escaneé su huella dactilar Place the edges of your fingerprint on the sensor Coloque su huella dactilar en el sensor Adjust the position to scan the edges of your fingerprint Ajuste la posición para escanear su huella dactilar Fingerprint added Huella dactilar añadida dccV25::IrisAuthController Iris Iris Use your iris to unlock the device and make settings later Usa tu iris para desbloquear el dispositivo y realizar ajustes posteriormente. dccV25::KeyboardController This shortcut conflicts with [%1] Este atajo entra en conflicto con [%1] dccV25::PwqualityManager Password cannot be empty La contraseña no puede estar vacía Password must have at least %1 characters La contraseña debe tener al menos %1 caracteres Password must be no more than %1 characters La contraseña no debe tener más de %1 caracteres Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) La contraseña debe contener letras latinas (sensible a mayúsculas), números o símbolos (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No más de %1 caracteres palíndromos No more than %1 monotonic characters please No más de %1 caracteres monótonos No more than %1 repeating characters please No más de %1 caracteres repetidos Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) La contraseña debe contener letras mayúsculas, minúsculas, números y símbolos (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters La contraseña no debe contener más de 4 caracteres palíndromos Do not use common words and combinations as password No use palabras o combinaciones comunes como contraseña Create a strong password please Por favor, cree una contraseña fuerte It does not meet password rules No cumple con las reglas de contraseñas At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. Al menos incluya caracteres como %1 entre letras minúsculas, mayúsculas, números y símbolos, y la contraseña no puede ser igual al nombre de usuario. dccV25::ShortcutModel System Sistema Window Ventana Workspace Espacio de trabajo AssistiveTools Herramientas de asistencia Custom Personalizar None Ninguno ================================================ FILE: translations/dde-control-center_et.ts ================================================ AccountSettings edit muuda Add new user Lisa uus kasutaja Set fullname Sisetage täielik nimi Login settings Sisselogimise seadistused Login without password Sisselogimine salasõna vaba Delete current account Kustuta praegune kontogrupp Group setting Grupi seadistus Account groups Kontogrupeerimised done võetud Group name Grupinimi Add group Lisa grup Auto login Automaatne sisselogimine Account Information Kontoonandmed Account name, account fullname, account type Kontonimi, täielik nimi, kontotüüp Account name Kontonimi Account fullname Täielik nimi Account type Kontotüüp The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face Sisetage au I have read and agree to the Olen lugenud ja nõustun Disclaimer Huvilause Next Järgmine Face enrolled Au on sisseteadetud Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Tänavaline stiil Dimensional style Dimensiooniline stiil Flat style Vastupidine stiil Cancel Loegeilt Save Salvesta BatteryPage Screen and Suspend Näitaja ja hoidamine Turn off the monitor after Lülitage välja näitaja pärast Lock screen after Lukke näitaja pärast Computer suspends after Arvuti hoidmise pärast When the lid is closed Kui kinni on sulgitud When the power button is pressed Kui vajutatakse veebisõnastikku Low Battery Vähemad akkusitõenäosused Low battery notification Vähemad akkusitõenäosused teate Auto suspend Automaatne hoidmine Auto Hibernate Automaatne hiberaat Low battery threshold Vähemad akkusitõenäosused piir Battery Management Akkusihaldus Display remaining using and charging time Näita järgmise kasutamise ja laadimise aega Maximum capacity Maksimaalne tõenäosus Low battery level Vähemad akkusitõenäosused tase Disable Pikaühendamise vältimine BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth on lülitatud välja, nimeks on kuvatud "%1" Bluetooth is turned on, and the name is displayed as "%1" Bluetooth on lülitatud, nimeks on kuvatud "%1" BlueToothDeviceListView Disconnect Katkeita Connect Ühenda Send Files Saada failid Rename Uue nimi Remove Device Eemalda laev Select file Vali fail BluetoothCtl Edit Redigeeri Allow other Bluetooth devices to find this device Luba muude Bluetooth-laevade leidmine seda laeva To use the Bluetooth function, please turn off Bluetooth funktsiooni kasutamiseks vabandust sisse lülitada Airplane Mode Lentimood Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Ühendatud Not connected Mitte ühendatud BootPage Startup Settings Alustamise seaded You can click the menu to change the default startup items, or drag the image to the window to change the background image. Sa võid klõpsada menüüdelt muuta vaikimisi alustamise kohti või tõlgendada pilti akna poole muuta taustapildi. grub start delay grub käivitamise aikavahemik theme teema After turning on the theme, you can see the theme background when you turn on the computer Teema sisse lülitamisel näete teemaga taustapildi arvutiga käivitamisel Boot menu verification Lahtise menüü kontroll After opening, entering the menu editing requires a password. Avamisel on vaja salasõna menüü redigeerimiseks Change Password Salasõna muutmine Change boot menu verification password Lahtise menüü kontrolli salasõna muutmine Set the boot menu authentication password Lahtise menüü autentimisega salasõna määramine User Name : Kasutajanimi : root root New Password : Uus salasõna : Required Pakutav Password cannot be empty Parool ei saa olla tühi Passwords do not match Paroolid ei kattu Repeat password: Korda parooli: Cancel Katkesta Sure Väga jah Start animation Alusta animatsioon Adjust the size of the logo animation on the system startup interface Regula logos animatsiooni suurus ekraanist pärast süsteemi käivitamist Camera Allow below apps to access your camera: Luba allpool nimeklist laetud rakendustele käitumiseks kamera: CharaMangerModel Fingerprint1 Pealind1 Fingerprint2 Pealind2 Fingerprint3 Pealind3 Fingerprint4 Pealind4 Fingerprint5 Pealind5 Fingerprint6 Pealind6 Fingerprint7 Pealind7 Fingerprint8 Pealind8 Fingerprint9 Pealind9 Fingerprint10 Pealind10 Scan failed Skaneerimine ebaõnnestus The fingerprint already exists Pealind on juba olemas Please scan other fingers Skaneeri muid lõike Unknown error Tundmatu viga Scan suspended Skaneerimine on praktiliselt mõeldud Cannot recognize Ei saa tunnustada Moved too fast Liiga kiiresti liikumine Finger moved too fast, please do not lift until prompted Lülitü valmis enne kui see tagasi tõlgitakse Unclear fingerprint Kõrvalt defineeritud lause Clean your finger or adjust the finger position, and try again Puhasta oma lõhe või muuda lõhe positsiooni ja proovi uuesti Already scanned Juba skaneeritud Adjust the finger position to scan your fingerprint fully Muuda lõhe positsiooni, et täielikult skaneerida oma lause Finger moved too fast. Please do not lift until prompted Lülitü valmis enne kui see tagasi tõlgitakse Lift your finger and place it on the sensor again Lülitü valmis ja aseta lõh lõhe sensori Position your face inside the frame Positsioonida oma lause ruutuni Face enrolled Lause on sissekirjutatud Position a human face please Positsioonida inimese lause Keep away from the camera Jäta kamerast vaba Get closer to the camera Lähuge kamerale Do not position multiple faces inside the frame Positsioonida mitte ühte lauset ruutul Make sure the camera lens is clean Vidutage, et kamerale lente on puhast Do not enroll in dark, bright or backlit environments Sissekirjuta kõrvalt, helvetlikult valguses, helvetlikult pöördvalguses või helvetlikult tõusuks Keep your face uncovered Jäta oma lause kuulis Scan timed out Skaneerimise aeg on elnud Cancel Katkesta Camera occupied! ColorAndIcons Accent Color Tekstili värv Icon Settings Ikonide seaded Icon Theme Ikonide teema Customize your theme icon Teemipiktogrami määrata Cursor Theme Viitakeel Customize your theme cursor Teemaviikri määrata ComfirmDeleteDialog Are you sure you want to delete this account? Kas oled kindel, et tahad selle kontoga lülituda? Delete account directory Kustuta kasutajakataloog Cancel Loege välja Delete Kustuta ComfirmSafePage Go to settings Mine seadistustesse Cancel Loege välja Common Common Üldine Repeat delay Pöördepööri pööranemisaeg Short Pikk Long Põhj Repeat rate Pöördepööri suurus Slow Hõlpsa Fast Rapid Numeric Keypad Arvutisklahvid test here test siit Caps lock prompt Põhjakeelesümbolitakson rääkimine Double Click Speed Pühaklõpsamisaeg Double Click Test Pühaklõpsamise test Left Hand Mode Vasak pool režiim Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Suur suurus Small size Põhj suurus Failed to get root access Rooti juhtimist ei saa Please sign in to your Union ID first Logi esmalt sisse sõltuvuse ID'ga Cannot read your PC information PC-i informatsioon ei saa lugeda No network connection Võtmeühendust ei ole Certificate loading failed, unable to get root access Sertifikaadi laadimine ebaõnnestus, rooti juhtimist ei saa saavutada Signature verification failed, unable to get root access Sünete kontroll ebaõnnestus, rooti juhtimist ei saa saavutada Agree and Join User Experience Program Sõna poolt ja liite kasutajate kogemuse programmeerimisse The Disclaimer of Developer Mode arendaja režiimi kahituse Agree and Request Root Access Sõna poolt ja ettevaata rooti juhtimist Start setting the new boot animation, please wait for a minute Alusta uue käivitamise eelvaate seadmist, palun oota minutit Setting new boot animation finished Uue käivitamise eelvaate seaded on valmis The settings will be applied after rebooting the system Seaded rakendatakse uuesti käivitamisel süsteemis Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Parool peab sisaldama numbreid ja tähti Password must be between 8 and 64 characters Parool peaks olema 8 ja 64 tähemärki vahel CreateAccountDialog Create a new account Loo uus konto Account type Kontotüüp UserName Kasutajanimi Required Vajalik FullName Kuupäev Optional Valikuline Cancel Lõpeta Create account Loo konto Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Avatakuu ei ole veel üles laetud. Klõpsake või trüki ja lasege saada laetud pilt. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available saadaval DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/riausilėlių-politika-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/seriklinio-baduojo-politika-en Agree and Join User Experience Program Sutinkite ir panaikinkite seriklinį badų programą <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Data ir laiko nustatymas Date Data Year Metai Month Mėnuo Day Diena Time Laikas Cancel Atšaukti Confirm Patvirtinti Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Šnekimas Yesterday Vakaras Today Šiandien %1 hours earlier than local %1 valandas ankstesniu nei vietinis %1 hours later than local %1 valandas vėlesniu nei vietinis Space Tarpas Week Savaitė First day of week Savaitės pirmadienis Short date Trumpas data Long date Didesnis data Short time Trumpas laikas Long time Pikk ajavähe Currency symbol Rahakirjain Positive currency Positivne rahakiri Negative currency Negatiivne rahakiri Decimal symbol Desimaalset numbrikirjain Digit grouping symbol Numbridryhitusekiri Digit grouping Numbridryhitus Page size Lehe suurus Example DatetimeWorker Authentication is required to change NTP server On vaja autentimist muuta NTP-serveri Authentication is required to set the system timezone DccColorDialog Cancel Katkesta Save Salvesta DccWindow Control Center provides the options for system settings. Süsteemi seadistuste valikud on kättesaadavad Kontrollkeskuses. DeepinIDAccountSecurity Bind WeChat Vaheta WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Vahetades WeChat, saate turvaliselt ja kiiret sisse logida oma %1 ID-i ja kohalike kontodele. Unlinked Vahetamata Unbinding Vahetamine Link Vahetada Are you sure you want to unbind WeChat? Oled kindel, et tahad eemaldada WeChat-i? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Vahetades WeChat-i, ei saa kasutada WeChat-i QR koodi skannimiseks %1 ID-i või kohalikku kontot sisse logida. Let me think it over Lase mul mõista Local Account Binding Kohaliku kontoga vahetamine After binding your local account, you can use the following functions: Vahetades oma kohalikku kontot, saate kasutada järgmisi funktsioone: WeChat Scan Code Login System WeChat koodi skanna sisselogimissüsteem Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Kasuta WeChat-i, mis on vahetatud %1 ID-ga, et skanna koodi ja sisse logida oma kohalikku kontot. Reset password via %1 ID Vaheta parool %1 ID-ga Reset your local password via %1 ID in case you forget it. Unustatesid loole oma kohalik parool %1 identiteedi kaudu. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Kui soovite kasutada ülejäänud funktsioone, siis avage Kontrollkeskust - Kontod ja lülituge vastavate valikute ümber. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Klauduaastamine Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Halda oma %1 identiteedi ja aastata inimeste andmed erinevates seadmetes. Logige sisse %1 identiteedis, et saada brauseri, aadressipoodi ja muude funktsioonide ja teenuste personfikseeritud omadused. Sign In to %1 ID Logi %1 identiteedis sisse DeepinIDSyncService Auto Sync Avaastamine automaatselt Securely store system settings and personal data in the cloud, and keep them in sync across devices Salvestage süsteemi seadistused ja inimeste andmed varasemalt klaudus, ja andmed aastata seadmetes. System Settings Süsteemi seadistused Last sync time: %1 Viimane aastamiskell: %1 Clear cloud data Tühjenda klaudusandmed Are you sure you want to clear your system settings and personal data saved in the cloud? Oled kindel, et soovid tühjendada oma süsteemi seadistusi ja inimeste andmeid, mis on salvestatud klaudus? Once the data is cleared, it cannot be recovered! Kui andmed on tühjendatud, siis nad ei saa tagasi hankida! Cancel Katkesta Clear Tühjenda DeepinIDUserInfo Synchronization Service Aastamiskeskus Account and Security Konto ja turvalisus Sign out Väljalogimine Go to web settings Laadige veebisest seadistuseks The nickname must be 1~32 characters long DeepinWorker encrypt password failed Parooli kriptimine ebaõnnestus Wrong password, %1 chances left Vale parool, %1 võimalust jätkuvalt The login error has reached the limit today. You can reset the password and try again. Logimismäng on täis selle pärast. Võid uuesti parooli sätteda ja proovida uuesti. Operation Successful Tegevus õnnestus The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Kitlased Vene riik Other regions Muided alamadirimad The feature is not available at present, please activate your system first Funktsioon hetkel pole saadaval, palun aktiveeri süsteem Subject to your local laws and regulations, it is currently unavailable in your region. Lisaks muiduid alamadriisidel ja seadetele, funktsioon on hetkel saadaval alamadrimises. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' Vali vaikimisi programme avamiseks '%1'. add lisada Open Desktop file Ava töölaualine fail Apps (*.desktop) Programmid (*.desktop), All files (*) Kõik failid (*), DevelopModePage Root Access Rooti kõige Request Root Access Küsi rooti kõige After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Kui saad arendajamaoduse, saad saada rooti õigusi, kuid see võib ka rikkuda süsteemi täpsust, nende kasutamisel palun ole varjuline. Allowed Lubatud Enter Sisesta Online Veebis Login UOS ID Logi sisse UOS-i kontoga Offline Välis Import Certificate Impordi sertifikaat Select file Vali fail Your UOS ID has been logged in, click to enter developer mode Teie UOS-i ID on sisse logitud, klõpsake, et saada arendajamaoduse Please sign in to your UOS ID first and continue Palun logige esmalt sisse UOS-i kontoga ja jätkage 1.Export PC Info 1. Eksporti PC andmed Export Eksport 3.Import Certificate 3. Impordi sertifikaat Development and debugging options Arenduse ja bugide hälveerimise valikud System logging level Süsteemi kirjutamise tase Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Valikute muutmine saavutab täpsemat kirjutamist, mis võib raskust põhjustada süsteemi toimimisega ja/või arendada säilitamispärasust. Off Lülitumata Debug Hälveerimine Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Valiku muutmine võib töötada kuni minutit. Pärast edukat seadistuste seadmist palun uuesti käivitada uks. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Luba alla nähtud programme kõigile need failide ja kaustadele pääseda: Documents Dokumentid Desktop Töölaud Pictures Pildid Videos Videod Music Muusika Downloads Allalaadimised folder kaust FontSizePage Size Suurus Standard Font Väline kirjeldus Monospaced Font Väline tavaline GeneralPage Power Plans Süsteemi seadmed Power Saving Settings Süsteemi põhjalikke salvestamise seadistused Auto power saving on low battery Põhjalik salvestamine väga lühikest bateriast Low battery threshold Väga lühike bateriast seadistus Auto power saving on battery Põhjalik salvestamine bateriast Wakeup Settings Uksse püüdavate seadistused Password is required to wake up the computer Uksse püüdavateks on vaja parooli Password is required to wake up the monitor Uksse püüdavateks monitorit on vaja parooli Shutdown Settings Lülitamise seaded Scheduled Shutdown Kaldurituletis Time Aeg Repeat Toista Once Kord Every day Kõik päevad Working days Tööpäevad Custom Time Mõnda aega Decrease screen brightness on power saver Vähendada ekraani kuumust põhjusega GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ',' ... ... InterfaceEffectListview Optimal Performance Optimaalne tootlus Balance Keskmine Best Visuals Parim vaade Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language Keel done võetud edit üldendamine Other languages Muid keelte add lisage Region Ala Area Ala Operating system and applications may provide you with local content based on your country and region Operatsioonisüsteem ja rakendused võivad teil esitada kohalikku sisu, järgides teie riiki ja ala Operating system and applications may set date and time formats based on regional formats Operatsioonisüsteem ja rakendused võivad asendada kuupäeva- ja kellaajastu vormindusi ala vormindustega Regional format LangsChooserDialog Add language Lisa keel Search Otsing Cancel Lõpeta Add Lisada LoginMethod Login method Sisselogimismetod Password, wechat, biometric authentication, security key Parool, WeChat, meetri autentimine, turvaline võti Password Parool Modify password Muuda parooli Validity days Kehtivuse päevad Always Jätkuvalt Reset password LogoModule Copyright© 2011-%1 Deepin Community Teise paberitõlukes 2011-%1 Deepin Kogukond Copyright© 2019-%1 UnionTech Software Technology Co., LTD Teise paberitõlukes 2019-%1 UnionTech Tarkvara Tehnoloogiate OÜ MicrophonePage Automatic Noise Suppression Auto äänepealikuvõtmine Input Volume Sisestusvõimsus Input Level Sisestusvahemik Input Sisestus No input device for sound found Äänestõttu sisestusvara ei leitud Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices Minu pered NativeInfoPage UOS UOS Computer name Arvutinimi It cannot start or end with dashes Selleks ei saa kasutada püsikohas tühikuid OS Name Süsteemnimi Version Versioon Edition Väljend Type Vajalik bit bit Authorization Autoriseerimine System installation time Süsteemi installimisaja Kernel Kerneel Graphics Platform Vaatamistõmbure Processor Protsessor Memory Muist 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Muid pered Show Bluetooth devices without names Näita Bluetooth pered, mis puuduvad nimega PasswordLayout Current password Praegune salasõna Required Vajaline Weak Vaheline Medium Mõistlik Strong Vabasõnu Repeat Password Korda parooli Password hint Parooli aidatakenutus Optional Valikuline Password cannot be empty Parool ei saa olla tühi Passwords do not match Paroolid ei kattu The hint is visible to all users. Do not include the password here. Aidatakenutus on kõigile kasutajatele nähtav. Parooli siia ei sisesta. New password New password should differ from the current one Uus parool peaks erineda praegusest The password cannot be the same as the username. PasswordModifyDialog Modify password Muuda parooli Reset password Palunusteele avada parool Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Parooli pikkus peaks olema vähemalt 8 tähemärki, ja parool peab sisaldama vähemalt 3 järgmistest: suurepikkuse tähte, väiksemaid tähte, numbrite ja sümbolite. See tüüp parooli on rohkem turvaline. Resetting the password will clear the data stored in the keyring. Parooli palunusteele avamine tühjendab salvestatud andmeid salvestuslõigis. Cancel Tühista Personalization Personalization PersonalizationInterface Light Lumine Auto Automaatne Dark Tumeline Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Tööskuju PluginArea Plugin Area Plugini ala Select which icons appear in the Dock Vali, mis ikoonid näeb tõmbas Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Lülita välja Suspend Pööra jätkata Hibernate Hibristoonumine Turn off the monitor Lülitage näitaja välja Show the shutdown Interface Näita katkiamise liidese Do nothing Teedegi mitte midagi PowerPage Screen and Suspend Näitaja ja hoida tühja Turn off the monitor after Lülitage näitaja välja pärast Lock screen after Lukke näitaja pärast Computer suspends after Arvuti hoidab tühja pärast When the lid is closed Kui kinni on sulgenud When the power button is pressed Kui tõmba on vajutatud PowerPlansListview High Performance Kõrge effektiivsus Balance Performance Effektiivsuse tasakaal Aggressively adjust CPU operating frequency based on CPU load condition CPU põhjal agressiivselt reguleerida CPU töötlemisastme Balanced Tasakaalustatud Power Saver Süsteemi tõhususvahetaja Prioritize performance, which will significantly increase power consumption and heat generation Prioriseeri tootust, mis tõlgub suurema võrguõiguse ja temperatuuri suurendamisele Balancing performance and battery life, automatically adjusted according to usage Tootust ja bateriamaaildu toidumise põhjal automaatselt reguleeritava tasakaalustamine Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Prioriseeri bateriamaaildu, mida süsteem tootust hoidab vähendamiseks võrguõigust PowerWorker Minutes Minutit Hour Tundit Never Päritult Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Privaatsuspoliitika Copy Link Address PwqualityManager Password cannot be empty Parool ei saa olla tühi Password must have at least %1 characters Parool peab sisaldama vähemalt %1 tähet Password must be no more than %1 characters Parool peab olema mitte rohkem kui %1 tähet Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Parool peab sisaldama vaid ingliskeeli tähte (täpsete täpsetena), numbreid või erikahte (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) No more than %1 palindrome characters please Palun kasuta mitte enamat kui %1 palindromi tähed No more than %1 monotonic characters please Palun kasuta mitte enamat kui %1 monotonseid tähed No more than %1 repeating characters please Palun kasuta mitte enamat kui %1 jällegi tähed Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Parool peab sisaldama suuremaid tähti, väiksemaid tähti, numbreid ja erikahte (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Paroolis ei pea olema enamat kui 4 palindromi tähed Do not use common words and combinations as password Vabatac on kasutada populaarseid sõnu ja kombinatsioone paroolina Create a strong password please Lülituge välja stength password It does not meet password rules See ei vasta paroolireegli QObject Control Center Kontrollkeskus Activated Aktiveeritud View Vaata To be activated Aktiveeritav Activate Aktiveeri Expired Viirgumine In trial period Testeeriokses Trial expired Testeering on lõppenud dde-control-center dde-kontrollkeskus Touch Screen Settings Käsklikuklahesätted The settings of touch screen changed Käsklikuklahesätted muutusid This system wallpaper is locked. Please contact your admin. Selles süsteemil on taustapilt lukustatud. Palun ühendusse vältuviisiga %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Otsing Default formats Vaikimisi formaadid First day of week Veebisünnipäev Short date Pikkupäev Long date Päevakäigunäitaja Short time Pikkuaeg Long time Päevakäigunäitaja (aeg) Currency symbol Müügi määratlus Digit Numbrilane Paper size Päike suurus Cancel Katkesta Save Salvesta Regional format RegionsChooserWindow Search Otsi RegisterDialog Set a Password Sättige parool 8-64 characters 8-64 tähed Repeat the password Korda parooli Cancel Katkesta Confirm Kinnita Passwords don't match Paroolid ei kattu ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver Tühjad ekraan preview Esitlus Personalized screensaver Töötajate tühjad ekraan setting Seaded idle time Vaba aeg 1 minute 1 minut 5 minute 5 minutit 10 minute 10 minutit 15 minute 15 minutit 30 minute 30 minutit 1 hour 1 tund never puu Password required for recovery Vajalik parool vahetamiseks Picture slideshow screensaver Piltide esitlus salavaldik System screensaver Süsteemi salavaldik SearchableListViewPopup Search Otsing No search results ShortcutSettingDialog Add custom shortcut Lisage sobitamisliides Name: Nimi: Required Vajalik Command: Komentaar: Shortcut Sobitamisliides None pole Cancel Lõpetada Add Lisada The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts Sobitamisliidised System shortcut, custom shortcut Süsteemi sobitamisliides, sobitamisliides Search shortcuts Otsi sobitamisliideseid done tehtud edit muuta Click Klikige Cancel Loetleja lõpetamine or või Replace Asenda Restore default Taaseta vana Add custom shortcut Lisage mõnda kaustaväli please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Väljastamise laid Select whether to enable the devices Vali, kas soovid laid kasutusele võtta Input Devices Sisestamise laid SoundEffectsPage Sound Effects Soome efekti SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Lülitamise alguse Shut down Lülitamise lõpus Log out Logi välja Wake up Jätkake Volume +/- Ääni +/- Notification Hoiatus Low battery Põhjane aktsiiv Send icon in Launcher to Desktop Väljasta vahemälu ikooni töölaual Empty Trash Tühjenda käte Plug in Sisesta Plug out Väljastage Removable device connected Ülelaadimine laiendatud Removable device removed Ülelaadimine laiendatud eemaldatud Error Viga SpeakerPage Mode Režiim Output Volume Väljastamise suurus Volume Boost Värvuvõtmine If the volume is louder than 100%, it may distort audio and be harmful to output devices Kui ääni on suurem kui 100%, see võib vahetada ääni ja otsustada väljundseadmete paranduse Left Vasak Right Põhj Output Väljund No output device for sound found Ääni väljundseadmet ei leitud Left Right Balance Vasak-Põhja tasakaal Merge left and right channels into a single channel Vasak ja põhja kanalid ühendada üksesse kanale Whether the audio will be automatically paused when the current audio device is unplugged Kui ääni tuleb automaatselt pöörduda, kui praegusel ääni seadmel ühendustestakse Mono Audio Auto Pause Output Device SyncInfoListModel Sound Ääne Power Tõenõud Mouse Müuse Update Uuenda Screensaver Tahvelvahetaja System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers Lisakäringid TimeAndDate Auto sync time Aja automaatne sünkroonimine Ntp server Ntp-server System date and time Süsteemi kuupäev ja kellaaeg Customize Määrata oma Settings Seaded Server address Serveri aadress Required Täpisesugune The ntp server address cannot be empty Ntp serveri aadress ei saa olla tühi Use 24-hour format kasuta 24-tuntmustrit system time zone süsteemi aega-zon Timezone list aega-zonide loend Add TimeRange from alates to kuni TimeoutDialog Save the display settings? Salvesta näidet seadistused Settings will be reverted in %1s. Seaded tagastuvad %1 s juues. Revert Tagasta Save Salvesta TimezoneDialog Add time zone Lisage aega-zon Determine the time zone based on the current location Määrake aega-zon praeguse asukohta põhjal Time zone: Aega-zon: Nearest City: Lähim linna: Cancel Tühista Save Salvesta TouchScreen TouchScreen Kasutage käsituskraadi siia, kui ühendate selle Set up here when connecting the touch screen Seadista siin ühendades käsituskraadi Touchpad Basic Settings Üldised seadistused Touchpad Käsituskraadi Pointer Speed Viikur kiirus Slow Hästi Fast Kiiresti Disable touchpad during input Pöörake käsituskraadi välja, kui vajalik Tap to Click Klikkeeri liikumiseks Natural Scrolling Tavaline liikumine Three-finger gestures Kolm-püha teadet Four-finger gestures Neljapühiga teadet Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Värvine taustapilti Customizable wallpapers Mõista muuta piltid fill style lahutusviis Automatic wallpaper change Automaatne pildi muutmine never soovitamata 30 second 30 sekundit 1 minute 1 minut 5 minute 5 minutit 10 minute 10 minutit 15 minute 15 minutit 30 minute 30 minutit login sisselogimine wake up keskmine Live Wallpaper Läbipaistva taustapilt 1 hour 1 tundit System Wallpapers WallpaperSelectView unfold kinni lahti Set lock screen Määrake lukustakson Set desktop Määrake toa show all - %1 items Add Picture WindowEffectPage Interface and Effects Tahvel ja eetikud Window Settings Aken seadistused Window rounded corners Aken rohkem külgi None Ei kui Small Väikne Large Suur Enable transparent effects when moving windows Luba akna liikumisel透射效果 Window Minimize Effect Akna vähendamise mõju Scale Mõõtumine Magic Lamp Magiline lampp Opacity Värvivõimsus Low Alati High Kõrge Scroll Bars Liikumisaadressid Show on scrolling Näita liikumisel Keep shown Jäta nähtavaks Compact Display Kompaktne näitamine If enabled, more content is displayed in the window. Kui see on lubatud, siis aknas näeb vähem sisu. Title Bar Height Pealkiri pikkus Only suitable for application window title bars drawn by the window manager. Ainult sobib rakenduse akna pealkirjadele, mis joonistab akna juhtur. Extremely small Üllatavalt väikse Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditsiooniline hiina keel (Hiina Hongkong) Traditional Chinese (Chinese Taiwan) Traditsiooniline hiina keel (Hiina Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan Hiina dccV25::AccountsController Username must be between 3 and 32 characters Kasutajanimi peab olema 3 kuni 32 tähemärki pikk The first character must be a letter or number Esimene täht peab olema täht või number Your username should not only have numbers Teie kasutajanimi ei tohi sisaldada ainult numbriteid The username has been used by other user accounts Kasutajanimi on juba kasutuses muudes kasutajate kontodest The full name is too long Täielik nimi on liiga pikk The full name has been used by other user accounts Täielik nimi on juba kasutuses muudes kasutajate kontodest Wrong password Vale parool Standard User Standard User Administrator Administrator Customized Töötav dccV25::AccountsWorker Your host was removed from the domain server successfully Vahekesed on edukalt eemaldatud domaani serverist Your host joins the domain server successfully Vahekesed edukalt juhustatakse domaani serveri Your host failed to leave the domain server Vahekesed ei õnnestunud eemaldada domaani serverist Your host failed to join the domain server Vahekesed ei õnnestunud juhustada domaani serveri AD domain settings AD domaani seaded Password not match Parool ei kattu dccV25::AvatarTypesModel Dimensional Dimensionaalne Flat Plaanikaal dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] See pikaavaldus ületab [%1] dccV25::PwqualityManager Password cannot be empty Parool ei saa olla tühi Password must have at least %1 characters Parool peab sisaldama vähemalt %1 tähet Password must be no more than %1 characters Parool peab olema mitte enamat %1 tähet Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Parool võib sisaldada ainult inglise tähed (suundeline täpistus), numbreid või erikaalu tähed (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please Palun võidelda %1 palindromi tähed No more than %1 monotonic characters please Palun võidelda %1 monotoonseid tähed No more than %1 repeating characters please Palun võidelda %1 korduvaid tähed Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Parool peab sisaldama suuremaid tähemäär, väiksemaid tähemäär, numbreid ja erikaalu tähemäär (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) Password must not contain more than 4 palindrome characters Paroolis ei tohi olla enamat kui 4 palindromi tähet Do not use common words and combinations as password Vabatac ei kasuta üldisi sõnu ja kombinatsioone paroolina Create a strong password please Loo vabalt parool It does not meet password rules See ei vasta paroolireeglile At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Süsteem Window Aken Workspace Tööruum AssistiveTools Abistavad välineid Custom Kohandatud None pole ================================================ FILE: translations/dde-control-center_eu.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Pertsonalizatua PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Bat ere ez Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System Sistema SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Bat ere ez Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Txinera tradizionala (Hong Kong txinera) Traditional Chinese (Chinese Taiwan) Txinera tradizionala (Taiwan txinera) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan Txina dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Lasterbide honek gatazka du honekin: [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Sistema Window Leihoa Workspace Lan-eremua AssistiveTools Laguntza-tresnak Custom Pertsonalizatua None Bat ere ez ================================================ FILE: translations/dde-control-center_fa.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected متصل شده Not connected متصل نیست BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel انصراف Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server برای تغییر سرور NTP احراز هویت لازم است Authentication is required to set the system timezone برای تنظیم منطقه زمانی سیستم احراز هویت لازم است DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display نمایش Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume صدای ورودی Input Level سطح ورودی Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization شخصی سازی PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom شخصی PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty جایگاه رمزعبور نمی تواند خالی باشد. Password must have at least %1 characters Password must be no more than %1 characters رمز عبور که کمتر از %1 نویسه نباید باشد Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center مرکز کنترل Activated View نما To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound صدا Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects جلوه های صدا SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up راه اندازی Shut down خاموش شدن Log out خارج شدن از حساب کاربری Wake up بیدار شدن Volume +/- صدا +/- Notification اعلان Low battery باتری کم Send icon in Launcher to Desktop آیکون برنامه را از لانچر به دسکتاپ بفرست Empty Trash خالی کردن زباله دان Plug in متصل شده به برق Plug out از برق کشیده شد Removable device connected دستگاه قابل جابجایی وصل شد Removable device removed دستگاه قابل جابجایی جدا شد Error خطا SpeakerPage Mode حالت Output Volume صدای خروجی Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left چپ Right راست Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert بازگشت Save ذخیره TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) چینی سنتی (چینی هنگ کنگ) Traditional Chinese (Chinese Taiwan) چینی سنتی (چینی تایوان) Min Nan Chinese dcc::Locale::regionNames Taiwan China تایوان چین dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] این میانبر با [%1] تداخل دارد dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System سیستم Window پنجره Workspace فضای کاری AssistiveTools ابزارهای کمکی Custom سفارشی None هیچ ================================================ FILE: translations/dde-control-center_fi.ts ================================================ AccountSettings edit muokkaa Add new user Lisää uusi käyttäjä Set fullname Aseta koko nimi Login settings Kirjautumisen asetukset Login without password Kirjaudu ilman salasanaa Delete current account Poista tili Group setting Ryhmän asetukset Account groups Tiliryhmät done valmis Group name Ryhmän nimi Add group Lisää ryhmä Auto login Automaattinen kirjautuminen Account Information Tilin tiedot Account name, account fullname, account type Tilin nimi, koko nimi, tilin tyyppi Account name Tilin nimi Account fullname Tilin koko nimi Account type Tilin tyyppi The full name is too long Nimesi on liian pitkä Group names should be no more than 32 characters Ryhmien nimissä saa olla enintään 32 merkkiä Group names cannot only have numbers Ryhmien nimissä ei voi olla pelkkiä numeroita Use letters,numbers,underscores and dashes only, and must start with a letter Käytä vain kirjaimia, numeroita, alaviivoja ja väliviivoja ja alussa tulee olla kirjain The group name has been used Ryhmän nimeä on käytetty quick login, Auto login, login without password kirjautuminen nopea, automaattinen, ilman salasanaa Undo Kumoa Redo Uudestaan Cut Leikkaa Copy Kopioi Paste Liitä Select All Valitse kaikki Quick login Nopea kirjautuminen Accounts Account Käyttäjä Account manager Käyttäjän hallinta AccountsMain Other accounts Muut käyttäjät AddFaceinfoDialog Enroll Face Kasvojen tunnistus I have read and agree to the Olen lukenut ja hyväksyn Disclaimer Vastuuvapauslauseke Next Seuraava Face enrolled Kasvot tunnistettu Failed to enroll your face Kasvojen tunnistus epäonnistui Done Valmis Cancel Peruuta Retry Enroll Tunnista uudelleen Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. Kasvojentunnistus ei tue liikkeen havainnointia ja siihen voi liittyä riskejä. Varmista onnistunut sisäänpääsy: 1. Pidä kasvot selvästi näkyvissä (ei hattua, aurinkolaseja, maskia jne.). 2. Varmista riittävä valaistus ja vältä suoraa auringonvaloa. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. "Biometrinen todennus" on UnionTech Software Technology Co., Ltd:n kehittämä toiminto käyttäjän identiteetin tunnistamiseen. "Biometrisen todentamisen" avulla kerättyjä biometrisiä tietoja verrataan tietokoneeseen tallennettuihin tietoihin ja varmistetaan näiden tietojen perusteella. Huomaa, että UnionTech Co.Ltd. ei kerää tai käytä biometrisiä tietojasi, jotka tallennetaan paikallisesti tietokoneellesi. Otamalla biometrinen todennus käyttöön vain henkilökohtaisella tietokoneella ja käytät omia biometrisiä tietojasi siihen liittyvissä toiminnoissa. Jos tietokoneessa on muiden ihmisten biometrisiä tietoja, poista ne laitteeltasi, muuten otat niistä aiheutuvan kirjautumisriskin. UnionTech Software Technology Co., Ltd on sitoutunut parantamaan biometrisen todennuksen turvallisuutta, tarkkuutta ja vakautta. Teknisten laitteiden ja muista tekijöistä ei kuitenkaan ole takeita, että läpäisit aina biometrisen todennuksen. Älä siksi pidä biometristä todennusta ainoana tapana kirjautua UOS:ään. Jos sinulla on kysyttävää tai ehdotuksia biometriseen todennukseen, voit antaa palautetta UOS:n "Palvelut ja tuki" -kohdassa. AddFingerDialog Cancel Peruuta Done Valmis Enroll Finger Tunnista sormi Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Aseta sormi lukijaan ja liikuta sitä alhaalta ylöspäin. Kun tehty niin nosta sormesi. I have read and agree to the Olen lukenut ja hyväksyn Disclaimer Vastuuvapauslauseke Next Seuraava Retry Enroll Tunnista uudelleen "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. "Biometrinen todennus" on UnionTech Software Technology Co., Ltd:n kehittämä toiminto käyttäjän identiteetin tunnistamiseen. "Biometrisen todentamisen" avulla kerättyjä biometrisiä tietoja verrataan tietokoneeseen tallennettuihin tietoihin ja varmistetaan näiden tietojen perusteella. Huomaa, että UnionTech Co.Ltd. ei kerää tai käytä biometrisiä tietojasi, jotka tallennetaan paikallisesti tietokoneellesi. Otamalla biometrinen todennus käyttöön vain henkilökohtaisella tietokoneella ja käytät omia biometrisiä tietojasi siihen liittyvissä toiminnoissa. Jos tietokoneessa on muiden ihmisten biometrisiä tietoja, poista ne laitteeltasi, muuten otat niistä aiheutuvan kirjautumisriskin. UnionTech Software Technology Co., Ltd on sitoutunut parantamaan biometrisen todennuksen turvallisuutta, tarkkuutta ja vakautta. Teknisten laitteiden ja muista tekijöistä ei kuitenkaan ole takeita, että läpäisit aina biometrisen todennuksen. Älä siksi pidä biometristä todennusta ainoana tapana kirjautua UOS:ään. Jos sinulla on kysyttävää tai ehdotuksia biometriseen todennukseen, voit antaa palautetta UOS:n "Palvelut ja tuki" -kohdassa. AddIrisDialog Enroll Iris Iiriksen tunnistus I have read and agree to the Olen lukenut ja hyväksyn Disclaimer Vastuuvapauslauseke Next Seuraava Done Valmis Cancel Peruuta Retry Enroll Tunnista uudelleen Iris enrolled Iiris tunnistettu Failed to enroll your iris Iiriksen tunnistus epäonnistui "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. "Biometrinen todennus" on UnionTech Software Technology Co., Ltd:n kehittämä toiminto käyttäjän identiteetin tunnistamiseen. "Biometrisen todentamisen" avulla kerättyjä biometrisiä tietoja verrataan tietokoneeseen tallennettuihin tietoihin ja varmistetaan näiden tietojen perusteella. Huomaa, että UnionTech Co.Ltd. ei kerää tai käytä biometrisiä tietojasi, jotka tallennetaan paikallisesti tietokoneellesi. Otamalla biometrinen todennus käyttöön vain henkilökohtaisella tietokoneella ja käytät omia biometrisiä tietojasi siihen liittyvissä toiminnoissa. Jos tietokoneessa on muiden ihmisten biometrisiä tietoja, poista ne laitteeltasi, muuten otat niistä aiheutuvan kirjautumisriskin. UnionTech Software Technology Co., Ltd on sitoutunut parantamaan biometrisen todennuksen turvallisuutta, tarkkuutta ja vakautta. Teknisten laitteiden ja muista tekijöistä ei kuitenkaan ole takeita, että läpäisit aina biometrisen todennuksen. Älä siksi pidä biometristä todennusta ainoana tapana kirjautua UOS:ään. Jos sinulla on kysyttävää tai ehdotuksia biometriseen todennukseen, voit antaa palautetta UOS:n "Palvelut ja tuki" -kohdassa. Please keep an eye on the device and ensure that both eyes are within the collection area Varmista, että molemmat silmät ovat laitteen lukualueella Authentication Biometric Authentication Biometrinen todennus AuthenticationMain Biometric Authentication Biometrinen todennus Face Kasvot Up to 5 facial data can be entered Enintään 5 kasvotietoa voidaan antaa Fingerprint Sormenjälki Identifying user identity through scanning fingerprints Käyttäjän tunnistaminen sormenjälkien avulla Iris Iiris Identity recognition through iris scanning Tunnistaminen iiriksen skannauksella Use letters, numbers and underscores only, and no more than 15 characters Käytä vain kirjaimia, numeroita ja alaviivoja, enintään 15 merkkiä Use letters, numbers and underscores only Käytä vain kirjaimia, numeroita ja alaviivoja No more than 15 characters Enintään 15 merkkiä This name already exists Nimi on jo olemassa Add a new %1 ... Lisää uusi %1 ... The name cannot be empty Nimeä ei voi jättää tyhjäksi AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first "Automaattinen kirjautuminen" voidaan käyttää vain yhdellä tilillä. Poista se tililtä "%1" ensin. Ok Selvä AvatarSettingsDialog Images Kuvat Human Ihmiset Animal Eläimet Scenery Maisemat Illustration Kuvitus Emoji Hymiöt custom mukautettu Cartoon style Sarjakuva tyyliin Dimensional style Ulottuvuus tyyliin Flat style Taso tyyliin Cancel Peruuta Save Tallenna BatteryPage Screen and Suspend Näyttö ja valmiustila Turn off the monitor after Sammuta näyttö Lock screen after Lukitaan näyttö Computer suspends after Tietokone valmiustilaan When the lid is closed Kun kansi on kiinni When the power button is pressed Kun virtapainiketta painetaan Low Battery Akku vähissä Low battery notification Alhaisen varauksen ilmoitus Auto suspend Autom. valmiustila Auto Hibernate Autom. lepotila Low battery threshold Akun alhainen varaus Battery Management Akun hallinta Display remaining using and charging time Näytä jäljellä oleva latausaika Maximum capacity Täysi varaus Low battery level Alhainen akun varaustaso Disable Pois BlueTooth Bluetooth settings, devices Bluetooth asetukset, laitteet Bluetooth Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth on pois päällä ja nimi näkyy muodossa "%1" Bluetooth is turned on, and the name is displayed as "%1" Bluetooth on päällä ja nimi näkyy muodossa "%1" BlueToothDeviceListView Disconnect Katkaise Connect Yhdistä Send Files Lähetä tiedostot Rename Nimeä Remove Device Poista laite Select file Valitse tiedosto BluetoothCtl Edit Muokkaa Allow other Bluetooth devices to find this device Salli Bluetoothin löytää tämä laite To use the Bluetooth function, please turn off Jos haluat käyttää Bluetoothia, sammuta se Airplane Mode Lentokonetila Bluetooth name cannot exceed 64 characters Bluetooth-nimi ei saa ylittää 64 merkkiä BluetoothDeviceModel Connected Yhdistetty Not connected Ei yhteyttä BootPage Startup Settings Käynnistymisen asetukset You can click the menu to change the default startup items, or drag the image to the window to change the background image. Voit vaihtaa käynnistyskohteita painamalla valikkosta tai vaihtaa taustakuvan vetämällä ja pudottamalla ikkunaan. grub start delay grub käynnistyksen viive theme teema After turning on the theme, you can see the theme background when you turn on the computer Kun olet vaihtanut teeman, näet teeman taustan kun käynnistät tietokoneen Boot menu verification Käynnistysvalikon vahvistus After opening, entering the menu editing requires a password. Valikon avaamisen jälkeen, muokkaaminen vaatii salasanan. Change Password Vaihda salasana Change boot menu verification password Vaihda käynnistysvalikon salasana Set the boot menu authentication password Aseta käynnistysvalikon salasana User Name : Käyttäjänimi root root New Password : Uusi salasana : Required Vaadittu Password cannot be empty Salasana ei voi olla tyhjä Passwords do not match Salasanat eivät täsmää Repeat password: Toista salasana: Cancel Peruuta Sure Varma Start animation Käynnistysanimaatio Adjust the size of the logo animation on the system startup interface Säädä logon kokoa käynnistymisen yhteydessä Camera Allow below apps to access your camera: Salli sovellusten käyttää kameraa: CharaMangerModel Fingerprint1 Sormenjälki1 Fingerprint2 Sormenjälki2 Fingerprint3 Sormenjälki3 Fingerprint4 Sormenjälki4 Fingerprint5 Sormenjälki5 Fingerprint6 Sormenjälki6 Fingerprint7 Sormenjälki7 Fingerprint8 Sormenjälki8 Fingerprint9 Sormenjälki9 Fingerprint10 Sormenjälki10 Scan failed Skannaus epäonnistui The fingerprint already exists Sormenjälki on jo olemassa Please scan other fingers Tarkista muut sormet Unknown error Tuntematon virhe Scan suspended Skannaus keskeytetty Cannot recognize ei voi tunnistaa Moved too fast Pyyhkäisit liian nopeasti Finger moved too fast, please do not lift until prompted Olet liian nopea, älä nosta sormea ennen kuin pyydetään Unclear fingerprint Epäselvä sormenjälki Clean your finger or adjust the finger position, and try again Puhdista sormesi tai säädä sormen asentoa ja yritä uudelleen Already scanned Jo skannattu Adjust the finger position to scan your fingerprint fully Säädä sormen asentoa, jotta sormenjälkesi voidaan skannata Finger moved too fast. Please do not lift until prompted Sormi liikkui liian nopeasti. Älä nosta, ennen kuin pyydetään Lift your finger and place it on the sensor again Nosta sormesi ja aseta se lukijaan uudelleen Position your face inside the frame Aseta kasvosi kehyksen sisään Face enrolled Kasvot tunnistettu Position a human face please Aseta ihmisen kasvot Keep away from the camera Pysy kauempana kamerasta Get closer to the camera Siirry lähemmäs kameraa Do not position multiple faces inside the frame Ei useita kasvoja kehyksen sisään Make sure the camera lens is clean Varmista, että kameran linssi on puhdas Do not enroll in dark, bright or backlit environments Älä tunnistaudu pimeässä, liian kirkkaassa tai takavalaistussa ympäristössä Keep your face uncovered Pidä kasvosi paljaana Scan timed out Skannaus aikakatkaistiin Cancel Peruuta Camera occupied! Kamera varattu! ColorAndIcons Accent Color Korostusväri Icon Settings Kuvakkeiden asetukset Icon Theme Kuvake teema Customize your theme icon Mukauta teeman kuvakkeita Cursor Theme Kohdistin Customize your theme cursor Mukauta teeman kohdistinta ComfirmDeleteDialog Are you sure you want to delete this account? Haluatko varmasti poistaa tilin? Delete account directory Poista käyttätilin hakemisto Cancel Peruuta Delete Poista ComfirmSafePage Go to settings Siirry asetuksiin Cancel Peruuta Common Common Yleinen Repeat delay Toiston viive Short Lyhyt Long Pitkä Repeat rate Toistonopeus Slow Hidas Fast Nopea Numeric Keypad Numeronäppäimistö test here Testaa täällä Caps lock prompt Numerolukon kehote Double Click Speed Napautuksen nopeus Double Click Test Napautuksen testi Left Hand Mode Vasenkätiselle Enable Keyboard Näppäimistö käyttöön General Yleinen Scrolling Speed Vieritysnopeus CommonInfoMain Boot Menu Käynnistysvalikko Manage your boot menu Hallitse käynnistysvalikkoa Developer root permission management Kehittäjän root oikeuksien hallinta Developer Options Kehittäjäasetukset Developer debugging options Kehittäjän vianetsinnän valinnat CommonInfoWork Large size Suuri Small size Pieni Failed to get root access Root oikeudet epäonnistui Please sign in to your Union ID first Kirjaudu ensin sinun Union id:llä Cannot read your PC information Tietokoneesi tietoja ei voi lukea No network connection Ei verkkoa Certificate loading failed, unable to get root access Varmenteen lataaminen epäonnistui, root oikeuksia ei saatu Signature verification failed, unable to get root access Varmenteen varmennus epäonnistui, root oikeuksia ei saatu Agree and Join User Experience Program Hyväksy ja liity käyttökokemus ohjelmaan The Disclaimer of Developer Mode Kehittäjätilan vastuuvapauslauseke Agree and Request Root Access Hyväksy ja pyydä root-oikeuksia Start setting the new boot animation, please wait for a minute Aloita uuden käynnistysanimaation asetus, odota hetki Setting new boot animation finished Uuden animaation asetus on valmis The settings will be applied after rebooting the system Asetukset otetaan käyttöön tietokoneen käynnistämisen yhteydessä Restart now Käynnistä Dismiss Hylkää Restart device to finish applying Solid System Read-Only Protection settings Käynnistä uudelleen, jotta Solid System Read-Only Protection -asetukset voidaan ottaa käyttöön. ConfirmManager Password must contain numbers and letters Salasanan tulee sisältää numeroita ja kirjaimia Password must be between 8 and 64 characters Salasanan tulee olla 8–64 merkkiä pitkä CreateAccountDialog Create a new account Luo uusi käyttäjätili Account type Tilin tyyppi UserName Käyttäjänimi Required Vaadittu FullName Koko nimi Optional Valinnainen Cancel Peruuta Create account Luo käyttäjätili Username cannot exceed 32 characters Käyttäjänimi enintään 32 merkkiä Username can only contain letters, numbers, - and _ Käyttäjänimi voi sisältää vain kirjaimia, numeroita, erikoismerkit - ja _ Full name cannot exceed 32 characters Koko nimi enintään 32 merkkiä Full name cannot contain colons Koko nimi ei saa sisältää kaksoispisteitä CustomAvatarCropper small pieni big suuri CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Et ole vielä valinnut avataria. Voit ladata kuvan vetämällä ja pudottamalla. The uploaded file type is incorrect, please upload it again Ladattu tiedostotyyppi on virheellinen, lataa se uudelleen. DCC_NAMESPACE::SystemInfoModel available saatavilla DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Hyväksy ja liity käyttökokemus ohjelmaan <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>Henkilötietojen suoja on sinulle tärkeää. Siksi meillä on tietosuojakäytäntö, joka kertoo miten keräämme, käytämme, jaamme, siirrämme, julkisesti luovutamme ja tallennamme tietojasi. </p><p> Voit katsoa uusinta tietosuojakäytäntöämme <a href="%1">tästä</a> tai verkossa osoitteessa <a href="%1">%1</a>. Lue huolellisesti ja ymmärrä täysin asiakkaidemme yksityisyyttä koskevat käytännöt. Jos sinulla on kysyttävää, ota meihin yhteyttä osoitteessa: %2</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Liittymällä kokemusohjelmaan annat meille luvan kerätä ja käyttää tietokoneen, käyttöjärjestelmän ja sovellusten tietoja. Jos kieltäydyt edellä mainitusta tietojen keräämisestä ja käytöstä, älä liity kokemusohjelmaan. Lisätietoja Deepinin tietosuojakäytännössä (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">Liittymällä kokemusohjelmaan annat meille luvan kerätä ja käyttää tietokoneen, käyttöjärjestelmän ja sovellusten tietoja. Jos kieltäydyt edellä mainitusta tietojen keräämisestä ja käytöstä, älä liity kokemusohjelmaan. Lisätietoja Deepinin tietosuojakäytännössä </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Päivämäärän asetukset Date Päivämäärä Year Vuosi Month Kuukausi Day Päivä Time Aika Cancel Peruuta Confirm Vahvista Datetime Time and date Aika ja päivämäärä Time and date, time zone settings Aika ja aikavyöhyke, maa-asetukset DatetimeMain Language and region Kieli ja maa System language, regional formats Tietokoneen kieli, maa-asetukset DatetimeModel Tomorrow Huomenna Yesterday Eilen Today Tänään %1 hours earlier than local %1 tuntia edellä paikallista aikaa %1 hours later than local %1 tuntia paikallista myöhemmin Space Välilyönti Week Viikko First day of week Viikon ensimmäinen päivä Short date Lyhyt päivämäärä Long date Pitkä päivämäärä Short time Lyhyt aika Long time Pitkä aika Currency symbol Valuutan symboli Positive currency Positiivinen valuutta Negative currency Negatiivinen valuutta Decimal symbol Desimaalin merkki Digit grouping symbol Numeroiden ryhmäsymboli Digit grouping Numeroiden ryhmittely Page size Sivun koko Example Esimerkki DatetimeWorker Authentication is required to change NTP server NTP-palvelimen muuttamiseen tarvitaan tunnistautuminen Authentication is required to set the system timezone Aikavyöhykkeen asettaminen vaatii tunnistautumisen DccColorDialog Cancel Peruuta Save Tallenna DccWindow Control Center provides the options for system settings. Ohjauspaneelissa asetukset järjestelmälle. DeepinIDAccountSecurity Bind WeChat WeChat sidonta By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. WeChat sitomisella, voit kirjautua turvallisesti %1 id:llä myös paikalliselle tietokoneelle. Unlinked Linkitys poistettu Unbinding Pura Link Linkki Are you sure you want to unbind WeChat? Haluatko varmasti purkaa WeChatin? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Purkamisen jälkeen et voi käyttää WeChat QR-koodia kirjautumiseen %1 id:llä tai paikalliselle tietokoneelle. Let me think it over Harkitsen asiaa Local Account Binding Paikallisen tilin sidonta After binding your local account, you can use the following functions: Kun olet sitonut paikallisen tilisi, voit käyttää seuraavia toimintoja: WeChat Scan Code Login System WeChat Scan Code kirjautuminen Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Käytä WeChatia, joka on sidottu %1 id:lle, skannaa koodi ja kirjaudu sinun paikalliselle tietokoneelle. Reset password via %1 ID Palauta salasana %1 id:llä Reset your local password via %1 ID in case you forget it. Palauta paikallinen salasanasi %1 id:llä, jos unohdat sen. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Jos haluat käyttää yllä mainittuja ominaisuuksia, siirry kohtaan Ohjauspaneeli - Tilit ja ota vastaavat asetukset käyttöön. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Pilvisynkronointi Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Hallinnoi sinun %1 id:tä ja synkronoi omat tietosi eri laitteiden välillä. Kirjaudu sisään %1 id:llä ja saat mukautetun selaimen, sovelluskaupan, tuen ja muita palveluita. Sign In to %1 ID Kirjaudu sisään %1 id:llä DeepinIDSyncService Auto Sync Autom. synkronointi Securely store system settings and personal data in the cloud, and keep them in sync across devices Tallenna asetukset ja omat tiedot turvallisesti pilveen ja pidä ne synkronoituna eri laitteiden välillä. System Settings Asetukset Last sync time: %1 Tarkistusaika: %1 Clear cloud data Tyhjennä tiedot pilvestä Are you sure you want to clear your system settings and personal data saved in the cloud? Haluatko varmasti tyhjentää tietokoneen asetukset ja pilveen tallennetut henkilökohtaiset tiedot? Once the data is cleared, it cannot be recovered! Kun tiedot on tyhjennetty, niitä ei voi palauttaa! Cancel Peruuta Clear Tyhjennä DeepinIDUserInfo Synchronization Service Synkronointipalvelu Account and Security Tili ja turvallisuus Sign out Kirjaudu ulos Go to web settings Siirry Internet asetuksiin The nickname must be 1~32 characters long Lempinimen on oltava 1~32 merkkiä pitkä DeepinWorker encrypt password failed salasanan kryptaus epäonnistui Wrong password, %1 chances left Väärä salasana, %1 arvausta jäljellä The login error has reached the limit today. You can reset the password and try again. Kirjautumisvirheiden raja on täynnä tältä päivältä. Voit yrittää palauttaa salasanasi ja yrittää uudelleen. Operation Successful Tehtävä onnistui The nickname can be modified only once a day Lempinimeä voi muuttaa vain kerran päivässä Deepinid deepin ID deepin tunnus UOS ID UOS tunnus Cloud services Pilvipalvelut DeepinidModel Mainland China Kiinassa Other regions Muut maat The feature is not available at present, please activate your system first Ominaisuus ei ole tällä hetkellä käytettävissä, aktivoi tietokone ensin Subject to your local laws and regulations, it is currently unavailable in your region. Paikallisten lakien ja määräysten mukaisesti tämä ei ole saatavilla sinun maassasi. Defaultapp Default App Oletussovellus Set the default application for opening various types of files Aseta oletussovellus tiedostojen avaamiseen DefaultappMain Webpage Nettisivu Mail Sähköposti Text Teksti Music Musiikki Video Videot Picture Kuvat Terminal Pääte DetailItem Please choose the default program to open '%1' Valitse oletusohjelma avataksesi "%1" add lisää Open Desktop file Open desktop-tiedosto Apps (*.desktop) Sovellukset (*.desktop) All files (*) Kaikki tiedostot (*) DevelopModePage Root Access Root oikeudet Request Root Access Pyydä root oikeuksia After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Kun olet siirtynyt kehittäjätilaan, voit hankkia root oikeudet, mutta se voi myös vahingoittaa järjestelmää, joten käytä oikeuksia huolellisesti. Allowed Sallittu Enter OK Online Verkossa Login UOS ID Kirjaudu UOS id:llä Offline Poissa Import Certificate Tuo varmenne Select file Valitse tiedosto Your UOS ID has been logged in, click to enter developer mode Sinun UOS id on kirjautunut sisään, paina siirtyäksesi kehittäjätilaan Please sign in to your UOS ID first and continue Kirjaudu ensin Union id:llä ja jatka 1.Export PC Info 1. Vie tietokoneen tiedot Export Vie 3.Import Certificate 3. Tuo varmenne Development and debugging options Kehitys- ja vianetsinnän valinnat System logging level Lokin kirjaustaso Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Asetusten muuttaminen johtaa tarkempaan lokiin, joka hieman heikentää suorituskykyä ja/tai vie enemmän tallennustilaa. Off Pois Debug Vianetsintä Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Asetuksen muuttaminen voi kestää minuutin. Kun olet saanut ilmoituksen valmistumisesta, käynnistä tietokone uudelleen, jotta asetus tulee voimaan. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. Jos haluat asentaa ja käyttää allekirjoittamattomia sovelluksia, siirry <a style='text-decoration: none;' href='Security Center'>Turvakeskukseen </a> ja muuta asetuksia. To install and run unsigned apps, please go to Security Center to change the settings. Jos haluat asentaa ja käyttää allekirjoittamattomia sovelluksia, siirry Turvakeskukseen ja muuta asetuksia. You have entered developer mode Olet siirtynyt kehittäjätilaan OK OK 2.please go to %1 to Download offline certificate. 2. siirry %1 ja lataa paikallinen "offline"-varmenne. The feature is not available at present, please activate your system first. Ominaisuus ei ole käytettävissä. Aktivoi ensin tietokoneesi. Solid System Read-Only Protection Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Suojauksen poistaminen käytöstä avaa järjestelmän hakemistoja. Tämä voi aiheuttaa suuren vaurioriskin järjestelmälle. Enable protection to lock system directories and ensure optimal stability. Ota suojaus käyttöön ja lukitse järjestelmän hakemistot se varmistaa optimaalisen vakauden. Device Bluetooth and Devices Bluetooth ja laitteet DisclaimerControl Disclaimer Vastuuvapauslauseke Cancel Peruuta Agree Hyväksyn Display Display Näyttö Brightness,resolution,scaling Kirkkaus, resoluutio, skaalaus DisplayMain 100% 100% 125% 125% 150% 150% 175% 175% 200% 200% 225% 225% 250% 250% 275% 275% 300% 300% Duplicate Kahdenna Extend Laajenna Default Oletus Fit Sovita Stretch Venytä Center Keskitetty Only on %1 Vain %1 Multiple Displays Settings Usean näytön asetuksia Identify Tunnista Screen rearrangement will take effect in %1s after changes Näytön asettelu tulee voimaan %1s kuluttua muutosten jälkeen Mode Tila Main Screen Päänäyttö Display And Layout Näyttö ja asettelu Brightness Kirkkaus Resolution Resoluutio Resize Desktop Muuta työpöydän kokoa Refresh Rate Virkistystaajuus Rotation Kääntö Standard Vakio 90° 90° 180° 180° 270° 270° The monitor only supports 100% display scaling Näyttö tukee vain 100% skaalausta Eye Comfort Silmien mukavuus Enable eye comfort Silmien mukavuus käyttöön Adjust screen display to warmer colors, reducing screen blue light Säädä näyttö lämpimämpiin väreihin vähentäen sinistä valoa Time Aika All day Koko päivä Sunset to Sunrise Auringonlaskusta nousuun Custom Time Mukautettu aika from alkaen to - Color Temperature Värilämpötila %1x%2 (Recommended) %1x%2 (suositus) %1x%2 %1x%2 %1Hz (Recommended) %1Hz (suositus) %1Hz %1Hz Scaling Skaalaus Dock Desktop and taskbar Työpöytä ja tehtäväpalkki Desktop organization, taskbar mode, plugin area settings Organisointi, tehtäväpalkki, laajennusalueen asetukset DockMain Dock Telakka Mode Tila Classic Mode Klassinen Centered Mode Keskitetty Dock size Telakan koko Small Pieni Large Suuri Position on the screen Paikka ruudulla Top Ylös Bottom Alas Left Vasen Right Oikea Status Asema Keep shown Näkyvissä Keep hidden Piilotettu Smart hide Älykäs piilotus Multiple Displays Useita näyttöjä Set the position of the taskbar on the screen Aseta tehtäväpalkin paikka näytöllä Only on main Päänäytössä On screen where the cursor is Näytöllä, jossa kursori on Plugin Area Laajennusalue Select which icons appear in the Dock Valitse telakan kuvakkeet Lock the Dock Lukitse telakka Combine application icons Yhdistä sovelluskuvakkeita FileAndFolder Allow below apps to access these files and folders: Salli sovellusten käyttää näitä tiedostoja ja kansioita: Documents Asiakirjat Desktop Työpöytä Pictures Kuvat Videos Videot Music Musiikki Downloads Lataukset folder kansio FontSizePage Size Koko Standard Font Vakio Monospaced Font Tasaleveä GeneralPage Power Plans Virrankäyttö Power Saving Settings Virransäästön asetukset Auto power saving on low battery Automaattinen virransäästö alhaisella akulla Low battery threshold Akun alhainen varaus Auto power saving on battery Automaattinen virransäästö akkutilassa Wakeup Settings Heräämisen asetukset Password is required to wake up the computer Tietokoneen herättäminen edellyttää salasanaa Password is required to wake up the monitor Näytön herääminen edellyttää salasanaa Shutdown Settings Sammutamisen asetukset Scheduled Shutdown Ajastettu sammutus Time Aika Repeat Toista Once Kerran Every day Joka päivä Working days Työpäivinä Custom Time Mukautettu aika Decrease screen brightness on power saver Vähennä näytön kirkkautta virransäästössä GestureModel Three-finger up Kolmella sormella ylös Three-finger down Kolmella sormella alas Three-finger left Kolmella sormella vasemmalle Three-finger right Kolmella sormella oikealle Three-finger tap Kolmen sormen painallus Four-finger up Neljällä sormella ylös Four-finger down Neljällä sormella alas Four-finger left Neljällä sormella vasemmalle Four-finger right Neljällä sormella oikealle Four-finger tap Neljän sormen painallus HomePage , , ... ... InterfaceEffectListview Optimal Performance Optimaalinen suoritusteho Balance Tasapaino Best Visuals Visuaalisesti paras Disable all interface and window effects for efficient system performance. Poista käytöstä kaikki tehosteet järjestelmän tehokkaan suorituskyvyn takaamiseksi. Limit some window effects for excellent visuals while maintaining smooth system performance. Rajoita joitain tehosteita saadaksesi visuaalista sisältöä, säilyttäen samalla järjestelmän sujuvan suorituskyvyn. Enable all interface and window effects for the best visual experience. Tehoa riittää, ota kaikki tehosteet käyttöön parhaalla visuaalisella käyttökokemuksella. Keyboard Keyboard Näppäimistö General Settings, input method, shortcuts Lisäasetukset, näppäimistö, pikanäppäimet KeyboardMain Common Yleinen LangAndFormat Language Kieli done valmis edit muokkaa Other languages Muut kielet add lisää Region Maa Area Alue Operating system and applications may provide you with local content based on your country and region Käyttöjärjestelmä ja sovellukset voivat tarjota sinulle paikallista sisältöä maasi ja alueesi perusteella Operating system and applications may set date and time formats based on regional formats Käyttöjärjestelmä ja sovellukset voivat asettaa päivämäärän alueellisten muotojen perusteella Regional format Maa-asetus LangsChooserDialog Add language Lisää kieli Search Haku Cancel Peruuta Add Lisää LoginMethod Login method Kirjautumistapa Password, wechat, biometric authentication, security key Salasana, wechat, sormrnjälki, todennus, suojausavain Password Salasana Modify password Vaihda salasana Validity days Voimassaolo Always Aina Reset password Palauta salasana LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Automaattinen melunvaimennus Input Volume Sisääntulon voimakkuus Input Level Tulotaso Input Sisääntulo No input device for sound found Ei löytynyt äänilaitetta Input Device Sisääntulo Mouse Mouse and Touchpad Hiiri sekä kosketuslevy Common、Mouse、Touchpad Yleinen, hiiri, kosketuslevy MouseMain Common Yleinen Mouse Hiiri Touchpad Kosketuslevy MousePage Mouse Hiiri Pointer Speed Osoittimen nopeus Slow Hidas Fast Nopea Pointer Size Osoittimen koko Mouse Acceleration Hiiren kiihtyvyys Disable touchpad when a mouse is connected Poista kosketuslevy kun hiiri on kytketty Natural Scrolling Tasainen vieritys Small Pieni Medium Keskitaso Large Suuri X-Large Kookas Some apps require logout or system restart to take effect Sovellukset vaativat kirjautumisen ulos tai tietokoneen käynnistämisen tullakseen voimaan MyDevice My Devices Omat laitteet NativeInfoPage UOS UOS Computer name Tietokoneen nimi It cannot start or end with dashes Se ei voi alkaa tai päättyä väliviivoihin OS Name Käyttöjärjestelmä Version Versio Edition Painos Type Tyyppi bit bit Authorization Valtuutus System installation time Asennuspäivä Kernel Kernel Graphics Platform Grafiikka Processor Prosessori Memory Muisti 1~63 characters please 1~63 merkkiä Notification DND mode, app notifications Älä häiritse, sovellusten ilmoitukset Notification Ilmoitus NotificationMain Do Not Disturb Settings Älä häiritse - asetukset App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Ilmoituksia ei näytetä työpöydällä ja äänet äänettömälle, mutta voit tarkastella kaikkia viestejä ilmoitusalueella. Enable Do Not Disturb Älä häiritse käyttöön When the screen is locked Kun näyttö on lukittu Number of notifications shown on the desktop Työpöydällä näkyvien ilmoitusten määrä App Notifications Sovellusten ilmoitukset Allow Notifications Salli ilmoitukset Display notification on desktop or show unread messages in the notification center Näytä ilmoituksia työpöydällä tai näytä lukemattomat ilmoitusalueella Desktop Työpöytä Lock Screen Lukitse näyttö Notification Center Ilmoituskeskus Show message preview Näytä viestin esikatselu Play a sound Toista ääni OtherDevice Other Devices Muut laitteet Show Bluetooth devices without names Näytä Bluetooth-laitteet ilman nimiä PasswordLayout Current password Nykyinen salasana Required Vaadittu Weak Heikko Medium Hyvä Strong Vahva Repeat Password Toista salasana Password hint Salasana vihje Optional Valinnainen Password cannot be empty Salasana ei voi olla tyhjä Passwords do not match Salasanat eivät täsmää The hint is visible to all users. Do not include the password here. Vihje näkyy kaikille tietokoneen käyttäjille. Älä lisää salasanaa tähän. New password Uusi salasana New password should differ from the current one Uusi salasana ei saa olla sama kuin nykyinen The password cannot be the same as the username. Salasana ei voi olla sama kuin käyttäjätunnus. PasswordModifyDialog Modify password Vaihda salasana Reset password Palauta salasana Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Salasanan pituus vähintään 8 merkkiä ja sisältää vähintään 3 seuraavista: isot kirjaimet, pienet kirjaimet, numerot ja symbolit. Tämän kaltainen salasana on turvallisempi. Resetting the password will clear the data stored in the keyring. Salasanan palautus tyhjentää avaimeen tallennetut tiedot. Cancel Peruuta Personalization Personalization Personointi PersonalizationInterface Light Vaalea Auto Autom. Dark Tumma Picker service is not available Poimintapalvelu ei ole saatavilla Invalid color format: %1 Virheellinen väriformaatti: %1 PersonalizationMain Theme Teema Appearance Ulkoasu Window effect Tehosteet Personalize your wallpaper and screensaver Personoi taustakuva ja näytönsäästäjä Screensaver Näytönsäästäjä Colors and icons Värit ja kuvakkeet Adjust accent color and theme icons Säädä korostusvärejä ja teeman kuvakkeita Font and font size Kirjasin ja koko Change system font and size Muuta kirjasinta ja kokoa Wallpaper Taustakuva Select light, dark or automatic theme appearance Valitse vaalea, tumma tai autom. teeman ulkoasu Interface and effects, rounded corners Käyttöliittymä ja tehosteet, pyöristetyt kulmat PersonalizationWorker Custom Mukautettu PluginArea Plugin Area Laajennusalue Select which icons appear in the Dock Valitse telakan kuvakkeet Power Power saving settings, screen and suspend Virransäästö, näyttö ja valmiustila Power Virta PowerMain General Yleinen Power plans, power saving settings, wakeup settings, shutdown settings Virrankäyttö, virransäästö, herääminen, sammuttaminen Plugged In Kytketty Screen and suspend Näyttö ja valmiustila On Battery Akulla screen and suspend, low battery, battery management näyttö ja valmustila, alhainen akku, akun hallinta PowerOperatorModel Shut down Sammuta Suspend Valmiustila Hibernate Lepotila Turn off the monitor Sammuta näyttö Show the shutdown Interface Näytä sammutusliittymä Do nothing Älä tee mitään PowerPage Screen and Suspend Näyttö ja valmiustila Turn off the monitor after Sammuta näyttö Lock screen after Lukitaan näyttö Computer suspends after Tietokone valmiustilaan When the lid is closed Kun kansi on kiinni When the power button is pressed Kun virtapainiketta painetaan PowerPlansListview High Performance Korkea suoritusteho Balance Performance Tasapainoinen suoritusteho Aggressively adjust CPU operating frequency based on CPU load condition Säätää prosessorin toimintataajuutta aggressiivisesti suorittimen kuormituksen perusteella Balanced Tasapainoinen Power Saver Virransäästö Prioritize performance, which will significantly increase power consumption and heat generation Priorisoi suorituskykyä, mikä lisää merkittävästi virrankulutusta ja lämmöntuotantoa Balancing performance and battery life, automatically adjusted according to usage Tasapainottaa suorituskykyä ja akun kestoa, säätyy automaattisesti käytön mukaan Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Priorisoi akun käyttöikää, jolloin järjestelmä laskee hieman suorituskykyä virrankulutuksen vähentämiseksi PowerWorker Minutes Minuuttia Hour Tuntia Never Ei koskaan Privacy Privacy and Security Yksityisyys ja tietoturva Camera, folder permissions Kamera, kansion käyttöoikeudet PrivacyMain Camera Kamera Choose whether the application has access to the camera Valitse, onko sovelluksella pääsy kameraan Files and Folders Tiedostot ja kansiot Choose whether the application has access to files and folders Valitse, onko sovelluksella pääsy tiedostoihin ja kansioihin PrivacyPolicyPage Privacy Policy Tietosuojakäytäntö Copy Link Address Kopioi linkin osoite PwqualityManager Password cannot be empty Salasana ei voi olla tyhjä Password must have at least %1 characters Salasanassa on oltava vähintään %1 merkkiä Password must be no more than %1 characters Salasanassa saa olla enintään %1 merkkiä Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Salasana voi sisältää vain englanninkielisiä kirjaimia (isot ja pienet kirjaimet), numeroita tai erikoismerkkejä (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Enintään %1 merkkiä palindromina No more than %1 monotonic characters please Enintään %1 monotonista merkkiä peräkkäin No more than %1 repeating characters please Enintään %1 samaa merkkiä peräkkäin Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Salasanassa on oltava isoja kirjaimia, pieniä kirjaimia, numeroita ja symboleja (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Salasana ei saa sisältää takaperin enempää kuin 4 -merkkiä Do not use common words and combinations as password Älä käytä yleisiä sanoja ja yhdistelmiä salasanassa Create a strong password please Luo vahva salasana It does not meet password rules Tämä ei täytä salasanan sääntöjä QObject Control Center Ohjauspaneli Activated Aktivoitu View Katsele To be activated Aktivoidaan Activate Aktivoi Expired Vanhentunut In trial period Kokeilujakso Trial expired Kokeilujakso päättynyt dde-control-center Ohjauspaneli Touch Screen Settings Kosketusnäytön asetukset The settings of touch screen changed Kosketusnäytön asetukset muuttuivat This system wallpaper is locked. Please contact your admin. Tämä taustakuva on lukittu. Ota yhteyttä järjestelmänvalvojaasi. %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search Haku Default formats Oletusmuodot First day of week Viikon ensimmäinen päivä Short date Lyhyt päivämäärä Long date Pitkä päivämäärä Short time Lyhyt aika Long time Pitkä aika Currency symbol Valuutan symboli Digit Numero Paper size Paperikoko Cancel Peruuta Save Tallenna Regional format Maa-asetus RegionsChooserWindow Search Haku RegisterDialog Set a Password Aseta salasana 8-64 characters 8-64 merkkiä Repeat the password Toista salasana Cancel Peruuta Confirm Vahvista Passwords don't match Salasanat eivät täsmää ScheduledShutdownDialog Customize repetition time Muokkaa toistoaikaa Cancel Peruuta Save Tallenna ScreenSaverPage Screensaver Näytönsäästäjä preview esikatselu Personalized screensaver Personoi näytönsäästää setting asetus idle time Joutoaika 1 minute 1 min 5 minute 5 min 10 minute 10 min 15 minute 15 min 30 minute 30 min 1 hour 1 h never ei koskaan Password required for recovery Palautukseen vaaditaan salasana Picture slideshow screensaver Kuvien, diaesitys, näytönsäästäjä System screensaver Näytönsäästäjä SearchableListViewPopup Search Haku No search results Ei hakutuloksia ShortcutSettingDialog Add custom shortcut Lisää mukautettu pikakuvake Name: Nimi: Required Vaadittu Command: Komento: Shortcut Pikanäppäin None Mitään Cancel Peruuta Add Lisää The shortcut name is already in use. Choose a different name. Nimi on jo käytössä. Valitse toinen nimi. Change custom shortcut Vaihda pikanäppäintä please enter a shortcut key anna pikanäppäin Save Tallenna click Save to make this shortcut key effective paina Tallenna ja pikanäppäin tulee voimaan click Add to make this shortcut key effective paina Lisää ja pikanäppäin tulee voimaan Shortcuts Shortcuts Pikanäppäimet System shortcut, custom shortcut Pikanäppäin ja mukautettu näppäin Search shortcuts Hae pikanäppäimiä done valmis edit muokkaa Click Paina Cancel Peruuta or tai Replace Korvaa Restore default Palauta oletus Add custom shortcut Lisää pikanäppäin please enter a new shortcut key anna uusi pikanäppäin Sound Sound Ääni Output, input, sound effects, devices Ulostulo, sisääntulo, äänitehosteet, laitteet SoundDevicemanagesPage Output Devices Ulostulon laitteet Select whether to enable the devices Valitse otetaanko laitteet käyttöön Input Devices Sisääntulon laitteet SoundEffectsPage Sound Effects Äänitehosteet SoundMain Settings Asetukset Sound Effects Äänitehosteet Enable/disable sound effects Äänitehosteet käyttöön/pois Enable/disable audio devices Äänilaite käyttöön/pois Devices Management Laitehallinta SoundModel Boot up Käynnistys Shut down Sammuta Log out Kirjaudu ulos Wake up Herää Volume +/- Voimakkuus +/- Notification Ilmoitus Low battery Akku vähissä Send icon in Launcher to Desktop Lähetä kuvake pöydälle Empty Trash Tyhjennä roskakori Plug in Kytketty Plug out Poista laite Removable device connected Siirrettävä laite kytketty Removable device removed Siirrettävä laite poistettu Error Virhe SpeakerPage Mode Tila Output Volume Ulostulon voimakkuus Volume Boost Voimakkuuden tehostin If the volume is louder than 100%, it may distort audio and be harmful to output devices Jos voimakkuus on suurempi kuin 100%, se voi vääristää ääntä ja olla haitallista toistolaitteille Left Vasen Right Oikea Output Ulostulo No output device for sound found Ei löytynyt äänilaitetta Left Right Balance Tasapaino vasen ja oikea Merge left and right channels into a single channel Yhdistä vasen ja oikea kanava yhdeksi kanavaksi Whether the audio will be automatically paused when the current audio device is unplugged Keskeytetäänkö äänentoisto automaattisesti, kun äänilaite irrotetaan Mono Audio Monoääni Auto Pause Autom. tauko Output Device Ulostulon laite SyncInfoListModel Sound Ääni Power Virta Mouse Hiiri Update Päivitä Screensaver Näytönsäästäjä System Common settings Yleiset asetukset System Järjestelmä SystemInfo Auxiliary Information Aputiedot SystemInfoMain About This PC Tietoja tietokoneesta System version, device information Versio, laitetiedot View the notice of open source software Katso ilmoitus avoimen lähdekoodin ohjelmistoista User Experience Program Käyttökokemusohjelma Join the user experience program to help improve the product Liity käyttökokemusohjelmaan ja voit auttaa parantamaan tätä tuotetta End User License Agreement Loppukäyttäjän lisenssisopimus View the end user license agreement Näytä loppukäyttäjän lisenssisopimus Privacy Policy Tietosuojakäytäntö View information about privacy policy Katso tietoja tietosuojakäytännöstä Open Source Software Notice Ilmoitus avoimen lähdekoodin ohjelmistosta ThemeSelectView More Wallpapers Lisää taustakuvia TimeAndDate Auto sync time Synkronointiaika Ntp server NTP-palvelin System date and time Päiväys ja kellonaika Customize Muokkaa Settings Asetukset Server address Palvelimen osoite Required Vaadittu The ntp server address cannot be empty NTP-palvelimen osoite ei voi olla tyhjä Use 24-hour format Käytä 24h kelloa system time zone aikavyöhyke Timezone list Aikavyöhykkeet Add Lisää TimeRange from kohteesta to - TimeoutDialog Save the display settings? Tallennatko näytön asetukset? Settings will be reverted in %1s. Asetukset palautetaan %1s kulttua. Revert Palauta Save Tallenna TimezoneDialog Add time zone Lisää aikavyöhyke Determine the time zone based on the current location Määritä aikavyöhyke sijainnin perusteella Time zone: Aikavyöhyke: Nearest City: Lähin kaupunki: Cancel Peruuta Save Tallenna TouchScreen TouchScreen Kosketusnäyttö Set up here when connecting the touch screen Aseta täällä, kun liität kosketusnäytön Touchpad Basic Settings Perusasetukset Touchpad Kosketuslevy Pointer Speed Osoittimen nopeus Slow Hidas Fast Nopea Disable touchpad during input Poista kosketuslevy, kun kirjoitat Tap to Click Napauta Natural Scrolling Tasainen vieritys Three-finger gestures Kolmen sormen ele Four-finger gestures Neljän sormen ele Gestures Eleet Touchscreen Touchscreen Kosketusnäyttö Configuring Touchscreen Kosketusnäytön konfigurointi TouchscreenMain Common Yleinen UserExperienceProgramPage Join User Experience Program Liity käyttökokemusohjelmaan Copy Link Address Kopioi linkin osoite VerifyDialog Security Verification Tietoturvan vahvistus The action is sensitive, please enter the login password first Toiminto on arkaluonteinen, kirjoita ensin kirjautumissalasana 8-64 characters 8-64 merkkiä Forgot Password? Unohditko salasanan? Cancel Peruuta Confirm Vahvista Wacom wacom wacom Configuring wacom Wacomin konfigurointi WacomMain wacom wacom Pen Mode Kynätila Mouse Mode Hiiritila Pressure Sensitivity Paineherkkyys Light Kevyt Heavy Vahva Model Malli WallpaperPage wallpaper taustakuva My pictures Minun kuvat System Wallpaper Taustakuvia Solid color wallpaper Yksivärinen taustakuva Customizable wallpapers Muokattavat taustakuvat fill style täyttötyyli Automatic wallpaper change Automaattiset taustakuvat never ei koskaan 30 second 30 sek 1 minute 1 min 5 minute 5 min 10 minute 10 min 15 minute 15 min 30 minute 30 min login kirjaudu wake up herää Live Wallpaper Elävä taustakuva 1 hour 1 h System Wallpapers Taustakuvat WallpaperSelectView unfold levitä Set lock screen Aseta lukitusnäyttö Set desktop Aseta työpöytä show all - %1 items näytä kaikki - %1 kohdetta Add Picture Lisää kuva WindowEffectPage Interface and Effects Käyttöliittymä ja tehosteet Window Settings Ikkunoinnin asetukset Window rounded corners Ikkunoiden pyöristettyt kulmat None Mitään Small Pieni Large Suuri Enable transparent effects when moving windows Käytä läpinäkyviä tehosteita ikkunaa siirtäessä Window Minimize Effect Ikkunan minimointitehoste Scale Skaalaus Magic Lamp Taikalamppu Opacity Läpinäkyvyys Low Matala High Korkea Scroll Bars Vierityspalkit Show on scrolling Näytä vierityksessä Keep shown Näytä aina Compact Display Kompakti näyttö If enabled, more content is displayed in the window. Jos käytössä, ikkunassa näkyy lisää sisältöä. Title Bar Height Otsikkopalkin korkeus Only suitable for application window title bars drawn by the window manager. Sopii vain piirtämille sovellusten ikkunoiden otsikkoriville. Extremely small Erittäin pieni Medium describe size of window rounded corners Keskitaso Medium describe height of window title bar Keskitaso dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Perinteinen kiina (Kiina Hong Kong) Traditional Chinese (Chinese Taiwan) Perinteinen kiina (Kiina Taiwan) Min Nan Chinese Taiwanin kiina dcc::Locale::regionNames Taiwan China Taiwan Kiina dccV25::AccountsController Username must be between 3 and 32 characters Käyttäjänimen on oltava 3–32 merkkiä pitkä The first character must be a letter or number Ensimmäisen merkin on oltava kirjain tai numero Your username should not only have numbers Käyttäjänimessäsi ei saa olla vain numeroita The username has been used by other user accounts Nimeä on käytetty muilla käyttäjätileillä The full name is too long Nimesi on liian pitkä The full name has been used by other user accounts Koko nimeä on käytetty muilla käyttäjätileillä Wrong password Väärä salasana Standard User Tavallinen käyttäjä Administrator Järjestelmänvalvoja Customized Muokattu dccV25::AccountsWorker Your host was removed from the domain server successfully Laitteesi poistettiin toimialueelta onnistuneesti Your host joins the domain server successfully Laitteesi liittyi toimialueeseen onnistuneesti Your host failed to leave the domain server Laitteesi poistuminen toimialueelta epäonnistui Your host failed to join the domain server Laitteesi liittyminen toimialueeseen epäonnistui AD domain settings Toimialueen asetukset Password not match Salasana ei täsmää dccV25::AvatarTypesModel Dimensional Ulottuvuus Flat Taso dccV25::FaceAuthController Faceprint Kasvojälki Face Kasvot Use your face to unlock the device and make settings later Käytä kasvoja lukituksen avaamiseen ja tee asetukset myöhemmin dccV25::FingerprintAuthController Fingerprint Sormenjälki Place your finger Aseta sormi Place your finger firmly on the sensor until you're asked to lift it Aseta sormesi anturille, kunnes sinua pyydetään nostamaan Lift your finger Nosta sormesi Lift your finger and place it on the sensor again Nosta sormesi ja aseta se lukijaan uudelleen Lift your finger and do that again Nosta sormeasi ja tee se uudelleen Scan Suspended Skannaus keskeytetty Scan the edges of your fingerprint Skannaa sormenjäljen reunat Place the edges of your fingerprint on the sensor Aseta sormen reuna anturiin Adjust the position to scan the edges of your fingerprint Säädä asentoa sormenjälkesi reunojen skannaamiseksi Fingerprint added Sormenjälki lisätty dccV25::IrisAuthController Iris Iiris Use your iris to unlock the device and make settings later Käytä iiristä lukituksen avaamiseen ja tee asetukset myöhemmin dccV25::KeyboardController This shortcut conflicts with [%1] Tämä on ristiriidassa [%1] kanssa dccV25::PwqualityManager Password cannot be empty Salasana ei voi olla tyhjä Password must have at least %1 characters Salasanassa on oltava vähintään %1 merkkiä Password must be no more than %1 characters Salasanassa saa olla enintään %1 merkkiä Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Salasana voi sisältää vain englanninkielisiä kirjaimia (isot ja pienet kirjaimet), numeroita tai erikoismerkkejä (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Enintään %1 merkkiä palindromina No more than %1 monotonic characters please Enintään %1 monotonista merkkiä peräkkäin No more than %1 repeating characters please Enintään %1 samaa merkkiä peräkkäin Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Salasanassa on oltava isoja kirjaimia, pieniä kirjaimia, numeroita ja symboleja (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Salasana ei saa sisältää takaperin enempää kuin 4 -merkkiä Do not use common words and combinations as password Älä käytä yleisiä sanoja ja yhdistelmiä salasanassa Create a strong password please Luo vahva salasana, kiitos It does not meet password rules Tämä ei täytä salasanan sääntöjä At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. Anna vähintään %1 tyyppiä pienet ja isot kirjaimet, numerot ja symbolit, eikä salasana saa olla sama kuin käyttäjätunnus. dccV25::ShortcutModel System Järjestelmä Window Ikkuna Workspace Työtila AssistiveTools Apuvälineet Custom Mukautettu None Mitään ================================================ FILE: translations/dde-control-center_fil.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Wala Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System Sistema SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Wala Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Tradisyonal na Tsino (Tsino Hong Kong) Traditional Chinese (Chinese Taiwan) Tradisyonal na Tsino (Tsino Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan Tsina dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Ang shortcut na ito ay sumasalungat sa [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Sistema Window Bintana Workspace Workspace AssistiveTools Mga Assistive Tool Custom Custom None Wala ================================================ FILE: translations/dde-control-center_fr.ts ================================================ AccountSettings edit Modifier Add new user Ajouter un utilisateur Set fullname Définir le nom complet Login settings Paramètres de connexion Login without password Se connecter sans mot de passe Delete current account Supprimer le compte actuel Group setting Paramètres de groupe Account groups Groupes d'utilisateurs done Terminer Group name Nom du groupe Add group Ajouter un groupe Auto login Se connecter automatiquement Account Information Informations sur le compte Account name, account fullname, account type Nom du compte, nom complet du compte, type de compte Account name Nom du compte Account fullname Nom complet du compte Account type Type de compte The full name is too long Le nom complet est trop long Group names should be no more than 32 characters Les noms de groupe ne doivent pas dépasser 32 caractères Group names cannot only have numbers Les noms de groupe ne peuvent pas contenir uniquement des chiffres Use letters,numbers,underscores and dashes only, and must start with a letter Utilisez uniquement des lettres, des chiffres, des traits de soulignement et des tirets, et assurez-vous que le nom commence par une lettre The group name has been used Le nom de groupe est déjà utilisé quick login, Auto login, login without password Connexion rapide, connexion automatique, connexion sans mot de passe Undo Annuler Redo Rétablir Cut Couper Copy Copier Paste Coller Select All Tout sélectionner Quick login Connexion rapide Accounts Account Compte Account manager Gestionnaire de compte AccountsMain Other accounts Autres comptes AddFaceinfoDialog Enroll Face Inscrire un visage I have read and agree to the J'ai lu et j'accepte les Disclaimer Clause de non-responsabilité Next Suivant Face enrolled Visage inscrit Failed to enroll your face Échec de l'enregistrement de votre visage Done Terminé Cancel Annuler Retry Enroll Réessayer l'enregistrement Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. La reconnaissance faciale ne prend pas en charge la détection du caractère vivant, et la méthode de vérification peut comporter des risques. Pour garantir une entrée réussie : 1. Veillez à ce que vos traits faciaux soient clairement visibles et ne les couvrez pas (chapeaux, lunettes de soleil, masques, etc.). 2. Assurez-vous que l'éclairage est suffisant et évitez la lumière directe du soleil. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. L'authentification biométrique est une fonction d'authentification d'identité utilisateur fournie par UnionTech Software Technology Co., Ltd. À travers l'authentification biométrique, les données biométriques collectées seront comparées à celles stockées sur l'appareil, et l'identité de l'utilisateur sera vérifiée en fonction du résultat de la comparaison. Veuillez noter que UnionTech Software Technology Co., Ltd. ne collectera ni ne consultera vos informations biométriques, qui seront stockées sur votre appareil local. Veuillez uniquement activer l'authentification biométrique sur votre appareil personnel et utiliser vos propres informations biométriques pour les opérations pertinentes, et supprimez ou supprimez rapidement les informations biométriques d'autres personnes sur cet appareil, sinon vous assumerez le risque qui en découlera. UnionTech Software Technology Co., Ltd. est engagée à rechercher et améliorer la sécurité, l'exactitude et la stabilité de l'authentification biométrique. Cependant, en raison de divers facteurs environnementaux, matériels, techniques et autres et de la gestion des risques, il n'y a aucune garantie que vous passerez l'authentification biométrique temporairement. Par conséquent, veuillez ne pas considérer l'authentification biométrique comme la seule méthode pour vous connecter à UOS. Si vous avez des questions ou des suggestions lors de l'utilisation de l'authentification biométrique, vous pouvez donner des retours via 'Service et Support' dans UOS. AddFingerDialog Cancel Annuler Done Terminé Enroll Finger Enregistrer un doigt Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Placez le doigt à enregistrer sur le capteur d'empreintes digitales et déplacez-le de bas en haut. Une fois l'action terminée, lèvez votre doigt. I have read and agree to the J'ai lu et j'accepte les Disclaimer Déclaration d'exclusion de responsabilité Next Suivant Retry Enroll Réessayer l'enrôlement "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. L'authentification biométrique est une fonction d'authentification d'identité utilisateur fournie par UnionTech Software Technology Co., Ltd. À travers l'authentification biométrique, les données biométriques collectées seront comparées à celles stockées sur l'appareil, et l'identité de l'utilisateur sera vérifiée en fonction du résultat de la comparaison. Veuillez noter que UnionTech Software Technology Co., Ltd. ne collectera ni ne consultera vos informations biométriques, qui seront stockées sur votre appareil local. Veuillez uniquement activer l'authentification biométrique sur votre appareil personnel et utiliser vos propres informations biométriques pour les opérations pertinentes, et supprimez ou supprimez rapidement les informations biométriques d'autres personnes sur cet appareil, sinon vous assumerez le risque qui en découlera. UnionTech Software Technology Co., Ltd. est engagée à rechercher et améliorer la sécurité, l'exactitude et la stabilité de l'authentification biométrique. Cependant, en raison de divers facteurs environnementaux, matériels, techniques et autres et de la gestion des risques, il n'y a aucune garantie que vous passerez l'authentification biométrique temporairement. Par conséquent, veuillez ne pas considérer l'authentification biométrique comme la seule méthode pour vous connecter à UOS. Si vous avez des questions ou des suggestions lors de l'utilisation de l'authentification biométrique, vous pouvez donner des retours via 'Service et Support' dans UOS. AddIrisDialog Enroll Iris Enregistrer une iris I have read and agree to the J'ai lu et j'accepte les Disclaimer Clause de non-responsabilité Next Suivant Done Terminé Cancel Annuler Retry Enroll Réessayer l'enregistrement Iris enrolled Iris inscrit Failed to enroll your iris Échec de l'inscription de votre iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. L'authentification biométrique est une fonction d'authentification d'identité utilisateur fournie par UnionTech Software Technology Co., Ltd. À travers l'authentification biométrique, les données biométriques collectées seront comparées à celles stockées sur l'appareil, et l'identité de l'utilisateur sera vérifiée en fonction du résultat de la comparaison. Veuillez noter que UnionTech Software Technology Co., Ltd. ne collectera ni ne consultera vos informations biométriques, qui seront stockées sur votre appareil local. Veuillez uniquement activer l'authentification biométrique sur votre appareil personnel et utiliser vos propres informations biométriques pour les opérations pertinentes, et supprimez ou supprimez rapidement les informations biométriques d'autres personnes sur cet appareil, sinon vous assumerez le risque qui en découlera. UnionTech Software Technology Co., Ltd. est engagée à rechercher et améliorer la sécurité, l'exactitude et la stabilité de l'authentification biométrique. Cependant, en raison de divers facteurs environnementaux, matériels, techniques et autres et de la gestion des risques, il n'y a aucune garantie que vous passerez l'authentification biométrique temporairement. Par conséquent, veuillez ne pas considérer l'authentification biométrique comme la seule méthode pour vous connecter à UOS. Si vous avez des questions ou des suggestions lors de l'utilisation de l'authentification biométrique, vous pouvez donner des retours via 'Service et Support' dans UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Veuillez regarder l'appareil et vous assurer que vos deux yeux se trouvent dans la zone de capture. Authentication Biometric Authentication Authentification biométrique AuthenticationMain Biometric Authentication Authentification biométrique Face Visage Up to 5 facial data can be entered Il est possible d'enregistrer jusqu'à 5 données faciales. Fingerprint Empreinte digitale Identifying user identity through scanning fingerprints Identification de l'identité de l'utilisateur par le biais de la lecture des empreintes digitales Iris Iris Identity recognition through iris scanning Reconnaissance d'identité par scan de l'iris Use letters, numbers and underscores only, and no more than 15 characters Utilisez uniquement des lettres, des chiffres et des traits de soulignement, et ne dépassez pas 15 caractères. Use letters, numbers and underscores only Utilisez uniquement des lettres, des chiffres et des traits de soulignement. No more than 15 characters Pas plus de 15 caractères This name already exists Ce nom existe déjà Add a new %1 ... Ajouter un nouveau %1 ... The name cannot be empty Le nom ne peut pas être vide. AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first L'auto connexion peut être activée pour un seul compte, veuillez d'abord désactiver l'auto connexion pour le compte "%1". Ok D'accord AvatarSettingsDialog Images Images Human Humain Animal Animal Scenery Scénario Illustration Illustration Emoji Émoticône custom Personnalisé Cartoon style Style dessin animé Dimensional style Style 3D Flat style Style plat Cancel Annuler Save Enregistrer BatteryPage Screen and Suspend Écran et suspension Turn off the monitor after Éteindre l'écran après Lock screen after Verrouiller l'écran après Computer suspends after L'ordinateur se met en veille après When the lid is closed Lorsque le couvercle est fermé When the power button is pressed Lorsque le bouton d'alimentation est pressé Low Battery Batterie faible Low battery notification Notification de batterie faible Auto suspend Suspension automatique Auto Hibernate Hibernation automatique Low battery threshold Seuil de batterie faible Battery Management Gestion de la batterie Display remaining using and charging time Afficher le temps restant d'utilisation et de chargement Maximum capacity Capacité maximale Low battery level Niveau de batterie faible Disable Désactiver BlueTooth Bluetooth settings, devices Paramètres Bluetooth, appareils Bluetooth Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Le Bluetooth est désactivé, et le nom est affiché comme "%1" Bluetooth is turned on, and the name is displayed as "%1" Le Bluetooth est activé, et le nom est affiché comme "%1" BlueToothDeviceListView Disconnect Déconnecter Connect Se connecter Send Files Envoyer des fichiers Rename Renommer Remove Device Supprimer le périphérique Select file Sélectionner un fichier BluetoothCtl Edit Éditer Allow other Bluetooth devices to find this device Autoriser d'autres périphériques Bluetooth à trouver ce périphérique To use the Bluetooth function, please turn off Pour utiliser la fonction Bluetooth, veuillez désactiver Airplane Mode Mode avion Bluetooth name cannot exceed 64 characters Le nom Bluetooth ne peut pas dépasser 64 caractères BluetoothDeviceModel Connected Connecté Not connected Non connecté BootPage Startup Settings Paramètres de démarrage You can click the menu to change the default startup items, or drag the image to the window to change the background image. Vous pouvez cliquer sur le menu pour changer les éléments de démarrage par défaut, ou déplacer l'image dans la fenêtre pour changer l'image de fond. grub start delay Retard de démarrage grub theme thème After turning on the theme, you can see the theme background when you turn on the computer Après avoir activé le thème, vous pouvez voir l'arrière-plan du thème lorsque vous allumez l'ordinateur Boot menu verification Vérification du menu de démarrage After opening, entering the menu editing requires a password. Une fois ouvert, l'édition du menu nécessite un mot de passe. Change Password Changer le mot de passe Change boot menu verification password Changer le mot de passe de vérification du menu de démarrage Set the boot menu authentication password Définir le mot de passe d'authentification du menu de démarrage User Name : Nom d'utilisateur : root root New Password : Nouveau mot de passe : Required Requis Password cannot be empty Le mot de passe ne peut pas être vide Passwords do not match Les mots de passe ne correspondent pas Repeat password: Répéter le mot de passe : Cancel Annuler Sure D'accord Start animation Animation de démarrage Adjust the size of the logo animation on the system startup interface Adjuster la taille de l'animation du logo sur l'interface de démarrage du système Camera Allow below apps to access your camera: Autoriser les applications suivantes à accéder à votre caméra : CharaMangerModel Fingerprint1 Empreinte digitale 1 Fingerprint2 Empreinte digitale 2 Fingerprint3 Empreinte digitale 3 Fingerprint4 Empreinte digitale 4 Fingerprint5 Empreinte digitale 5 Fingerprint6 Empreinte digitale 6 Fingerprint7 Empreinte digitale 7 Fingerprint8 Empreinte digitale 8 Fingerprint9 Empreinte digitale 9 Fingerprint10 Empeinte digitale 10 Scan failed Échec de la lecture The fingerprint already exists L'empreinte digitale existe déjà Please scan other fingers Veuillez scanner d'autres doigts Unknown error Erreur inconnue Scan suspended Lecture suspendue Cannot recognize Ne peut pas reconnaître Moved too fast Déplacement trop rapide Finger moved too fast, please do not lift until prompted Le doigt a bougé trop vite, veuillez ne pas lever le doigt avant d'être invité Unclear fingerprint Empreinte digitale illisible Clean your finger or adjust the finger position, and try again Nettoyez votre doigt ou ajustez sa position, puis réessayez Already scanned Le doigt a déjà été scanné Adjust the finger position to scan your fingerprint fully Ajustez la position de votre doigt pour scanner l'empreinte complète Finger moved too fast. Please do not lift until prompted Le doigt a bougé trop vite, veuillez ne pas lever le doigt avant d'être invité Lift your finger and place it on the sensor again Lever votre doigt et le replacer sur le capteur Position your face inside the frame Placez votre visage à l'intérieur du cadre Face enrolled Le visage est enregistré Position a human face please Veuillez positionner un visage humain Keep away from the camera Restez éloigné de la caméra Get closer to the camera Approchez-vous de la caméra Do not position multiple faces inside the frame Ne positionnez pas plusieurs visages à l'intérieur du cadre Make sure the camera lens is clean Assurez-vous que le prisme de la caméra est propre Do not enroll in dark, bright or backlit environments Ne vous enregistrez pas dans des environnements sombres, éclairés ou en arrière-éclairage Keep your face uncovered Assurez-vous que votre visage est découvert Scan timed out Le scan a expiré Cancel Annuler Camera occupied! Caméra occupée ! ColorAndIcons Accent Color Couleur accent Icon Settings Paramètres des icônes Icon Theme Thème des icônes Customize your theme icon Personnalisez l'icône de votre thème Cursor Theme Thème du curseur Customize your theme cursor Personnalisez le curseur de votre thème ComfirmDeleteDialog Are you sure you want to delete this account? Êtes-vous sûr de vouloir supprimer ce compte? Delete account directory Supprimer le répertoire du compte Cancel Annuler Delete Supprimer ComfirmSafePage Go to settings Aller dans les paramètres Cancel Annuler Common Common Commun Repeat delay Délai de répétition Short Court Long Long Repeat rate Fréquence de répétition Slow Lent Fast Rapide Numeric Keypad Clavier numérique test here test ici Caps lock prompt Indication de la touche Majuscules Double Click Speed Vitesse de double-clic Double Click Test Test de double-clic Left Hand Mode Mode main gauche Enable Keyboard Activer le clavier General Général Scrolling Speed Vitesse de défilement CommonInfoMain Boot Menu Menu de démarrage Manage your boot menu Gérer votre menu de démarrage Developer root permission management Gestion des autorisations root des développeurs Developer Options Options pour les développeurs Developer debugging options Options de débogage de développeur CommonInfoWork Large size Grande taille Small size Petite taille Failed to get root access Échec de l'accès root Please sign in to your Union ID first Connectez-vous d'abord à votre identifiant Union Cannot read your PC information Impossible de lire les informations de votre ordinateur No network connection Aucune connexion réseau Certificate loading failed, unable to get root access Échec du chargement du certificat, accès root impossible Signature verification failed, unable to get root access Vérification de la signature échouée, accès root impossible Agree and Join User Experience Program S’inscrire au programme d’expérience utilisateur The Disclaimer of Developer Mode Déclaration du mode développeur Agree and Request Root Access S’inscrire et demander l'accès root Start setting the new boot animation, please wait for a minute Démarrez la configuration de l'animation de démarrage, veuillez patienter une minute Setting new boot animation finished La configuration de l'animation de démarrage est terminée The settings will be applied after rebooting the system Les paramètres seront appliqués après le redémarrage du système Restart now Redémarrer maintenant Dismiss Refuser Restart device to finish applying Solid System Read-Only Protection settings Redémarrez l'appareil pour terminer l'application des paramètres de protection en lecture seule du système Solid. ConfirmManager Password must contain numbers and letters Le mot de passe doit contenir des chiffres et des lettres Password must be between 8 and 64 characters Le mot de passe doit faire entre 8 et 64 caractères CreateAccountDialog Create a new account Créer un nouveau compte Account type Type de compte UserName Nom d'utilisateur Required Requis FullName Nom complet Optional Optionnel Cancel Annuler Create account Créer le compte Username cannot exceed 32 characters Le nom d'utilisateur ne peut pas dépasser 32 caractères. Username can only contain letters, numbers, - and _ Le nom d'utilisateur ne peut contenir que des lettres, des chiffres, - et _. Full name cannot exceed 32 characters Le nom complet ne peut pas dépasser 32 caractères. Full name cannot contain colons Le nom complet ne peut pas contenir de doubles points. CustomAvatarCropper small petit big grand CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Vous n'avez pas encore téléchargé d'avatars. Cliquez ou faites glisser et déposez pour télécharger une image. The uploaded file type is incorrect, please upload it again Le type de fichier téléchargé n'est pas correct, veuillez le télécharger à nouveau. DCC_NAMESPACE::SystemInfoModel available disponible DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Accepter et rejoindre le programme d'expérience utilisateur <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>Nous sommes pleinement conscients de l'importance que revêtent vos informations personnelles à vos yeux. C'est pourquoi nous avons mis en place une politique de confidentialité qui régit la manière dont nous collectons, utilisons, partageons, transférons, divulguons publiquement et stockons vos informations.</p><p>Vous pouvez<a href="%1">cliquez ici</a>pour consulter notre dernière politique de confidentialité et/ou la consulter en ligne en vous rendant sur <a href="%1">%1</a>. Veuillez lire attentivement et comprendre pleinement nos pratiques en matière de confidentialité des données clients. Si vous avez des questions, veuillez nous contacter à l'adresse suivante : %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">En adhérant au programme d'expérience utilisateur, vous nous autorisez à collecter et à utiliser les informations relatives à votre appareil, votre système et vos applications. Si vous refusez que nous collections et utilisions les informations susmentionnées, veuillez ne pas adhérer au programme d'expérience utilisateur. Pour plus de détails, veuillez consulter la politique de confidentialité de Deepin (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">En adhérant au programme d'expérience utilisateur, vous nous autorisez à collecter et à utiliser les informations relatives à votre appareil, votre système et vos applications. Si vous refusez que nous collections et utilisions les informations susmentionnées, veuillez ne pas adhérer au programme. Pour plus d'informations sur le programme d'expérience utilisateur, rendez-vous sur </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Paramètres de date et d'heure Date Date Year Année Month Mois Day Jour Time Heure Cancel Annuler Confirm Confirmer Datetime Time and date Date et heure Time and date, time zone settings Date et heure, paramètres du fuseau horaire DatetimeMain Language and region Langue et région System language, regional formats DatetimeModel Tomorrow Demain Yesterday Hier Today Aujourd'hui %1 hours earlier than local %1 heures avant le local %1 hours later than local %1 heures après le local Space Espace Week Semaine First day of week Premier jour de la semaine Short date Date courte Long date Date longue Short time Heure courte Long time Heure longue Currency symbol Symbole de devise Positive currency Devise positive Negative currency Monnaie négative Decimal symbol Séparateur décimal Digit grouping symbol Séparateur de groupe de chiffres Digit grouping Groupement de chiffres Page size Taille de la page Example Exemple DatetimeWorker Authentication is required to change NTP server Une authentification est requise pour changer le serveur NTP Authentication is required to set the system timezone Identification requise pour paramétrer le fuseau horaire du système DccColorDialog Cancel Annuler Save Enregistrer DccWindow Control Center provides the options for system settings. Le Centre de contrôle propose les options pour les paramètres système. DeepinIDAccountSecurity Bind WeChat Lier WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. En liant WeChat, vous pouvez vous connecter en toute sécurité et rapidement à votre compte %1 et aux comptes locaux. Unlinked Délié Unbinding Délier Link Lier Are you sure you want to unbind WeChat? Êtes-vous sûr de vouloir délier WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Après avoir délié WeChat, vous ne pourrez plus utiliser WeChat pour scanner le code QR pour vous connecter à votre compte %1 ou compte local. Let me think it over Laissez-moi y réfléchir Local Account Binding Lien de compte local After binding your local account, you can use the following functions: Après avoir lié votre compte local, vous pouvez utiliser les fonctions suivantes: WeChat Scan Code Login System Système de connexion par code QR WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Utilisez WeChat, lié à votre compte %1, pour scanner un code pour vous connecter à votre compte local. Reset password via %1 ID Réinitialiser le mot de passe via le compte %1 Reset your local password via %1 ID in case you forget it. Réinitialisez votre mot de passe local via le compte %1 en cas de oubli. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Pour utiliser les fonctionnalités ci-dessus, veuillez accéder au Centre de contrôle - Comptes et activer les options correspondantes. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Synchronisation en nuage Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Gérez votre identifiant %1 et synchronisez vos données personnelles sur différents appareils. Connectez-vous à votre identifiant %1 pour accéder aux fonctionnalités et services personnalisés du navigateur, de l’App Store et plus encore. Sign In to %1 ID Connectez-vous à votre identifiant %1 DeepinIDSyncService Auto Sync Synchronisation automatique Securely store system settings and personal data in the cloud, and keep them in sync across devices Stockez en toute sécurité les paramètres de système et les données personnelles dans le nuage et synchronisez-les sur différents appareils System Settings Paramètres du système Last sync time: %1 Dernière synchronisation : %1 Clear cloud data Effacer les données en nuage Are you sure you want to clear your system settings and personal data saved in the cloud? Êtes-vous sûr de vouloir effacer vos paramètres de système et vos données personnelles sauvegardées dans le nuage? Once the data is cleared, it cannot be recovered! Une fois les données effacées, elles ne peuvent pas être rétablies! Cancel Annuler Clear Effacer DeepinIDUserInfo Synchronization Service Service de synchronisation Account and Security Compte et Sécurité Sign out Se déconnecter Go to web settings Aller aux paramètres web The nickname must be 1~32 characters long Le pseudonyme doit comporter entre 1 et 32 caractères. DeepinWorker encrypt password failed Échec du chiffrement du mot de passe Wrong password, %1 chances left Mot de passe incorrect, %1 tentative(s) restante(s) The login error has reached the limit today. You can reset the password and try again. Le nombre d’erreurs de connexion a été atteint aujourd’hui. Vous pouvez réinitialiser votre mot de passe et réessayer. Operation Successful Opération réussie The nickname can be modified only once a day Le pseudonyme ne peut être modifié qu'une seule fois par jour. Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Chine continentale Other regions Autres régions The feature is not available at present, please activate your system first La fonctionnalité n’est pas disponible pour le moment, activez d’abord votre système Subject to your local laws and regulations, it is currently unavailable in your region. Conformément aux lois et réglementations locales, cette fonctionnalité n’est actuellement pas disponible dans votre région. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' Veuillez choisir le programme par défaut pour ouvrir '%1' add ajouter Open Desktop file Ouvrir le fichier de bureau Apps (*.desktop) Applications (*.desktop) All files (*) Tous les fichiers (*) DevelopModePage Root Access Accès root Request Root Access Demander l'accès root After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Après avoir entré le mode développeur, vous pouvez obtenir des permissions root, mais cela peut également endommager l'intégrité du système, donc n'en faites pas usage à la légère. Allowed Autorisé Enter Entrer Online En ligne Login UOS ID Se connecter avec votre ID UOS Offline Hors ligne Import Certificate Importer le certificat Select file Sélectionner un fichier Your UOS ID has been logged in, click to enter developer mode Votre ID UOS est connecté, cliquez pour entrer le mode développeur Please sign in to your UOS ID first and continue Veuillez vous connecter avec votre ID UOS en premier et continuer 1.Export PC Info 1. Exporter les informations du PC Export Exporter 3.Import Certificate 3. Importer un certificat Development and debugging options Options de développement et de débogage System logging level Niveau de journalisation système Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. La modification de ces options entraîne un journalisation plus détaillée qui peut altérer les performances du système et/ou consommer plus d'espace de stockage. Off Désactivé, Debug Débogage Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. La modification de l'option peut prendre jusqu'à une minute pour être traitée. Après avoir reçu un message de réussite de la configuration, redémarrez l'appareil pour que les modifications prennent effet. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. Pour installer et exécuter des applications non signées, veuillez aller dans <a style='text-decoration: none;' href='Security Center'> Centre de sécurité </a> pour modifier les paramètres. To install and run unsigned apps, please go to Security Center to change the settings. Pour installer et exécuter des applications non signées, veuillez vous rendre dans le centre de sécurité afin de modifier les paramètres. You have entered developer mode Vous êtes passé en mode développeur. OK OK 2.please go to %1 to Download offline certificate. 2. Veuillez vous rendre sur %1 pour télécharger le certificat hors ligne. The feature is not available at present, please activate your system first. Cette fonctionnalité n'est pas disponible pour le moment, veuillez d'abord activer votre système. Solid System Read-Only Protection Protection en lecture seule du système solide Disabling protection unlocks system directories,This action carries a high risk of system damage. La désactivation de la protection déverrouille les répertoires système. Cette action comporte un risque élevé d'endommagement du système. Enable protection to lock system directories and ensure optimal stability. Activez la protection pour verrouiller les répertoires système et garantir une stabilité optimale. Device Bluetooth and Devices DisclaimerControl Disclaimer Clause de non-responsabilité Cancel Annuler Agree Accepter Display Display Affichage Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Autoriser les applications suivantes à accéder à ces fichiers et dossiers : Documents Documents Desktop Bureau Pictures Images Videos Vidéos Music Musique Downloads Téléchargements folder dossier FontSizePage Size Taille Standard Font Police standard Monospaced Font Police monospacée GeneralPage Power Plans Plans d'alimentation Power Saving Settings Paramètres d'économie d'énergie Auto power saving on low battery Économie d'énergie automatique en cas de batterie faible Low battery threshold Seuil de batterie faible Auto power saving on battery Économie d'énergie automatique sur batterie Wakeup Settings Paramètres de réveil Password is required to wake up the computer Un mot de passe est requis pour réveiller l'ordinateur Password is required to wake up the monitor Un mot de passe est requis pour réveiller l'écran Shutdown Settings Paramètres de redémarrage Scheduled Shutdown Redémarrage programmé Time Heure Repeat Répéter Once Une fois Every day Tous les jours Working days Les jours de travail Custom Time Horaire personnalisé Decrease screen brightness on power saver Diminuer la luminosité de l'écran en mode économie d'énergie GestureModel Three-finger up Trois doigts en haut Three-finger down Trois doigts en bas Three-finger left Trois doigts à gauche Three-finger right Trois doigts à droite Three-finger tap Appui à trois doigts Four-finger up Quatre doigts en haut Four-finger down Quatre doigts en bas Four-finger left Quatre doigts à gauche Four-finger right Quatre doigts à droite Four-finger tap Appui à quatre doigts HomePage , , ... ... InterfaceEffectListview Optimal Performance Performances optimales Balance Équilibre Best Visuals Meilleure qualité visuelle Disable all interface and window effects for efficient system performance. Désactiver tous les effets d'interface et de fenêtre pour des performances système efficaces. Limit some window effects for excellent visuals while maintaining smooth system performance. Limiter certains effets de fenêtre pour des visuels excellents tout en maintenant des performances système fluides. Enable all interface and window effects for the best visual experience. Activer tous les effets d'interface et de fenêtre pour la meilleure expérience visuelle. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language Langue done terminé edit éditer Other languages Autres langues add ajouter Region Région Area Région Operating system and applications may provide you with local content based on your country and region Le système d'exploitation et les applications peuvent vous fournir du contenu local en fonction de votre pays et de votre région Operating system and applications may set date and time formats based on regional formats Le système d'exploitation et les applications peuvent définir les formats de date et d'heure en fonction des formats régionaux Regional format Format régional LangsChooserDialog Add language Ajouter une langue Search Rechercher Cancel Annuler Add Ajouter LoginMethod Login method Méthode de connexion Password, wechat, biometric authentication, security key Mot de passe, WeChat, authentification biométrique, clé de sécurité Password Mot de passe Modify password Modifier le mot de passe Validity days Durée de validité (en jours) Always Toujours Reset password Réinitialiser le mot de passe LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Communauté Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Réduction automatique du bruit Input Volume Volume d'entrée Input Level Niveau d'entrée Input Entrée No input device for sound found Aucun périphérique d'entrée audio détecté Input Device Périphérique d'entrée Mouse Mouse and Touchpad Souris et Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices Mes appareils NativeInfoPage UOS UOS Computer name Nom de l'ordinateur It cannot start or end with dashes Il ne peut pas commencer ou finir par des tirets OS Name Nom du système d'exploitation Version Version Edition Édition Type Type bit bit Authorization Autorisation System installation time Heure d'installation du système Kernel Noyau Graphics Platform Plateforme graphique Processor Processeur Memory Mémoire 1~63 characters please Veuillez saisir 1 à 63 caractères Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Autres appareils Show Bluetooth devices without names Afficher les appareils Bluetooth sans nom PasswordLayout Current password Mot de passe actuel Required Requis Weak Faible Medium Moyen Strong Fort Repeat Password Répéter le mot de passe Password hint Indice de mot de passe Optional Facultatif Password cannot be empty Le mot de passe ne peut pas être vide Passwords do not match Les mots de passe ne correspondent pas The hint is visible to all users. Do not include the password here. L'indice est visible pour tous les utilisateurs. Ne pas inclure le mot de passe ici. New password Nouveau mot de passe New password should differ from the current one Le nouveau mot de passe doit être différent du mot de passe actuel The password cannot be the same as the username. Le mot de passe ne peut pas être identique au nom d'utilisateur. PasswordModifyDialog Modify password Modifier le mot de passe Reset password Réinitialiser le mot de passe Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. La longueur du mot de passe doit être d’au moins 8 caractères, et le mot de passe doit contenir au moins 3 des éléments suivants : lettres majuscules, lettres minuscules, chiffres et symboles. Ce type de mot de passe est plus sécurisé. Resetting the password will clear the data stored in the keyring. La réinitialisation du mot de passe effacera les données stockées dans le trousseau. Cancel Annuler Personalization Personalization Personnalisation PersonalizationInterface Light Clair Auto Automatique Dark Sombre Picker service is not available Le service de ramassage n'est pas disponible. Invalid color format: %1 Format de couleur non valide : %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Personnalisé PluginArea Plugin Area Plugins Select which icons appear in the Dock Sélectionner les icônes qui apparaissent dans le Dock Power Power saving settings, screen and suspend Paramètres d'économie d'énergie, écran et mise en veille Power Alimentation PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plans de puissance, paramètres d'économie d'énergie, paramètres de réveil, paramètres de fermeture Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Arrêter Suspend Suspension Hibernate Hibernation Turn off the monitor Éteindre l'écran Show the shutdown Interface Afficher l'interface d'arrêt Do nothing Ne rien faire PowerPage Screen and Suspend Écran et mise en veille Turn off the monitor after Éteindre l'écran après Lock screen after Verrouiller l'écran après Computer suspends after L'ordinateur passe en veille après When the lid is closed Quand le couvercle est fermé When the power button is pressed Lorsque la touche d'alimentation est appuyée PowerPlansListview High Performance Haute performance Balance Performance Équilibre performance Aggressively adjust CPU operating frequency based on CPU load condition Ajuster de manière agressive la fréquence de fonctionnement du processeur en fonction de la charge du processeur. Balanced Équilibré Power Saver Économiseur d'énergie Prioritize performance, which will significantly increase power consumption and heat generation Donnez la priorité aux performances, ce qui augmentera considérablement la consommation d'énergie et la production de chaleur. Balancing performance and battery life, automatically adjusted according to usage Équilibre entre performances et autonomie, ajusté automatiquement en fonction de l'utilisation Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Donnez la priorité à l'autonomie de la batterie, ce qui entraînera une légère baisse des performances du système afin de réduire la consommation d'énergie. PowerWorker Minutes Minutes Hour Heure Never Jamais Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Politique de confidentialité Copy Link Address Copier l'adresse du lien PwqualityManager Password cannot be empty Le mot de passe ne peut pas être vide Password must have at least %1 characters Le mot de passe doit avoir au moins %1 caractères Password must be no more than %1 characters Le mot de passe ne doit pas dépasser %1 caractères Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Le mot de passe ne peut contenir que des lettres anglaises (sensible à la casse), des chiffres ou des symboles spéciaux (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) No more than %1 palindrome characters please Veuillez ne pas utiliser plus de %1 caractères palindromes No more than %1 monotonic characters please Veuillez ne pas utiliser plus de %1 caractères monotones No more than %1 repeating characters please Veuillez ne pas utiliser plus de %1 caractères répétés Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Le mot de passe doit contenir des lettres majuscules, minuscules, des chiffres et des symboles (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Le mot de passe ne doit pas contenir plus de 4 caractères palindromes Do not use common words and combinations as password N'utilisez pas des mots ou des combinaisons courants comme mot de passe Create a strong password please Veuillez créer un mot de passe fort It does not meet password rules Il ne correspond pas aux règles de mot de passe QObject Control Center Centre de contrôle Activated Activé View Vue To be activated À activer Activate Activer Expired Expiré In trial period Dans la période d'essai Trial expired Période d'essai expirée dde-control-center dde-control-center Touch Screen Settings Paramètres de l'écran tactile The settings of touch screen changed Les paramètres de l'écran tactile ont été modifiés This system wallpaper is locked. Please contact your admin. Ce fond d'écran système est verrouillé. Veuillez contacter votre administrateur. %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search Rechercher Default formats Formats par défaut First day of week Premier jour de la semaine Short date Date courte Long date Date longue Short time Heure courte Long time Heure longue Currency symbol Symbole de devise Digit Chiffre Paper size Taille du papier Cancel Annuler Save Enregistrer Regional format Format régional RegionsChooserWindow Search Rechercher RegisterDialog Set a Password Fixer un mot de passe 8-64 characters 8-64 caractères Repeat the password Répéter le mot de passe Cancel Annuler Confirm Confirmer Passwords don't match Les mots de passe ne correspondent pas ScheduledShutdownDialog Customize repetition time Personnaliser l'heure de répétition Cancel Annuler Save Enregistrer ScreenSaverPage Screensaver Bureau de veille preview aperçu Personalized screensaver Écran de veille personnalisé setting paramètre idle time temps d’inactivité 1 minute 1 minute 5 minute 5 minutes 10 minute 10 minutes 15 minute 15 minutes 30 minute 30 minutes 1 hour 1 heure never jamais Password required for recovery Un mot de passe est requis pour la récupération Picture slideshow screensaver Écran de veille avec diaporama d'images System screensaver Écran de veille du système SearchableListViewPopup Search Recherche No search results Aucun résultat de recherche ShortcutSettingDialog Add custom shortcut Ajouter un raccourci personnalisé Name: Nom : Required Requis Command: Commande : Shortcut Raccourci None Aucun Cancel Annuler Add Ajouter The shortcut name is already in use. Choose a different name. Le nom du raccourci est déjà utilisé. Choisissez un autre nom. Change custom shortcut Modifier un raccourci personnalisé please enter a shortcut key Veuillez saisir une touche de raccourci Save Sauvegarder click Save to make this shortcut key effective Cliquez sur Sauvegarder pour activer ce raccourci clavier. click Add to make this shortcut key effective Cliquez sur Ajouter pour activer ce raccourci clavier. Shortcuts Shortcuts Raccourcis System shortcut, custom shortcut Raccourci système, raccourci personnalisé Search shortcuts Rechercher des raccourcis done Terminé edit Modifier Click Cliquez Cancel Annuler or ou Replace Remplacer Restore default Restaurer les valeurs par défaut Add custom shortcut Ajouter un raccourci personnalisé please enter a new shortcut key Veuillez saisir un nouveau raccourci clavier Sound Sound Son Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Appareils de sortie Select whether to enable the devices Sélectionnez si vous souhaitez activer les appareils Input Devices Appareils d'entrée SoundEffectsPage Sound Effects Effets sonores SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Redémarrage Shut down Arrêt Log out Se déconnecter Wake up Réveil Volume +/- Volume +/− Notification Notification Low battery Batterie faible Send icon in Launcher to Desktop Envoyer l'icône du lanceur sur le bureau Empty Trash vider la corbeille Plug in Insérer Plug out Retirer Removable device connected Dispositif amovible connecté Removable device removed Dispositif amovible déconnecté Error Erreur SpeakerPage Mode Mode Output Volume Volume de sortie Volume Boost Amplification du volume If the volume is louder than 100%, it may distort audio and be harmful to output devices Si le volume est supérieur à 100 %, cela peut entraîner une distorsion du son et endommager les périphériques de sortie. Left Gauche Right Droite Output Sortie No output device for sound found Aucun périphérique de sortie sonore trouvé Left Right Balance Équilibre gauche/droite Merge left and right channels into a single channel Fusionner les canaux gauche et droit en un seul canal Whether the audio will be automatically paused when the current audio device is unplugged L'audio est automatiquement mis en pause lorsque le périphérique audio actuel est débranché. Mono Audio Audio mono Auto Pause Pause automatique Output Device Périphérique de sortie SyncInfoListModel Sound Son Power Puissance Mouse Souris Update Mise à jour Screensaver Écran d'économie d'énergie System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers Plus de fonds d'écran TimeAndDate Auto sync time Synchronisation automatique du temps Ntp server Serveur NTP System date and time Date et heure système Customize Personnaliser Settings Paramètres Server address Adresse du serveur Required Requis The ntp server address cannot be empty L’adresse du serveur NTP ne peut pas être vide Use 24-hour format Utiliser le format 24 heures system time zone Fuseau horaire système Timezone list Liste des fuseaux horaires Add Ajouter TimeRange from de to à TimeoutDialog Save the display settings? Enregistrer les paramètres d'affichage ? Settings will be reverted in %1s. Les paramètres seront réinitialisés dans %1s. Revert Annuler Save Enregistrer TimezoneDialog Add time zone Ajouter une zone horaire Determine the time zone based on the current location Déterminer la zone horaire en fonction de la localisation actuelle Time zone: Zone horaire : Nearest City: Ville la plus proche : Cancel Annuler Save Enregistrer TouchScreen TouchScreen Panneau tactile Set up here when connecting the touch screen Configurez ici lors de la connexion de l'écran tactile Touchpad Basic Settings Paramètres de base Touchpad Panneau tactile Pointer Speed Vitesse du curseur Slow Lent Fast Rapide Disable touchpad during input Désactiver le pavé tactile pendant la saisie Tap to Click Appuyez pour cliquer Natural Scrolling Défilement naturel Three-finger gestures Geste à trois doigts Four-finger gestures Geste à quatre doigts Gestures Gestuelle Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Rejoindre le programme d'expérience utilisateur Copy Link Address Copier l'adresse du lien VerifyDialog Security Verification Vérification de sécurité The action is sensitive, please enter the login password first L'action est sensible, veuillez d'abord entrer votre mot de passe de connexion 8-64 characters 8-64 caractères Forgot Password? Mot de passe oublié? Cancel Annuler Confirm Confirmer Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper fond d'écran My pictures Mes images System Wallpaper Fond d'écran système Solid color wallpaper Fond d'écran uniforme Customizable wallpapers Fond d'écran personnalisable fill style style de remplissage Automatic wallpaper change Changement automatique du fond d'écran never jamais 30 second 30 secondes 1 minute 1 minute 5 minute 5 minutes 10 minute 10 minutes 15 minute 15 minutes 30 minute 30 minutes login connexion wake up réveil Live Wallpaper Fond d'écran animé 1 hour 1 heure System Wallpapers Fonds d'écran système WallpaperSelectView unfold déplier Set lock screen Définir le verrouillage de l'écran Set desktop Définir le bureau show all - %1 items Tout afficher - %1 éléments Add Picture Ajouter une image WindowEffectPage Interface and Effects Interface et effets Window Settings Paramètres de fenêtre Window rounded corners Bords arrondis de la fenêtre None Aucun Small Petit Large Grand Enable transparent effects when moving windows Activer les effets transparents lors du déplacement des fenêtres Window Minimize Effect Effet de réduction de la fenêtre Scale Échelle Magic Lamp Lampe magique Opacity Opacité Low Faible High Élevé Scroll Bars Barres de défilement Show on scrolling Afficher lors du défilement Keep shown Maintenir affiché Compact Display Affichage compact If enabled, more content is displayed in the window. Si cette option est activée, davantage de contenu s'affiche dans la fenêtre. Title Bar Height Hauteur de la barre de titre Only suitable for application window title bars drawn by the window manager. Convient uniquement aux barres de titre des fenêtres dessinées par le gestionnaire de fenêtres. Extremely small Extrêmement petit Medium describe size of window rounded corners Moyen Medium describe height of window title bar Moyen dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Chinois traditionnel (Chinois de Hong Kong) Traditional Chinese (Chinese Taiwan) Chinois traditionnel (Chinois de Taïwan) Min Nan Chinese Chinois min nan dcc::Locale::regionNames Taiwan China Taïwan - Chine dccV25::AccountsController Username must be between 3 and 32 characters Le nom d'utilisateur doit comporter entre 3 et 32 caractères The first character must be a letter or number Le premier caractère doit être une lettre ou un chiffre. Your username should not only have numbers Votre nom d'utilisateur ne doit pas contenir uniquement des chiffres. The username has been used by other user accounts Le nom d'utilisateur a déjà été utilisé par d'autres comptes utilisateurs. The full name is too long Le nom complet est trop long The full name has been used by other user accounts Le nom complet a déjà été utilisé par d'autres comptes utilisateurs. Wrong password Mot de passe incorrect Standard User Utilisateur standard Administrator Administrateur Customized Personnalisé dccV25::AccountsWorker Your host was removed from the domain server successfully Votre hôte a été supprimé du serveur de domaine avec succès. Your host joins the domain server successfully Votre hôte rejoint le serveur de domaine avec succès. Your host failed to leave the domain server Votre hôte n'a pas réussi à quitter le serveur de domaine. Your host failed to join the domain server Votre hôte n'a pas réussi à se connecter au serveur de domaine. AD domain settings Paramètres du domaine AD Password not match Les mots de passe ne correspondent pas dccV25::AvatarTypesModel Dimensional Dimensionnel Flat Plat dccV25::FaceAuthController Faceprint Empreinte faciale Face Visage Use your face to unlock the device and make settings later Utilisez votre visage pour déverrouiller l'appareil et configurez les paramètres ultérieurement. dccV25::FingerprintAuthController Fingerprint Empreinte digitale Place your finger Placez votre doigt Place your finger firmly on the sensor until you're asked to lift it Placez votre doigt fermement sur le capteur jusqu'à ce que vous soyez invité à le soulever Lift your finger Soulevez votre doigt Lift your finger and place it on the sensor again Soulevez votre doigt et placer-le à nouveau sur le capteur Lift your finger and do that again Soulevez votre doigt et recommencer Scan Suspended Analyse suspendue Scan the edges of your fingerprint Scannez les bords de votre empreinte digitale Place the edges of your fingerprint on the sensor Placez les bords de votre empreinte digitale sur le capteur Adjust the position to scan the edges of your fingerprint Ajustez la position pour numériser les bords de votre empreinte digitale Fingerprint added Empreinte digitale ajoutée dccV25::IrisAuthController Iris Iris Use your iris to unlock the device and make settings later Utilisez votre iris pour déverrouiller l'appareil et configurer les paramètres ultérieurement. dccV25::KeyboardController This shortcut conflicts with [%1] Cette raccourci conflit avec [%1] dccV25::PwqualityManager Password cannot be empty Le mot de passe ne peut pas être vide Password must have at least %1 characters Le mot de passe doit avoir au moins %1 caractères Password must be no more than %1 characters Le mot de passe ne doit pas dépasser %1 caractères Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Le mot de passe peut contenir uniquement des lettres anglaises (sensible à la casse), des chiffres ou des symboles spéciaux (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please Veuillez ne pas utiliser plus de %1 caractères palindromes No more than %1 monotonic characters please Veuillez ne pas utiliser plus de %1 caractères monotones No more than %1 repeating characters please Veuillez ne pas utiliser plus de %1 caractères répétés Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Le mot de passe doit contenir des lettres majuscules, des lettres minuscules, des chiffres et des symboles (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) Password must not contain more than 4 palindrome characters Le mot de passe ne doit pas contenir plus de 4 caractères palindromes Do not use common words and combinations as password N'utilisez pas de mots courants ou de combinaisons en tant que mot de passe Create a strong password please Veuillez créer un mot de passe fort It does not meet password rules Il ne correspond pas aux règles de mot de passe At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. Incluez au moins %1 types parmi les lettres minuscules, les lettres majuscules, les chiffres et les symboles, et le mot de passe ne peut pas être identique au nom d'utilisateur. dccV25::ShortcutModel System Système Window Fenêtre Workspace Espace de travail AssistiveTools Outils assistatifs Custom Personnalisé None Aucun ================================================ FILE: translations/dde-control-center_gl.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Velociade do punteiro Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Desprazamento natural Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Velociade do punteiro Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Desprazamento natural Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_gl_ES.ts ================================================ AccountSettings edit editar Add new user Engadir novo usuario Set fullname Establecer nome completo Login settings Configuración de inicio de sesión Login without password Iniciar sesión sen contrasinal Delete current account Eliminar conta actual Group setting Configuración de grupos Account groups Grupos de conta done feito Group name Nome do grupo Add group Engadir grupo Auto login Iniciar sesión automático Account Information Información da conta Account name, account fullname, account type Nome da conta, nome completo da conta, tipo de conta Account name Nome da conta Account fullname Nome completo da conta Account type Tipo de conta The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face Inscrir rostro I have read and agree to the Leido e acordo coa Disclaimer Aviso Next Seguinte Face enrolled Rosto inscrito Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Estilo de dibujo animado Dimensional style Estilo tridimensional Flat style Estilo plano Cancel Cancelar Save Gardar BatteryPage Screen and Suspend Pantalla e suspensión Turn off the monitor after Apagar o monitor despois de Lock screen after Bloquear a pantalla despois de Computer suspends after O ordenador suspenderá despois de When the lid is closed Cando se pecha a tapa When the power button is pressed Cando se preme o botón de poder Low Battery Batería baixa Low battery notification Notificación de batería baixa Auto suspend Suspensión automática Auto Hibernate Hibernación automática Low battery threshold Límite de batería baixa Battery Management Gestión da batería Display remaining using and charging time Mostrar o tempo restante de uso e carga Maximum capacity Capacidade máxima Low battery level Nivel de batería baixa Disable Desactivar BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" O Bluetooth está desactivado e o nome é mostrado como "%1" Bluetooth is turned on, and the name is displayed as "%1" O Bluetooth está activado e o nome é mostrado como "%1" BlueToothDeviceListView Disconnect Desconectar Connect Conectar Send Files Enviar arquivos Rename Renomear Remove Device Eliminar dispositivo Select file Seleccionar ficheiro BluetoothCtl Edit Editar Allow other Bluetooth devices to find this device Permitir que outros dispositivos Bluetooth o atopen To use the Bluetooth function, please turn off Para usar a función Bluetooth, por favor desactiva-a Airplane Mode Modo avión Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Conectado Not connected Non conectado BootPage Startup Settings Configuración de arranque You can click the menu to change the default startup items, or drag the image to the window to change the background image. Podes clicar no menú para cambiar os elementos de arranque por defecto, ou arrastra a imaxe ao xanela para cambiar a imaxe de fondo. grub start delay Retraso do arranque de grub theme tema After turning on the theme, you can see the theme background when you turn on the computer Despois de activar o tema, verás a imaxe de fondo do tema ao encender o ordenador Boot menu verification Verificación do menú de arranque After opening, entering the menu editing requires a password. Despois de abrir, a introdución de edición do menú require unha contrasinal. Change Password Cambiar contrasinal Change boot menu verification password Cambiar contrasinal de verificación do menú de arranque Set the boot menu authentication password Establecer o contrasinal de autenticación do menú de arranque User Name : Nome de usuario : root root New Password : Novo contrasinal : Required Obrigatorio Password cannot be empty A contrasinal non pode estar en branco Passwords do not match As contrasínhas non coinciden Repeat password: Repita o contrasinal: Cancel Xánllate Sure Seguro Start animation Inicia a animación Adjust the size of the logo animation on the system startup interface Ajusta o tamaño da animación do logotipo na interface de arranque do sistema Camera Allow below apps to access your camera: Permite a seguintes aplicativos acceder á súa cámara: CharaMangerModel Fingerprint1 Impresión1 Fingerprint2 Impresión2 Fingerprint3 Impresión3 Fingerprint4 Impresión4 Fingerprint5 Impresión5 Fingerprint6 Impresión6 Fingerprint7 Impresión7 Fingerprint8 Impresión8 Fingerprint9 Impresión9 Fingerprint10 Impresión10 Scan failed A escaneación fallou The fingerprint already exists A impressión digital xa existe Please scan other fingers Escanea outras dedos, por favor Unknown error Erro descoñecido Scan suspended A escaneación foi pausada Cannot recognize Non se pode identificar Moved too fast Movido demasiado rápido Finger moved too fast, please do not lift until prompted O dedo foi movido demasiado rápido, por favor, non levale ata que se o solicite Unclear fingerprint Impresión de dedo confusa Clean your finger or adjust the finger position, and try again Limpe o seu dedo ou ajuste a posición do dedo e tente de novo Already scanned Xá escaneado Adjust the finger position to scan your fingerprint fully Ajuste a posición do dedo para escanear a súa impresión completa Finger moved too fast. Please do not lift until prompted O dedo foi movido demasiado rápido. Por favor, non levale ata que se o solicite Lift your finger and place it on the sensor again Leve o dedo e posidxo de novo no sensor Position your face inside the frame Posidxa a súa cara dentro do marco Face enrolled Cara inscrita Position a human face please Posidxa unha cara de xerme, por favor Keep away from the camera Manteña-se á distancia da cámara Get closer to the camera Vexa máis próximo da cámara Do not position multiple faces inside the frame Non posidxa múltiples caras dentro do marco Make sure the camera lens is clean Confírme que o lente da cámara está limpo Do not enroll in dark, bright or backlit environments Non inscríba en entornos escuros, claros ou con iluminación de trasfondo Keep your face uncovered Manteña a súa cara descuberta Scan timed out O escaneamento agoude o tempo Cancel Cancelar Camera occupied! ColorAndIcons Accent Color Cor de destaque Icon Settings Configuracións dos iconos Icon Theme Temas de iconos Customize your theme icon Personaliza o ícone do tema Cursor Theme Tema do punteiro do rato Customize your theme cursor Personaliza o punteiro do tema ComfirmDeleteDialog Are you sure you want to delete this account? Estás seguro de que queres eliminar esta conta? Delete account directory Eliminar a carpeta da conta Cancel Cancelar Delete Eliminar ComfirmSafePage Go to settings Ir ás configuracións Cancel Cancelar Common Common Común Repeat delay Atraso de repetición Short Curto Long Longo Repeat rate Taxa de repetición Slow Lento Fast Rápido Numeric Keypad Teclado numérico test here probar aquí Caps lock prompt Activar o bloqueo de mayúsculas Double Click Speed Velocidade de dobre clic Double Click Test Probar dobre clic Left Hand Mode Modo de mão esquerdas Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Grandes tamaño Small size Pequeño tamaño Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-es https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-es Agree and Join User Experience Program Concordar e unirse ao Programa de Experiencia do Usuario <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Configuración de data e hora Date Data Year Ano Month Mes Day Día Time Hora Cancel Cancelar Confirm Confirmar Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Mañá Yesterday Ontem Today Hoxe %1 hours earlier than local %1 horas antes da local %1 hours later than local %1 horas despois da local Space Espazo Week Semana First day of week Primer día da semana Short date Data curta Long date Data larga Short time Hora curta Long time Tiempo longo Currency symbol Símbolo de moeda Positive currency Moeda positiva Negative currency Moeda negativa Decimal symbol Símbolo decimal Digit grouping symbol Símbolo de agrupación de dígitos Digit grouping Agrupación de dígitos Page size Tamaño de paxina Example DatetimeWorker Authentication is required to change NTP server É necesario autenticarse para cambiar o servidor NTP Authentication is required to set the system timezone A autentificación é necesaria para configurar o fuso horario do sistema DccColorDialog Cancel Cancelar Save Gardar DccWindow Control Center provides the options for system settings. O Centro de Controlo proporciona as opcións para atopar as configuracións do sistema. DeepinIDAccountSecurity Bind WeChat Ligar WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Ao liga-llle WeChat, podes acceder de xeito seguro e rápido ao teu ID %1 e ás súas conta locais. Unlinked Desligado Unbinding Desligar Link Ligar Are you sure you want to unbind WeChat? Xa estás seguro de que queres desligar WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Despois de desligar WeChat, non podes usar WeChat para escanear o código QR para acceder ao teu ID %1 ou á súa conta local. Let me think it over Deixame pensalo Local Account Binding Ligado de conta local After binding your local account, you can use the following functions: Despois de ligar a súa conta local, podes usar as seguintes funcións: WeChat Scan Code Login System Sistema de entrada por escaner de código de WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Usa WeChat, ligado ao teu ID %1, para escanear o código para acceder á súa conta local. Reset password via %1 ID Restablecer a contrasinal via ID %1 Reset your local password via %1 ID in case you forget it. Restablece a tua contrasinal local através de %1 ID no caso de que o escojas esquecer. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Para usar as funcións anteriores, velle a Control Center - Contas e activa as opcións correspondentes. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Sincronización en nube Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Gestiona o teu %1 ID e sincroniza os teu datos persoais en todos os dispositivos. Regístrate no teu %1 ID para obter características e servicios personalizados do Navegador, o Tesouro de Aplicacións, e máis. Sign In to %1 ID Inicia sesión no teu %1 ID DeepinIDSyncService Auto Sync Sincronización automática Securely store system settings and personal data in the cloud, and keep them in sync across devices Almacena seguramente as configuracións do sistema e os teu datos persoais en a nube e mante-os sincronizados en todos os dispositivos System Settings Configuracións do sistema Last sync time: %1 Última sincronización: %1 Clear cloud data Borra os datos da nube Are you sure you want to clear your system settings and personal data saved in the cloud? ¿Estás seguro de que queres borrar as teu configuracións do sistema e os teu datos persoais almacenados na nube? Once the data is cleared, it cannot be recovered! Axúndase que os datos borbados non se poden recuperar! Cancel Cancelar Clear Borrar DeepinIDUserInfo Synchronization Service Servizo de sincronización Account and Security Contas e Seguridade Sign out Desconectar Go to web settings Ir ás configuracións da web The nickname must be 1~32 characters long DeepinWorker encrypt password failed A encriptación do contrasinal fallou Wrong password, %1 chances left Contrasinal incorrecto, quedan %1 oportunidades The login error has reached the limit today. You can reset the password and try again. O erro de inicio de sesión atopouse no límite de hoje. Podes resetar o contrasinal e tentalo de novo. Operation Successful Operación exitosa The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China China continental Other regions Outras zonas The feature is not available at present, please activate your system first A funcionalidade non está dispoñible no momento, por favor actívalo primeiro Subject to your local laws and regulations, it is currently unavailable in your region. Subxestivo ás leis e regulamentos locais, non está dispoñible neste axenzamento. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' Por favor, escolhe o programa predeterminado para abrir '%1', add añadir Open Desktop file Abrir ficheiro de escritorio Apps (*.desktop) Apps (*.desktop), All files (*) Todos os arquivos (*), DevelopModePage Root Access Acceso de raíz Request Root Access Solicitar acceso de raíz After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Despois de entrar no modo de desenvolvedor, pode obter permisos de raíz, pero pode danificar a integridade do sistema, polo que use-o coa máxima cautela. Allowed Permitido Enter Entrar Online Online Login UOS ID Identificación de UOS Offline Desconectado Import Certificate Importar certificado Select file Seleccionar ficheiro Your UOS ID has been logged in, click to enter developer mode O seu ID de UOS foi ingresado, clicar para entrar no modo de desenvolvedor Please sign in to your UOS ID first and continue Por favor, inicie sesión no seu ID de UOS primeiro e continue 1.Export PC Info 1.Exportar información do PC Export Exportar 3.Import Certificate 3.Importar certificado Development and debugging options Opcionals de desenvolvemento e depuración System logging level Nivel de rexistro do sistema Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Cambiar as opcións resultará en un rexistro máis detallado que pode deteriorar o rendemento do sistema e/ou ocupar máis espazo de almacenamento. Off Desactivado Debug Depuración Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Cambiar esta opción pode levar un minuto para procesarse. Despois de recibir unha solicitude de configuración exitosa, reinicie o dispositivo para que teña efecto. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Pantalla Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Permitir que as aplicacións seguintes accedan a estes ficheiros e cartafolos: Documents Documentos Desktop Escritorio Pictures Imaxes Videos Videos Music Música Downloads Descargas folder cartafol FontSizePage Size Tamaño Standard Font Fons estándar Monospaced Font Fons fijo GeneralPage Power Plans Planos de poder Power Saving Settings Configuracións de ahorro de poder Auto power saving on low battery Ahorro de poder automático en batería baixa Low battery threshold Límite de batería baixa Auto power saving on battery Ahorro de poder automático en batería Wakeup Settings Configuracións de despertar Password is required to wake up the computer É necesario introducir unha contrasinal para despertar o ordenador Password is required to wake up the monitor É necesario introducir unha contrasinal para despertar a pantalla Shutdown Settings Configuración de apagado Scheduled Shutdown Apagado programado Time Hora Repeat Repetir Once Una vez Every day Todos os días Working days Días laborables Custom Time Hora personalizada Decrease screen brightness on power saver Reduzir a luminosidade da pantalla no modo ahorro de batería GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Buscar Cancel Cancelar Add Engadir LoginMethod Login method Método de inicio de sesión Password, wechat, biometric authentication, security key Contraseña, WeChat, autenticación biométrica, clave de seguridad Password Contraseña Modify password Modificar contraseña Validity days Días de validez Always Sempre Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Comunidade Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Supresión automática de ruido Input Volume Volumen de entrada Input Level Nivel de entrada Input Entrada No input device for sound found Non se atopou ningún dispositivo de entrada de son Input Device Dispositivo de entrada Mouse Mouse and Touchpad Rato e Área táctil Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices Os meus dispositivos NativeInfoPage UOS UOS Computer name Nome do ordenador It cannot start or end with dashes Non pode empezar ou acabar con guiones OS Name Nome do sistema operativo Version Versión Edition Edición Type Tipo bit bit Authorization Autorización System installation time Hora de instalación do sistema Kernel Núcleo Graphics Platform Plataforma gráfica Processor Procesador Memory Memoria 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Outros dispositivos Show Bluetooth devices without names Mostrar dispositivos Bluetooth sen nome PasswordLayout Current password Contrasinal actual Required Obrigatorio Weak Débil Medium Medio Strong Fuerte Repeat Password Repetir contrasinal Password hint Pista de contrasinal Optional Opcional Password cannot be empty O contrasinal non pode estar en branco Passwords do not match Os contrasinals non coinciden The hint is visible to all users. Do not include the password here. A pista é visible para todos os usuarios. Non inclúis o contrasinal aquí. New password New password should differ from the current one O novo contrasinal debe diferir do actual The password cannot be the same as the username. PasswordModifyDialog Modify password Modificar contrasinal Reset password Restablecer contrasinal Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. A lonxitude do contrasinal debe ser de polo menos 8 caracteres, e o contrasinal debe contén unha combinación de polo menos 3 das seguintes: letras mayúsculas, minúsculas, números e símbolos. Este tipo de contrasinal é máis seguro. Resetting the password will clear the data stored in the keyring. Restablecer o contrasinal limpará os datos almacenados no anfiteatro de chaves. Cancel Cancelar Personalization Personalization Personalización PersonalizationInterface Light Claro Auto Auto Dark Escur@ Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Personalizado PluginArea Plugin Area Área de complementos Select which icons appear in the Dock Seleccionar que iconas aparecen no Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Apagar Suspend Suspender Hibernate Hibernar Turn off the monitor Apagar o monitor Show the shutdown Interface Mostar a interface de apagado Do nothing Non facer nada PowerPage Screen and Suspend Pantalla e suspensión Turn off the monitor after Apagar o monitor despois de Lock screen after Bloquear a pantalla despois de Computer suspends after O ordenador entra en suspensión despois de When the lid is closed Cando se pecha a tapa When the power button is pressed Cando se prema o botón de alimentación PowerPlansListview High Performance Alto rendemento Balance Performance Equilibrio do rendemento Aggressively adjust CPU operating frequency based on CPU load condition Ajustar agresivamente a frecuencia de operación do CPU dependendo da carga do CPU Balanced Equilibrado Power Saver Conservation de enerxía Prioritize performance, which will significantly increase power consumption and heat generation Priorizar o rendemento, o que aumentará significativamente a consumición de enerxía e a geração de calor Balancing performance and battery life, automatically adjusted according to usage Equilibrar o rendemento e a vida da batería, ajustado automaticamente segundo a utilización Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Priorizar a vida da batería, que o sistema sacrificará algúns rendementos para reducir a consumición de enerxía PowerWorker Minutes Minutos Hour Hora Never Nunca Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Política de privacidade Copy Link Address PwqualityManager Password cannot be empty A contrasinal non pode estar en branco Password must have at least %1 characters A contrasinal debe ter polo menos %1 caracteres Password must be no more than %1 characters A contrasinal non debe ter máis de %1 caracteres Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A súa contrasinal só pode contén letras en inglés (sensible á cadradeira), números ou símbolos especiais (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) No more than %1 palindrome characters please Non use %1 caracteres palíndromos No more than %1 monotonic characters please Non use %1 caracteres monotónicos No more than %1 repeating characters please Non use %1 caracteres repetidos Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A súa contrasinal debe contén letras mayúsculas, minúsculas, números e símbolos (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters A súa contrasinal non debe contén máis de 4 caracteres palíndromos Do not use common words and combinations as password Non use palabras e combinacións comúns como contrasinal Create a strong password please Crea un contrasinal forte, por favor It does not meet password rules Non atopase a as regras de contrasinal QObject Control Center Centro de Control Activated Activado View Ver To be activated Para activar Activate Activar Expired Expirado In trial period Durante o período de proba Trial expired A proba expirou dde-control-center dde-control-center Touch Screen Settings Configuración da Pantalla táctil The settings of touch screen changed Cambian as configuracións da pantalla táctil This system wallpaper is locked. Please contact your admin. A pantalla de fons do sistema está bloqueada. Por favor, contáctese co seu administrador. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Buscar Default formats Formatos por defecto First day of week Primer día da semana Short date Data corta Long date Data longa Short time Hora corta Long time Hora longa Currency symbol Símbolo de divisa Digit Dígito Paper size Tamaño de papel Cancel Cancelar Save Gardar Regional format RegionsChooserWindow Search Buscar RegisterDialog Set a Password Establecer unha contrasinal 8-64 characters 8-64 caracteres Repeat the password Repetir o contrasinal Cancel Cancelar Confirm Confirmar Passwords don't match Os contrasinals non coinciden ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver Guarda-pantalla preview prévia Personalized screensaver Guarda-pantalla personalizado setting configuración idle time tempo inactivo 1 minute 1 minuto 5 minute 5 minutos 10 minute 10 minutos 15 minute 15 minutos 30 minute 30 minutos 1 hour 1 hora never nunca Password required for recovery Se necesite unha contrasinal para recuperación Picture slideshow screensaver Protección de pantalla de diapositivas de fotos System screensaver Protección de pantalla do sistema SearchableListViewPopup Search Buscar No search results ShortcutSettingDialog Add custom shortcut Engadir atalho personalizado Name: Nome: Required Requerido Command: Comando: Shortcut Atalho None Non Cancel Cancelar Add Engadir The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts Atalos System shortcut, custom shortcut Atalho do sistema, atalho personalizado Search shortcuts Atalos de busca done feito edit editar Click Clique Cancel Cancelar or ou Replace Substituír Restore default Restaurar os valores predeterminados Add custom shortcut Engadir atalho personalizado please enter a new shortcut key Sound Sound Son Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Dispositivos de saída Select whether to enable the devices Selecciona se queres activar os dispositivos Input Devices Dispositivos de entrada SoundEffectsPage Sound Effects Efectos sonoros SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Encendemento Shut down Apagar Log out Sair Wake up Despertar Volume +/- Volumen +/- Notification Notificación Low battery Batería baixa Send icon in Launcher to Desktop Enviar o icona no Lanceiro ao Escritorio Empty Trash Borrar a lixeira Plug in Conectar Plug out Desconectar Removable device connected Dispositivo removíbel conectado Removable device removed Dispositivo removíbel desconectado Error Erro SpeakerPage Mode Modo Output Volume Volumen de saída Volume Boost Amplificación do volumen If the volume is louder than 100%, it may distort audio and be harmful to output devices Se o volumen é superior a 100%, pode distorcer o son e ser perjudicial para os dispositivos de saída Left Esquerdo Right Dereito Output Saída No output device for sound found Non se atopou ningún dispositivo de saída para o son Left Right Balance Equilibrio esquerdo-dereito Merge left and right channels into a single channel Fundir canais esquerdo e dereito nun único canal Whether the audio will be automatically paused when the current audio device is unplugged Se o son irá pausarse automaticamente cando se desconeza o dispositivo de son actual Mono Audio Auto Pause Output Device Dispositivo de saída SyncInfoListModel Sound Son Power Poder Mouse Rexistro Update Actualizar Screensaver Ecran de espera System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers Máis fondos de pantalla TimeAndDate Auto sync time Sincronización automática do tempo Ntp server Servidor NTP System date and time Data e hora do sistema Customize Personalizar Settings Configuración Server address Enderezo do servidor Required Requerido The ntp server address cannot be empty A dirección do servidor ntp non pode estar vazia Use 24-hour format Usar formato de 24 horas system time zone fuso horario do sistema Timezone list Lista de fusos horarios Add TimeRange from desde to até TimeoutDialog Save the display settings? Gardar as configuracións de visualización Settings will be reverted in %1s. As configuracións volverán a ser asixadas en %1s. Revert Reanudar Save Gardar TimezoneDialog Add time zone Engadir fuso horario Determine the time zone based on the current location Determinar o fuso horario baseándose na localización actual Time zone: Fuso horario: Nearest City: Ciudad máis xistra: Cancel Cancelar Save Gardar TouchScreen TouchScreen Pantalla táctil Set up here when connecting the touch screen Configuración aquí ao conectar a pantalla táctil Touchpad Basic Settings Configuración básica Touchpad Pantalla táctil Pointer Speed Velocidade do indicador Slow Lento Fast Rápido Disable touchpad during input Desactivar a pantalla táctil durante a entrada Tap to Click Tocar para clicar Natural Scrolling Deslizado natural Three-finger gestures Gestos con tres dedos Four-finger gestures Gestos con cuatro dedos Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Únete ao Programa de Experiencia do Usuario Copy Link Address VerifyDialog Security Verification Verificación de seguridade The action is sensitive, please enter the login password first A acción é sensible, por favor introduce primeiro o contrasinal de inicio de sesión 8-64 characters 8-64 caracteres Forgot Password? ¿Olvidou a contrasinal? Cancel Cancela Confirm Confirma Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper fondo de pantalla My pictures As minhas imaxes System Wallpaper Fondo de pantalla do sistema Solid color wallpaper Fondo de pantalla de corolao sólido Customizable wallpapers Fondos de pantalla personalizables fill style estilo de relleno Automatic wallpaper change Cambio de fondo de pantalla automático never nunca 30 second 30 segundos 1 minute 1 minuto 5 minute 5 minutos 10 minute 10 minutos 15 minute 15 minutos 30 minute 30 minutos login iniciar sesión wake up despertar Live Wallpaper Fondo de pantalla en vivo 1 hour 1 hora System Wallpapers WallpaperSelectView unfold desdoblar Set lock screen Establecer pantalla de bloqueo Set desktop Establecer escritorio show all - %1 items Add Picture WindowEffectPage Interface and Effects Interfaz e efectos Window Settings Configuración de ventanas Window rounded corners Bordes redondeados de ventanas None Ninguno Small Pequeño Large Grande Enable transparent effects when moving windows Habilitar efectos transparentes ao mover ventanas Window Minimize Effect Efecto de minimización de ventana Scale Escala Magic Lamp Lámpara mágica Opacity Opacidad Low Bajo High Alto Scroll Bars Barras de desplazamento Show on scrolling Mostrar ao desplazarse Keep shown Manter mostrado Compact Display Mostraxe compacta If enabled, more content is displayed in the window. Se está habilitado, se mostrará máis contido na ventá. Title Bar Height Altura da barra de títuloe Only suitable for application window title bars drawn by the window manager. Só se atopará para as barras de título das ventás de aplicación desenhadas polo gerador de ventá. Extremely small Extremadamente pequeno Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Chinés tradicional (Chinés de Hong Kong) Traditional Chinese (Chinese Taiwan) Chinés tradicional (Chinés de Taiwán) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwán China dccV25::AccountsController Username must be between 3 and 32 characters O nome de usuario debe estar entre 3 e 32 caracteres The first character must be a letter or number O primer carácter debe ser unha letra ou número Your username should not only have numbers O seu nome de usuario non debe ter só números The username has been used by other user accounts O nome de usuario xa foi utilizado por outras contas de usuario The full name is too long O nome completo é moi lonxe The full name has been used by other user accounts O nome completo xa foi utilizado por outras contas de usuario Wrong password Contrasinal incorrecto Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Este atallo entra en conflito con [%1] dccV25::PwqualityManager Password cannot be empty A password non pode estar vacío Password must have at least %1 characters A password debe ter pelo menos %1 caracteres Password must be no more than %1 characters A password non debe ter máis de %1 caracteres Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A password únicamente pode contencer letras de inglés (sensible á caxa), números ou símbolos especiais (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please Non use máis de %1 caracteres palíndromos No more than %1 monotonic characters please Non use máis de %1 caracteres monotónicos No more than %1 repeating characters please Non use máis de %1 caracteres repetidos Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A password debe contencer letras mayúsculas, minúsculas, números e símbolos (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) Password must not contain more than 4 palindrome characters A password non debe contencer máis de 4 caracteres palíndromos Do not use common words and combinations as password Non use palabras e combinacións comúns como contrasinal Create a strong password please Crea un contrasinal forte, por favor It does not meet password rules Non atopase aoas reas do contrasinal At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Sistema Window Xanela Workspace Escritorio AssistiveTools Xogos de axuda Custom Personalizado None Ningún ================================================ FILE: translations/dde-control-center_he.ts ================================================ AccountSettings edit ערוך Add new user הוספת משתמש חדש Set fullname הגדר שם מלא Login settings הגדרות כניסה Login without password כניסה בלי סיסמה Delete current account מחק את חשבון המשתמש הנוכחי Group setting הגדרת קבוצה Account groups קבוצות חשבון done נגמר Group name שם הקבוצה Add group הוספת קבוצה Auto login כניסה אוטומטית Account Information מידע על חשבון Account name, account fullname, account type שם חשבון, שם מלא של חשבון, סוג חשבון Account name שם חשבון Account fullname שם מלא של חשבון Account type סוג חשבון The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face ה했는데ה של פנים I have read and agree to the אילותי ומסכים ל Disclaimer האזהרה Next הבא Face enrolled ה体制机制 של הפנים נרשם Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style סגנון קומיקס Dimensional style סגנון ממד Flat style סגנון מسطح Cancel ביטול Save שמור BatteryPage Screen and Suspend מסך ופסק פעילות Turn off the monitor after כבה את מסך המחשב לאחר Lock screen after לOCK מסך המחשב לאחר Computer suspends after מחשב הפסק פעילות לאחר When the lid is closed כאשר סילוק הסלע נסגר When the power button is pressed כאשר לחץ על כפתור האמצעי Low Battery בatterיה נמוכה Low battery notification Thông báo בatterיה נמוכה Auto suspend פסק פעילות אוטומטי Auto Hibernate היבריה אוטומטית Low battery threshold סף בatterיה נמוכה Battery Management ניהול בatterיה Display remaining using and charging time הצגת זמן שימוש וטעינה оставшегося Maximum capacity dung最大化容量 Low battery level _LVL בatterיה נמוכה Disable Dezactiva BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth נסגר, ושם מוצג כ"%1" Bluetooth is turned on, and the name is displayed as "%1" Bluetooth פועל, ושם מוצג כ"%1" BlueToothDeviceListView Disconnect הסר Connect תחבר Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected חיבור פעיל Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty הסיסמה不能为空 Passwords do not match הסיסמאות לא תואמות Repeat password: הססמה שניתנה: Cancel בטל Sure SURE Start animation STAR ANIMATION Adjust the size of the logo animation on the system startup interface JUST THE SIZE OF THE LOGO ANIMATION ON THE SYSTEM STARTUP INTERFACE Camera Allow below apps to access your camera: Allow below apps to access your camera: CharaMangerModel Fingerprint1 אצבע1 Fingerprint2 אצבע2 Fingerprint3 אצבע3 Fingerprint4 אצבע4 Fingerprint5 אצבע5 Fingerprint6 אצבע6 Fingerprint7 אצבע7 Fingerprint8 אצבע8 Fingerprint9 אצבע9 Fingerprint10 אצבע10 Scan failed הסריקה נכשלה The fingerprint already exists האצבע כבר קיימת Please scan other fingers אנא סרק אצבעות אחרות Unknown error שגיאה לא ידועה Scan suspended הסריקה פסקה Cannot recognize לא ניתן לזהות Moved too fast ניעג TOO FAST Finger moved too fast, please do not lift until prompted אצבע שוחזרה得太快,请不要在提示前抬起 Unclear fingerprint האצבע לא ברורה Clean your finger or adjust the finger position, and try again כין את האצבע או תרגל אתposição האצבע, ונסה שוב Already scanned נבדק כבר Adjust the finger position to scan your fingerprint fully תרגל את pozיציה האצבע כדי לסרוק את האצבע שלך לחלוטין Finger moved too fast. Please do not lift until prompted אצבע שוחזרה得太快,请不要在提示前抬起 Lift your finger and place it on the sensor again הרים את האצבע והניח אותה על הסינזור שוב Position your face inside the frame תPOSITION את הפנים בתוך התמונה Face enrolled פניה מתאגדות Position a human face please תPOSITION פנים אנושיות, בבקשה Keep away from the camera הישאר מהתמונה Get closer to the camera הקרב את עצמך לתמונה Do not position multiple faces inside the frame אל תPOSITION מספר פנים בתוך התמונה Make sure the camera lens is clean 確保相機鏡頭是乾淨的 Do not enroll in dark, bright or backlit environments אל תегистיר בvironments昏暗、明亮或背光环境中 Keep your face uncovered הישאר את הפנים נטול כיסוי Scan timed out הסריקה נגמרת Cancel ביטול Camera occupied! ColorAndIcons Accent Color צבע מיתר Icon Settings הגדרות סמל Icon Theme תema של סמל Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access לא ניתן לקבל גישה לשורטט Please sign in to your Union ID first אנא התחבר ל-ID שלך של המאוחד קודם Cannot read your PC information לא ניתן לקרוא מידע על המחשב שלך No network connection אין תקשורת רשת Certificate loading failed, unable to get root access טעות בטעינת תעודת זהות, לא ניתן לקבל גישה לשורטט Signature verification failed, unable to get root access ה��יה של חתימה נכשלה, לא ניתן לקבל גישה לשורטט Agree and Join User Experience Program סכום ומשתתף בדוחת ניסוי משתמש The Disclaimer of Developer Mode ה_DECLARATION של מצב מפתח Agree and Request Root Access סכום ובקש גישה לשורטט Start setting the new boot animation, please wait for a minute החל בהגדרת האנימציה החדשה של התחלה, אנא המתן רגע Setting new boot animation finished ההגדרה של האנימציה החדשה של התחלה נסבה The settings will be applied after rebooting the system ההגדרות יישמשו לאחר הפעלת המערכת מחדש Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters הסיסמה חייבת לכלול מספרים ואותיות Password must be between 8 and 64 characters הסיסמה חייבת להימצא בין 8 ל-64 תווים CreateAccountDialog Create a new account צור חשבון חדש Account type סוג חשבון UserName שם משתמש Required אOLT FullName שם מלא Optional אפשרי Cancel בטל Create account צור חשבון Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. אתה לא העלות עדיין אובט. לחץ או התענוג ותורד כדי להעלות תמונה. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available זמין DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/פרטי-פרטיות-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/验伤-经验-en Agree and Join User Experience Program הסכים להצטרף לתוכנית ניסוי משתמש <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting הגדרת תאריך וזמן Date תאריך Year שנה Month חודש Day יום Time שעון Cancel בטל Confirm CAFIR Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow מחר Yesterday אתמול Today היום %1 hours earlier than local %1 שעות לפני helyתי %1 hours later than local %1 שעות אחרי helyתי Space فضה Week שבוע First day of week יום ראשון בשבוע Short date תאריך קצר Long date תאריך ארוך Short time זמן קצר Long time זמן ארוך Currency symbol סמל מטבע Positive currency מטבע положительный Negative currency מטבע שלילי Decimal symbol סימן שבר Digit grouping symbol סימן חלוקה של ספרות Digit grouping חלוקה של ספרות Page size גודל עמוד Example DatetimeWorker Authentication is required to change NTP server האם יש צורך בתוכנית אימות כדי לשנות את שרת NTP Authentication is required to set the system timezone DccColorDialog Cancel בטל Save שמור DccWindow Control Center provides the options for system settings. מרכז kontrol מציע את האפשרויות לשינוי הגדרות מערכת DeepinIDAccountSecurity Bind WeChat קשר לWhatsApp By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. ב联系我们,您可以安全且快速地登录到您的 %1 ID 和本地账户。 Unlinked לא קשורים Unbinding פרישה Link קשר Are you sure you want to unbind WeChat? אתה בטוח שתרחק מWhatsApp? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. לאחר הפרישה מWhatsApp, לא תוכל להשתמש בWhatsApp כדי להתחבר באמצעות קוד QR ל %1 ID או חשבון מקומי. Let me think it over תתבונן בזה Local Account Binding קשר חשבון מקומי After binding your local account, you can use the following functions: לאחר הקישור לחשבון המקומי שלך, תוכל להשתמש בפונקציות הבאות: WeChat Scan Code Login System מערכת כניסה באמצעות קוד סcan של WhatsApp Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. استخدم WhatsApp، המושקף对你 %1 ID,扫码登录到您的本地账户。 Reset password via %1 ID איפוס סיסמה באמצעות %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions אזורים אחרים The feature is not available at present, please activate your system first המאפיין לא זמין这时候先激活您的系统 Subject to your local laws and regulations, it is currently unavailable in your region. לפי החוקים והתקנות המקומיים, זה זמין כעת באזור שלך. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' בבקשה בחר תוכנית סטנדרטית להפתיח '%1', add הוסף Open Desktop file פתור קובץ שולחן עבודה Apps (*.desktop) יישומים (*.desktop), All files (*) כל הקבצים (*) , DevelopModePage Root Access גישה לroot Request Root Access בקשה לגישה לroot After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. FTER ENTERING THE DEVELOPER MODE, YOU CAN OBTAIN ROOT PERMISSIONS, BUT IT MAY ALSO DAMAGE THE SYSTEM INTEGRITY, SO PLEASE USE IT WITH CAUTION. Allowed מותר Enter הכנס Online בצורה מקוונת Login UOS ID התחבר עם UOS ID Offline בצורה לא מקוונת Import Certificate הוסף תעודת זהות Select file בחר קובץ Your UOS ID has been logged in, click to enter developer mode UOS ID שלך התחבר, לחץ כדי להיכנס למוד פיתוח Please sign in to your UOS ID first and continue בבקשה התחבר עם UOS ID שלך קודם ומשך 1.Export PC Info 1. התמונות של המחשב Export ייצא 3.Import Certificate 3. הוסף תעודת זהות Development and debugging options אפשרויות תכנון ובדיקות System logging level רמת רישום מערכת Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. שינוי אפשרויות אלו יוביל לרשום מפורט יותר可能會降低系统性能和/或占用更多存储空间 Off הופסק Debug דיבגging Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. שינוי האפשרות עשוי לקחת עד דקה ליעשות, לאחר קבלת תזכורת בהצלחה להגדרה, אנא התחבר מחדש כדי שהשינוי יAPEK To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display תצוגה Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: תאפשר ל_APPS_ להיע朦文件和文件夹 Documents קבצים של דוקומנטים Desktop שולחן העבודה Pictures תמונות Videos וידאו Music מוזיקה Downloads הורדות folder תיקיה FontSizePage Size גודל Standard Font שכיח שפה Monospaced Font שפה תווים אחידים GeneralPage Power Plans תנאי כוח Power Saving Settings הגדרות שמירה של כוח Auto power saving on low battery שמירת כוח אוטומטית ב batterylow Low battery threshold סף מינימלי של בATTERY Auto power saving on battery שמירת כוח אוטומטית ב batterysystem Wakeup Settings הגדרות תעורר Password is required to wake up the computer האם יש צורך סיסמה כדי להתחבר למחשב Password is required to wake up the monitor האם יש צורך סיסמה כדי להתחבר למדפסת Shutdown Settings הגדרות היעדר Scheduled Shutdown היעדר מוקדם Time זמן Repeat חזור Once פעם Every day כל יום Working days הימים האכיפתיים Custom Time זמן מותאם אישית Decrease screen brightness on power saver איבד את הנורמות של המסך בזמן שמירת האנרגיה GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search חיפוש Cancel ביטול Add הוסף LoginMethod Login method 방식 של כניסה Password, wechat, biometric authentication, security key סיסמה, ו챗, אימות פיזי, מפתח אבטחה Password סיסמה Modify password הצג סיסמה Validity days ימים בתוקף Always תמיד Reset password LogoModule Copyright© 2011-%1 Deepin Community כל הזכויות שמורות © 2011-%1 קהילת Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD כל הזכויות שמורות © 2019-%1 חברת תוכנה של וינדט MicrophonePage Automatic Noise Suppression ה.fromStringילינג הסופטי של רעש Input Volume 볼륨 של הכניסה Input Level כמות הכניסה Input הכנס No input device for sound found לא נמצאו תשתית להכנסה של סאונד Input Device Mouse Mouse and Touchpad עכבר ומשטח מגע Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices הустройств שלי NativeInfoPage UOS UOS Computer name שם המחשב It cannot start or end with dashes לא ניתן להתחיל או להסתיים בנקודות פסיק OS Name שם הOS Version גרסה Edition dition Type סוג bit bit Authorization השכלה System installation time זמן התקנה של מערכת Kernel כרnice Graphics Platform תמונה שטח Processor معالג Memory זיכרון 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices устройств אחרים Show Bluetooth devices without names הצג-devices של Bluetooth ללא שמות PasswordLayout Current password סיסמה נוכחית Required נדרש Weak ضعيف Medium בינוני Strong חזק Repeat Password אתחול סיסמה Password hint אזהרה סיסמה Optional לא חובה Password cannot be empty הסיסמה不能为空 Passwords do not match הסיסמאות לא תואמות The hint is visible to all users. Do not include the password here. האזהרה מופיעה לכל משתמשים. אל תכתוב כאן את הסיסמה. New password New password should differ from the current one הסיסמה החדשה צריכה להיות שונה מהסיסמה הנוכחית The password cannot be the same as the username. PasswordModifyDialog Modify password לכבות את הסיסמה Reset password אפס את הסיסמה Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. אורך הסיסמה צריך להיות לפחות 8 תווים, והסיסמה צריכה לכלול תערובת של לפחות 3 מהלולאות הבאות: אותיות גדולות, אותיות קטנות, מספרים וסימנים. הסיסמה הזו היא יותר בטוחה. Resetting the password will clear the data stored in the keyring. איפוס הסיסמה ימחק את הנתונים שמורים בקירחון. Cancel ביטול Personalization Personalization התאמה אישית PersonalizationInterface Light בהיר Auto אוטומטי Dark 😉 Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Cástom PluginArea Plugin Area אזור הממוצעים Select which icons appear in the Dock בחר את הסמלים שמת.ToDateTime Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down TURN OFF Suspend הסРИ Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) הסיסמה יכולה להכיל רק אותיות אנגלית (🙂-🙂), מספרים או סמלים מיוחדים (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) No more than %1 palindrome characters please אינקסם יותר מ%1 סימנים פלינדרום, אנא No more than %1 monotonic characters please אינקסם יותר מ%1 סימנים רצופים, אנא No more than %1 repeating characters please אינקסם יותר מ%1 סימנים מופ�מים, אנא Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) הסיסמה חייבת להכיל אותיות גדולות, אותיות קטנות, מספרים וסמלים (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters הסיסמה לא תכיל יותר מ-4 סימנים פלינדרום Do not use common words and combinations as password אל תשתמש בסיסמאות משותפות או תכונות Create a strong password please בבקשה צור סיסמה חזקה It does not meet password rules זה לא מקיים את כללי הסיסמה QObject Control Center מרכז kontrol Activated מפעיל View הצג To be activated להפעיל Activate פעיל Expired הסתיימה In trial period בתקופה ניסיון Trial expired תקופת הניסיון הסתיימה dde-control-center dde-control-center Touch Screen Settings הגדרות מסך-touch The settings of touch screen changed ה הגדרות מסך-touch נמשכו This system wallpaper is locked. Please contact your admin. ה)(((( [[[ מותקן של מערכת זה מוטקן. אנא התató את המנהל שלך]]]] ((((ה %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search חיפוש Default formats צורות ברירת מחדל First day of week יום ראשון של שבוע Short date תאריך קצר Long date תאריך מאריך Short time שעה קצרה Long time שעה מאריך Currency symbol סמל מטבע Digit מספר Paper size גודל עמודה Cancel ביטול Save שמור Regional format RegionsChooserWindow Search חיפוש RegisterDialog Set a Password 設置密碼 8-64 characters 8-64 תווים Repeat the password הסיט סיסמה נוספת Cancel ביטול Confirm #afirmar Passwords don't match הסיסמאות לא תואמות ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver ה哈哈哈 preview תצוגה מקדימה Personalized screensaver 螢幕保護程式 setting הגדרות idle time זמן בזבז 1 minute 1 דקות 5 minute 5 דקות 10 minute 10 דקות 15 minute 15 דקות 30 minute 30 דקות 1 hour שעה never никогда Password required for recovery האם יש צורך בסיס סיסמה כדי להחזיר Picture slideshow screensaver הצג את התמונה בהצגה גלובית System screensaver הצג את מסגף מערכת SearchableListViewPopup Search חיפוש No search results ShortcutSettingDialog Add custom shortcut הוסף מקצט אישי Name: שם: Required נדרש Command: פקודה: Shortcut מקצט None לא קיים Cancel בטל Add הוסף The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts מקצצים System shortcut, custom shortcut מקצט מערכת, מקצט אישי Search shortcuts מקצצים לחיפוש done נגמר edit ערוך Click לחץ Cancel ביטול or או Replace החלף Restore default אשנה לבררת Add custom shortcut הוסף מקצט אישי please enter a new shortcut key Sound Sound שמע Output, input, sound effects, devices SoundDevicemanagesPage Output Devices устройств יציאה Select whether to enable the devices בחר אם להפעיל את הустройств Input Devices устройств כניסה SoundEffectsPage Sound Effects הפקות קול SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up הפעלה Shut down הסגר Log out יציאה Wake up akeup Volume +/- 用微信翻译 Notification Thông báo Low battery בatterיה נמוכה Send icon in Launcher to Desktop שלח סמל מlauncher לשולחן עבודה Empty Trash אפס את/recycle bin Plug in העתק Plug out העתק Removable device connected DEVICE-CONNECTED Removable device removed DEVICE-REMOVED Error שגיאה SpeakerPage Mode מצב Output Volume היקף יציאה Volume Boost העלאה ב-volume If the volume is louder than 100%, it may distort audio and be harmful to output devices אם volume גדול מ-100%, הוא עשוי לפגוע ב음을 ולהיות מסוכן לש (*)(device) Left שמאל Right ימין Output פלט No output device for sound found לא נמצאה מכשיר פלט ל-sound Left Right Balance 균형 בין שמאליים-ימיניים Merge left and right channels into a single channel לכלול את ערוצי השמאליים והימיניים לערוץ אחד Whether the audio will be automatically paused when the current audio device is unplugged האם האודיו ישבח אוטומטית כאשר מכשיר האודיו הנוכחי נתקל Mono Audio Auto Pause Output Device SyncInfoListModel Sound 음을 Power חשמל Mouse ה *)&mouse Update עדכון Screensaver שימור מסך System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers מגזר קבצי שים מסך נוספים TimeAndDate Auto sync time הפעלת השתוא אוטומטי זמן Ntp server שרת NTP System date and time תאריך וזמן מערכת Customize Cáןוס Settings הגדרות Server address כתובת שרת Required נדרש The ntp server address cannot be empty כתובתשרת ntp不能为空 Use 24-hour format استخدم تنسيق 24 ساعة system time zone منطقة الزمان النظامية Timezone list قائمة المناطق الزمنية Add TimeRange from מ to עד TimeoutDialog Save the display settings? שמור הגדרות התצוגה Settings will be reverted in %1s. ת revenות הגדרותיו ב %1 שניות. Revert חזרה Save שמור TimezoneDialog Add time zone הוסףzonת ime Determine the time zone based on the current location קבע אתzonת ime לפי המיקום הנוכחי Time zone: zonת ime: Nearest City: עיר קרובת: Cancel בטל Save שמור TouchScreen TouchScreen מסך משיק Set up here when connecting the touch screen הגדר כאן בעת תצוגת מסך המשיק Touchpad Basic Settings הגדרות בסיסיות Touchpad מגנטית משיק Pointer Speed מהירות העיגול Slow איטי Fast רחב Disable touchpad during input Dezקוף מגנטית המשיק במהלך הכניסה Tap to Click לחץ כדי לחץ Natural Scrolling התקדמות טבעי Three-finger gestures ה惴 של שלושה אצבעות Four-finger gestures ה惴 של ארבעה אצבעות Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program הצטרף לתוכנית ניסוי משתמש Copy Link Address VerifyDialog Security Verification הוכחת בטיחות The action is sensitive, please enter the login password first הפעולה היא רגישת, אנא הכנס את סיסמת הכניסה קודם 8-64 characters 8-64 תווים Forgot Password? שכחתי סיסמה? Cancel בטל Confirm אשר Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper תמונה מסך My pictures תמונות שלי System Wallpaper תמונה מסך מערכת Solid color wallpaper .Snירחית צבע ثابت Customizable wallpapers .Snירחיות מ定制化 fill style סגנון למלא Automatic wallpaper change שינוי נייר הירח אוטומטי never никогда 30 second 30 שניות 1 minute 1 דקה 5 minute 5 דקות 10 minute 10 דקות 15 minute 15 דקות 30 minute 30 דקות login כניסה wake up akeup Live Wallpaper Snירחית חיה 1 hour 1 שעה System Wallpapers WallpaperSelectView unfold desarROLLO Set lock screen הגדר מסך ההסעה Set desktop הגדר שולחן עבודה show all - %1 items Add Picture WindowEffectPage Interface and Effects רפרון והפקות Window Settings הגדרות נוחות הווינטת Window rounded corners קצוות עגולים של החלון None לא כלום Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) סינית מסורתית (סינית הונג קונג) Traditional Chinese (Chinese Taiwan) סינית מסורתית (סינית טיוואן) Min Nan Chinese dcc::Locale::regionNames Taiwan China טיוואן סין dccV25::AccountsController Username must be between 3 and 32 characters שם משתמש חייב להיות בין 3 ל-32 תווים The first character must be a letter or number האות הראשונה חייבת להיות אות או מספר Your username should not only have numbers שם משתמש שלך לא יכול להכיל רק מספרים The username has been used by other user accounts שם משתמש זה בשימוש על ידי חשבון משתמש אחר The full name is too long שם מלא הוא מדי ארוך The full name has been used by other user accounts שם מלא זה בשימוש על ידי חשבון משתמש אחר Wrong password סיסמה לא נכונה Standard User משתמש סטנדרטי Administrator מנהל Customized Cástuizado dccV25::AccountsWorker Your host was removed from the domain server successfully המארח שלך נמחק מהשרת של המתחום בהצלחה Your host joins the domain server successfully המארח שלך הצטרף לשרת של המתחום בהצלחה Your host failed to leave the domain server המארח שלך נכשל להיעלם מהשרת של המתחום Your host failed to join the domain server המארח שלך נכשל להצטרף לשרת של המתחום AD domain settings הגדרות מתחום AD Password not match הסיסמאות לא תואמות dccV25::AvatarTypesModel Dimensional מימדי Flat שטוח dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] הקצרה הזו מתנגשת עם [%1] dccV25::PwqualityManager Password cannot be empty הסיסמה不能为空 Password must have at least %1 characters הסיסמה חייבת להכיל לפחות %1 תווים Password must be no more than %1 characters הסיסמה חייבת להכיל לא יותר מ-%1 תווים Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) הסיסמה יכולת להכיל רק אותיות אנגלית (😉שונה בין גדול小额写),数字或特殊符号 (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) No more than %1 palindrome characters please לא יותר מ-%1 תווים פלינדרום, בבקשה No more than %1 monotonic characters please לא יותר מ-%1 תווים רציפים, בבקשה No more than %1 repeating characters please לא יותר מ-%1 תווים רואים שוב ושוב, בבקשה Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) הסיסמה חייבת להכילאות גדול, אותיות מינuscile, מספרים וסימנים (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters הסיסמה לא יכולה להכיל יותר מ-4 תווים פלינדרום Do not use common words and combinations as password אל תשתמשו בשמות משובחים ותאימות כסיסמה Create a strong password please בבקשה תיצור סיסמה חזקה It does not meet password rules זה לא משקף את כללי הסיסמה At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System מערכת Window חלון Workspace מישור עבודה AssistiveTools Werkzeuge zur Unterstützung Custom מאפיין None לא ================================================ FILE: translations/dde-control-center_hi_IN.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected कनेक्ट है Not connected कनेक्ट नहीं है BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel रद्द करें Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display डिस्प्ले Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume इनपुट ध्वनि स्तर Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization अनुकूलीकरण PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom स्वयं के द्वारा PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password कूटशब्द हेतु साधारण शब्द व संयोजन उपयोग न करें Create a strong password please It does not meet password rules यह कूटशब्द नियमानुसार नहीं है QObject Control Center नियंत्रण केंद्र Activated View देखें To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound ध्वनि Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects ध्वनि प्रभाव SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down बंद करें Log out लॉग आउट Wake up Volume +/- Notification सूचना Low battery लो बैटरी Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode मोड Output Volume आउटपुट ध्वनि स्तर Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left बाएँ Right दाएँ Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert पूर्ववत् Save संचित करें TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) पुरातन चीनी (चीनी हंग कोंग) Traditional Chinese (Chinese Taiwan) पुरातन चीनी (चीनी ताइवान) Min Nan Chinese dcc::Locale::regionNames Taiwan China ताइवान चीन dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] यह शॉर्टकट [%1] के साथ विघटित है dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System सिस्टम Window विंडो Workspace वर्कस्पेस AssistiveTools सहायक उपकरण Custom स्वचालित None कोई नहीं ================================================ FILE: translations/dde-control-center_hr.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Spojeno Not connected Nije spojeno BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Otisak prsta1 Fingerprint2 Otisak prsta2 Fingerprint3 Otisak prsta3 Fingerprint4 Otisak prsta4 Fingerprint5 Otisak prsta5 Fingerprint6 Otisak prsta6 Fingerprint7 Otisak prsta7 Fingerprint8 Otisak prsta8 Fingerprint9 Otisak prsta9 Fingerprint10 Otisak prsta10 Scan failed The fingerprint already exists Otisak prsta već postoji Please scan other fingers Unknown error Nepoznata greška Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Prst se prebrzo pomicao, molim nemojte ga podizati dok ne budete obavješteni Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Otkaži Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Zaslon Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Ulazna glasnoća Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Miš i Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Izgled PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Prilagođeno PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Lozinka ne smije biti prazna Password must have at least %1 characters Lozinka mora imati najmanje %1 znakova Password must be no more than %1 characters Lozinka ne smije biti veća od %1 znakova Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Lozinka može sadržavati samo engleska slova (velika i mala), brojeve i posebne simbole (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Lozinka mora sadržavati velika slova, mala slova, brojeve i simbole (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Ne koristi uobičajene riječi i kombinacije kao lozinku Create a strong password please Molim napravite jaku lozinku It does not meet password rules Nije u skladu s pravilima lozinke QObject Control Center Središte upravljanja Activated Aktiviran View Pogled To be activated Biti će aktiviran Activate Aktiviraj Expired Isteklo In trial period U probnom periodu Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Zvuk Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Zvučni efekti SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Učitaj sustav Shut down Isključi Log out Odjava Wake up Probudi Volume +/- Glasnoća +/- Notification Obavijest Low battery Slaba baterija Send icon in Launcher to Desktop Pošalji ikonu iz pokretača na radnu površinu Empty Trash Isprazni smeće Plug in Ukopčaj Plug out Iskopčaj Removable device connected Uklonjivi uređaj je spojen Removable device removed Uklonjivi uređaj je uklonjen Error Greška SpeakerPage Mode Način Output Volume Izlazna glasnoća Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Lijevo Right Desno Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Izlazni uređaj SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Vrati Save Spremi TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Tradicionalna kineska (Kina Hong Kong) Traditional Chinese (Chinese Taiwan) Tradicionalna kineska (Kina Tajvan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Tajvan Kina dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Ova skraćenica se konfliktira s [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Sustav Window Prozor Workspace Radni prostor AssistiveTools Pomoćne alate Custom Prilagođeno None Nijedan ================================================ FILE: translations/dde-control-center_hu.ts ================================================ AccountSettings edit szerkesztés Add new user Új felhasználó hozzáadása Set fullname Teljes nev beállítása Login settings Bejelentkezési beállítások Login without password Jelszó nélkül bejelentkezés Delete current account Jelenlegi fiók törlése Group setting Csoport beállításai Account groups Fiók csoportai done kész Group name Csoport neve Add group Csoport hozzáadása Auto login Automatikus bejelentkezés Account Information Fiók információi Account name, account fullname, account type Fióknév, fiók teljes neve, fióktípus Account name Fióknév Account fullname Fiók teljes neve Account type Fióktípus The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face Találat felvitele I have read and agree to the Olvastam és elfogadom a Disclaimer Monitortájékoztatás Next Következő Face enrolled Találat felvitt Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Mégsem Done Kész Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Környezet Illustration Emoji custom Cartoon style Késcsarnok stílus Dimensional style Flat style Plat stílus Cancel Mégse Save Mentés BatteryPage Screen and Suspend Értekezés és leállítás Turn off the monitor after A képernyő kikapcsolásakor Lock screen after A képernyő zárolásakor Computer suspends after A számítógép leállításakor When the lid is closed Ha zárja be a tapasztalólapot When the power button is pressed Ha nyomja a hajóalattal a hajógombot Low Battery Alacsony bateriamegszint Low battery notification Alacsony bateriamegszint értesítés Auto suspend Automatikus leállítás Auto Hibernate Automatikus hibernálás Low battery threshold Alacsony bateriamegszint határoló Battery Management Bateriamegmentés Display remaining using and charging time Mutassa meg a maradék használati és charge időt Maximum capacity Maximális kapacitás Low battery level Alacsony bateriamegszint Disable Kikapcsolás BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" A Bluetooth kikapcsolva, és a neve megjelenik a "%1" kifejezésben Bluetooth is turned on, and the name is displayed as "%1" A Bluetooth engedélyezve, és a neve megjelenik a "%1" kifejezésben BlueToothDeviceListView Disconnect Kapcsolat lezárása Connect Kapcsolódás Send Files Fájlok küldése Rename Átnevez Remove Device Eszköz eltávolítása Select file Fájl kiválasztása BluetoothCtl Edit Szerkesztés Allow other Bluetooth devices to find this device Távoli Bluetooth-eszközöknek megtalálhatóvá tenni ezt az eszközt To use the Bluetooth function, please turn off A Bluetooth-függvényt használni szeretné, érvényesítenie kell a Airplane Mode Repülési módszert Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Csatlakozva Not connected Nincs csatlakozva BootPage Startup Settings Indítási beállítások You can click the menu to change the default startup items, or drag the image to the window to change the background image. A menü megnyomásával módosíthatja az alapértelmezett indítási beállításokat, vagy az képet a ablakba támasztva módosíthatja a háttérképet. grub start delay grub indítási időtartam theme téma After turning on the theme, you can see the theme background when you turn on the computer A téma bekapcsolása után látja a téma háttért, amikor bekapcsolja a számítógépet Boot menu verification Indítási menü ellenőrzése After opening, entering the menu editing requires a password. A megnyitás után a menü szerkesztése előtt jelszó szükséges. Change Password Jelszó megváltoztatása Change boot menu verification password Indítási menü ellenőrzési jelszó módosítása Set the boot menu authentication password Bejelentkezési jelszó beállítása a betöltés menüben User Name : Felhasználónév : root root New Password : Új jelszó : Required Kötelező Password cannot be empty A jelszó nem lehet üres Passwords do not match A jelszavak nem egyeznek Repeat password: Jelszó újrapróbálkozása: Cancel Mégsem Sure Igen Start animation Kezdő animáció Adjust the size of the logo animation on the system startup interface Rendszertörlési felületen módosítsa a logó animáció méretét Camera Allow below apps to access your camera: Alábbi alkalmazások engedélyezése kamerájának hozzáférésére: CharaMangerModel Fingerprint1 Adatlap1 Fingerprint2 Adatlap2 Fingerprint3 Adatlap3 Fingerprint4 Adatlap4 Fingerprint5 Adatlap5 Fingerprint6 Adatlap6 Fingerprint7 Adatlap7 Fingerprint8 Adatlap8 Fingerprint9 Adatlap9 Fingerprint10 Adatlap10 Scan failed A visszaállítás sikertelen The fingerprint already exists Az adatlap már létezik Please scan other fingers Kérjük, visszaállítsa más ellenőrzőlapokat Unknown error Ismeretlen hiba Scan suspended Visszaállítás megszakítva Cannot recognize Nem tudja azonosítani Moved too fast Túl gyorsan mozgatott Finger moved too fast, please do not lift until prompted A szónyom túl gyorsan mozogott, kérjük, ne emelje fel, mielőtt kérne Unclear fingerprint Nem jól látszóda a szónyom Clean your finger or adjust the finger position, and try again Tisztítsa a szónyomat vagy javítsa át a szónyom helyzetét, és próbálkozjon újra Already scanned Már visszaállítva Adjust the finger position to scan your fingerprint fully A szónyom teljes körű felvételéhez javítsa át a szónyom helyzetét Finger moved too fast. Please do not lift until prompted A szónyom túl gyorsan mozogott. Kérjük, ne emelje fel, mielőtt kérne Lift your finger and place it on the sensor again Emelje fel a szónyomat és helyezze át újra a szensoron Position your face inside the frame Tárolja a személyt a keretben Face enrolled Személy bejelentkezve Position a human face please Kérjük, helyezze át egy emberi személyt Keep away from the camera Távolítsa el az kamerától Get closer to the camera Lépjen a kamerához Do not position multiple faces inside the frame Ne helyezze át több személyt a keretben Make sure the camera lens is clean Ügyeljen arra, hogy a kamerakész a tisztességben legyen Do not enroll in dark, bright or backlit environments Ne regisztráljon sötétségen, fáradtságon vagy háttér-illatos helyeken Keep your face uncovered Ne hajtsa el a személyét Scan timed out A visszaállítás időtúllép Cancel Mégse Camera occupied! ColorAndIcons Accent Color Kötőszín Icon Settings Ikon beállítások Icon Theme Ikon téma Customize your theme icon Töltse be a téma ikont Cursor Theme Kurzor téma Customize your theme cursor Töltse be a téma kurzorát ComfirmDeleteDialog Are you sure you want to delete this account? Biztos, hogy törölni szeretné ezt az fiókot? Delete account directory Fiók könyvtár törlése Cancel Mégsem Delete Töröl ComfirmSafePage Go to settings Beállítások megnyitása Cancel Mégsem Common Common Általános Repeat delay Ismétlés időtartama Short Rövid Long Hosszú Repeat rate Ismétlés sebessége Slow Hamarosan Fast Ráadásan Numeric Keypad Számkódrészlet test here Írd ide a tesztet Caps lock prompt Kisbetűk szükséges Double Click Speed Másodszoros kattintás sebessége Double Click Test Másodszoros kattintás teszt Left Hand Mode Bal kezdő mód Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Nagy méret Small size Kis méret Failed to get root access Nem sikerült a root hozzáférést kapni Please sign in to your Union ID first Kérjük, először jelentkezzen be Union ID-jére Cannot read your PC information Nem lehet olvasni a számítógép információit No network connection Nincs hálózati kapcsolat Certificate loading failed, unable to get root access A tanúság betöltése sikertelen, nem sikerült a root hozzáférést kapni Signature verification failed, unable to get root access A hitelesítő aláírás ellenőrzése sikertelen, nem sikerült a root hozzáférést kapni Agree and Join User Experience Program Elfogadás és felhasználói élményprogram bejovolása The Disclaimer of Developer Mode Fejlesztői mód nyilatkozata Agree and Request Root Access Elfogadás és root hozzáférést kérése Start setting the new boot animation, please wait for a minute A új indítási animáció beállítását indítom el, kérlek, várj egy percig Setting new boot animation finished A új indítási animáció beállítása befejeződött The settings will be applied after rebooting the system A beállítások újraindítás után lesznek alkalmazva Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters A jelszó számokat és betűket kell tartalmazni Password must be between 8 and 64 characters A jelszó hossza 8 és 64 karakter között kell lennie CreateAccountDialog Create a new account Új fiók létrehozása Account type Fiók típusa UserName Felhasználónév Required Szükséges FullName Teljes neve Optional Opcionalis Cancel Mégsem Create account Fiók létrehozása Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Nem feltöltöttél még avatarodat. Kattints vagy tarts ki és húzd az képet. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available elérhető DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Elfogadás és felhasználói élmény program feliratkozása <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Dátum és idő beállítása Date Dátum Year Év Month Hónap Day Nap Time Idő Cancel Mégsem Confirm Megerősítés Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Holnap Yesterday Elteltszámított nap Today Ma %1 hours earlier than local %1 óra korábbi időzóna %1 hours later than local %1 óra későbbi időzóna Space Tér Week Hét First day of week Hét első napja Short date Kis dátum Long date Hosszú dátum Short time Kis idő Long time Hosszú idő Currency symbol Pénznem jele Positive currency Pozitív pénz Negative currency Negatív pénznem Decimal symbol Tizedesjelző Digit grouping symbol Számok csoportosítási jele Digit grouping Számok csoportosítása Page size Oldalszám Example DatetimeWorker Authentication is required to change NTP server A NTP-szerver módosításához azonosítás szükséges Authentication is required to set the system timezone Hitelesítés szükséges a rendszer időzónájának beállításához DccColorDialog Cancel Mégse Save Mentés DccWindow Control Center provides the options for system settings. A rendszergazdai felület a rendszerbeállítások beállítására szolgáló lehetőségeket nyújt. DeepinIDAccountSecurity Bind WeChat WeChat kötése By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. A WeChat kötésével biztonságosan és gyorsan bejuthat a(z) %1 ID-je és helyi fiókjaihoz. Unlinked Köteles Unbinding Kötvényeltetés Link Kötés Are you sure you want to unbind WeChat? Biztosan el szeretné következtetni a WeChat köteleséget? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. A WeChat köteleséget követően nem fogja használhatni a WeChat-ot a QR kódolásra és a(z) %1 ID- vagy helyi fiókjába bejelentkezésre. Let me think it over Elnézést, gondolkozom Local Account Binding Helyi fiók kötése After binding your local account, you can use the following functions: A helyi fiók kötése után a következő funkciókat is használhatja: WeChat Scan Code Login System WeChat kódoló kódfeltöltési rendszer Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Használja a %1 ID-jéhez kötött WeChat-ot a kódolásra és helyi fiókjába bejelentkezésre. Reset password via %1 ID Jelszó visszaállítása a(z) %1 ID segítségével Reset your local password via %1 ID in case you forget it. A(z) %1 ID segítségével visszaállíthatja a helyi jelszavát, ha elérte. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. A fentiek használatához kérjük, lépjen a Kontrollkenterelem - Fiókokra, és engedélyezze a megfelelő beállításokat. DeepinIDInterface deepin deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' Kérjük, válasson alapprogramot a(z) '%1' megnyitására, add hozzáadás Open Desktop file Ábrázolóasztal fájl megnyitása Apps (*.desktop) Alkalmazások (*.desktop All files (*) Minden fájl (* DevelopModePage Root Access Rendszerhelyzés hozzáférés Request Root Access Kérjen rendszerhelyzés hozzáférést After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Az alkalmazó mód bejelentkezése után rendszerhelyzési engedélyeket tudja megkapni, de ez lehetővé teheti a rendszer integritásának károsodását, ezért használja ösztönösen. Allowed Engedélyezve Enter Bejelentkezés Online Online Login UOS ID UOS ID bejelentkezés Offline Kilépés Import Certificate Kártya beimportálása Select file Fájl kiválasztása Your UOS ID has been logged in, click to enter developer mode Az UOS ID-jének bejelentkezése sikerült, kattintson az alkalmazó mód bejelentkezéséhez Please sign in to your UOS ID first and continue Kérjük, először jelentkezzen be az UOS ID-jébe, majd folytassa 1.Export PC Info 1.PC információ exportálása Export Exportálás 3.Import Certificate 3.Importálás Development and debugging options Fejlesztési és hibaelhárítási beállítások System logging level Rendszer naplózás szintje Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. A beállítások módosítása erőfeszítések naplózását erősíti, ami a rendszer teljesítlenségét és/vagy tárhely fogyasztását is csökkenteni foghatja. Off Ki van kapcsolva Debug Hibakeresés Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. A beállítás módosítása felhasználói felület 60 másodpercig folyamatosan folytatódhat. A beállítások érvénybe történéséhez kérjük, ismételd be a számítógépet. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Kijelző Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: A következő alkalmazásokat engedélyezzük a fájloknak és mappáknak hozzáférése számára: Documents Dokumentumok Desktop Asztali munkaállományok Pictures Képek Videos Videók Music Zene Downloads Letöltések folder mappájához FontSizePage Size Méret Standard Font Általános betűtípus Monospaced Font Szövegbetűtípus GeneralPage Power Plans Hozzáállítások Power Saving Settings Törlési beállítások Auto power saving on low battery Automatikus törlési beállítás alacsony bateriamezőn Low battery threshold Alacsony bateriamező határérték Auto power saving on battery Automatikus törlési beállítás bateriamezőn Wakeup Settings Felbukkanási beállítások Password is required to wake up the computer Jelszó szükséges a számítógép felbukkanásához Password is required to wake up the monitor Jelszó szükséges a képernyő felbukkanásához Shutdown Settings Kilépés beállításai Scheduled Shutdown Műournemouth kilépés Time Idő Repeat Ismétlés Once Egyszer Every day Minden nap Working days Munka napjai Custom Time Egyéni idő Decrease screen brightness on power saver Többenergetési mód során csökkentse az élőkép fényintensitását GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ", ... ... InterfaceEffectListview Optimal Performance Optimalizált teljesípmutatás Balance Dinamizmus Best Visuals Legjobb nézet Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language Nyelv done kész edit szerkesztés Other languages Más nyelvek add hozzáadás Region Terület Area Terület Operating system and applications may provide you with local content based on your country and region A rendszer és alkalmazások lehetővé teszik, hogy hozzáférjen a helyi tartalomhoz a személyes országa és területének alapján. Operating system and applications may set date and time formats based on regional formats A rendszer és alkalmazások a helyi formátumok alapján beállíthatják a dátum- és időformátumokat. Regional format LangsChooserDialog Add language Nyelv hozzáadása Search Keresés Cancel Mégse Add Hozzáadás LoginMethod Login method Bejelentkezési metódus Password, wechat, biometric authentication, security key Jelszó, wechat, betavonási hitelesítés, biztonsági kulcs Password Jelszó Modify password Jelszó módosítása Validity days Érvényes időpont Always M Mindig Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Automatikus hangerős elhárítás Input Volume Beviteli hangerő Input Level Beviteli szint Input Bevitel No input device for sound found Nincs hangbeviteli eszköz található Input Device Bemeneti eszköz Mouse Mouse and Touchpad Egér és touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices Egyéb eszközök NativeInfoPage UOS UOS Computer name Számítógép neve It cannot start or end with dashes Nem lehet kezdő- vagy zárójelekkal kezdődő vagy vegződő OS Name Operációs rendszer neve Version Verzió Edition Kiadás Type Típus bit bit Authorization Engedélyezés System installation time Rendszergazdai telepítés időpontja Kernel Kernel Graphics Platform Grafikus platform Processor Processzor Memory Memória 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Egyéb eszközök Show Bluetooth devices without names Mutass Bluetooth-eszközöket, amelyek nem rendelkeznek nevükkel PasswordLayout Current password Jelenlegi jelszó Required Kötelező Weak Könnyű Medium Közepes Strong Súlyos Repeat Password Jelszó újrapróbálkozása Password hint Jelszó segítsége Optional Opszcionális Password cannot be empty A jelszó nem lehet üres Passwords do not match A jelszavak nem egyeznek The hint is visible to all users. Do not include the password here. A segítség az összes felhasználó számára látható. Nem írd a jelszót ide. New password New password should differ from the current one A új jelszó nem szabad ugyanazt használni, mint az aktuális The password cannot be the same as the username. PasswordModifyDialog Modify password Jelszó módosítása Reset password Jelszó visszaállítása Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. A jelszónak legalább 8 karakter hosszúnak kell lennie, és tartalmaznia kell legalább 3 az alábbi közül: nagybetűk, kisbetűk, számok és szimbólumok. Ez a típusú jelszó biztonságosabb. Resetting the password will clear the data stored in the keyring. A jelszó visszaállítása törli az adatokat a kulcszázalékban. Cancel Mégse Personalization Personalization Megjelenés PersonalizationInterface Light Kicsép Auto Automatikus Dark Sötét Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Egyéni PluginArea Plugin Area Beépülők területe Select which icons appear in the Dock Válaszd ki mely ikonok jelennek meg a Dock-on Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Leállítás Suspend Halt Hibernate Hibernate Turn off the monitor Kapcsold le a képernyőt Show the shutdown Interface Mutasd a leállítási felületet Do nothing Semmi sem PowerPage Screen and Suspend Éparítás és kihúzás Turn off the monitor after A képernyő kikapcsolása után Lock screen after Zárolap megnyitása után Computer suspends after A számítógép szükségbe-váltása után When the lid is closed Amikor zárja be a lapot When the power button is pressed Amikor a hozzáálló gombra nyomunk PowerPlansListview High Performance Magas teljesítmény Balance Performance Egyenletes teljesítmény Aggressively adjust CPU operating frequency based on CPU load condition A CPU munkaállapotán alapuló agresszív CPU működési gyakorisági módosítás Balanced Egyensúlyos Power Saver Táplálkozó Prioritize performance, which will significantly increase power consumption and heat generation A teljesítmény prioritizálása, ami jelentősen növeli az energiafelhasználást és a hőtényt Balancing performance and battery life, automatically adjusted according to usage A teljesítmény és a bateriaválasztás egyensúlyozása, automatikusan a használat alapján módosítva Prioritize battery life, which the system will sacrifice some performance to reduce power consumption A bateriaválasztás prioritizálása, ami jelentős teljesítményt terjeszt a hőtény csökkentésére PowerWorker Minutes perc Hour óra Never Soha Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Adatvédelmi politika Copy Link Address PwqualityManager Password cannot be empty A jelszó nem lehet üres Password must have at least %1 characters A jelszó legalább %1 karakterből állnia kell Password must be no more than %1 characters A jelszó %1 karakternél hosszabb nem lehet Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A jelszó csak angol betűket (kis- és nagybetűs), számokat vagy speciális karaktereket tartalmazhat ( ~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please Kérjük, ne legyen több %1 palindrom betű No more than %1 monotonic characters please Kérjük, ne legyen több %1 monoton betű No more than %1 repeating characters please Kérjük, ne legyen több %1 ismétlődő betű Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A jelszó tartalmaznia kell nagybetűket, kisbetűket, számokat és szimbolusokat (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters A jelszó nem tartalmazhat több, mint 4 palindromos karaktert Do not use common words and combinations as password Ne használj négyzetes szavakat és kombinációkat a jelszóként Create a strong password please Kérlek, hozz létre egy erős jelszót It does not meet password rules Nem felel meg a jelszavaz szabályai QObject Control Center Kontrolkör Activated Aktivált View Nézés To be activated Aktiválandó Activate Aktiválás Expired Lejárt In trial period Próbaverzió időszakban Trial expired Próbaverzió lejárt dde-control-center dde-control-center Touch Screen Settings Élőképernyő beállítások The settings of touch screen changed Az élőképernyő beállításai módosultak This system wallpaper is locked. Please contact your admin. Ez a rendszer háttérkép zárolt. Kérjük, lépjen kapcsolatba a vezéreléssel. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Keresés Default formats Alapértelmezett formátumok First day of week Hét első napja Short date Kis dátum Long date Hosszú dátum Short time Kis idő Long time Hosszú idő Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview nézés Personalized screensaver setting beállítás idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search Keresés No search results ShortcutSettingDialog Add custom shortcut Egyedi捷径 Name: Név: Required Kötelező Command: Parancs: Shortcut Gyorsbillentyű None Nincs Cancel Mégse Add Hozzáadás The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts Gyorsbillentyűk System shortcut, custom shortcut Rendszer快捷键, 可定制快捷键 Search shortcuts Gyorsbillentyűk keresése done kész edit módosítás Click Kattintson Cancel Mégse or vagy Replace Helyettesítés Restore default Visszaállítás alapértelmezett Add custom shortcut Egyedi gyorsbillentyű hozzáadása please enter a new shortcut key Sound Sound Hang Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Kimenő eszközök Select whether to enable the devices Az eszközök engedélyezését kiválasztja Input Devices Beviteli eszközök SoundEffectsPage Sound Effects Hang hatások SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Indítás Shut down Kilépés Log out Kijelentkezés Wake up Felbukkanás Volume +/- Hangerő +/− Notification Értesítés Low battery Alacsony állapot Send icon in Launcher to Desktop Ícone küldése a futtató panelből a asztali felületre Empty Trash Rádi az üres íránya Plug in Beírás Plug out Kijelentkezés Removable device connected Távolítható eszköz csatlakoztatva Removable device removed Távolítható eszköz kijelentkezve Error Hiba SpeakerPage Mode Mód Output Volume Kimenő hangerő Volume Boost Hangerő növelés If the volume is louder than 100%, it may distort audio and be harmful to output devices Ha a hangerő nagyobb, mint 100%, ez a hang lehetségesen megszegheti, és károsíthatja a kimenő eszközöket Left Bal Right Jobb Output Kimenés No output device for sound found Nem található hang kimeneti eszköz Left Right Balance Bal és jobb egyenlítés Merge left and right channels into a single channel Bal és jobb kanálak összefogása egy kanálba Whether the audio will be automatically paused when the current audio device is unplugged Lehet, hogy az audio automatikusan megakadásba lép, ha az aktuális audio eszköz kihúzva van Mono Audio Auto Pause Output Device Kimeneti eszköz SyncInfoListModel Sound Hang Power Műtét Mouse Talajgép Update Frissítés Screensaver Táblazat System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers Több tapasztalat TimeAndDate Auto sync time Idő automatikus szinkronizálása Ntp server Ntp szerver System date and time Szoftver naptár és idő Customize Személyre szabás Settings Beállítások Server address Szerver címe Required Kötelező The ntp server address cannot be empty Az ntp szerver címe nem lehet üres Use 24-hour format 24 órás formátum használata system time zone szoftver időzóna Timezone list Időzóna lista Add TimeRange from tól to ig TimeoutDialog Save the display settings? A megjelenés beállításainak mentése? Settings will be reverted in %1s. A beállítások visszaállnak %1 second múlva. Revert Visszaállítás Save Mentés TimezoneDialog Add time zone Időtartomány hozzáadása Determine the time zone based on the current location Az időtartomány beállítása a jelenlegi hely alapján Time zone: Időtartomány: Nearest City: Legközelebbi város: Cancel Mégsem Save Mentés TouchScreen TouchScreen Képernyőtájékoztató Set up here when connecting the touch screen Képernyőtájékoztató bekapcsolásakor beállítása ide Touchpad Basic Settings Alapbeállítások Touchpad Képernyőtájékoztató Pointer Speed Kijelző sebessége Slow Hamarosan Fast Ráadású Disable touchpad during input Bemenő időszak során a képernyőtájékoztató letiltása Tap to Click Kattintás a kattintáshoz Natural Scrolling Természetes olvasás Three-finger gestures Három-finger jelzések Four-finger gestures Négy-finger jelzések Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Felhasználói élmény programhoz joind Copy Link Address VerifyDialog Security Verification Biztonsági ellenőrzés The action is sensitive, please enter the login password first Az eljárás érzékeny, először bejelentkezési jelszót adjon meg 8-64 characters 8-64 karakter Forgot Password? Elfelejtett jelszó? Cancel Mégsem Confirm Megerősítés Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper háttérkép My pictures Egyéni képek System Wallpaper Rendszer háttérkép Solid color wallpaper Egyenlő színű háttérkép Customizable wallpapers Tövábbi háttérképek fill style Feltöltés stílus Automatic wallpaper change Automatikus háttérkép cseréje never soha 30 second 30 másodperc 1 minute 1 perc 5 minute 5 perc 10 minute 10 perc 15 minute 15 perc 30 minute 30 perc login Bejelentkezés wake up Indítás Live Wallpaper Élő tapasztalat 1 hour 1 óra System Wallpapers WallpaperSelectView unfold eltalálható Set lock screen Blokkoló képernyő beállítása Set desktop Máscsillag beállítása show all - %1 items Add Picture WindowEffectPage Interface and Effects Felület és hatások Window Settings Ablak beállításai Window rounded corners Ablak feje körbe vonva None Nincs Small Kicsi Large Nagy Enable transparent effects when moving windows Ablakok mozgatásakor engedélyezzék a transzparenciájú hatásokat Window Minimize Effect Ablak csökkentési hatás Scale Skálázás Magic Lamp Természetes nyomkövetés Opacity Álmosított szín Low Alacsony High Magas Scroll Bars Kattintáscsatornák Show on scrolling Kezdőlapon megjelenítés Keep shown Tartás megjelenítésével Compact Display Összetettek megjelenítése If enabled, more content is displayed in the window. Ha engedélyezve, több tartalom jelenik meg a ablakban. Title Bar Height Címmező magassága Only suitable for application window title bars drawn by the window manager. Csak azokhoz az alkalmazás ablakcímzónak megfelel, amelyeket a ablakkezelő rajzol. Extremely small Rendkívül kicsi Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Hagyományos kínai (Kínai Hong Kong) Traditional Chinese (Chinese Taiwan) Hagyományos kínai (Kínai Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Kínai Taiwan dccV25::AccountsController Username must be between 3 and 32 characters Az üzenetszín neve 3 és 32 karakter között kell lennie The first character must be a letter or number Az első karakter betű vagy számnak kell lennie Your username should not only have numbers Az üzenetszín nevében nem csak számokat lehet The username has been used by other user accounts Ez az üzenetszín név már használta más felhasználói fiókok The full name is too long A teljes nev túl hosszú The full name has been used by other user accounts Ez a teljes nev már használta más felhasználói fiókok Wrong password Hibás jelszó Standard User Közönségi felhasználó Administrator Kezelő Customized Egyéni dccV25::AccountsWorker Your host was removed from the domain server successfully Eltávolították a gép a dománis szerverről sikeresen Your host joins the domain server successfully A gép sikeresen csatlakozott a dománis szerverhez Your host failed to leave the domain server A gép sikertelenül kilépett a dománis szerverről Your host failed to join the domain server A gép sikertelenül csatlakozott a dománis szerverhez AD domain settings AD dománis beállítások Password not match Jelszó nem egyezik dccV25::AvatarTypesModel Dimensional Tizenegydimenziós Flat Tizedikdimenziós dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Ez a raktárkézés konfliktusba kerül [%1] címmel dccV25::PwqualityManager Password cannot be empty A jelszó nem lehet üres Password must have at least %1 characters A jelszó legalább %1 karakterből állnia kell Password must be no more than %1 characters A jelszó %1 karakternél rövidebbnek kell lennie Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A jelszó csak angol betűk (kis- és nagybetűk különbségére számítva), számok vagy speciális jelek ( ~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) tartalmazható (különbségre számítva) No more than %1 palindrome characters please Kérem, ne legyen több, mint %1 palindrom karakter No more than %1 monotonic characters please Kérem, ne legyen több, mint %1 monoton karakter No more than %1 repeating characters please Kérem, ne legyen több, mint %1 ismétlődő karakter Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A jelszó nagybetűk, kisbetűk, számok és speciális jelek ( ~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) tartalmaznia kell Password must not contain more than 4 palindrome characters A jelszó nem tartalmazhat több, mint 4 palindrom karaktert Do not use common words and combinations as password Ne használja közönséges szavakat és kombinációkat a jelszóként Create a strong password please Kérem, hozzon létre egy széles körben használható jelszót It does not meet password rules Ez nem felel meg a jelszó szabályoknak At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Rendszer Window Ablak Workspace Munkaterület AssistiveTools Segítő eszközök Custom Egyéni None Nincs ================================================ FILE: translations/dde-control-center_hy.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Չեղարկել Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Չեղարկել Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Չեղարկել Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Չեղարկել Save Պահել BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Չեղարկել Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Չեղարկել Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Չեղարկել Delete ComfirmSafePage Go to settings Cancel Չեղարկել Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Չեղարկել Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Չեղարկել Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Չեղարկել Save Պահել DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Չեղարկել Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Չեղարկել Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Ձախ Right Աջ Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Չեղարկել Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Չեղարկել Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Ընտրովի PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Անջատել Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Ղեկավարման Կենտրոն Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Չեղարկել Save Պահել Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Չեղարկել Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Չեղարկել Save Պահել ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None None Cancel Չեղարկել Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save Պահել click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel Չեղարկել or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Անջատել Log out Դուրս գալ համակարգից Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Ձախ Right Աջ Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save Պահել TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Չեղարկել Save Պահել TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Չեղարկել Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System System Window Window Workspace Workspace AssistiveTools AssistiveTools Custom Custom None None ================================================ FILE: translations/dde-control-center_id.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Tersambung Not connected Tidak tersambung BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Jari digerakkan terlalu cepat, mohon jangan angkat sampai diminta Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Batal Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Tampilan Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Volume Masukan Input Level Level Masukan Input No input device for sound found Input Device Mouse Mouse and Touchpad Tetikus dan Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personalisasi PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Kustom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Sandi lewat tidak boleh kosong Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Pusat Kontrol Activated View Lihat To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Suara Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Efek Suara SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Hidupkan Shut down Matikan Log out Keluar Wake up Bangunkan Volume +/- Volume +/- Notification Notifikasi Low battery Baterai hampir habis Send icon in Launcher to Desktop Kirim ikon di Launcher ke Desktop Empty Trash Kosongkan Tempat Sampah Plug in Masukan Plug out Keluarkan Removable device connected Perangkat removable terpasang Removable device removed Perangkat removable dilepas Error Galat SpeakerPage Mode Mode Output Volume Volume Keluaran Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Kiri Right Kanan Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Pulihkan Save Simpan TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Tionghoa Tradisional (Hong Kong Tionghoa) Traditional Chinese (Chinese Taiwan) Tionghoa Tradisional (Taiwan Tionghoa) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan Tionghoa dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Pintasan ini bertentangan dengan [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Sistem Window Jendela Workspace Ruang kerja AssistiveTools Alat Bantu Custom Kustom None Tidak ada ================================================ FILE: translations/dde-control-center_id_ID.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_it.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Annulla Done Fatto Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Connesso Not connected Non connesso BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Impronta1 Fingerprint2 Impronta2 Fingerprint3 Impronta3 Fingerprint4 Impronta4 Fingerprint5 Impronta5 Fingerprint6 Impronta6 Fingerprint7 Impronta7 Fingerprint8 Impronta8 Fingerprint9 Impronta9 Fingerprint10 Impronta10 Scan failed Scansione fallita The fingerprint already exists L'impronta esiste già Please scan other fingers Scansiona un altro dito Unknown error Errore sconosciuto Scan suspended Scansione sospesa Cannot recognize Riconoscimento non riuscito Moved too fast L'hai mosso troppo in fretta Finger moved too fast, please do not lift until prompted Il dito è stato mosso troppo rapidamente, non spostarlo sino a quando non riceverai ulteriori istruzioni Unclear fingerprint Impronta non chiara Clean your finger or adjust the finger position, and try again Pulisci il lettore o riposiziona il dito prima di riprovare Already scanned Già scansionato Adjust the finger position to scan your fingerprint fully Sistema la posizione del dito per scannerizzare l'impronta correttamente Finger moved too fast. Please do not lift until prompted Movimento del dito troppo rapito, non spostarlo sino a nuova istruzione Lift your finger and place it on the sensor again Posiziona il dito nuovamente sul sensore Position your face inside the frame Posiziona il viso al centro dell'inquadratura Face enrolled Viso acquisito Position a human face please Posiziona il viso per cortesia Keep away from the camera Allontanati dalla webcam Get closer to the camera Avvicinati alla webcam Do not position multiple faces inside the frame Non posizionare più visi all'interno dell'inquadratura Make sure the camera lens is clean Assicurati che l'obiettivo della webcam sia pulito Do not enroll in dark, bright or backlit environments Non registrarti in ambienti bui, troppo luminosi o retroilluminati Keep your face uncovered Mostra il tuo viso Scan timed out Scansione fuori tempo limite Cancel Annulla Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Autenticazione necessaria per cambiare il server NTP Authentication is required to set the system timezone Autenticazione richiesta per impostare l'orario di Sistema. DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin Community, localizzazione italiana a cura di Massimo A. Carofano Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD, localizzazione italiana a cura di Massimo A. Carofano MicrophonePage Automatic Noise Suppression Soppressione automatica del rumore Input Volume Volume di ingresso Input Level Livello input Input No input device for sound found Input Device Dispositivo input Mouse Mouse and Touchpad Mouse e Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personalizza PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Personalizzazione PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty La password non può essere assente Password must have at least %1 characters La password deve contenere almeno %1 caratteri Password must be no more than %1 characters La password non può superare %1 caratteri Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) La password deve contenere lettere Italiane (case-sensitive), numeri o caratteri speciali (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Non più di %1 caratteri palindromi per favore No more than %1 monotonic characters please Non più di %1 caratteri monotoni per favore No more than %1 repeating characters please Non più di %1 caratteri ripetuti per favore Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) La password deve contenere lettere maiuscole, minuscole, numeri e simboli (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters La password non può contenere più di 4 caratteri palindromi Do not use common words and combinations as password Non utilizzare parole comuni e le loro combinazioni come password Create a strong password please Per cortesia, crea una password più sicura It does not meet password rules Non rispetta le regole di password QObject Control Center Centro di Controllo Activated Attivato View Visualizza To be activated Da attivare Activate Attiva Expired Scaduto In trial period Periodo di prova Trial expired Periodo di prova scaduto dde-control-center Touch Screen Settings Impostazioni Touch Screen The settings of touch screen changed Le impostazioni del Touch Screen sono state modificate This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Audio Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Effetti audio SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Accensione Shut down Spegni Log out Logout Wake up Risveglio Volume +/- Volume +/- Notification Notifiche Low battery Batteria scarica Send icon in Launcher to Desktop Invia le app del Launcher sul Desktop Empty Trash Pulizia del Cestino Plug in Collegato alla rete elettrica Plug out Scollegato dalla rete Removable device connected Collegamento dispositivi removibili Removable device removed Rimozione dispositivi removibili Error Errore SpeakerPage Mode Modalità Output Volume Volume di uscita Volume Boost Amplificazione volume If the volume is louder than 100%, it may distort audio and be harmful to output devices Se il volume è superiore al 100%, potrebbe distorcere l'audio e danneggiare i dispositivi di riproduzione Left Sinistra Right Destra Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Dispositivo output SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Salvare le impostazioni dello schermo? Settings will be reverted in %1s. Le impostazioni saranno ripristinate in %1s. Revert Inverti Save Salva TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Cinese tradizionale (Cina di Hong Kong) Traditional Chinese (Chinese Taiwan) Cinese tradizionale (Cina di Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Cina di Taiwan dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Questo collegamento è in conflitto con [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Sistema Window Finestra Workspace Workspace AssistiveTools AssistiveTools Custom Custom None Nessuno ================================================ FILE: translations/dde-control-center_ja.ts ================================================ AccountSettings edit 編集 Add new user 新しいユーザーを追加 Set fullname フルネームを設定 Login settings ログイン設定 Login without password パスワードレスログイン Delete current account 現在のアカウントを削除 Group setting グループ設定 Account groups アカウントグループ done 完了 Group name グループ名 Add group グループを追加 Auto login 自動ログイン Account Information アカウント情報 Account name, account fullname, account type アカウント名、アカウントのフルネーム、アカウントの種類 Account name アカウント名 Account fullname アカウントのフルネーム Account type アカウントの種類 The full name is too long フルネームが長すぎます Group names should be no more than 32 characters グループ名は32文字以下にしてください Group names cannot only have numbers グループ名を数字のみにすることはできません Use letters,numbers,underscores and dashes only, and must start with a letter 文字、数字、アンダーバー、ハイフンのみを使用し、文字から始まるようにしてください The group name has been used このグループ名はすでに使用されています quick login, Auto login, login without password クイックログイン、自動ログイン、パスワードレスログイン Undo 元に戻す Redo やり直す Cut 切り取り Copy コピー Paste 貼り付け Select All すべて選択 Quick login クイックログイン Accounts Account アカウント Account manager アカウント管理 AccountsMain Other accounts その他のアカウント AddFaceinfoDialog Enroll Face 顔を登録する I have read and agree to the 次を読みこれに同意します Disclaimer 免責事項 Next 次へ Face enrolled 顔を登録しました Failed to enroll your face 顔を登録できませんでした Done 完了 Cancel キャンセル Retry Enroll 登録を再試行 Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. 「生体認証」とは、UnionTech Software Technology Co., Ltd.が提供するユーザー本人認証機能です。「生体認証」では、収集した生体データとデバイスに保存されている生体データを照合し、その照合結果に基づいてユーザーの本人確認を行います。 UnionTech Software Technology Co., Ltd.は、お客様の生体認証情報を収集またはアクセスすることはありません。生体認証情報はお客様のローカルデバイスに保存されます。個人用デバイスでのみ生体認証を有効にし、関連する操作にはご自身の生体認証情報を使用してください。また、当該デバイス上の他者の生体認証情報は速やかに無効化または削除してください。そうしないと、当該情報に起因するリスクを負うことになります。 UnionTech Software Technology Co., Ltd.は、生体認証のセキュリティ、精度、安定性の向上に尽力しております。しかしながら、環境、設備、技術、その他の要因やリスク管理上の理由により、生体認証が一時的に成功するという保証はございません。そのため、生体認証をUOSへのログインの唯一の方法としないでください。生体認証のご利用に関してご質問やご提案がございましたら、UOSの「サービスとサポート」からフィードバックをお寄せください。 AddFingerDialog Cancel キャンセル Done 完了 Enroll Finger 指紋を登録する Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. 登録したい指を指紋センサーに置き、下から上にスワイプしてください。操作が完了したら、指を離してください。 I have read and agree to the 次を読みこれに同意します Disclaimer 免責事項 Next 次へ Retry Enroll 登録を再試行 "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. 「生体認証」とは、UnionTech Software Technology Co., Ltd.が提供するユーザー本人認証機能です。「生体認証」では、収集した生体データとデバイスに保存されている生体データを照合し、その照合結果に基づいてユーザーの本人確認を行います。 UnionTech Software Technology Co., Ltd.は、お客様の生体認証情報を収集またはアクセスすることはありません。生体認証情報はお客様のローカルデバイスに保存されます。個人用デバイスでのみ生体認証を有効にし、関連する操作にはご自身の生体認証情報を使用してください。また、当該デバイス上の他者の生体認証情報は速やかに無効化または削除してください。そうしないと、当該情報に起因するリスクを負うことになります。 UnionTech Software Technology Co., Ltd.は、生体認証のセキュリティ、精度、安定性の向上に尽力しております。しかしながら、環境、設備、技術、その他の要因やリスク管理上の理由により、生体認証が一時的に成功するという保証はございません。そのため、生体認証をUOSへのログインの唯一の方法としないでください。生体認証のご利用に関してご質問やご提案がございましたら、UOSの「サービスとサポート」からフィードバックをお寄せください。 AddIrisDialog Enroll Iris 虹彩を登録 I have read and agree to the 次を読みこれに同意します Disclaimer 免責事項 Next 次へ Done 完了 Cancel キャンセル Retry Enroll 登録を再試行 Iris enrolled 虹彩を登録しました Failed to enroll your iris 虹彩を登録できませんでした "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. 「生体認証」とは、UnionTech Software Technology Co., Ltd.が提供するユーザー本人認証機能です。「生体認証」では、収集した生体データとデバイスに保存されている生体データを照合し、その照合結果に基づいてユーザーの本人確認を行います。 UnionTech Software Technology Co., Ltd.は、お客様の生体認証情報を収集またはアクセスすることはありません。生体認証情報はお客様のローカルデバイスに保存されます。個人用デバイスでのみ生体認証を有効にし、関連する操作にはご自身の生体認証情報を使用してください。また、当該デバイス上の他者の生体認証情報は速やかに無効化または削除してください。そうしないと、当該情報に起因するリスクを負うことになります。 UnionTech Software Technology Co., Ltd.は、生体認証のセキュリティ、精度、安定性の向上に尽力しております。しかしながら、環境、設備、技術、その他の要因やリスク管理上の理由により、生体認証が一時的に成功するという保証はございません。そのため、生体認証をUOSへのログインの唯一の方法としないでください。生体認証のご利用に関してご質問やご提案がございましたら、UOSの「サービスとサポート」からフィードバックをお寄せください。 Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication 生体認証 AuthenticationMain Biometric Authentication 生体認証 Face Up to 5 facial data can be entered 最大5つの顔データを登録できます Fingerprint 指紋 Identifying user identity through scanning fingerprints 指紋をスキャンしてユーザーの本人確認を行います Iris 虹彩 Identity recognition through iris scanning 虹彩をスキャンして認証を行います Use letters, numbers and underscores only, and no more than 15 characters 文字、数字、アンダーバーのみを使用し、15文字以下にしてください Use letters, numbers and underscores only 文字、数字、アンダーバーのみを使用してください No more than 15 characters 15文字以下にしてください This name already exists この名前はすでに存在します Add a new %1 ... %1 を追加... The name cannot be empty 名前を空白にすることはできません AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first "自動ログイン"は1つのアカウントでのみ利用できます。このアカウントで行う場合は、"%1"で無効にしてください。 Ok OK AvatarSettingsDialog Images 画像 Human Animal 動物 Scenery シーン Illustration イラスト Emoji 絵文字 custom カスタム Cartoon style カートゥーン風 Dimensional style 写真風 Flat style フラット Cancel キャンセル Save 保存 BatteryPage Screen and Suspend ディスプレイとサスペンド Turn off the monitor after ディスプレイの電源を切るまでの時間 Lock screen after ロックするまでの時間 Computer suspends after コンピューターをサスペンドするまでの時間 When the lid is closed カバーを閉じたときの動作 When the power button is pressed 電源ボタンを押したときの動作 Low Battery バッテリー残量低下時 Low battery notification バッテリー残量低下通知 Auto suspend 自動サスペンド Auto Hibernate 自動ハイバネート Low battery threshold バッテリー残量低下のしきい値 Battery Management バッテリー管理 Display remaining using and charging time 残り稼働可能時間と残り充電時間を表示する Maximum capacity 最大容量 Low battery level バッテリー残量低下時の動作 Disable 無効 BlueTooth Bluetooth settings, devices Bluetooth設定、デバイス Bluetooth Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetoothはオフです。このデバイスは"%1"として表示されます Bluetooth is turned on, and the name is displayed as "%1" Bluetoothはオンです。このデバイスは"%1"として表示されます BlueToothDeviceListView Disconnect 切断 Connect 接続 Send Files ファイルを送信 Rename 名前を変更 Remove Device デバイスを削除 Select file ファイルを選択 BluetoothCtl Edit 編集 Allow other Bluetooth devices to find this device 他のBluetoothデバイスがこのデバイスを検出するのを許可する To use the Bluetooth function, please turn off Bluetoothを利用するには次の機能をオフにしてください Airplane Mode 機内モード Bluetooth name cannot exceed 64 characters Bluetooth名は64文字以下にしてください BluetoothDeviceModel Connected 接続済み Not connected 未接続 BootPage Startup Settings 起動設定 You can click the menu to change the default startup items, or drag the image to the window to change the background image. メニューをクリックして、デフォルトで起動するアイテムを変更するか、ウィンドウに画像をドラッグして背景を変更することができます。 grub start delay grubの開始を遅延 theme テーマ After turning on the theme, you can see the theme background when you turn on the computer テーマを有効にすると、コンピューターの起動時に指定した背景が表示されるようになります Boot menu verification ブートメニュー認証 After opening, entering the menu editing requires a password. 開いた後にメニューを編集するにはパスワードを必要とする Change Password パスワードを変更 Change boot menu verification password ブートメニュー認証パスワードを変更 Set the boot menu authentication password ブートメニュー認証パスワードを設定 User Name : ユーザー名: root root New Password : 新しいパスワード: Required 必須 Password cannot be empty パスワードは空欄にできません Passwords do not match パスワードが一致しません Repeat password: パスワードを再入力: Cancel キャンセル Sure Start animation 起動アニメーション Adjust the size of the logo animation on the system startup interface 起動ロゴのサイズを変更できます Camera Allow below apps to access your camera: カメラへのアクセスを許可するアプリケーション: CharaMangerModel Fingerprint1 指紋1 Fingerprint2 指紋2 Fingerprint3 指紋3 Fingerprint4 指紋4 Fingerprint5 指紋5 Fingerprint6 指紋6 Fingerprint7 指紋7 Fingerprint8 指紋8 Fingerprint9 指紋9 Fingerprint10 指紋10 Scan failed スキャンできませんでした The fingerprint already exists この指紋は既に登録されています Please scan other fingers 他の指でお試しください Unknown error 不明なエラーです Scan suspended スキャンを一時停止しました Cannot recognize 認識できません Moved too fast 動かすのが速すぎます Finger moved too fast, please do not lift until prompted 指を動かすのが速すぎます。表示が出るまで離さないでください Unclear fingerprint 指紋が不明瞭です Clean your finger or adjust the finger position, and try again 指をキレイにするか、位置を調節してもう一度お試しください Already scanned スキャンされました Adjust the finger position to scan your fingerprint fully 指紋が十分にスキャンできるように、指の位置を調節してください Finger moved too fast. Please do not lift until prompted 指を動かすのが速すぎます。表示が出るまで離さないでください Lift your finger and place it on the sensor again 指をセンサーから離して、もう一度置いてください Position your face inside the frame 顔がフレーム内に映るようにしてください Face enrolled 顔を登録しました Position a human face please 顔の位置を調節してください Keep away from the camera カメラとの距離を保ってください Get closer to the camera もう少しカメラに近づいてください Do not position multiple faces inside the frame フレーム内に複数の顔が入らないようにしてください Make sure the camera lens is clean カメラのレンズが汚れていないことを確認してください Do not enroll in dark, bright or backlit environments 暗すぎます。明るい/逆光のない環境で登録してください Keep your face uncovered 顔が覆われないようにしてください Scan timed out スキャンがタイムアウトしました Cancel キャンセル Camera occupied! カメラが占有されています! ColorAndIcons Accent Color アクセントカラー Icon Settings アイコン設定 Icon Theme アイコンテーマ Customize your theme icon アイコンテーマをカスタマイズ Cursor Theme カーソルテーマ Customize your theme cursor カーソルをカスタマイズ ComfirmDeleteDialog Are you sure you want to delete this account? このアカウントを削除してもよろしいですか? Delete account directory アカウントのディレクトリも削除する Cancel キャンセル Delete 削除 ComfirmSafePage Go to settings 設定に移動 Cancel キャンセル Common Common 一般 Repeat delay 繰り返し時間 Short 短い Long 長い Repeat rate 繰り返し率 Slow 遅い Fast 速い Numeric Keypad テンキー test here ここで確認できます Caps lock prompt Caps Lockプロンプト Double Click Speed ダブルクリックの速度 Double Click Test ダブルクリックの確認 Left Hand Mode 左利きモード Enable Keyboard キーボードを有効化 General 一般 Scrolling Speed スクロールの速度 CommonInfoMain Boot Menu 起動メニュー Manage your boot menu 起動メニューを管理 Developer root permission management 開発者向けroot権限管理 Developer Options 開発者向けオプション Developer debugging options 開発者向けデバッグオプション CommonInfoWork Large size 大サイズ Small size 小サイズ Failed to get root access rootアクセスを取得できませんでした Please sign in to your Union ID first まずUnion IDにサインインしてください Cannot read your PC information PC情報を読み込めません No network connection ネットワーク接続がありません Certificate loading failed, unable to get root access 証明書を読み込めませんでした。rootアクセスを取得できません Signature verification failed, unable to get root access 署名を確認できませんでした。rootアクセスを取得できません Agree and Join User Experience Program 同意してユーザーエクスペリエンスプログラムに参加 The Disclaimer of Developer Mode 開発者向けモードの免責事項 Agree and Request Root Access 同意してrootアクセスを要求 Start setting the new boot animation, please wait for a minute 起動アニメーションの設定を変更しています。しばらくお待ちください。 Setting new boot animation finished 起動アニメーションの設定が変更されました The settings will be applied after rebooting the system 設定は再起動後に適用されます Restart now 今すぐ再起動 Dismiss 無視 Restart device to finish applying Solid System Read-Only Protection settings Solidシステム読み取り専用保護の設定を適用するには、再起動してください。 ConfirmManager Password must contain numbers and letters パスワードは数字と文字を含む必要があります Password must be between 8 and 64 characters パスワードは8文字以上64文字以下にする必要があります CreateAccountDialog Create a new account アカウントを作成 Account type アカウントの種類 UserName ユーザー名 Required 必須 FullName フルネーム Optional 任意 Cancel キャンセル Create account アカウントを作成 Username cannot exceed 32 characters ユーザー名は32文字以下にしてください Username can only contain letters, numbers, - and _ ユーザー名には文字、数字、 -と_が使用できます Full name cannot exceed 32 characters フルネームは32文字以下にしてください Full name cannot contain colons フルネームにコロンを含めることはできません CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. アバターはまだアップロードされていません。ドラッグアンドドロップで画像をアップロードできます。 The uploaded file type is incorrect, please upload it again アップロードされたファイルの形式が正しくありません。もう一度お試しください。 DCC_NAMESPACE::SystemInfoModel available 利用可能 DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program 同意してユーザーエクスペリエンスプログラムに参加 <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>当社は、お客様の個人情報がお客様にとって極めて重要であることを深く認識しております。そのため、個人情報の収集・利用・共有・移転・公開・保管に関する方針を定めたプライバシーポリシーを策定しております。</p><p>最新のプライバシーポリシーは、<a href="%1">こちら</a>から、もしくは<a href="%1">%1</a>にアクセスすることでご覧いただけます。当社のお客様のプライバシーに関する取り組みと方針を注意深くお読みいただき、十分にご理解いただきますよう、お願いいたします。本件に関するご質問は、こちらにご連絡ください: %2</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">ユーザーエクスペリエンスプログラムに参加すると、お使いのデバイス、システム、アプリケーションの情報を収集し、利用させていただくことを許可します。これらの情報の収集と利用を拒否する場合は、ユーザーエクスペリエンスプログラムに参加しないでください。詳細は、Deepin プライバシーポリシー (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">) を参照してください。</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">ユーザーエクスペリエンスプログラムに参加すると、お使いのデバイス、システム、アプリケーションの情報を収集し、利用させていただくことを許可します。これらの情報の収集と利用を拒否する場合は、ユーザーエクスペリエンスプログラムに参加しないでください。詳細は、</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;"> を参照してください。</span></p> DateTimeSettingDialog Date and time setting 日付と時刻の設定 Date 日付 Year Month Day Time 時刻 Cancel キャンセル Confirm 確認 Datetime Time and date 時刻と日付 Time and date, time zone settings 時刻と日付、タイムゾーン設定 DatetimeMain Language and region 言語と地域 System language, regional formats システム言語、地域の形式 DatetimeModel Tomorrow 明日 Yesterday 昨日 Today 今日 %1 hours earlier than local 現在地より%1時間早い %1 hours later than local 現在地より%1時間遅い Space スペース Week First day of week 週最初の曜日 Short date 日付(短縮形式) Long date 日付 Short time 時刻(短縮形式) Long time 時刻 Currency symbol 通貨記号 Positive currency 通貨(+) Negative currency 通貨(-) Decimal symbol 小数点記号 Digit grouping symbol 桁区切り記号 Digit grouping 桁区切り Page size 紙のサイズ Example DatetimeWorker Authentication is required to change NTP server NTPサーバーを変更するには認証が必要です Authentication is required to set the system timezone システムのタイムゾーンを変更するには認証が必要です DccColorDialog Cancel キャンセル Save 保存 DccWindow Control Center provides the options for system settings. コントロールセンターは、システムの設定を変更するためのオプションを提供します。 DeepinIDAccountSecurity Bind WeChat WeChatと連携 By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. WeChatと連携することで、%1 IDとローカルアカウントに素早く、安全にログインすることができるようになります。 Unlinked リンクを解除しました Unbinding 連携を解除しています Link リンク Are you sure you want to unbind WeChat? WeChatとの連携を解除してもよろしいですか? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. WeChatを連携解除すると、WeChat QRコードを使用して%1 IDまたはローカルアカウントにログインすることができなくなります。 Let me think it over Local Account Binding ローカルアカウント連携 After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync クラウド同期 Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. %1 ID を管理し、デバイス間で個人データを同期します。 %1 ID にサインインして、ブラウザ、アプリストア、サポートなどのパーソナライズされた機能とサービスを取得します。 Sign In to %1 ID %1 IDにサインイン DeepinIDSyncService Auto Sync 自動同期 Securely store system settings and personal data in the cloud, and keep them in sync across devices クラウドでシステム設定データと情報を安全に保管して、デバイス間で同期できます。 System Settings システム設定 Last sync time: %1 最終同期: %1 Clear cloud data クラウド内のデータをクリア Are you sure you want to clear your system settings and personal data saved in the cloud? クラウド内に保存されているシステム設定や個人情報などのデータを削除してもよろしいですか? Once the data is cleared, it cannot be recovered! データを削除すると、復元することはできません! Cancel キャンセル Clear クリア DeepinIDUserInfo Synchronization Service 同期サービス Account and Security アカウントとセキュリティ Sign out サインアウト Go to web settings Web設定に移動 The nickname must be 1~32 characters long ニックネームは1~32文字である必要があります DeepinWorker encrypt password failed Wrong password, %1 chances left パスワードが違います。あと %1 回試行できます The login error has reached the limit today. You can reset the password and try again. ログインエラー回数が本日の上限に達しました。パスワードをリセットして、やり直すことができます。 Operation Successful 操作は正常に完了しました The nickname can be modified only once a day ニックネームは一日に一度だけ変更することができます Deepinid deepin ID deepin ID UOS ID UOS ID Cloud services クラウドサービス DeepinidModel Mainland China 中国本土 Other regions その他の地域 The feature is not available at present, please activate your system first この機能は現在利用できません。まずシステムをアクティベートしてください Subject to your local laws and regulations, it is currently unavailable in your region. お住まいの地域の法律および制限により、現在ご利用いただけません。 Defaultapp Default App デフォルトアプリケーション Set the default application for opening various types of files ファイルの種類ごとにデフォルトアプリケーションを設定 DefaultappMain Webpage ウェブページ Mail メール Text テキスト Music ミュージック Video ビデオ Picture ピクチャー Terminal ターミナル DetailItem Please choose the default program to open '%1' %1用のデフォルトアプリケーション add 追加 Open Desktop file デスクトップファイルを開く Apps (*.desktop) アプリケーション (*.desktop) All files (*) すべてのファイル (*) DevelopModePage Root Access ルートアクセス Request Root Access ルートアクセスを要求 After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. 開発者モードを有効にすると、root権限を取得することができますが、システムの完全性を損なうことがあります。注意してください。 Allowed Enter Online オンライン Login UOS ID Offline オフライン Import Certificate 証明書をインポート Select file ファイルを選択 Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export エクスポート 3.Import Certificate Development and debugging options 開発とデバッグオプション System logging level システムロギングレベル Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off OFF Debug デバッグ Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Solidシステム読み取り専用保護 Disabling protection unlocks system directories,This action carries a high risk of system damage. システムディレクトリの保護を無効化します。システムが破損する可能性があります。 Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices Bluetoothとデバイス DisclaimerControl Disclaimer 免責事項 Cancel キャンセル Agree 同意 Display Display ディスプレイ Brightness,resolution,scaling 輝度、解像度、スケーリング DisplayMain 100% 100% 125% 125% 150% 150% 175% 175% 200% 200% 225% 225% 250% 250% 275% 275% 300% 300% Duplicate 複製 Extend 拡張 Default デフォルト Fit Stretch Center Only on %1 %1 のみ Multiple Displays Settings マルチディスプレイの設定 Identify 識別 Screen rearrangement will take effect in %1s after changes ディスプレイの配置は変更から%1秒後に適用されます Mode モード Main Screen メインスクリーン Display And Layout ディスプレイとレイアウト Brightness 輝度 Resolution 解像度 Resize Desktop デスクトップのリサイズ Refresh Rate リフレッシュレート Rotation 回転 Standard 標準 90° 90° 180° 180° 270° 270° The monitor only supports 100% display scaling モニターは 100% ディスプレイスケーリングのみに対応しています Eye Comfort 目の保護モード Enable eye comfort 目の保護モードを有効にする Adjust screen display to warmer colors, reducing screen blue light 暖かい色に調節して、ディスプレイのブルーライトを軽減します Time 時間 All day 終日 Sunset to Sunrise 日没から日の出まで Custom Time カスタム from 開始時刻 to 終了時刻 Color Temperature 色温度 %1x%2 (Recommended) %1x%2 (推奨) %1x%2 %1x%2 %1Hz (Recommended) %1 Hz (推奨) %1Hz %1 Hz Scaling スケーリング Dock Desktop and taskbar デスクトップとタスクバー Desktop organization, taskbar mode, plugin area settings デスクトップの構成、タスクバーのモード、プラグインエリアの設定 DockMain Dock ドック Mode モード Classic Mode クラシック Centered Mode 中央 Dock size ドックのサイズ Small Large Position on the screen 表示位置 Top Bottom Left Right Status 状態 Keep shown 常に表示 Keep hidden 非表示 Smart hide スマートハイド Multiple Displays マルチディスプレイ Set the position of the taskbar on the screen タスクバーの位置 Only on main メインのみ On screen where the cursor is カーソルのあるディスプレイ Plugin Area プラグインエリア Select which icons appear in the Dock ドックに表示するアイコンの選択 Lock the Dock ドックを固定 Combine application icons アプリケーションアイコンの結合 FileAndFolder Allow below apps to access these files and folders: ファイルとフォルダへのアクセスを許可するアプリケーション: Documents ドキュメント Desktop デスクトップ Pictures ピクチャー Videos ビデオ Music ミュージック Downloads ダウンロード folder フォルダ FontSizePage Size サイズ Standard Font 標準フォント Monospaced Font 等幅フォント GeneralPage Power Plans 電源プラン Power Saving Settings 省電力設定 Auto power saving on low battery 低バッテリー残量時に自動で省電力モードにする Low battery threshold バッテリー残量低下とみなす閾値 Auto power saving on battery バッテリー駆動時に自動で省電力モードにする Wakeup Settings 復帰時の動作 Password is required to wake up the computer コンピューターの復帰時にパスワードを要求 Password is required to wake up the monitor モニターの復帰時にパスワードを要求 Shutdown Settings シャットダウンの設定 Scheduled Shutdown シャットダウンのスケジュール Time 時刻 Repeat 繰り返し Once 1回 Every day 毎日 Working days 平日 Custom Time カスタム Decrease screen brightness on power saver 省電力モード使用時にディスプレイの明るさを減らす GestureModel Three-finger up 3本指、上にスワイプ Three-finger down 3本指、下にスワイプ Three-finger left 3本指、左にスワイプ Three-finger right 3本指、右にスワイプ Three-finger tap 3本指、タップ Four-finger up 4本指、上にスワイプ Four-finger down 4本指、下にスワイプ Four-finger left 4本指、左にスワイプ Four-finger right 4本指、右にスワイプ Four-finger tap 4本指、タップ HomePage , , ... ... InterfaceEffectListview Optimal Performance パフォーマンス優先 Balance バランス Best Visuals ビジュアル優先 Disable all interface and window effects for efficient system performance. すべてのウィンドウ効果を無効化します。パフォーマンスが効率化されます。 Limit some window effects for excellent visuals while maintaining smooth system performance. 一部のウィンドウ効果を抑制します。ビジュアルを保ちますが、ビジュアル優先モードより比較的スムーズに動作します。 Enable all interface and window effects for the best visual experience. すべてのウィンドウ効果を有効にします。最高のビジュアル体験が利用できます。 Keyboard Keyboard キーボード General Settings, input method, shortcuts 一般設定、入力メソッド、ショートカット KeyboardMain Common 一般 LangAndFormat Language 言語 done 完了 edit 編集 Other languages 他の言語 add 追加 Region 地域 Area エリア Operating system and applications may provide you with local content based on your country and region システムとアプリケーションは地域や国に応じたコンテンツを提供します Operating system and applications may set date and time formats based on regional formats システムとアプリケーションは地域の形式から日付と時刻を設定することがあります Regional format 地域の形式 LangsChooserDialog Add language 言語の追加 Search 検索 Cancel キャンセル Add 追加 LoginMethod Login method ログイン方法 Password, wechat, biometric authentication, security key パスワード,WeChat,生体認証,セキュリティキー Password パスワード Modify password パスワードを変更 Validity days 有効日数 Always いつも Reset password パスワードのリセット LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression 自動ノイズ除去 Input Volume 入力音量 Input Level 入力レベル Input 入力 No input device for sound found サウンド入力デバイスが見つかりませんでした Input Device 入力デバイス Mouse Mouse and Touchpad マウスとタッチパッド Common、Mouse、Touchpad 一般、マウス、タッチパッド MouseMain Common 一般 Mouse マウス Touchpad タッチパッド MousePage Mouse マウス Pointer Speed ポインターの速度 Slow 遅い Fast 速い Pointer Size ポインターのサイズ Mouse Acceleration マウスの加速 Disable touchpad when a mouse is connected マウス接続時はタッチパッドを無効にする Natural Scrolling ナチュラルスクロール Small Medium Large X-Large 特大 Some apps require logout or system restart to take effect 一部のアプリケーションで変更を適用するためにログアウトまたは再起動が必要な場合があります MyDevice My Devices 使用中のデバイス NativeInfoPage UOS UOS Computer name コンピューター名 It cannot start or end with dashes ダッシュで始まったり終わったりすることはできません OS Name OS名 Version バージョン Edition エディション Type タイプ bit bit Authorization 認証 System installation time システムのインストール日時 Kernel カーネル Graphics Platform グラフィックスプラットフォーム Processor プロセッサ Memory メモリ 1~63 characters please 1~63文字にしてください Notification DND mode, app notifications おやすみモード、アプリケーションの通知 Notification 通知 NotificationMain Do Not Disturb Settings おやすみモードの設定 App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. アプリケーションの通知が表示されたり通知音が鳴ったりしなくなります。通知センターですべてのメッセージを確認できます。 Enable Do Not Disturb おやすみモードを有効にする When the screen is locked 画面がロックされたとき Number of notifications shown on the desktop デスクトップに表示する通知の数 App Notifications アプリケーション通知 Allow Notifications 通知を許可 Display notification on desktop or show unread messages in the notification center デスクトップまたは通知センターに未読のメッセージを表示する Desktop デスクトップ Lock Screen ロック画面 Notification Center 通知センター Show message preview メッセージプレビューを表示する Play a sound 音を鳴らす OtherDevice Other Devices その他のデバイス Show Bluetooth devices without names 名前のないBluetoothデバイスを表示 PasswordLayout Current password 現在のパスワード Required 必須 Weak Medium Strong Repeat Password パスワードを再入力 Password hint パスワードのヒント Optional 任意 Password cannot be empty パスワードは空欄にできません Passwords do not match パスワードが一致しません The hint is visible to all users. Do not include the password here. ヒントはすべてのユーザーに表示されます。ヒントにパスワードを含めないでください。 New password 新しいパスワード New password should differ from the current one 新しいパスワードは現在とは異なるパスワードにしてください The password cannot be the same as the username. ユーザー名と同一のパスワードを設定することはできません。 PasswordModifyDialog Modify password パスワードを変更 Reset password パスワードをリセット Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel キャンセル Personalization Personalization パーソナライズ PersonalizationInterface Light ライト Auto 自動 Dark ダーク Picker service is not available ピッカーサービスが利用できません Invalid color format: %1 無効なカラー形式: %1 PersonalizationMain Theme テーマ Appearance 外観 Window effect ウィンドウ効果 Personalize your wallpaper and screensaver 壁紙とスクリーンセーバーの変更 Screensaver スクリーンセーバー Colors and icons 色とアイコン Adjust accent color and theme icons アクセントカラーとテーマアイコンの変更 Font and font size フォントのスタイルとサイズ Change system font and size システムフォントのスタイルとサイズの変更 Wallpaper 壁紙 Select light, dark or automatic theme appearance ライト、ダークまたは自動設定の選択 Interface and effects, rounded corners インターフェースと効果、角の丸み PersonalizationWorker Custom カスタム PluginArea Plugin Area プラグインエリア Select which icons appear in the Dock ドックに表示するアイコンの選択 Power Power saving settings, screen and suspend 電力節約の設定、ディスプレイとサスペンド Power 電源 PowerMain General 一般 Power plans, power saving settings, wakeup settings, shutdown settings 電源プラン、電力節約の設定、復帰時の設定、シャットダウンの設定 Plugged In 電源接続時 Screen and suspend ディスプレイとサスペンド On Battery バッテリー駆動時 screen and suspend, low battery, battery management ディスプレイとサスペンド、バッテリー残量低下時の設定、バッテリー管理 PowerOperatorModel Shut down シャットダウン Suspend サスペンド Hibernate ハイバネート Turn off the monitor モニターの電源を切る Show the shutdown Interface シャットダウンインターフェースの表示 Do nothing 何もしない PowerPage Screen and Suspend ディスプレイとサスペンド Turn off the monitor after ディスプレイの電源を切るまでの時間 Lock screen after ロックするまでの時間 Computer suspends after コンピューターをサスペンドするまでの時間 When the lid is closed カバーを閉じたときの動作 When the power button is pressed 電源ボタンを押したときの動作 PowerPlansListview High Performance 高パフォーマンス Balance Performance バランスパフォーマンス Aggressively adjust CPU operating frequency based on CPU load condition CPUのロード状況に応じて、CPUの動作周波数をアクティブに可変します。 Balanced バランス Power Saver エコモード Prioritize performance, which will significantly increase power consumption and heat generation パフォーマンスを優先します。消費電力と発熱が最も大きくなります。 Balancing performance and battery life, automatically adjusted according to usage パフォーマンスとバッテリー使用可能時間のバランスを使用状況により自動で調節します。 Prioritize battery life, which the system will sacrifice some performance to reduce power consumption バッテリー使用可能時間を優先します。消費電力を削減しますが、パフォーマンスも低下します。 PowerWorker Minutes Hour 時間 Never なし Privacy Privacy and Security プライバシーとセキュリティ Camera, folder permissions カメラ、フォルダ権限 PrivacyMain Camera カメラ Choose whether the application has access to the camera カメラへのアクセスを許可するアプリケーションを選択 Files and Folders ファイルとフォルダ Choose whether the application has access to files and folders ファイルとフォルダへのアクセスを許可するアプリケーションを選択 PrivacyPolicyPage Privacy Policy プライバシーポリシー Copy Link Address リンクアドレスをコピー PwqualityManager Password cannot be empty パスワードは空欄にできません Password must have at least %1 characters パスワードは %1 文字以上にする必要があります Password must be no more than %1 characters パスワードは %1 文字以上にする必要があります Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) パスワードには英字 (大文字と小文字を区別します)、数字、特殊記号 (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) のみを使用できます No more than %1 palindrome characters please 回文になっている文字を%1文字以上含めないでください No more than %1 monotonic characters please 連続する単調な文字列を%1文字以上含めないでください No more than %1 repeating characters please 連続した同じ文字を%1文字以上含めないでください Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) パスワードには、英字(大文字、小文字)、数字と記号(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)を含める必要があります Password must not contain more than 4 palindrome characters パスワードに回文になっている文字列を4文字以上含めないでください。 Do not use common words and combinations as password パスワードに一般的な単語や組み合わせを含めないでください Create a strong password please もっと強いパスワードを作成してください It does not meet password rules パスワードのルールに適合していません QObject Control Center コントロールセンター Activated 有効 View 表示 To be activated Activate 有効化 Expired 有効期限切れ In trial period 試用期間中 Trial expired 試用期間の有効期限切れ dde-control-center dde-control-center Touch Screen Settings タッチスクリーン設定 The settings of touch screen changed タッチスクリーンの設定を変更しました This system wallpaper is locked. Please contact your admin. このシステム壁紙は無効化されています。詳細はシステム管理者にお問い合わせください。 %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search 検索 Default formats デフォルトの形式 First day of week 週最初の曜日 Short date 日付(短縮形式) Long date 日付 Short time 時刻(短縮形式) Long time 時刻 Currency symbol 通貨記号 Digit Paper size 紙のサイズ Cancel キャンセル Save 保存 Regional format 地域の形式 RegionsChooserWindow Search 検索 RegisterDialog Set a Password パスワードを設定 8-64 characters 8-64文字 Repeat the password パスワードを再入力 Cancel キャンセル Confirm 確認 Passwords don't match パスワードが一致しません ScheduledShutdownDialog Customize repetition time カスタムの繰り返し時間 Cancel キャンセル Save 保存 ScreenSaverPage Screensaver スクリーンセーバー preview プレビュー Personalized screensaver カスタムスライドショー setting 設定 idle time アイドル時間 1 minute 1分 5 minute 5分 10 minute 10分 15 minute 15分 30 minute 30分 1 hour 1時間 never なし Password required for recovery 復帰時にパスワードを必要とする Picture slideshow screensaver 画像スライドショースクリーンセーバー System screensaver システムスクリーンセーバー SearchableListViewPopup Search 検索 No search results 検索結果はありません ShortcutSettingDialog Add custom shortcut カスタムショートカットを追加 Name: 名前: Required 必須 Command: コマンド: Shortcut ショートカット None 無し Cancel キャンセル Add 追加 The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key ショートカットキーを入力してください Save 保存 click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts ショートカット System shortcut, custom shortcut システムショートカット、カスタムショートカット Search shortcuts ショートカットを検索 done 完了 edit 編集 Click クリック Cancel キャンセル or または Replace 置き換える Restore default デフォルトを復元 Add custom shortcut カスタムショートカットを追加 please enter a new shortcut key 新しいショートカットキーを入力してください Sound Sound Output, input, sound effects, devices 出力、入力、効果音、デバイス SoundDevicemanagesPage Output Devices 出力デバイス Select whether to enable the devices 有効にするデバイス Input Devices 入力デバイス SoundEffectsPage Sound Effects 効果音 SoundMain Settings 設定 Sound Effects 効果音 Enable/disable sound effects 効果音を有効/無効にする Enable/disable audio devices オーディオデバイスを有効/無効にする Devices Management デバイス管理 SoundModel Boot up 起動 Shut down シャットダウン Log out ログアウト Wake up ウェイクアップ Volume +/- 音量の調整 Notification 通知 Low battery バッテリー残量低下 Send icon in Launcher to Desktop ランチャーのアイコンをデスクトップに送る Empty Trash ゴミ箱を空にする Plug in 電源に接続 Plug out 電源を切断 Removable device connected リムーバブルデバイスの接続 Removable device removed リムーバブルデバイスの取り外し Error エラー SpeakerPage Mode モード Output Volume 出力音量 Volume Boost 音量増強 If the volume is louder than 100%, it may distort audio and be harmful to output devices 音量を100%以上にすると、音声が歪んだりスピーカーに悪影響を及ぼしたりする可能性があります Left Right Output 出力 No output device for sound found サウンド出力デバイスが見つかりませんでした Left Right Balance 左右のバランス Merge left and right channels into a single channel 左右のチャンネルを統合してシングルチャンネルにします Whether the audio will be automatically paused when the current audio device is unplugged オーディオデバイスが切断されたときに自動で一時停止します Mono Audio モノラルオーディオ Auto Pause 自動で一時停止 Output Device 出力デバイス SyncInfoListModel Sound サウンド Power 電源 Mouse マウス Update アップデート Screensaver スクリーンセーバー System Common settings 一般設定 System システム SystemInfo Auxiliary Information 補助的な情報 SystemInfoMain About This PC この PC について System version, device information システムバージョン、デバイス情報 View the notice of open source software オープンソースソフトウェアに関する通知を表示 User Experience Program ユーザーエクスペリエンスプログラム Join the user experience program to help improve the product ユーザーエクスペリエンスプログラムに参加して製品の開発を支援 End User License Agreement 利用規約(EULA) View the end user license agreement 利用規約(EULA)を表示 Privacy Policy プライバシーポリシー View information about privacy policy プライバシーポリシーに関する情報を表示 Open Source Software Notice オープンソースソフトウェアに関する通知 ThemeSelectView More Wallpapers 他の壁紙 TimeAndDate Auto sync time 時刻の自動同期 Ntp server NTPサーバー System date and time システム時刻と日付 Customize カスタマイズ Settings 設定 Server address サーバーアドレス Required 必須 The ntp server address cannot be empty NTPサーバーアドレスは空欄にできません Use 24-hour format 24時間表示 system time zone システムのタイムゾーン Timezone list タイムゾーンの一覧 Add 追加 TimeRange from 開始時刻 to 終了時刻 TimeoutDialog Save the display settings? ディスプレイの設定を保存しますか? Settings will be reverted in %1s. %1秒後に元の設定に戻ります。 Revert 取り消す Save 保存 TimezoneDialog Add time zone タイムゾーンを追加 Determine the time zone based on the current location 現在地をタもとにイムゾーンを設定する Time zone: タイムゾーン: Nearest City: 最も近い都市: Cancel キャンセル Save 保存 TouchScreen TouchScreen タッチスクリーン Set up here when connecting the touch screen タッチスクリーンをここで構成できます Touchpad Basic Settings 基本設定 Touchpad タッチパッド Pointer Speed ポインターの速度 Slow 遅い Fast 速い Disable touchpad during input 入力中はタッチパッドを無効にする Tap to Click タップしてクリック Natural Scrolling ナチュラル・スクロール Three-finger gestures 3本指のジェスチャー Four-finger gestures 4本指のジェスチャー Gestures ジェスチャー Touchscreen Touchscreen タッチスクリーン Configuring Touchscreen タッチスクリーンの構成 TouchscreenMain Common 一般 UserExperienceProgramPage Join User Experience Program ユーザーエクスペリエンスプログラムに参加 Copy Link Address リンクアドレスをコピー VerifyDialog Security Verification セキュリティ認証 The action is sensitive, please enter the login password first 本人確認ため、まずはログインパスワードを入力してください。 8-64 characters 8-64文字 Forgot Password? パスワードをお忘れですか? Cancel キャンセル Confirm 確認 Wacom wacom ワコム Configuring wacom WacomMain wacom ワコム Pen Mode ペンモード Mouse Mode マウスモード Pressure Sensitivity 押し込み感度 Light 軽い Heavy 強い Model モデル WallpaperPage wallpaper 壁紙 My pictures カスタム画像 System Wallpaper システム壁紙 Solid color wallpaper 単色壁紙 Customizable wallpapers カスタム壁紙 fill style 表示方法 Automatic wallpaper change 壁紙を自動で切り替えるタイミング never なし 30 second 30秒 1 minute 1分 5 minute 5分 10 minute 10分 15 minute 15分 30 minute 30分 login ログイン時 wake up 起動時 Live Wallpaper ライブ壁紙 1 hour 1時間 System Wallpapers システム壁紙 WallpaperSelectView unfold 一部を表示 Set lock screen ロック画面に設定 Set desktop デスクトップに設定 show all - %1 items すべて(%1個)を表示 Add Picture 画像を追加 WindowEffectPage Interface and Effects インターフェースと効果 Window Settings ウィンドウの設定 Window rounded corners ウィンドウの角の丸み None 無し Small Large Enable transparent effects when moving windows ウィンドウの移動時に透明度を上げる Window Minimize Effect ウィンドウ最小化時の効果 Scale スケール Magic Lamp 魔法のランプ Opacity 不透明度 Low High Scroll Bars スクロールバー Show on scrolling スクロール時のみに表示 Keep shown 常に表示 Compact Display コンパクトディスプレイ If enabled, more content is displayed in the window. 有効にすると、より多くの要素がウィンドウ内に表示されるようになります。 Title Bar Height タイトルバーの高さ Only suitable for application window title bars drawn by the window manager. ウィンドウマネージャによって描画されるアプリケーションウィンドウのタイトルバーにのみ適用可能です。 Extremely small 極小 Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) 繫体中国語 (香港) Traditional Chinese (Chinese Taiwan) 繫体中国語 (台湾) Min Nan Chinese 閩南語 dcc::Locale::regionNames Taiwan China 台湾 dccV25::AccountsController Username must be between 3 and 32 characters ユーザー名は3文字以上32文字以下にする必要があります The first character must be a letter or number 最初の文字は英数字にする必要があります Your username should not only have numbers ユーザー名を数字のみにすることはできません The username has been used by other user accounts このユーザー名は他のアカウントによって使用されています The full name is too long フルネームが長すぎます The full name has been used by other user accounts このフルネームは他のアカウントによって使用されています Wrong password パスワードが間違っています Standard User 標準ユーザー Administrator 管理者 Customized カスタム dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings ADドメイン設定 Password not match パスワードが一致しません dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint 指紋 Place your finger 指をセンサーに置いてください Place your finger firmly on the sensor until you're asked to lift it センサーに指を置いて、指示があるまで離さないでください Lift your finger 指をセンサーから離してください Lift your finger and place it on the sensor again 指をセンサーから離して、もう一度置いてください Lift your finger and do that again 指をセンサーから離して、もう一度行ってください Scan Suspended スキャンを一時停止しました Scan the edges of your fingerprint 指紋の端をスキャンしてください Place the edges of your fingerprint on the sensor 指紋の端をセンサーに置いてください Adjust the position to scan the edges of your fingerprint 指紋の端をスキャンする位置を調整してください Fingerprint added 指紋を追加しました dccV25::IrisAuthController Iris 虹彩 Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] このショートカットは[%1]と競合しています dccV25::PwqualityManager Password cannot be empty パスワードは空欄にできません Password must have at least %1 characters パスワードは %1 文字以上にする必要があります Password must be no more than %1 characters パスワードは %1 文字以上にする必要があります Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) パスワードには英字 (大文字と小文字を区別します)、数字、特殊記号 (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) のみを使用できます No more than %1 palindrome characters please 回文になっている文字を%1文字以上含めないでください No more than %1 monotonic characters please 連続する単調な文字列を%1文字以上含めないでください No more than %1 repeating characters please 連続した同じ文字を%1文字以上含めないでください Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) パスワードには、英字(大文字、小文字)、数字と記号(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)を含める必要があります Password must not contain more than 4 palindrome characters パスワードに回文になっている文字列を4文字以上含めないでください。 Do not use common words and combinations as password パスワードに一般的な単語や組み合わせを含めないでください Create a strong password please もっと強いパスワードを作成してください It does not meet password rules パスワードのルールに適合していません At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System システム Window ウィンドウ Workspace ワークスペース AssistiveTools アシストツール Custom カスタム None なし ================================================ FILE: translations/dde-control-center_ka.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected დაკავშირებულია Not connected არ დაკავშირდა BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel გაუქმება Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty პაროლი არ შეიძლება იყოს ცარიელი Password must have at least %1 characters პაროლი უნდა შეიცავდეს მინიმუმ %1 სიმბოლო Password must be no more than %1 characters პაროლი არ უნდა იყოს %1 სიმბოლოზე მეტი Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters პაროლი არ უნდა შეიცავდეს მაქსიმუმ 4 პალინდრომ სიმბოლოს Do not use common words and combinations as password პაროლი არ უნდა შეიცავდეს გავრცელებულ სიტყვებს და კომბინაციებს Create a strong password please It does not meet password rules QObject Control Center მართვის ცენტრი Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings სენსორული მონიტორის პარამეტრები The settings of touch screen changed სენსორული მონიტორის პარამეტრები შეიცვალა This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification შეტობინება Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save შენახვა TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) ტრადიციული ჩინელი (ჩინელის ჰონგ კონგ) Traditional Chinese (Chinese Taiwan) ტრადიციული ჩინელი (ჩინელის ტაივანი) Min Nan Chinese dcc::Locale::regionNames Taiwan China ტაივანი ჩინელი dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] ეს შემოკლება კონფლიქტს მონიშვნას [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System სისტემა Window ფანჯარა Workspace სამუშაო სივრცე AssistiveTools დამხმარე ხელსაწყოები Custom საკუთრივი None არაფერი ================================================ FILE: translations/dde-control-center_kab.ts ================================================ AccountSettings edit düzelt Add new user ajjer uus add Set fullname sifra el-nemmen Login settings ttaghadam login Login without password login imen tissifra Delete current account dell akun aktuell Group setting ttaghadam tgrup Account groups grup akun done fih Group name el-nom tgrup Add group add grup Auto login login automatik Account Information ttaghadam akun Account name, account fullname, account type el-nom akun, el-nom tafull akun, ttaghadam akun Account name el-nom akun Account fullname el-nom tafull akun Account type ttaghadam akun The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face insere face I have read and agree to the nifra akkam wi ntaqad la Disclaimer ttafahim Next next Face enrolled face insere Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style styla tizit Dimensional style styla dimansional Flat style styla flata Cancel Cencell Save Gadef BatteryPage Screen and Suspend Skrin rassus Turn off the monitor after Dafra dafus ta sifra sifra Lock screen after Kathla skrin rassus Computer suspends after Rassus komptata rassus When the lid is closed Lid liggas When the power button is pressed Quenni bittun ta sifra liggas Low Battery Battari tiskad Low battery notification Notifikuz battari tiskad Auto suspend Rassus automatik Auto Hibernate Hibernat automatik Low battery threshold Tiskad battari Battery Management Gadef battari Display remaining using and charging time Difras dhenar tisfit i tufra i tisfit Maximum capacity Kapasitt amax Low battery level Nivell tiskad battari Disable Difasak BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth dafus, i n tafra tiguzi "%1" Bluetooth is turned on, and the name is displayed as "%1" Bluetooth cencell, i n tafra tiguzi "%1" BlueToothDeviceListView Disconnect Dafus Connect Cencell Send Files Tseni filen Rename Tefrirt n nafsa Remove Device Tefuzi dëyj Select file Tefri filen BluetoothCtl Edit Tefrirt Allow other Bluetooth devices to find this device Tawen dëyj Bluetooth tawen nifuzi dëyj nis To use the Bluetooth function, please turn off Wen tefri Bluetooth, tefuzi Airplane Mode Airplane Mode Mode Airplane Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Tawen Not connected Tawen nes BootPage Startup Settings Tefrirt tachti You can click the menu to change the default startup items, or drag the image to the window to change the background image. Tefri menu tefri items tachti nis, yew tefri amal tefri amal tafuzi ta amal grub start delay grub start delay theme tajmaht After turning on the theme, you can see the theme background when you turn on the computer Wen tefri tajmaht, tefri tafrirt tajmaht nis Boot menu verification Tefrirt menu tachti After opening, entering the menu editing requires a password. Wen tefri, tefri password tefri menu Change Password Tefri password Change boot menu verification password Tefri password tefrirt menu tachti Set the boot menu authentication password Tefri password tefrirt authentication menu tachti User Name : Nefes n usser : root root New Password : Password nes : Required Wajb Password cannot be empty La chifla chaχaχtah sifil uggawen Passwords do not match Chifla chaχaχtah sifil uggawen iktan Repeat password: Tefiχ sifil: Cancel Cac Sure Tefiχ Start animation Sefiχ l'animazif Adjust the size of the logo animation on the system startup interface Sefiχ l'ekra d'animazif l'logo fi l'ekra d'uzufis Camera Allow below apps to access your camera: Sefiχ l'azufi b'azufi d'aplikazif tefiχ t'accéss l'azufi tefiχ CharaMangerModel Fingerprint1 Impramit1 Fingerprint2 Impramit2 Fingerprint3 Impramit3 Fingerprint4 Impramit4 Fingerprint5 Impramit5 Fingerprint6 Impramit6 Fingerprint7 Impramit7 Fingerprint8 Impramit8 Fingerprint9 Impramit9 Fingerprint10 Impramit10 Scan failed Sefiχ l'azufi chen The fingerprint already exists Impramit uggawen iktan Please scan other fingers Tefiχ l'azufi d'ik Unknown error Errort uggawen Scan suspended Sefiχ l'azufi suggawen Cannot recognize Sefiχ l'azufi Moved too fast Sefiχ l'azufi iktan Finger moved too fast, please do not lift until prompted Tefed n tefed tefed, sii tefed tefed tefed u tefed Unclear fingerprint Fingerprint tefed tefed Clean your finger or adjust the finger position, and try again Tefed tefed tefed u tefed tefed tefed, tefed tefed tefed tefed Already scanned Tefed tefed tefed Adjust the finger position to scan your fingerprint fully Tefed tefed tefed tefed tefed tefed Finger moved too fast. Please do not lift until prompted Tefed n tefed tefed, sii tefed tefed tefed u tefed Lift your finger and place it on the sensor again Tefed tefed tefed tefed tefed tefed Position your face inside the frame Tefed tefed tefed tefed tefed tefed Face enrolled Tefed tefed tefed Position a human face please Tefed tefed tefed tefed tefed tefed Keep away from the camera Tefed tefed tefed tefed tefed Get closer to the camera Tefed tefed tefed tefed tefed Do not position multiple faces inside the frame Tefed tefed tefed tefed tefed tefed Make sure the camera lens is clean Tefed tefed tefed tefed tefed tefed Do not enroll in dark, bright or backlit environments Tefed tefed tefed tefed tefed tefed Keep your face uncovered Tefed tefed tefed tefed tefed Scan timed out Tefed tefed tefed tefed Cancel Annule Camera occupied! ColorAndIcons Accent Color Color accent Icon Settings Settings ikon Icon Theme Theme ikon Customize your theme icon Tafustawen tewm t lïk Cursor Theme Tewem t tawur Customize your theme cursor Tafustawen tawur t tewem ComfirmDeleteDialog Are you sure you want to delete this account? Iziz waa iskwiz nis yuz t tefez t tajjurt t akount tss? Delete account directory Tefez dertiwin t akount Cancel Tefez Delete Tefez t tajjurt ComfirmSafePage Go to settings Wiz girt t tisayen Cancel Tefez Common Common Common Repeat delay Tidlet t tafustawen Short Xeurt Long Tlalt Repeat rate Tidlet t tafustawen Slow Xeurt Fast Tlalt Numeric Keypad Keypad t nurnern test here test here Caps lock prompt Tafustawen t tiskal t mayus Double Click Speed Tidlet t tiskal t niskal Double Click Test Test t tiskal t niskal Left Hand Mode Mode t tiskal t xef Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Xef t tefuz Small size Xef t xeurt Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Amassam dawt nisfis nisfiyek User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Dawt nisfis nisfiyek nisfis nisfiyek Date Nisfis nisfiyek Year Ann Month Mans Day Ams Time Nisfis Cancel Cencle Confirm Tafassasen Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Tafassasen Yesterday Tafassasen tafassasen Today Nisfis nisfiyek %1 hours earlier than local %1 nisfis tafassasen nisfis nisfiyek %1 hours later than local %1 nisfis tafassasen nisfis nisfiyek Space Space Week Wek First day of week Ams wekk Short date Nisfis nisfiyek tafassasen Long date Nisfis nisfiyek nisfis nisfiyek Short time Nisfis nisfiyek tafassasen Long time temps long Currency symbol simbole de currency Positive currency currency positif Negative currency currency négatif Decimal symbol simbole décimal Digit grouping symbol simbole de regroupement de chiffres Digit grouping regroupement de chiffres Page size taille de la page Example DatetimeWorker Authentication is required to change NTP server l'authentification est requise pour changer le serveur NTP Authentication is required to set the system timezone DccColorDialog Cancel annule Save sauvegarde DccWindow Control Center provides the options for system settings. Le Center de contrôle propose les options pour les paramètres du système. DeepinIDAccountSecurity Bind WeChat liée WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. En liant WeChat, vous pouvez vous connecter de manière sécurisée et rapide à votre compte %1 et à vos comptes locaux. Unlinked déconnecté Unbinding déconnexion Link lier Are you sure you want to unbind WeChat? Êtes-vous sûr de vouloir déconnecter WeChat ? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Après avoir déconnecté WeChat, vous ne pourrez pas utiliser WeChat pour scanner le code QR pour vous connecter à votre compte %1 ou à votre compte local. Let me think it over Laissez-moi y réfléchir Local Account Binding liaison du compte local After binding your local account, you can use the following functions: Après avoir lié votre compte local, vous pouvez utiliser les fonctions suivantes : WeChat Scan Code Login System système de connexion par code QR WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Utilisez WeChat, qui est lié à votre compte %1, pour scanner le code pour vous connecter à votre compte local. Reset password via %1 ID réinitialiser le mot de passe via %1 ID Reset your local password via %1 ID in case you forget it. Resset y kassawd lokel taa %1 ID li taw bisknouh. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Li taw 3li l-féet l-fessaa, taw 3l-3ddi 3l-l3wz l-Kontrol Center - Accounts ak 3l-3ddi l-fessaa 3li 3li l-fessaa. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Sinck Cloud Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. 3ddi l-kassawd %1 ID ak sinck dawdat 3ddi ykken l3ddi 3li l-kassawd %1 ID 3l-3ddi l-fessaa ak l-servis 3li 3li l-fessaa 3li 3li l-3wz l-browser ak l-App Store ak 3ddi. Sign In to %1 ID 3ddi l-kassawd %1 ID DeepinIDSyncService Auto Sync Sinck Awat Securely store system settings and personal data in the cloud, and keep them in sync across devices 3ddi dawdat 3ddi l-tassawd ak l-fessaa 3ddi 3li l-tassawd l-systam 3li 3li l-kassawd ak sinck dawdat 3ddi 3li l-tassawd l-systam 3li 3li l-3wz System Settings Fessaa Systam Last sync time: %1 3ddi sinck 3ddi m3l: %1 Clear cloud data Bris dawdat 3ddi kassawd Are you sure you want to clear your system settings and personal data saved in the cloud? Taw b3rsi dawdat 3ddi kassawd ak dawdat 3ddi ykken l-tassawd l-systam 3li 3ddi kassawd? Once the data is cleared, it cannot be recovered! L3ddi 3ddi 3ddi sinck, y3ddi b3rsi! Cancel B3nsil Clear B3rsi DeepinIDUserInfo Synchronization Service Servis Sinck Account and Security 3ddi Ak Sifriyut Sign out B3ddi Go to web settings 3l-3ddi fessaa 3ddi w3b The nickname must be 1~32 characters long DeepinWorker encrypt password failed 3ddi kassawd 3li 3ddi b3rsi Wrong password, %1 chances left Kassawd gharb, %1 dawdat 3li 3ddi The login error has reached the limit today. You can reset the password and try again. L3ddi 3ddi 3ddi 3ddi l-kassawd l3ddi m3l, y3ddi b3rsi l-kassawd ak taw 3ddi 3ddi 3ddi 3ddi l-kassawd Operation Successful 3ddi 3ddi t3msal The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Chinna 3ddi m3l Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options Ajtisamal n dafayet n tajribat n tiskriyt System logging level Nivwal tafissal tisla tassubt n aqsas Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Amsalihen tawjihen tafissal tisla tassubt n aqsas n tajribat n tiskriyt, 3awen ntaghriben n tafissal tassubt n aqsas aw n tafissal tisla n tissufas Off Tafissal Debug Tiskriyt Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Amsalihen tawjihen tafissal tisla tassubt n aqsas n tafissal 10 sifra, t7afdan b tawjihen tafissal tisla tassubt n aqsas, 3awen ntaghriben n tafissal tisla tassubt n aqsas, t3awen t3alib t7a7rif tafissal tisla tassubt n aqsas. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Tangawen b dafayet n tissufas t3awen tafissal tisla tassubt n aqsas n 3al3an t3amal n tissufas n tafissal tisla tassubt n aqsas Documents Tissufas t3adamat Desktop Dalb tafissal tassubt Pictures Tissufas tifissal Videos Tissufas tivissal Music Tissufas t3issal Downloads Tissufas t3alib folder tissufas FontSizePage Size Tafissal Standard Font Tissufas tafissal t3issal Monospaced Font Tissufas tafissal t3a3dar GeneralPage Power Plans Tissufas tafissal t3issal t3a3dar Power Saving Settings Ajtisamal tafissal t3issal t3a3dar Auto power saving on low battery Tafissal t3issal t3a3dar n tafissal t3a3dar t3al3an Low battery threshold Tafissal t3a3dar t3al3an Auto power saving on battery Tafissal t3issal t3a3dar n tafissal t3a3dar Wakeup Settings Ajtisamal t3alib tafissal t3a3dar Password is required to wake up the computer Tafissal t3a3dar t3alib tafissal t3issal t3alib Password is required to wake up the monitor Tafissal t3a3dar t3alib tafissal t3issal t3alib tafissal tafissal t3a3dar Shutdown Settings Nesben a tashut Scheduled Shutdown Tashut tasbed Time Temps Repeat Répéter Once Une fois Every day Chaque jour Working days Jours ouvrables Custom Time Temps personnalisé Decrease screen brightness on power saver Diminuer l'éclat de l'écran en mode économiseur d'énergie GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Teb Cancel Cenc Add Adja LoginMethod Login method Metod l-ibdaḍ l-akl Password, wechat, biometric authentication, security key Wafir, WeChat, tefir biyiaḍit, tefir sifāriḍit Password Wafir Modify password Tefiḍ wafir Validity days Diyawen t-taḍil Always Amsak Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Asaṣ-Ṣanad Al-Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Tefir t-taḍil t-tanādd Input Volume Tafir l-ḍir Input Level Tafir l-miḍl Input Ḍir No input device for sound found Amskun deviṣ t-ḍir t-tanādd Input Device Ibenk n unekcum Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices Amalch mih NativeInfoPage UOS UOS Computer name Nom tafayut It cannot start or end with dashes Yamzur iskra u tisra l-dragh OS Name Nom tiswurt tafayut Version Tasnaft Edition Tassnat Type Tashit bit bit Authorization Tasfar System installation time Tasnaft tisnawen tafayut Kernel Kernel Graphics Platform Plattform tigrafi Processor Processeur Memory Mémoire 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Amalch akhbar Show Bluetooth devices without names Ghayr tishir nom amalch Bluetooth PasswordLayout Current password Mot de passe actuel Required Dreksan Weak Kabt Medium Midel Strong Tefus Repeat Password Tefus ddiwuss Password hint Ddawdus tefus Optional Korofis Password cannot be empty Tefus ddiwuss ddiwuss ddiwuss ddiwuss Passwords do not match Tefus ddiwuss aw tefus ddiwuss ddiwuss ddiwuss The hint is visible to all users. Do not include the password here. Ddawdus tefus ddiwuss ddiwuss ddiwuss tefus ddiwuss New password New password should differ from the current one Tefus ddiwuss ddiwuss ddiwuss tefus ddiwuss The password cannot be the same as the username. PasswordModifyDialog Modify password Tefus ddiwuss ddiwuss Reset password Tefus ddiwuss ddiwuss Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Tefus ddiwuss ddiwuss 8 ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss Resetting the password will clear the data stored in the keyring. Tefus ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss Cancel Ddiwuss Personalization Personalization PersonalizationInterface Light Ddus Auto Ddiwuss ddiwuss Dark Tefus Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Ddiwuss ddiwuss PluginArea Plugin Area Ara ddiwuss ddiwuss Select which icons appear in the Dock Ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss ddiwuss Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Tefus Suspend Suspend Hibernate Ammach Turn off the monitor Fass ghadef tichell Show the shutdown Interface Ammach l'interface d'arrêt Do nothing Chak PowerPage Screen and Suspend Tichell n'tass Turn off the monitor after Fass ghadef tichell tach Lock screen after Tass tichell tach Computer suspends after Tass tach tach When the lid is closed Chak l'ouaress tichell tichell When the power button is pressed Chak ghadef tichell tichell PowerPlansListview High Performance High Performance Balance Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Aggressifment ajoutez l'fréquence d'opération de CPU en fonction de la charge de CPU Balanced Balanced Power Saver Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Minut Hour Heur Never Chak Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Politique de confidentialité Copy Link Address PwqualityManager Password cannot be empty Le mot de passe ne peut pas être vide Password must have at least %1 characters Le mot de passe doit avoir au moins %1 caractères Password must be no more than %1 characters Le mot de passe ne doit pas dépasser %1 caractères Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Ammas n usenqed Activated Yetturmed View Tamuɣli To be activated Activate Expired Yemmut In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date dat gsbir Long date dat nser Short time waqt gsbir Long time waqt nser Currency symbol simbole n dharb Digit nzer Paper size mesur n tsiruf Cancel cenc Save gser Regional format RegionsChooserWindow Search tazdir RegisterDialog Set a Password sifra sghir 8-64 characters 8-64 tefdits Repeat the password sifra t gser Cancel cenc Confirm kofir Passwords don't match sifra t gser ntn ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver screensaver preview tewer Personalized screensaver screensaver 3asir setting tajrib idle time waqt t ghiss 1 minute 1 ddir 5 minute 5 ddir 10 minute 10 ddir 15 minute 15 ddir 30 minute 30 dëgëdd 1 hour 1 sern never an siih Password required for recovery Talgu wertefit yuzi itefen Picture slideshow screensaver Screensaver tefit agu gushush System screensaver Screensaver tefit system SearchableListViewPopup Search Tefit itefen No search results ShortcutSettingDialog Add custom shortcut Tefit talgu wertefit zefen Name: Zefen: Required Siih Command: Tefit: Shortcut Tefit None An siih Cancel Tefit itefen Add Tefit The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts Tefit System shortcut, custom shortcut Tefit system, talgu wertefit zefen Search shortcuts Tefit tefit zefen done siih edit tefit zefen Click Tefit Cancel Talb or aw Replace Substitu Restore default Ressubstitu Add custom shortcut Ajout d'un raccourci personnalisé please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Appareils de sortie Select whether to enable the devices Sélectionnez si vous voulez activer les appareils Input Devices Appareils d'entrée SoundEffectsPage Sound Effects Effets sonores SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Redémarrage Shut down Arrêt Log out Déconnexion Wake up Réveil Volume +/- Volume +/- Notification Notification Low battery Batterie faible Send icon in Launcher to Desktop Envoyer l'icône de l'icône du lanceur vers le bureau Empty Trash Vider la corbeille Plug in Insérer Plug out Retirer Removable device connected Dispositif amovible connecté Removable device removed Dispositif amovible retiré Error Erreur SpeakerPage Mode Mode Output Volume Volume de sortie Volume Boost Ampli kasba If the volume is louder than 100%, it may distort audio and be harmful to output devices Ifsayen amuzi yezguzi 100% ugg, yassasghar audiu wi amnassasghar dëgawen amuzi Left Dawt Right Dawti Output Dëgawen No output device for sound found Dëgawen amuzi ddiwassasghar Left Right Balance Equilibre dawt-dawti Merge left and right channels into a single channel Tassaghar kanal dawt wi kanal dawti n kanal defnus Whether the audio will be automatically paused when the current audio device is unplugged Idem amuzi yassasghar wassasghar amuzi wazzug yebb drass Mono Audio Auto Pause Output Device Ibenk n tuffɣa SyncInfoListModel Sound Audiu Power Géni Mouse Moust Update Amzilh Screensaver Géni fezzan System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers Zghur defnus TimeAndDate Auto sync time Synchro géni yebb drass Ntp server Server NTP System date and time Géni defnus Customize Tawassir Settings Dëfni Server address Adresse server Required Obligatoire The ntp server address cannot be empty L'adresse de l'serveur ntp ne peut pas être vide Use 24-hour format Usez le format 24 heures system time zone zone horaire du système Timezone list liste des fuseaux horaires Add TimeRange from dari to kseb TimeoutDialog Save the display settings? Garder les paramètres d'affichage Settings will be reverted in %1s. Les paramètres seront rétablis dans %1s. Revert Rétablir Save Garder TimezoneDialog Add time zone Ajouter une zone horaire Determine the time zone based on the current location Déterminez la zone horaire en fonction de la localisation actuelle Time zone: Zone horaire : Nearest City: Ville la plus proche : Cancel Annuler Save Garder TouchScreen TouchScreen TouchScreen Set up here when connecting the touch screen Configurer ici lors de la connexion du touch screen Touchpad Basic Settings Paramètres de base Touchpad Touchpad Pointer Speed Vitesse du pointeur Slow Lent Fast Rapide Disable touchpad during input Désactiver le touchpad pendant l'entrée Tap to Click Appuyez pour cliquer Natural Scrolling Talqalqal n tahan Three-finger gestures Gestu bil-lexen-3 Four-finger gestures Gestu bil-lexen-4 Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Join Program Experience User Copy Link Address VerifyDialog Security Verification Verification security The action is sensitive, please enter the login password first Action tafawwuz, tefawwuz nis u dawen password login first 8-64 characters 8-64 characters Forgot Password? Forgot Password Cancel Cancel Confirm Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper wallpaper My pictures My pictures System Wallpaper Wallpaper system Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Xeuwa Large Xeuwa Guday Enable transparent effects when moving windows Aktivaz gafsa transparents asitafay xewen Window Minimize Effect Effekt fes xew Scale Gafsa Magic Lamp Lamp Magïk Opacity Opaçite Low Bédd High Xudd Scroll Bars Nafsan chelch Show on scrolling Shus as chelch Keep shown Shus wani Compact Display Drezzt Display If enabled, more content is displayed in the window. Amal, mën dëggu content dëzzt ad shus as xew. Title Bar Height Xef Tit Bar Only suitable for application window title bars drawn by the window manager. Dëgg mën dëggu dëzzt as bar tit ad shus as xew dëgg ad chellaz window manager. Extremely small Dëgg bëdd Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters L'username dawer 3 i akz 32 charakters The first character must be a letter or number L'charakter tawer dawer letre i akz nqamre Your username should not only have numbers L'username dawer tawer nqamres The username has been used by other user accounts L'username dawer tafiq yuqra yuqra ak l'insass The full name is too long L'nom dawer tawer The full name has been used by other user accounts L'nom dawer tafiq yuqra yuqra ak l'insass Wrong password Mot de passe tafiq Standard User Wesetla Administrator Administrateur Customized Kusususit dccV25::AccountsWorker Your host was removed from the domain server successfully Ammushit amsak yuwen nsenzawen asen Your host joins the domain server successfully Amsak yuwen nsenzawen amsak asen Your host failed to leave the domain server Amsak yuwen nsenzawen yidawen amassak asen Your host failed to join the domain server Amsak yuwen nsenzawen yidawen amsak asen AD domain settings Tassawif amsak AS Password not match Chif dawen amassif dccV25::AvatarTypesModel Dimensional Dimansional Flat Plan dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Kesfassen dawen tefedjet yidawen [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_kk.ts ================================================ AccountSettings edit редагуу Add new user Жаңы користувача қосу Set fullname Толук аты-жөнін аттау Login settings Жүктелдік айту құралы Login without password Пароль арқылы жүктелдік айту Delete current account Жетілдік сметаны сатып алу Group setting Жеке салынамасын құралу Account groups Сметалар салынамалары done Тамыр Group name Жеке салынама аты Add group Жеке салынамасы қосу Auto login Авто жүктелдік айту Account Information Сметанын мақсаты Account name, account fullname, account type Сметанын аты, толук аты-жөні, сметанын түрі Account name Сметанын аты Account fullname Сметанын толук аты-жөні Account type Сметанын түрі The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face Жақсыру өз аты I have read and agree to the Мен бул қалыптанузды оқыймын жана атқаруым Disclaimer Туура келбейт Next Келесі Face enrolled Аты жақсырылды Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Картона стилі Dimensional style Демпстүрөлүк стилі Flat style Түкөлүк стилі Cancel Келтірім Save Сактау BatteryPage Screen and Suspend Көрүнгілік және түртілу Turn off the monitor after Мониторды жылыңыз барып жылыңызды ынталандырат Lock screen after Көрүнгілік жылыңыз барып жылыңызды кіру Computer suspends after Компьютер түртін барып түртілу When the lid is closed Капақты жылыңыз барып When the power button is pressed Көңілдік түсті басылғанда Low Battery Жақсырақ кіші Low battery notification Жақсырақ кіші табиғат Auto suspend Ортасында түртілу Auto Hibernate Ортасында қысымылу Low battery threshold Жақсырақ кіші бөлігі Battery Management Жақсырақ куралы Display remaining using and charging time Корытындылық және өнімділікті көрсете Maximum capacity Максималды бөлігі Low battery level Жақсырақ кіші бөлігі Disable Коркун BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Блутутты жылыңыз барып, аты "%1" деп көрсек Bluetooth is turned on, and the name is displayed as "%1" Блутутты жылыңызды ынталандырат, аты "%1" деп көрсек BlueToothDeviceListView Disconnect Жылыңызды жою Connect Жылыңызды жетілу Send Files Файлы жіберу Rename Теріс жазу Remove Device Қорқыту Select file Файлды таңдау BluetoothCtl Edit Тамырлау Allow other Bluetooth devices to find this device Башка Bluetooth касиеттерінің бұл касиетті табуға мүмкіндік беру To use the Bluetooth function, please turn off Bluetooth функциясын қолдану үшін lütfen оттыңыз Airplane Mode Салкау режимі Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Байланысқа кіреді Not connected Байланысқа кіреді жоқ BootPage Startup Settings Аяқталу атқарадары You can click the menu to change the default startup items, or drag the image to the window to change the background image. Сіз менюн түзіп, әрекеттеріңізді өзгертіңіз, немесе ретесіңізді қатынастыңыз үшін ретесіңізді қалыптастырыңыз grub start delay grub басталу тарту theme тәрібі After turning on the theme, you can see the theme background when you turn on the computer Тәрібын қосқанда, қ putі қосқанда тәрібінің ретесін ойнайтын Boot menu verification Баштау менюсінің тексеруі After opening, entering the menu editing requires a password. Колдану суретінен кийін, менюсін өзгертудіңіз үшін пароль керек Change Password Парольді өзгертіңіз Change boot menu verification password Баштау менюсінің тексеруін өзгертіңіз Set the boot menu authentication password Баштау менюсінің аттестация парольын атқарады User Name : Пайдалануын аты : root root New Password : Жаңы пароль : Required Төлөлсөз Password cannot be empty Пароль эмпір емес Passwords do not match Паролдар бір-біріне тақырып жоқ Repeat password: Қайта пароль: Cancel Отмена Sure Тәжіри Start animation Анимацияны бастау Adjust the size of the logo animation on the system startup interface Система басталу интерфейсінде логотип анимациясындын өлкесін өзгерту Camera Allow below apps to access your camera: Төмөнкі арпта ап Parol айланасына таңдауға рұқсат ету: CharaMangerModel Fingerprint1 Тізімді 1 Fingerprint2 Тізімді 2 Fingerprint3 Тізімді 3 Fingerprint4 Тізімді 4 Fingerprint5 Тізімді 5 Fingerprint6 Тізімді 6 Fingerprint7 Тізімді 7 Fingerprint8 Тізімді 8 Fingerprint9 Тізімді 9 Fingerprint10 Тізімді 10 Scan failed Тізім өтінішіне болмады The fingerprint already exists Тізім бар Please scan other fingers Басқа айланаларды тізімді өт Unknown error Түсірілмейген катастрофа Scan suspended Тізім ақпараттарды өтінішін таңдайтын Cannot recognize Негізде айналып калды Moved too fast Тізім өткізілген Finger moved too fast, please do not lift until prompted Турум көп жылып, алдынча көргенде көргөндерди пайда болбайын Unclear fingerprint Турум толук көрүлбөй Clean your finger or adjust the finger position, and try again Турумдун айрым ырларын чыңдоого же турумдын өлчөмүн түзүүгө аракет et ий, алдынча көргенде көргөндерди пайда бол Already scanned Чындыкты көргөн Adjust the finger position to scan your fingerprint fully Турумдын жетишкен өлчөмүнүн түзүүгө аракет et ий, турумду чындыкты көргөнде көргөндерди пайда бол Finger moved too fast. Please do not lift until prompted Турум көп жылып, алдынча көргенде көргөндерди пайда болбайын Lift your finger and place it on the sensor again Турумдын көргөндерди пайда бол, алсызда сенсорго ылайык көрсөт Position your face inside the frame Көзөңүңүздү кадрдагы айрым аймакта көрсөт Face enrolled Көзөңүү киргизилген Position a human face please Көзөңүүнүн айрым аймакын кадрдагы айрым аймакта көрсөтүүлүк Keep away from the camera Камердан айырмалык Get closer to the camera Камерга чыныгы көргөндерди пайда бол Do not position multiple faces inside the frame Кадрдагы айрым аймакта көзөңүүлөрдүн айрым аймактарын көрсөтүүгө аракет etпайын Make sure the camera lens is clean Камеранын өлкөнү чындыктын айрым аймакын чыңдоого аракет et ий Do not enroll in dark, bright or backlit environments Таң-таңсыз, жок-жок же аркылуу айырмалык айырмаларда киргизүүгө аракет etпайын Keep your face uncovered Көзөңүүнүн айрым аймакын чыңдоого аракет et ий Scan timed out Чындык таң кайсып кетти Cancel Болушуна аракет Camera occupied! ColorAndIcons Accent Color Таң-тартуу салыны Icon Settings Иконка өнүгүүлөрү Icon Theme Иконка темасы Customize your theme icon Тема иконасын өзгөртүү Cursor Theme Курсор темасы Customize your theme cursor Тема курсорун өзгөртүү ComfirmDeleteDialog Are you sure you want to delete this account? Сиз бул суреттүүнүн жоюунун төмөнкү нерсесинде эскерсиз? Delete account directory Суреттүүнүн жолун жоюу Cancel Болсун Delete Жоюу ComfirmSafePage Go to settings Түзүлүүлөргө жүрүү Cancel Болсун Common Common Берилген Repeat delay Толугу жарыс күнгөрү Short Кыска Long Жашыраак Repeat rate Толуу түзүлүшү Slow Төмөнкү Fast Жашыраак Numeric Keypad Саналык түштүк test here Бул жерде тест Caps lock prompt Caps lock көрсөткүчү Double Click Speed Негизги бирликтешүү жылысы Double Click Test Негизги бирликтешүү тест Left Hand Mode Калкын көлөм Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Байыркы көлөм Small size Кичирик көлөм Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-kk https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-kk Agree and Join User Experience Program Клиенттердің досы программасына қатысуу үшін қатысқаныңызды қатыстыру <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Жыл жана күнүү түзінүү Date Жыл Year Жыл Month Ай Day Күн Time Жыныс Cancel Отмена Confirm Тақырыпты тақырыптау Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Күн бойы Yesterday Күнөгө кеткен күн Today Бүгін %1 hours earlier than local %1 саат бұрын барлығы %1 hours later than local %1 саат кейін барлығы Space Түсті Week Жаңғырта First day of week Жаңғыртаның бирінші күні Short date Кыска жыл Long date Жаңы жыл Short time Кыска жыныс Long time Жаңырту аралыгы Currency symbol Төлө жөнүндө симболу Positive currency Төлө үчүн позитивдик симболу Negative currency Төлө үчүн негативдик симболу Decimal symbol Тартуу символу Digit grouping symbol Сан өзгөчөлүктөрүнө символу Digit grouping Сан өзгөчөлүктөрү Page size Башкаруу окуянын өлчөмү Example DatetimeWorker Authentication is required to change NTP server NTP серверин өзгөртүү үчүн эпгөрүү керек Authentication is required to set the system timezone DccColorDialog Cancel Болбос Save Сактау DccWindow Control Center provides the options for system settings. Контроль центрү система параметрлеринин түзөлуу мүмкүнчилери бере алат DeepinIDAccountSecurity Bind WeChat Вэйхатты байланышташ By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Вэйхатты байланышташ кылганда, сиз %1 ID-синен жана жергиликтүү суроого жардамчылык кылышыңыз жана жогору маанай жана жакын кабыл алуу үчүн Unlinked Байланыштуу эмес Unbinding Байланышты баскып чыгуу Link Байланышташ Are you sure you want to unbind WeChat? Siz мында баскып чыгууну аныктоо лы? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Вэйхатты баскып чыгуу кпоскунда, сиз Вэйхатты QR кодуна сүрөп кабыл алуу үчүн %1 ID-синен же жергиликтүү суроого жардамчылык кылышыңыз эмес Let me think it over Мен бул суроого аракет кылым Local Account Binding Жергиликтүү суроого байланышташ After binding your local account, you can use the following functions: Жергиликтүү суроонун байланышташтын кпоскунда, сиз ар бир чечимди колдонуу ыкмасыздыңыз: WeChat Scan Code Login System Вэйхат кодун сүрөп жардамчылык системасы Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Вэйхатты колдонуу, бул Вэйхат %1 ID-синен байланышташып жатып, кодун сүрөп кабыл алуу үчүн жергиликтүү сурооңузга кабыл алуу үчүн Reset password via %1 ID %1 ID-сиз аркылуу паролун тастыгуу Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions Башка региондер The feature is not available at present, please activate your system first Сегиңиз бармак, ал эми сizin системаны баштап кылыңыз Subject to your local laws and regulations, it is currently unavailable in your region. Башкастырылышыңыз уюштурулган өлкөлөрдө жана иштеп чыгуу өлкөлөрдө бармак. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' Туура түркө баштап кылуунун өзгөчө программасын таңдаңыз, '%1' add жою Open Desktop file Компьютер тарабынан өстүрүү файлын баштап кылуу Apps (*.desktop) Программалар (*.desktop), All files (*) Бардык файлдар (*), DevelopModePage Root Access Админ аркылуу жеткиликтүү Request Root Access Админ аркылуу жеткиликтүүнү сүрөңүз After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Программчы режимуна киргизген так, админ аркылуу жеткиликтүүгө ээ болушу мүмкүн, бирок системанын толуктуулугун калыптануу үчүн эң жетишкендикте колдоноо керек. Allowed Разрешет Enter Жылуу Online Онлайн Login UOS ID UOS ID-нен киргизүү Offline Оффлайн Import Certificate Төмөнкү кэдитти импорттоо Select file Файлды таңдаңыз Your UOS ID has been logged in, click to enter developer mode Сиздин UOS ID-нин башталып калып жатат, программчы режимун киргизүү үчүн бир нече түшүнүүлөрдү түшүнүү Please sign in to your UOS ID first and continue Сиздин UOS ID-сизге киргизүү үчүн эң баштап кылыңыз жана иштеп чыгуу 1.Export PC Info 1. PC маалыматын экспортуу Export Экспорт 3.Import Certificate 3. Кэдитти импорттоо Development and debugging options Девелопердік және түзініктіру арқылы көмек System logging level Система логдайтын дәрежесі Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Нәтижелерін өзгертілгенде, бірнеше сапаттау жүйесінің құқығын және/ немесе қол жабуын арттыруға арналған болу мүмкін. Off Офф Debug Тест Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Нәтижелерін өзгертілгенде, уақыт үшін бір минутына дейін басқару құрылымын көрсету үшін, қолдану үшін басқару құрылымын қайта басқару керек. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Төмендегі ұстақтарды бұл файлдар және жолдарды қолдану үшін рота беріңіз: Documents Документтер Desktop Міңгілік Pictures Каралар Videos Відеке Music Музыка Downloads Жарық жасалу folder фолдер FontSizePage Size Размер Standard Font Стандарттық шығын Monospaced Font Тұрақты шығын GeneralPage Power Plans Жүйе пландары Power Saving Settings Жүйе қорғау құралдары Auto power saving on low battery Низа батареясында автоматты қорғау Low battery threshold Низа батареясында жетекшілік Auto power saving on battery Батареясында автоматты қорғау Wakeup Settings Басқару құрылымының жыртылу құралдары Password is required to wake up the computer Пароль қажет етеді, әртүрлі компьтерді басқару үшін Password is required to wake up the monitor Пароль қажет етеді, мониторды басқару үшін Shutdown Settings Шығару ашылуу параметрлері Scheduled Shutdown Жетише жығаруу Time Саат Repeat Таңдау Once Бір жол Every day Күн күн Working days Шаардағы күндер Custom Time Кастом саат Decrease screen brightness on power saver Жаңырақ модде аркылуынан екінші есептің көршілігін азайту GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , , ... ... InterfaceEffectListview Optimal Performance Түзімді артыру Balance Негізделген Best Visuals Түзімді артыру Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language Тіл done Тапсырмадан басылды edit редактіру Other languages Басқа тілдер add қоса Region Бөлім Area Бөлім Operating system and applications may provide you with local content based on your country and region Операциялық система және әрекеттер ұстазыңызға өзіңіздің қызметінде және бөлімінде міндетті контент береді Operating system and applications may set date and time formats based on regional formats Операциялық система және әрекеттер регіондық форматтарға қатысты даталар және уақыт форматтарын атқарады Regional format LangsChooserDialog Add language Тіл қосу Search Табыс Cancel Тастау Add Қосу LoginMethod Login method Кіріс түрі Password, wechat, biometric authentication, security key Құпия сөз, WeChat, биометриялық аутентификация, құралдық құпия сөз Password Құпия сөз Modify password Құпия сөз ауқой Validity days Корытынды күндің саны Always Әр күн Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Автоматтық шумды түштіру Input Volume Кірістік ортамдығындың жалпысы Input Level Кірістік ортамдығындың дәрежесі Input Кірістік No input device for sound found Зомдын кірістік ортамдығы табылмады Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices Міндетімініңізді NativeInfoPage UOS UOS Computer name Компьютердин аты It cannot start or end with dashes Ол таңбалармен басталып аякталмайды OS Name ОС аты Version Жылысы Edition Жүйесі Type Түрі bit бит Authorization Тандалу System installation time Система ыңғайлысының таңдауының уақыты Kernel Кернел Graphics Platform Графикалық платформа Processor Процессор Memory Негізгі памық 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Басқа міндеттер Show Bluetooth devices without names Аты жок Bluetooth міндеттерін көрсөт PasswordLayout Current password Жою күлкі Required Қажетті Weak Төмөнкү Medium Мындай Strong Қалыптастырылған Repeat Password Құпия сөзді көрсет Password hint Құпия сөз көрсетуі Optional Кездесетін Password cannot be empty Құпия сөз басқа жоқ Passwords do not match Құпия сөздер тең емес The hint is visible to all users. Do not include the password here. Көрсеткіш бар пользоваттерге түсінікті. Құпия сөзді бұттан көрсетуі мүмкін. New password New password should differ from the current one Жаңы құпия сөз кеңесінде қолданылған құпия сөзден кеңейтіледі The password cannot be the same as the username. PasswordModifyDialog Modify password Құпия сөзі өзгерту Reset password Құпия сөзі азайту Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Құпия сөз кіруі 8 символдан аз болмасыз және құпия сөзі келесі 3 символдан бірінің комбинациясын жинағып, өзгерістерге жетілдіріледі. Бұл құпия сөздің жақсартылуы мүмкін. Resetting the password will clear the data stored in the keyring. Құпия сөзі азайту үшін кеңесінде қалыптасқан мақсаттарды өлтіреді. Cancel Болдырмау Personalization Personalization PersonalizationInterface Light Көркем Auto Авто Dark Күнімді Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Туғандаған PluginArea Plugin Area Плагин аймағы Select which icons appear in the Dock Қай иконкалар Докта көрсетіледі Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Тындау Suspend Тақырыптау Hibernate Жүгүртүү Turn off the monitor Экранды жою Show the shutdown Interface Катышу интерфейсін көрсет Do nothing Ол көбүнчө PowerPage Screen and Suspend Экранды жана тазыруу Turn off the monitor after Экранды жоюňын keyін Lock screen after Экранды көңілді түштүрүү keyін Computer suspends after Компьютер тазыркы keyін When the lid is closed Капкан жылынан курулганда When the power button is pressed Пайыз түстүн басылып PowerPlansListview High Performance Таңдалгы таразы Balance Performance Таразы балансы Aggressively adjust CPU operating frequency based on CPU load condition CPU иштөө жүйесинин иштөө узундугуна жетишкендік таанды Balanced Баланс Power Saver Көп аркылуу арқылы Prioritize performance, which will significantly increase power consumption and heat generation Таразын арттырууга жетишкендік, бул энергияды жана жогорулыгын иштеп чыгууга арналыштырат Balancing performance and battery life, automatically adjusted according to usage Таразы жана батареянын күчтүүлүгү балансы, колдонууна арналыштырмалы таанды Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Батареянын күчтүүлүгүн арттырууга жетишкендік, бул системанын көбүнчө таразын жогорулоо үчүн аткарууга арналыштыралып PowerWorker Minutes Минут Hour Саат Never Ал эмес Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Кіріспе калыптану Copy Link Address PwqualityManager Password cannot be empty Пароль булак болушу мүмкүн эмес Password must have at least %1 characters Пароль %1 символдан аз болушу мүмкүн эмес Password must be no more than %1 characters Пароль %1 символдан көп болушу мүмкүн эмес Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Пароль бірнеше міндетті симболдарындағы, сандардың немесе ретінде кішкентай латынша сөздерге (беттілік арқылы көрсетілген) мүнөздірілген. (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please %1 деген санда бірнеше симболдың саралуы бар символдары кіруі мүмкін No more than %1 monotonic characters please %1 деген санда бірнеше жетістік символдары кіруі мүмкін No more than %1 repeating characters please %1 деген санда бірнеше қайталап қалатын символдары кіруі мүмкін Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Пароль кішкентай латынша сөздер, кішкентай латынша сөздер, сандар және символдар (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) қандайсыздарды барысында кірілуі мүмкін Password must not contain more than 4 palindrome characters Пароль 4 деген санда бірнеше симболдың саралуы бар символдарын барысында кіруі мүмкін емес Do not use common words and combinations as password Оңтүстік сөздер және комбинацияларды паролы кіруі мүмкін емес Create a strong password please Күчті пароль түзіңіз It does not meet password rules Бұл пароль қате QObject Control Center Контрол жоғарылышы Activated Активді View Жасалу To be activated Активді етіледі Activate Активді ету Expired Сыртқы In trial period Триaling уақытына Trial expired Триaling уақыты басты dde-control-center dde-control-center Touch Screen Settings Түсті экран параметрлері The settings of touch screen changed Түсті экран параметрлері өзгертілді This system wallpaper is locked. Please contact your admin. Бұл системалық курама жою өндірілген. Өзіңіздің администраторына байланысқаныңыз. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Көрсете Default formats Стандарттаулар форматтары First day of week Недең өзгөчө күні Short date Короткая дата Long date Долгая дата Short time Короткое время Long time Долгое время Currency symbol Монета симболы Digit Жылыз Paper size Көзөмөл көлөмү Cancel Түшүнө Save Сактоо Regional format RegionsChooserWindow Search Тызбөө RegisterDialog Set a Password Көзөмөл сүрөттөө 8-64 characters 8-64 символ Repeat the password Көзөмөлдүн тарабынан үлгүнүнү көрсөтүү Cancel Түшүнө Confirm Таанылыш Passwords don't match Көзөмөлдөр толуктук келбейт ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver Көзөмөл көлөмү preview Түзө Personalized screensaver Көзөмөл көлөмүнү кыскачуу setting Түштүк idle time Көзөмөл көлөмү 1 minute 1 минутта 5 minute 5 минутта 10 minute 10 минутта 15 minute 15 минутта 30 minute 30 минут 1 hour 1 сағат never ақпарат бермей Password required for recovery Користуу паролу керек Picture slideshow screensaver Көрсөткүч карточкалар слайс System screensaver Системалык карточкак слайс SearchableListViewPopup Search Табу No search results ShortcutSettingDialog Add custom shortcut Кастом шорткат қосу Name: Аты: Required Талапталат Command: Команда: Shortcut Шорткат None Жоқ Cancel Тарту Add Қосу The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts Шорткаттар System shortcut, custom shortcut Системалық шорткат, кастом шорткат Search shortcuts Табу шорткаттары done Берілген edit Түз Click Көрсөткүчке түз Cancel Тастық or ысырыңыз Replace Көрсеткенди өзгерт Restore default Натыйжанын таңдауына қайтыстыру Add custom shortcut Кастом шорткат қосу please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Шығу жөндөмдөрү Select whether to enable the devices Жөндөмдөрдү өнөрдүнүн өзгөчөлүктөрүнүн алууну созу Input Devices Жүйө жөндөмдөрү SoundEffectsPage Sound Effects Звук жөндөмдөрү SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Арттыру Shut down Жою Log out Жетиштүү Wake up Акыркылыш Volume +/- Гүлдөрүнө +/- Notification Жалпысыз бөлүштүрүү Low battery Жылыз батарейка Send icon in Launcher to Desktop Лаунчерда иконкага басып, аркылы жердеги жылыз батарейка Empty Trash Көргөзмөнү тазалоо Plug in Жүктөнү жүктеу Plug out Жүктөнү жылуу Removable device connected Таңдашуу жөндөм жетиштүү болгон Removable device removed Таңдашуу жөндөм жылуу болгон Error Таа SpeakerPage Mode Мода Output Volume Шығу гүлдөрү Volume Boost Гүлдік арттыру If the volume is louder than 100%, it may distort audio and be harmful to output devices Егер гүлдік 100% дегенде аз емес болса, ол звука көркемді калыптандыруы мүмкін және шығыс жөндерге жақсартылатын Left Калім Right Тұрақты Output Шығыс No output device for sound found Звука шығыс жөнірі жоқ Left Right Balance Калім-турақты баланс Merge left and right channels into a single channel Калім және тұрақты каналдарды бір каналға қосу Whether the audio will be automatically paused when the current audio device is unplugged Егер жүзеге асырғанда негізгі аудио жөнірі тақталады ма? Mono Audio Auto Pause Output Device SyncInfoListModel Sound Звук Power Көзөмөлдүк Mouse Мause Update Өзгөртүү Screensaver Көзөмөлдүк туралы қаралу System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers Көбірек көзөмөлдүктер TimeAndDate Auto sync time Орналасқан уақыт синхронизациясы Ntp server NTP сервері System date and time Система уақыт жана күн Customize Туындайтын Settings Түзүлүш Server address Сервер аドレスі Required Талапталатын The ntp server address cannot be empty NTP серверин айрым айрым бере алмайсын Use 24-hour format 24-саат форматын колдон system time zone система время зонасы Timezone list Zona жасалуы Add TimeRange from соңғы to күнү TimeoutDialog Save the display settings? Көрүнүш түзүлөшүн кеңейт Settings will be reverted in %1s. Түзүлөш %1с кайтышында кайтышы керек Revert Кайттыру Save Кеңейтүү TimezoneDialog Add time zone Zona жөнөтүү Determine the time zone based on the current location Жергиликтеги жайга киргизсизде күнө жазуу зонасын таңдашын Time zone: Zona: Nearest City: Күнүк шаар: Cancel Оттыруу Save Кеңейтүү TouchScreen TouchScreen Жасыл экран Set up here when connecting the touch screen Жасыл экранга байланышып, бул жерде түзүү Touchpad Basic Settings Негизги түзүлөш Touchpad Жасыл экран Pointer Speed Белештүү жылысы Slow Жогору Fast Төмөнкү Disable touchpad during input Киргизүүдө жасыл экранды жайгаштыруу Tap to Click Кликтөрүү Natural Scrolling Түз бекіту Three-finger gestures Три жылыс жүйелері Four-finger gestures Төрт жылыс жүйелері Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Користушуу мамилесине кирүү Copy Link Address VerifyDialog Security Verification Жамбылдатуу тасымалык The action is sensitive, please enter the login password first Намыс ар кандай, эң бирин користуу паролу киргизин 8-64 characters 8-64 символ Forgot Password? Паролун жайгаштырдыңыз? Cancel Болбосу Confirm Тааным Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper бекас My pictures Менин кадрларым System Wallpaper Системадык бекас Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Кішкентай Large Демек Enable transparent effects when moving windows Окнадан жүктүндүк кезде прозрачтандыруу өзгөртүүлерди иштеп чыгуу Window Minimize Effect Окно кемитүү өзгөртүүсү Scale Масштабдандыруу Magic Lamp Магиялы таң Opacity Таңдама Low Негизги High Түшүк Scroll Bars Көрсөткүч бары Show on scrolling Көрсөтүү кезде көрсөтүү Keep shown Көрсөтүүнү кыскартуу Compact Display Компакттык көрсөткүч If enabled, more content is displayed in the window. Егер иштеп чыгылып келсе, окнада ар көп контент көрсөтүлөт. Title Bar Height Окно ат барынын көлөмү Only suitable for application window title bars drawn by the window manager. Негизинен оюн жөнүндө окнадын ат барындашатын оюн менеджери менен сүрөттөлгөн. Extremely small Жөнөкөй Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters Қалқысыңыз 3-ден 32-ге дейін болуы керек The first character must be a letter or number Ең бірінші символ сөймеге немесе сан болуы керек Your username should not only have numbers Қалқысыңыз сандарға биікті болмайтын керек The username has been used by other user accounts Кейде басқа користуу сәйкесініңізді пайдаланылған The full name is too long Толық аты-жөні толған The full name has been used by other user accounts Кейде басқа користуу сәйкесініңізді пайдаланылған Wrong password Қате пароль Standard User Стандарттыс пользователь Administrator Администратор Customized Кастомдыс dccV25::AccountsWorker Your host was removed from the domain server successfully Жаңырыңыз көмүн домен серверинен жетишиңиз керек Your host joins the domain server successfully Жаңырыңыз көмүн домен серверге жетишиңиз керек Your host failed to leave the domain server Жаңырыңыз көмүн домен серверинин туратыңыз керек Your host failed to join the domain server Жаңырыңыз көмүн домен серверге жетишиңиз керек AD domain settings AD домен маалыматтары Password not match Құпия сөз тақырыбын түз dccV25::AvatarTypesModel Dimensional Дөңгелектік Flat Толугон dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Бұл қысқаша пайдалануы [1] сақталуы сұрайыт dccV25::PwqualityManager Password cannot be empty Пароль булактан тастырылмайсыз Password must have at least %1 characters Пароль minimum %1 симболдан туратында Password must be no more than %1 characters Пароль %1 симболдунан аз болуп туратында Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Парольдин бірнеше символдарындағы барлығы англий тілінің сөймесі (басып-таңк), саны немесе атқарадық симболдары (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) барысында болушы мүмкін No more than %1 palindrome characters please Палиндром символдардын барысы %1-ге эсептіңіз No more than %1 monotonic characters please Тек түрдік символдардын барысы %1-ге эсептіңіз No more than %1 repeating characters please Түзгі символдардын барысы %1-ге эсептіңіз Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Парольдин барысы басып-таңк сөймесі, таңк сөймесі, сандар және атқарадық симболдар (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) болып туратында Password must not contain more than 4 palindrome characters Парольдин барысы 4-ден ашық палиндром символдарын жоқ болуы керек Do not use common words and combinations as password Түп-түнді сөздер және комбинацияларды паролын қолданып қойыңыз Create a strong password please Жаңы жоғары пароль құрыңыз It does not meet password rules Пароль кездерге жетіспейт At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Система Window Кеңістік Workspace Мекен-жай AssistiveTools Таасирпесіз алаттар Custom Кастом None Жоқ ================================================ FILE: translations/dde-control-center_km_KH.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel បោះបង់ Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel បោះបង់ Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel បោះបង់ Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel បោះបង់ Save រក្សាទុក BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected បានភ្ជាប់ Not connected មិនបាន​តភ្ជាប់ BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel បោះបង់ Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel បោះបង់ Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel បោះបង់ Delete ComfirmSafePage Go to settings Cancel បោះបង់ Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel បោះបង់ Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel បោះបង់ Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel បោះបង់ Save រក្សាទុក DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel បោះបង់ Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel បោះបង់ Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel បោះបង់ Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel បោះបង់ Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom ការកំណត់ត្រាការបញ្ចូល PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down បិទ Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center មជ្ឈមណ្ឌលបញ្ជា Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel បោះបង់ Save រក្សាទុក Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel បោះបង់ Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel បោះបង់ Save រក្សាទុក ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None គ្មេាំង Cancel បោះបង់ Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save រក្សាទុក click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel បោះបង់ or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down បិទ Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System ការកំណត់ត្រាការបញ្ចូល SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save រក្សាទុក TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel បោះបង់ Save រក្សាទុក TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel បោះបង់ Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None គ្មេាំង Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) ចិនបុរាណ (ហុងកុង ចិន) Traditional Chinese (Chinese Taiwan) ចិនបុរាណ (តៃវ៉ាន់ ចិន) Min Nan Chinese dcc::Locale::regionNames Taiwan China តៃវ៉ាន់ ចិន dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] ការបញ្ជូលច្បាប់នេះមានជំនួយខាងចុងខាងស្តាំ [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System ការកំណត់ត្រាការបញ្ចូល Window បង្អួច Workspace គាំទ្រការបញ្ចូល AssistiveTools កម្មវិធីការងារការបញ្ចូល Custom ការកំណត់ត្រាការបញ្ចូល None គ្មេាំង ================================================ FILE: translations/dde-control-center_kn_IN.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom ಕಸ್ಟಮ್ PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None ಯಾವುದೂ ಇಲ್ಲ Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System ಸಿಸ್ಟಮ್ SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None ಯಾವುದೂ ಇಲ್ಲ Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) ಕ್ಯಾಚಿನ್ ಕ್ಯಾಚಿನ್ (ಕ್ಯಾಚಿನ್ ಹಾಂಗ್ ಕಾಂಗ್) Traditional Chinese (Chinese Taiwan) ಕ್ಯಾಚಿನ್ ಕ್ಯಾಚಿನ್ (ಕ್ಯಾಚಿನ್ ತೈವಾನ್) Min Nan Chinese dcc::Locale::regionNames Taiwan China ತೈವಾನ್ ಕ್ಯಾಚಿನ್ dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] ಈ ಶರ್ಕ್ಯಟ್ ಕಾನ್ಫ್ಲಿಕ್ಟ್ ಆಗಿದೆ [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System ಸಿಸ್ಟಮ್ Window ವಿಂಡೋ Workspace ವರ್ಕ್ಸ್ಪೇಸ್ AssistiveTools ಸಹಾಯಕ ಕರಗಳು Custom ಕಸ್ಟಮ್ None ಯಾವುದೂ ಇಲ್ಲ ================================================ FILE: translations/dde-control-center_ko.ts ================================================ AccountSettings edit 수정 Add new user 새 사용자 추가 Set fullname 전체 이름 설정 Login settings 로그인 설정 Login without password 비밀번호 없이 로그인 Delete current account 현재 계정 삭제 Group setting 그룹 설정 Account groups 계정 그룹 done 완료 Group name 그룹 이름 Add group 그룹 추가 Auto login 자동 로그인 Account Information 계정 정보 Account name, account fullname, account type 계정 이름, 계정 전체 이름, 계정 유형 Account name 계정 이름 Account fullname 계정 전체 이름 Account type 계정 유형 The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face 얼굴 등록 I have read and agree to the 我已经阅读并同意 Disclaimer 免责声明 Next 다음 Face enrolled 已注册面部 Failed to enroll your face 얼굴 등록에 실패했습니다 Done 완료 Cancel 취소 Retry Enroll 다시 등록 Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel 취소 Done 완료 Enroll Finger 지문 등록 Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. 등록할 지문을 지문 센서에 위치시키고, 아래에서 위로 움직입니다. 작업을 완료한 후에는 손을 들어주세요. I have read and agree to the 我已经阅读并同意 Disclaimer 免责声明 Next 다음 Retry Enroll 다시 등록 "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. "생체 인증"는 유닉스테크 소프트웨어 기술 주식회사가 제공하는 사용자 인증 기능입니다. "생체 인증"을 통해 수집된 생체 정보는 장치에 저장된 정보와 비교되어 사용자 인증이 이루어집니다. 유닉스테크 소프트웨어 기술 주식회사는 생체 정보를 수집하거나 접근하지 않으며, 해당 정보는 로컬 장치에 저장됩니다. 개인 장치에서 생체 인증을 활성화하고 관련 작업을 수행하려면 자신의 생체 정보만 사용하고, 다른 사람의 생체 정보를 즉시 비활성화 또는 삭제하십시오. 그렇지 않으면 그로 인해 발생하는 위험을 부담해야 합니다. 유닉스테크 소프트웨어 기술 주식회사는 생체 인증의 보안, 정확성 및 안정성을 연구하고 개선하고 있습니다. 하지만 환경, 장비, 기술 등 다양한 요인과 위험 관리로 인해 일시적으로 생체 인증을 통과할 수 없다는 보장이 없습니다. 따라서 유닉스에서 "서비스와 지원"을 통해 생체 인증 사용 시 질문이나 제안을 제공하지 않아 UOS에 로그인하는 유일한 방법으로 생체 인증을 사용하지 마십시오. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first 자동 로그인은 한 계정만 활성화할 수 있습니다. 먼저 "%1" 계정의 자동 로그인을 비활성화해주세요 Ok 확인 AvatarSettingsDialog Images 이미지 Human 사람 Animal 동물 Scenery 경치 Illustration LLU Emoji 모티브 custom 커스텀 Cartoon style 카툰 스타일 Dimensional style 다차원 스타일 Flat style 평평한 스타일 Cancel 취소 Save 저장 BatteryPage Screen and Suspend 화면과 정지 Turn off the monitor after 모니터를 끄는 후 Lock screen after 화면 잠금 후 Computer suspends after 컴퓨터는 후에 정지 When the lid is closed 노트북 떡장이 닫힌 시점 When the power button is pressed 전원 버튼이 누를 때 Low Battery 저전력 Low battery notification 저전력 알림 Auto suspend 자동 정지 Auto Hibernate 자동 하ibernation Low battery threshold 저전력 임계값 Battery Management 배터리 관리 Display remaining using and charging time 사용 시간과 충전 시간을 표시 Maximum capacity 최대 용량 Low battery level 저전력 수준 Disable 비활성화 BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" 블루투스가 끄고, 이름은 "%1"로 표시됨 Bluetooth is turned on, and the name is displayed as "%1" 블루투스가 켜지고, 이름은 "%1"로 표시됨 BlueToothDeviceListView Disconnect 끊기 Connect 연결 Send Files 파일 전송 Rename 이름 변경 Remove Device 장치 삭제 Select file 파일 선택 BluetoothCtl Edit 편집 Allow other Bluetooth devices to find this device 기타 블루투스 장치가 이 장치를 찾을 수 있도록 허용 To use the Bluetooth function, please turn off 블루투스 기능을 사용하려면 비행기 모드를 켜주세요 Airplane Mode 비행기 모드 Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected 연결됨 Not connected 연결되지 않음 BootPage Startup Settings 시작 설정 You can click the menu to change the default startup items, or drag the image to the window to change the background image. 메뉴를 클릭하여 기본 시작 항목을 변경하거나 이미지를 드래그하여 배경 이미지를 변경할 수 있습니다. grub start delay grub 시작 지연 시간 theme 테마 After turning on the theme, you can see the theme background when you turn on the computer 테마를 켜면 컴퓨터를 켰을 때 테마 배경을 볼 수 있습니다. Boot menu verification 시작 메뉴 인증 After opening, entering the menu editing requires a password. 열린 후 메뉴 편집을 위해서는 비밀번호가 필요합니다. Change Password 비밀번호 변경 Change boot menu verification password 시작 메뉴 인증 비밀번호 변경 Set the boot menu authentication password 시작 메뉴 인증 비밀번호 설정 User Name : 사용자 이름 : root root New Password : 새 비밀번호 : Required 필수 Password cannot be empty 비밀번호는 비어있을 수 없습니다. Passwords do not match 비밀번호가 일치하지 않습니다. Repeat password: 비밀번호 다시 입력: Cancel 취소 Sure 확인 Start animation 시작 애니메이션 Adjust the size of the logo animation on the system startup interface 시스템 시작 화면의 로고 애니메이션 크기를 조정합니다 Camera Allow below apps to access your camera: 아래 앱이 카메라에 접근할 수 있도록 허용합니다: CharaMangerModel Fingerprint1 인식번호1 Fingerprint2 인식번호2 Fingerprint3 인식번호3 Fingerprint4 인식번호4 Fingerprint5 인식번호5 Fingerprint6 인식번호6 Fingerprint7 인식번호7 Fingerprint8 인식번호8 Fingerprint9 인식번호9 Fingerprint10 인식번호10 Scan failed 스캔 실패 The fingerprint already exists 이미 인식번호가 존재합니다 Please scan other fingers 다른 손가락을 스캔해주세요 Unknown error 알 수 없는 오류 Scan suspended 스캔 중지 Cannot recognize 인식할 수 없습니다 Moved too fast 빠르게 움직였습니다 Finger moved too fast, please do not lift until prompted 지나치게 빠르게 움직였습니다. 안내에 따라提升请勿抬起 Unclear fingerprint 모호한 손바닥 인식 Clean your finger or adjust the finger position, and try again 손을 깨끗이 하거나 손 위치를 조정한 후 다시 시도해주세요 Already scanned 이미 스캔되었습니다 Adjust the finger position to scan your fingerprint fully 손 위치를 조정하여 손바닥을 완전히 스캔하십시오 Finger moved too fast. Please do not lift until prompted 지나치게 빠르게 움직였습니다. 안내에 따라提升请勿抬起 Lift your finger and place it on the sensor again 손을 들어 다시 센서 위에 두세요 Position your face inside the frame 얼굴을 프레임 안에 위치시킵니다 Face enrolled 얼굴 등록 완료 Position a human face please 인간 얼굴을 위치시켜주세요 Keep away from the camera 카메라로부터 멀리 떨어져 있어야 합니다 Get closer to the camera 카메라에 가까이 가세요 Do not position multiple faces inside the frame 프레임 안에 여러 얼굴을 위치시키지 마세요 Make sure the camera lens is clean 카메라 렌즈가 깨끗한지 확인하세요 Do not enroll in dark, bright or backlit environments 어두운 곳, 밝은 곳 또는 뒤등반된 환경에서 등록하지 마세요 Keep your face uncovered 얼굴을 덮지 마세요 Scan timed out 스캔 시간 초과 Cancel 취소 Camera occupied! ColorAndIcons Accent Color 강조 색상 Icon Settings 아이콘 설정 Icon Theme 아이콘 테마 Customize your theme icon 테마 아이콘을 설정합니다 Cursor Theme 커서 테마 Customize your theme cursor 테마 커서를 설정합니다 ComfirmDeleteDialog Are you sure you want to delete this account? 이 계정을 정말로 삭제하시겠습니까? Delete account directory 계정 디렉토리 삭제 Cancel 취소 Delete 삭제 ComfirmSafePage Go to settings 설정으로 이동 Cancel 취소 Common Common 일반 Repeat delay 반복 지연 Short 짧음 Long Repeat rate 반복 속도 Slow 느림 Fast 빠름 Numeric Keypad 숫자 키패드 test here 테스트 여기 Caps lock prompt Caps Lock 표시 Double Click Speed 더블 클릭 속도 Double Click Test 더블 클릭 테스트 Left Hand Mode 左手模式 Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size 크기 큰 것 Small size 크기 작은 것 Failed to get root access 루트 액세스를 얻을 수 없습니다 Please sign in to your Union ID first 먼저 유니온 ID로 로그인하세요 Cannot read your PC information PC 정보를 읽을 수 없습니다 No network connection 네트워크 연결이 없습니다 Certificate loading failed, unable to get root access 인증서 로딩에 실패했습니다, 루트 액세스를 얻을 수 없습니다 Signature verification failed, unable to get root access 서명 검증에 실패했습니다, 루트 액세스를 얻을 수 없습니다 Agree and Join User Experience Program 사용자 경험 프로그램에 동의하고 참여하기 The Disclaimer of Developer Mode 개발자 모드의 공지사항 Agree and Request Root Access 동의하고 루트 액세스 요청하기 Start setting the new boot animation, please wait for a minute 새로운 부트 애니메이션 설정을 시작합니다, 한 분 정도 기다려주세요 Setting new boot animation finished 새로운 부트 애니메이션 설정이 완료되었습니다 The settings will be applied after rebooting the system 시스템 재부팅 후 설정이 적용됩니다 Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters 비밀번호는 숫자와 문자를 포함해야 합니다 Password must be between 8 and 64 characters 비밀번호는 8글자에서 64글자 사이여야 합니다 CreateAccountDialog Create a new account 새로운 계정 만들기 Account type 계정 유형 UserName 사용자 이름 Required 필수 FullName 전체 이름 Optional 선택 사항 Cancel 취소 Create account 계정 만들기 Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. 아직 프로필 사진을 업로드하지 않았습니다. 이미지를 업로드하려면 클릭하거나 드래그 앤 드롭하세요. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available 사용 가능 DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program 사용자 경험 프로그램에 동의하고 참여하기 <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting 날짜 및 시간 설정 Date 날짜 Year Month Day Time 시간 Cancel 취소 Confirm 확인 Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow 내일 Yesterday 어제 Today 오늘 %1 hours earlier than local %1시간 전 %1 hours later than local %1시간 후 Space 스페이스 Week First day of week 주 시작일 Short date 단순 날짜 Long date 상세 날짜 Short time 단순 시간 Long time 상세 시간 Currency symbol 통화 기호 Positive currency 양수 통화 Negative currency 음수 통화 Decimal symbol 소수점 표시 Digit grouping symbol 숫자 그룹화 표시 Digit grouping 숫자 그룹화 Page size 페이지 크기 Example DatetimeWorker Authentication is required to change NTP server NTP 서버 변경을 위해 인증이 필요합니다 Authentication is required to set the system timezone 시스템 시간대를 설정하려면 인증이 필요합니다 DccColorDialog Cancel 취소 Save 저장 DccWindow Control Center provides the options for system settings. 컨트롤 센터는 시스템 설정 옵션을 제공합니다. DeepinIDAccountSecurity Bind WeChat WeChat 바인딩 By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. WeChat을 바인딩하면 %1 ID와 로컬 계정에 안전하고 빠르게 로그인할 수 있습니다. Unlinked 해제됨 Unbinding 해제 중 Link 바인딩 Are you sure you want to unbind WeChat? WeChat을 해제하시겠습니까? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. WeChat을 해제하면 WeChat을 사용하여 %1 ID 또는 로컬 계정에 QR 코드를 스캔하여 로그인할 수 없습니다. Let me think it over 생각해 보겠습니다 Local Account Binding 로컬 계정 바인딩 After binding your local account, you can use the following functions: 로컬 계정을 바인딩하면 다음 기능을 사용할 수 있습니다: WeChat Scan Code Login System WeChat 스캔 코드 로그인 시스템 Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. WeChat을 %1 ID와 바인딩한 후 로컬 계정에 로그인하기 위해 코드를 스캔합니다. Reset password via %1 ID %1 ID를 통해 비밀번호 재설정 Reset your local password via %1 ID in case you forget it. 비밀번호를 잊었다면 %1 ID를 통해 로컬 비밀번호를 재설정할 수 있습니다. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. 이 기능을 사용하려면 컨트롤 센터 - 계정으로 이동하여 관련 옵션을 활성화하세요. DeepinIDInterface deepin 데빈 UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' '%1'를 열기 위한 기본 프로그램을 선택해 주세요, add 추가 Open Desktop file 데스크톱 파일 열기 Apps (*.desktop) 응용 프로그램 (*.desktop) All files (*) 모든 파일 (*) DevelopModePage Root Access 루트 액세스 Request Root Access 루트 액세스 요청 After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. 개발자 모드에 진입하면 루트 권한을 얻을 수 있지만, 시스템의 안전성을 손상시킬 수도 있으므로 주의하십시오. Allowed 허용됨 Enter 입장 Online 온라인 Login UOS ID UOS ID 로그인 Offline 오프라인 Import Certificate 인증서 가져오기 Select file 파일 선택 Your UOS ID has been logged in, click to enter developer mode 당신의 UOS ID가 로그인되었습니다. 개발자 모드로 진입하려면 클릭하세요 Please sign in to your UOS ID first and continue 먼저 UOS ID에 로그인하십시오. 계속하십시오 1.Export PC Info 1. PC 정보export Export EXPORT 3.Import Certificate 3.인증서 가져오기 Development and debugging options 개발 및 디버깅 옵션 System logging level 시스템 로깅 수준 Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. 옵션을 변경하면 더 자세한 로깅이 발생하여 시스템 성능이 저하될 수 있으며/또는 더 많은 저장 공간을 차지할 수 있습니다. Off 꺼짐 Debug 디버그 Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. 옵션 변경은 성공 메시지를 받은 후 최대 1분 동안 처리될 수 있습니다. 적용을 위해서는 장치를 재부팅해야 합니다. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display 디스플레이 Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: 아래 앱들이 이 파일과 폴더에 접근할 수 있도록 허용합니다: Documents 문서 Desktop 데스크톱 Pictures 사진 Videos 비디오 Music 음악 Downloads 다운로드 folder 폴더 FontSizePage Size 크기 Standard Font 표준 폰트 Monospaced Font 고정 폰트 GeneralPage Power Plans 파워 플랜 Power Saving Settings 파워 절약 설정 Auto power saving on low battery 저전력 상태에서 자동으로 파워 절약 모드로 전환 Low battery threshold 저전력 임계값 Auto power saving on battery 배터리 상태에서 자동으로 파워 절약 모드로 전환 Wakeup Settings akeup 설정 Password is required to wake up the computer 컴퓨터를 깨우려면 비밀번호가 필요합니다 Password is required to wake up the monitor 모니터를 깨우려면 비밀번호가 필요합니다 Shutdown Settings シャットダウン設定 Scheduled Shutdown 예약된 종료 Time 시간 Repeat 반복 Once 한 번만 Every day 매일 Working days 평일 Custom Time 커스텀 시간 Decrease screen brightness on power saver 절전 모드에서 화면 밝기 줄이기 GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , , ... ... InterfaceEffectListview Optimal Performance 최적의 성능 Balance 균형 Best Visuals 최적의 시각적 효과 Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language 언어 done 완료 edit 편집 Other languages 다른 언어 add 추가 Region 지역 Area 지역 Operating system and applications may provide you with local content based on your country and region 운영 체제와 애플리케이션은 국가와 지역에 따라 로컬 콘텐츠를 제공할 수 있습니다. Operating system and applications may set date and time formats based on regional formats 운영 체제와 애플리케이션은 지역 형식에 따라 날짜와 시간 형식을 설정할 수 있습니다. Regional format LangsChooserDialog Add language 언어 추가 Search 검색 Cancel 취소 Add 추가 LoginMethod Login method 로그인 방법 Password, wechat, biometric authentication, security key 비밀번호, 위챗, 생체 인증, 보안 키 Password 비밀번호 Modify password 비밀번호 변경 Validity days 유효 기간 Always 항상 Reset password LogoModule Copyright© 2011-%1 Deepin Community 저작권© 2011-%1 Deepin 커뮤니티 Copyright© 2019-%1 UnionTech Software Technology Co., LTD 저작권© 2019-%1 유니온텍 소프트웨어 기술 회사 MicrophonePage Automatic Noise Suppression 자동 소음 억제 Input Volume 입력 볼륨 Input Level 입력 레벨 Input 입력 No input device for sound found 음소리에 대한 입력 장치를 찾지 못했습니다 Input Device Mouse Mouse and Touchpad 마우스와 터치패드 Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices 내 기기 NativeInfoPage UOS 우ОС Computer name 컴퓨터 이름 It cannot start or end with dashes 시작이나 끝에 빼 Gratuité선은 사용할 수 없습니다 OS Name 운영 체제 이름 Version 버전 Edition 판본 Type 유형 bit 비트 Authorization 인증 System installation time 시스템 설치 시간 Kernel 커널 Graphics Platform 그래픽스 플랫폼 Processor 프로세서 Memory 메모리 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices 기타 기기 Show Bluetooth devices without names 이름이 없는 블루투스 기기를 표시 PasswordLayout Current password 현재 비밀번호 Required 필수 Weak 약함 Medium 중간 Strong 강함 Repeat Password 비밀번호 재입력 Password hint 비밀번호ヒント Optional 선택 사항 Password cannot be empty 비밀번호不能为空 Passwords do not match 비밀번호가 일치하지 않습니다 The hint is visible to all users. Do not include the password here. 힌트는 모든 사용자가 볼 수 있습니다. 여기에 비밀번호는 포함하지 마십시오. New password New password should differ from the current one 새 비밀번호는 현재 비밀번호와 다릅니다 The password cannot be the same as the username. PasswordModifyDialog Modify password 비밀번호 변경 Reset password 비밀번호 초기화 Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. 비밀번호 길이는 최소 8자 이상이어야 하며, 비밀번호는 최소 3개 이상의 대문자, 소문자, 숫자, 그리고 기호의 조합을 포함해야 합니다. 이러한 유형의 비밀번호는 더 안전합니다. Resetting the password will clear the data stored in the keyring. 비밀번호를 초기화하면 키링에 저장된 데이터가 지워집니다. Cancel 취소 Personalization Personalization 개인 설정 PersonalizationInterface Light 밝은 Auto 자동 Dark 어둡게 Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom 사용자 정의 PluginArea Plugin Area 플러그인 영역 Select which icons appear in the Dock 다크에 표시할 아이콘을 선택합니다 Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down 끄기 Suspend 중지 Hibernate 휴면 Turn off the monitor 모니터 꺼짐 Show the shutdown Interface 끄기 인터페이스 표시 Do nothing 무시하기 PowerPage Screen and Suspend 화면과 대기 모드 전환 Turn off the monitor after 모니터를 꺼낼 시간 후 Lock screen after 화면 잠금 시간 후 Computer suspends after 컴퓨터가 대기 모드로 전환되는 시간 후 When the lid is closed 노트북 뚜껑이 닫힐 때 When the power button is pressed 전원 버튼이 눌릴 때 PowerPlansListview High Performance 고성능 Balance Performance 균형 성능 Aggressively adjust CPU operating frequency based on CPU load condition CPU 부하 상태에 따라 CPU 작업 주파수를 적극적으로 조정 Balanced 균형 Power Saver 전력 절약 Prioritize performance, which will significantly increase power consumption and heat generation 성능 우선, 이는 전력 소비와 열 발생을 크게 증가시킬 수 있습니다 Balancing performance and battery life, automatically adjusted according to usage 성능과 배터리 수명을 균형잡아 조정하며 사용량에 따라 자동으로 조정됩니다 Prioritize battery life, which the system will sacrifice some performance to reduce power consumption 배터리 수명 우선, 이는 일부 성능을 희생하여 전력 소비를 줄입니다 PowerWorker Minutes Hour 시간 Never Никогда Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy 개인 정보 정책 Copy Link Address PwqualityManager Password cannot be empty 비밀번호는 공백일 수 없습니다 Password must have at least %1 characters 비밀번호는 최소 %1 글자 이상이어야 합니다 Password must be no more than %1 characters 비밀번호는 %1 글자 미만이어야 합니다 Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 비밀번호는 대소문자를 구별하는 영문자, 숫자 또는 특수기호 (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/)만 포함할 수 있습니다 No more than %1 palindrome characters please 거꾸로 읽어도 같은 문자가 %1개 미만이어야 합니다 No more than %1 monotonic characters please 증가하거나 감소하는 문자가 %1개 미만이어야 합니다 No more than %1 repeating characters please 연속 문자가 %1개 미만이어야 합니다 Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 비밀번호는 대문자, 소문자, 숫자 및 특수 문자 (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) 을 포함해야 합니다. Password must not contain more than 4 palindrome characters 비밀번호는 4개 미만의 팰린드롬 문자를 포함할 수 없습니다. Do not use common words and combinations as password 일반적인 단어나 조합을 비밀번호로 사용하지 마세요 Create a strong password please 강력한 비밀번호를 만들어 주세요 It does not meet password rules 비밀번호 규칙을 충족하지 않습니다 QObject Control Center 통합 제어 센터 Activated 활성화됨 View 보기 To be activated 활성화 예정 Activate 활성화 Expired 만료됨 In trial period 시연 기간 중 Trial expired 시연 기간 만료됨 dde-control-center dde-통합 제어 센터 Touch Screen Settings 터치 스크린 설정 The settings of touch screen changed 터치 스크린 설정이 변경되었습니다 This system wallpaper is locked. Please contact your admin. 이 시스템 배경화면은 잠겨 있습니다. 관리자에게 문의하세요. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search 검색 Default formats 기본 형식 First day of week 주 시작일 Short date 단축 날짜 Long date 긴 날짜 Short time 단축 시간 Long time 긴 시간 Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview 미리보기 Personalized screensaver setting 설정 idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search 검색 No search results ShortcutSettingDialog Add custom shortcut 커스텀 단축키 추가 Name: 이름: Required 필수 Command: 명령: Shortcut 단축키 None 없음 Cancel 취소 Add 추가 The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts 단축키 System shortcut, custom shortcut 시스템 단축키, 사용자 정의 단축키 Search shortcuts 단축키 검색 done 완료 edit 편집 Click 클릭 Cancel 취소 or 또는 Replace 대체 Restore default 기본값으로 복원 Add custom shortcut 커스텀 단축키 추가 please enter a new shortcut key Sound Sound 소리 Output, input, sound effects, devices SoundDevicemanagesPage Output Devices 출력 장치 Select whether to enable the devices 장치를 활성화할지 선택 Input Devices 입력 장치 SoundEffectsPage Sound Effects 음향 효과 SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up 시작 Shut down 끄기 Log out 로그아웃 Wake up 다시 깨우기 Volume +/- 볼륨 +/- Notification 알림 Low battery 저전력 Send icon in Launcher to Desktop 런처의 아이콘을 데스크톱으로 보내기 Empty Trash 쓰레기통 비우기 Plug in 삽입 Plug out 제거 Removable device connected 이동식 장치 연결됨 Removable device removed 이동식 장치 제거됨 Error 오류 SpeakerPage Mode 모드 Output Volume 출력 볼륨 Volume Boost 볼륨 향상 If the volume is louder than 100%, it may distort audio and be harmful to output devices 볼륨이 100%를 초과하면 음향이 왜곡될 수 있으며 출력 장치에 해로울 수 있습니다 Left 좌측 Right 우측 Output 출력 No output device for sound found 사운드에 대한 출력 장치를 찾을 수 없음 Left Right Balance 좌우 균형 Merge left and right channels into a single channel 좌우 채널을 하나의 채널로 병합 Whether the audio will be automatically paused when the current audio device is unplugged 현재 사운드 장치가 unplugged될 때 사운드가 자동으로 일시정지될지 여부 Mono Audio Auto Pause Output Device SyncInfoListModel Sound 소리 Power 전원 Mouse 마우스 Update 업데이트 Screensaver 스twor스페이버 System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers 더 많은 배경화면 TimeAndDate Auto sync time 자동 시간 동기화 Ntp server ntp 서버 System date and time 시스템 날짜와 시간 Customize 커스터마이즈 Settings 설정 Server address 서버 주소 Required 필수 The ntp server address cannot be empty ntp 서버 주소는 비어있을 수 없습니다 Use 24-hour format 24시간 형식 사용 system time zone 시스템 시간대 Timezone list 시간대 목록 Add TimeRange from 부터 to 까지 TimeoutDialog Save the display settings? 표시 설정 저장? Settings will be reverted in %1s. %1s 후 설정이 원래 상태로 돌아갑니다. Revert 원래 상태로 되돌리기 Save 저장 TimezoneDialog Add time zone 시간대 추가 Determine the time zone based on the current location 현재 위치를 기반으로 시간대를 결정 Time zone: 시간대: Nearest City: 가장 가까운 도시: Cancel 취소 Save 저장 TouchScreen TouchScreen 터치스크린 Set up here when connecting the touch screen 터치스크린을 연결할 때 여기서 설정 Touchpad Basic Settings 기본 설정 Touchpad 터치패드 Pointer Speed 포인터 속도 Slow 느림 Fast 빠름 Disable touchpad during input 입력 중 터치패드 비활성화 Tap to Click 탭하여 클릭 Natural Scrolling 자연스러운 스크롤링 Three-finger gestures 세 번째 손가락 가esture Four-finger gestures 네 번째 손가락 가esture Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program 사용자 경험 프로그램 참여 Copy Link Address VerifyDialog Security Verification 보안 인증 The action is sensitive, please enter the login password first 이 작업은 민감합니다. 먼저 로그인 비밀번호를 입력해주세요 8-64 characters 8-64자 Forgot Password? 비밀번호를 잊으셨나요? Cancel 취소 Confirm 확인 Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper 화면 배경 My pictures 사진 보기 System Wallpaper 시스템 배경화면 Solid color wallpaper 단색 배경화면 Customizable wallpapers 사용자 정의 배경화면 fill style 채우기 스타일 Automatic wallpaper change 자동 배경화면 변경 never 없음 30 second 30초 1 minute 1분 5 minute 5분 10 minute 10분 15 minute 15분 30 minute 30분 login 로그인 wake up 시작 Live Wallpaper 라이브 배경화면 1 hour 1 시간 System Wallpapers WallpaperSelectView unfold 펼치기 Set lock screen 잠금 화면 설정 Set desktop 데스크톱 설정 show all - %1 items Add Picture WindowEffectPage Interface and Effects 인터페이스 및 효과 Window Settings 창 설정 Window rounded corners 창 둥글게 둘러싸기 None 없음 Small 작은 것 Large 큰 것 Enable transparent effects when moving windows 창 이동 시 투명 효과 활성화 Window Minimize Effect 창 최소화 효과 Scale 확대/축소 Magic Lamp 마법등 Opacity 불투명도 Low 낮음 High 높음 Scroll Bars 스크롤 바 Show on scrolling 스크롤 시 표시 Keep shown 항상 표시 Compact Display 간결한 표시 If enabled, more content is displayed in the window. 활성화 시 창에 더 많은 내용이 표시됩니다. Title Bar Height 제목 표시줄 높이 Only suitable for application window title bars drawn by the window manager. 창 관리자가 그린 애플리케이션 창의 제목 표시줄에만 적합합니다. Extremely small 극히 작은 것 Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) 전통적인 중국어 (중국 홍콩) Traditional Chinese (Chinese Taiwan) 전통적인 중국어 (중국 대만) Min Nan Chinese dcc::Locale::regionNames Taiwan China 대만 중국 dccV25::AccountsController Username must be between 3 and 32 characters 사용자 이름은 3에서 32개의 문자 사이여야 합니다 The first character must be a letter or number 첫 번째 문자는 문자 또는 숫자여야 합니다 Your username should not only have numbers 사용자 이름은 단순히 숫자만으로는 안 됩니다 The username has been used by other user accounts 이미 다른 사용자 계정에 사용되었습니다 The full name is too long 전체 이름이 너무 길�습니다 The full name has been used by other user accounts 이미 다른 사용자 계정에 사용되었습니다 Wrong password 비밀번호가 틀렸습니다 Standard User 표준 사용자 Administrator 관리자 Customized 커스텀 dccV25::AccountsWorker Your host was removed from the domain server successfully 호스트가 도메인 서버에서 성공적으로 제거되었습니다 Your host joins the domain server successfully 호스트가 도메인 서버에 성공적으로 가입되었습니다 Your host failed to leave the domain server 호스트가 도메인 서버에서 제거에 실패했습니다 Your host failed to join the domain server 호스트가 도메인 서버에 가입에 실패했습니다 AD domain settings AD 도메인 설정 Password not match 비밀번호가 일치하지 않습니다 dccV25::AvatarTypesModel Dimensional 차원의 Flat 평평한 dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] 이 단축키는 [%1]와 충돌합니다 dccV25::PwqualityManager Password cannot be empty 비밀번호는 공백일 수 없습니다 Password must have at least %1 characters 비밀번호는 최소 %1자 이상이어야 합니다 Password must be no more than %1 characters 비밀번호는 %1자 이하여야 합니다 Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 비밀번호는 대소문자 구분하는 영문자, 숫자 또는 특수문자(~`!@#$%^&*()-_+=|{}[]:"'<>,.?/)만 포함할 수 있습니다 No more than %1 palindrome characters please 거울문자(%1자 이하)는 사용하지 마세요 No more than %1 monotonic characters please 증가문자(%1자 이하)는 사용하지 마세요 No more than %1 repeating characters please 연속문자(%1자 이하)는 사용하지 마세요 Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 비밀번호는 대소문자, 숫자 및 특수문자(~`!@#$%^&*()-_+=|{}[]:"'<>,.?/)를 포함해야 합니다 Password must not contain more than 4 palindrome characters 거울문자는 4자 이하여야 합니다 Do not use common words and combinations as password 일반 단어 또는 조합은 비밀번호로 사용하지 마세요 Create a strong password please 강력한 비밀번호를 생성하세요 It does not meet password rules 비밀번호 규칙을 충족하지 않습니다 At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System 시스템 Window Workspace 워크스페이스 AssistiveTools 보조 도구 Custom 커스텀 None 없음 ================================================ FILE: translations/dde-control-center_krl.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_ku.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Girêdayî ye Not connected Ne girêdayî ye BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Betal Bike Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Pêşbarkirin Shut down Bigire Log out Derkeve Wake up Hişyar Bike Volume +/- Deng +/- Notification Agahdarî Low battery Pîla kêm Send icon in Launcher to Desktop Îkona ku di Destpêkerê de ye bişîne Sermaseyê Empty Trash Çopa Vala Plug in Têxe prîzê Plug out Ji prîzê derxe Removable device connected Amûra hilgirter grêdayî ye Removable device removed Amûra hilgirter derxistî ye Error Çewtî SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save Qeyd Bike TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Çînî ya Kevneşopî (Çînî Hong Kong) Traditional Chinese (Chinese Taiwan) Çînî ya Kevneşopî (Çînî Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan Çîn dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Ev kurterê bi [%1] re nakokî dike dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Pergal Window Pace Workspace Cihê kar AssistiveTools Amûrên alîkarî Custom Taybet None Tu tişt ================================================ FILE: translations/dde-control-center_ku_IQ.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel پاشگەزبوونەوە Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel پاشگەزبوونەوە Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel پاشگەزبوونەوە Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel پاشگەزبوونەوە Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel پاشگەزبوونەوە Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel پاشگەزبوونەوە Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel پاشگەزبوونەوە Delete ComfirmSafePage Go to settings Cancel پاشگەزبوونەوە Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel پاشگەزبوونەوە Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel پاشگەزبوونەوە Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel پاشگەزبوونەوە Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel پاشگەزبوونەوە Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel پاشگەزبوونەوە Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel پاشگەزبوونەوە Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel پاشگەزبوونەوە Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Taybet PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View Dîtin To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel پاشگەزبوونەوە Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel پاشگەزبوونەوە Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel پاشگەزبوونەوە Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None هیچ Cancel پاشگەزبوونەوە Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel پاشگەزبوونەوە or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System سیستم SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel پاشگەزبوونەوە Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel پاشگەزبوونەوە Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None هیچ Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) چینی تاریخی (چینی هنگ کنگ) Traditional Chinese (Chinese Taiwan) چینی تاریخی (چینی تایوان) Min Nan Chinese dcc::Locale::regionNames Taiwan China تایوان چین dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] این سریع با [%1] متضاد است dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System سیستم Window پنجره Workspace فضای کار AssistiveTools ابزار های کمکی Custom منسوخ None هیچ ================================================ FILE: translations/dde-control-center_ky.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel жокко чыгаруу Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel жокко чыгаруу Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel жокко чыгаруу Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel жокко чыгаруу Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel жокко чыгаруу Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel жокко чыгаруу Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel жокко чыгаруу Delete ComfirmSafePage Go to settings Cancel жокко чыгаруу Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel жокко чыгаруу Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel жокко чыгаруу Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel жокко чыгаруу Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel жокко чыгаруу Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel жокко чыгаруу Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel жокко чыгаруу Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel жокко чыгаруу Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Ыңгайлаштырылган PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel жокко чыгаруу Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel жокко чыгаруу Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel жокко чыгаруу Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Жок Cancel жокко чыгаруу Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel жокко чыгаруу or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System Система SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel жокко чыгаруу Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel жокко чыгаруу Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Жок Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Салттуу кытай тили (Гонконг кытай тили) Traditional Chinese (Chinese Taiwan) Салттуу кытай тили (Тайвань кытай тили) Min Nan Chinese dcc::Locale::regionNames Taiwan China Тайвань Кытай dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Бул кыска жол [%1] менен кайшылашат dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Система Window Терезе Workspace Иш аймагы AssistiveTools Жардамчы куралдар Custom Ыңгайлаштырылган None Жок ================================================ FILE: translations/dde-control-center_ky@Arab.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_la.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_lo.ts ================================================ AccountSettings edit ແກ້ໄຂ Add new user ເພີ່ມຜູ້ໃຊ້ໃມ່ Set fullname ກຳນົດຊື່ເຕັມ Login settings ການຕັ້ງຄ່າການເຂົ້າສູ່ລະບົບ Login without password ເຂົ້າສູ່ລະບົບໂດຍບົ່ໃສ່ລະຫັດຜ່ານ Delete current account ລົບບັນຊີປັດຈຸບັນ Group setting ການຕັ້ງຄ່າກຸ່ມ Account groups ກຸ່ມບັນຊີ done ສຳເລັດ Group name ຊື່ກຸ່ມ Add group ເພີ່ມກຸ່ມ Auto login ເຂົ້າສູ່ລະບົບອັດຕະໂນມັດ Account Information ຂົ້ມູນບັນຊີ Account name, account fullname, account type ຊື່ບັນຊີ, ຊື່ເຕັມບັນຊີ, ປະເພດບັນຊີ Account name ຊື່ບັນຊີ Account fullname ຊື່ເຕັມບັນຊີ Account type ປະເພດບັນຊີ The full name is too long ຊື່ເຕັມຍາວເກີນໄປ Group names should be no more than 32 characters ຊື່ກຸ່ມຄວນບໍ່ເກີນກວ່າ 32 ຕົວອັກສອນ Group names cannot only have numbers ຊື່ກຸ່ມບໍ່ສາມາດມີແຕ່ຕົວເລກເທົ່ານັ້ນ Use letters,numbers,underscores and dashes only, and must start with a letter ໃຊ້ເຉພາະຕົວອັກສອນ, ຕົວເລກ, ເສັ້ນກ້ອງ ແລະ ເສັ້ນຂີດເທົ່ານັ້ນ, ແລະຕ້ອງເລີ່ມດ້ວຍຕົວອັກສອນ The group name has been used ຊື່ກຸ່ມນີ້ຖືກໃຊ້ແລ້ວ quick login, Auto login, login without password ເຂົ້າສູ່ລະບົບໄວ, ເຂົ້າສູ່ລະບົບອັດຕະໂນມັດ, ເຂົ້າສູ່ລະບົບໂດຍບໍ່ມີລະຫັດຜ່ານ Undo ເລີກທຳ Redo ເຮັດຊ້ຳ Cut ຕັດ Copy ສຳເນົາ Paste ວາງ Select All ເລືອກທັງໝົດ Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face ລົງທະບຽນໃບໜ້າ I have read and agree to the ຂ້ອຍໄດ້ອ່ານແລະຢືນຢັນກັບ Disclaimer ຂົ້ປະກາດ Next ຕົ່ໄປ Face enrolled ລົງທະບຽນໃບໝນ້າແລ້ວ Failed to enroll your face ບົ່ສາມາດລົງທະບຽນໃບໝນ້າຂອງທ່ານ Done ສຳເລັດ Cancel ຍົກເລີກ Retry Enroll ລົງທະບຽນໃໝ່ Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel ຍົກເລີກ Done ສຳເລັດ Enroll Finger ລົງທະບຽນລາຍນິ້ວມື Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. ວາງນິ້ວມືທີ່ຈະລົງທະບຽນໃສ່ເຄື່ອງອ່ານລາຍນິ້ວມື ແລະເລື່ອນໄຫ໇ຈາກດ້ານລ່າງໄປດ້ານບນ. ຫຼັງຈາກທຳການກະທຳເສັ້ນ ກະລຸນາຍກມນິ້ວມືຂອງທ່ານອອກ I have read and agree to the ຂ້າພະເຈົ້າໄດ້ອ່ານແລະຕົກລົງກັບ Disclaimer ຂົ້ປະກາດ Next ຕົ່ໄປ Retry Enroll ລົງທະບຽນໃໝ່ "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. "ການກວດສອບຊີວະມິຕິ" ແມ່ນຫນ້າທີ່ການກວດສອບຕົວຕົນຜູ້ໃຊ້ທີ່ສະໜອງໃຫ້ໂດຍບໍລິສັດ UnionTech Software Technology Co., Ltd. ຜ່ານ "ການກວດສອບຊີວະມິຕິ", ຂໍ້ມູນຊີວະມິຕິທີ່ເກັບກຳຈະຖືກປຽບທຽບກັບຂໍ້ມູນທີ່ເກັບໄວ້ໃນອຸປະກອນ, ແລະຕົວຕົນຜູ້ໃຊ້ຈະຖືກກວດສອບຕາມຜົນການປຽບທຽບ. ກະລຸນາຮັບຊາບວ່າບໍລິສັດ UnionTech Software Technology Co., Ltd. ຈະບໍ່ເກັບກຳຫຼືເຂົ້າເຖິງຂໍ້ມູນຊີວະມິຕິຂອງທ່ານ, ຂໍ້ມູນເຫຼົ່ານີ້ຈະຖືກເກັບໄວ້ໃນອຸປະກອນໃນທ້ອງຖິ່ນຂອງທ່ານ. ກະລຸນາເປີດໃຊ້ການກວດສອບຊີວະມິຕິໃນອຸປະກອນສ່ວນຕົວຂອງທ່ານເທົ່ານັ້ນ ແລະໃຊ້ຂໍ້ມູນຊີວະມິຕິຂອງທ່ານເອງສຳລັບການດຳເນີນງານທີ່ກ່ຽວຂ້ອງ, ແລະໃຫ້ປິດການໃຊ້ງານຫຼືລົບຂໍ້ມູນຊີວະມິຕິຂອງຄົນອື່ນຢ່າງທັນທີ, ຖ້າບໍ່ດັ່ງນັ້ນທ່ານຈະຮັບຄວາມສ່ຽງທີ່ເກີດຂຶ້ນຈາກການນັ້ນ. ບໍລິສັດ UnionTech Software Technology Co., Ltd. ມຸ່ງໝັ້ນທີ່ຈະຄົ້ນຄວ້າແລະປັບປຸງຄວາມປອດໄພ, ຄວາມຖືກຕ້ອງ ແລະຄວາມໝັ້ນຄົງຂອງການກວດສອບຊີວະມິຕິ. ຢ່າງໃດກໍ່ຕາມ, ເນື່ອງຈາກສິ່ງແວດລ້ອມ, ອຸປະກອນ, ເຕັກນິກ ແລະປັດໄຈອື່ນໆ ລວມທັງການຄວບຄຸມຄວາມສ່ຽງ, ບໍ່ມີການຮັບປະກັນວ່າທ່ານຈະຜ່ານການກວດສອບຊີວະມິຕິໃນແຕ່ລະຄັ້ງ. ດັ່ງນັ້ນ, ກະລຸນາຢ່າໃຊ້ການກວດສອບຊີວະມິຕິເປັນວິທີດຽວໃນການເຂົ້າສູ່ລະບົບ UOS. ຖ້າທ່ານມີຄຳຖາມຫຼືຄຳແນະນຳໃດໆໃນການໃຊ້ການກວດສອບຊີວະມິຕິ, ທ່ານສາມາດໃຫ້ຄຳຄິດເຫັນຜ່ານ "ການບໍລິການແລະການສະໜັບສະໜູນ" ໃນ UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first "ການເຂົ້າສູ່ລະບົບອັດຕະໂນມັດ" ສາມາດເປີດໃຊ້ໄດ້ສະເພາະບັນຊີດຽວເທົ່ານັ້ນ, ກະລຸນາປິດການໃຊ້ງານສຳລັບບັນຊີ "%1" ກ່ອນ Ok ຕົກລົງ AvatarSettingsDialog Images ຮູບພາບ Human ມະນຸດ Animal ສັດ Scenery ທິດທະເລ Illustration ຮູບປະກອບ Emoji ອີໂມຈິ custom ກຳຫນດເອງ Cartoon style ຮູບແບບກາດຕູນ Dimensional style ຮູບແບບສາມມິຕິ Flat style ຮູບແບບແບນ Cancel ຍົກເລີກ Save ບັນທຶກ BatteryPage Screen and Suspend ໜ້າຈໍ ແລະ ການພັກ Turn off the monitor after ປິດໜ້າຈໍຫຼັງຈາກ Lock screen after ຂົດໜ້າຈໍຫຼັງຈາກ Computer suspends after ຄອມພິວເຕົ້ນພັກຫຼັງຈາກ When the lid is closed ເມື່ອປິດຝາແລ້ວ When the power button is pressed ເມື່ອກດປຸ່ມໄຟ Low Battery ແບັດເຕີຣີ່ອ່ອນ Low battery notification ການແຈ້ງເຕືອນແບັດເຕີຣີ່ອ່ອນ Auto suspend ອັດຕະໂນມັດພັກຜ່ອນ Auto Hibernate ອັດຕະໂນມັດເຂົ້າສູ່ຕ່ຳຈ່າຍິດ Low battery threshold ຂີດຈຳກັດແບຕເຕົຣີ່ຕຳ່ Battery Management ການຈັດການແບັດເຕີຣີ່ Display remaining using and charging time ແສດງເວລາທີ່ເຫຼືອໃນການໃຊ້ແລະການສາກໄຟ Maximum capacity ຄວາມຈຸສູງສຸດ Low battery level ລະດັບແບຕເຕົຣີ່ຕ່ຳ Disable ປິດການໃຊ້ງານ BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth ຖືກປິດ, ແລະຊື່ຈະສະແດງເປັນ "%1" Bluetooth is turned on, and the name is displayed as "%1" Bluetooth ຖືກເປີດ, ແລະຊື່ຈະສະແດງເປັນ "%1" BlueToothDeviceListView Disconnect ຕັດການເຊື່ອມຕົ່ Connect ເຊື່ອມຕົ່ Send Files ສົ່ງໄຟລໄ Rename ປ່ຽນຊື່ Remove Device ເອົາອຸປະກອນອອກ Select file ເລືອກໄຟລໄ BluetoothCtl Edit ແກ້ໄຂ Allow other Bluetooth devices to find this device ອນຸຍາດໃຫ້ອຸປະກອນ Bluetooth ອື່ນສາມາດຄ້ນພົບອຸປະກອນນີ້ໄດ້ To use the Bluetooth function, please turn off ເພື່ອໃຊ້ຟັງກ໌ຍ Bluetooth, ກະລຸນາປິດ Airplane Mode ໂຮດເຄື່ອງບິນ Bluetooth name cannot exceed 64 characters ຊື່ Bluetooth ບໍ່ສາມາດເກີນ 64 ຕົວອັກສອນ BluetoothDeviceModel Connected ເຊື່ອມຕົ່ແລ້ວ Not connected ຍັງບົ່ໄດ້ເຊື່ອມຕົ່ BootPage Startup Settings ການຕັ້ງຄ່າການເລີ່ມຕ້ນ You can click the menu to change the default startup items, or drag the image to the window to change the background image. ທ່ານສາມາດຄິກເມນູເພື່ອເປລີ່ຍນລາຍການເລີ່ມຕ້ນເຄ໊າໃນປິ, ຫລືລາກຣູບສູ່ຫນ້າຕ່າງເພື່ອເປລີ່ຍນລາຍພື້ນຫຼັງ grub start delay ຄວາມເສົ່າການເລີ່ມຕົ້ນ GRUB theme ຫັວຂົ້ After turning on the theme, you can see the theme background when you turn on the computer ຫຼັງຈາກເປີດຫັວຂໍ້ແລ້ວ, ທ່ານສາມາດເຫັນພື້ນຫຼັງຫັວຂໍ້ໄດ້ເມື່ອເປີດຄອມພີວເຕອ້ Boot menu verification ການຕຣວຈສອບເມນູເລີ່ມຕ້ນ After opening, entering the menu editing requires a password. ຫຼັງຈາກເປີດແລ້ວ, ການເຂົ້າສູ່ການແກ້ໄຂເມນູຈະຕ້ອງໃຊ້ລະຫັດຜ່ານ Change Password ເປລີ່ຍນລະຫັດຜ່ານ Change boot menu verification password ເປລີ່ຍນລະຫັດຜ່ານການຕຣວຈສອບເມນູເລີ່ມຕ້ນ Set the boot menu authentication password ຕັ້ງລະຫັດຜ່ານການພິສູດຕັວຕົນເມນູເລີ່ມຕ້ນ User Name : ຊື່ຜູ້ໃຊ້ : root ຜູ້ດູແລລະບົບ New Password : ລະຫັດຜ່ານໃຫມ່ : Required ຈຳເປັນ Password cannot be empty ລະຫັດຜ່ານບໍ່ສາມາດວ່າງເປົ່າ Passwords do not match ລະຫັດຜ່ານບໍ່ຕົງກັນ Repeat password: ເຮັດຊ້ໍາລະຫັດຜ່ານ: Cancel ຍົກເລີກ Sure ແນ່ນອນ Start animation ອານິເມຊັນເລີ່ມຕ້ນ Adjust the size of the logo animation on the system startup interface ປັບປຸງຂະໜາດອານິເມຊັນໂລກອເທີ່ງຫນ້າຕ່າງເລີ່ມຕ້ນລະບົບ Camera Allow below apps to access your camera: ອນຸຍາດໃຫ້ແອປຂ້າງລ່າງເຂົ້າຫາກະລ້ອງຂອງທ່ານ: CharaMangerModel Fingerprint1 ລາຍນິ້ວມື 1 Fingerprint2 ລາຍນິ້ວມື 2 Fingerprint3 ລາຍນິ້ວມື 3 Fingerprint4 ລາຍນິ້ວມື 4 Fingerprint5 ລາຍນິ້ວມື 5 Fingerprint6 ລາຍນິ້ວມື 6 Fingerprint7 ລາຍນິ້ວມື 7 Fingerprint8 ລາຍນິ້ວມື 8 Fingerprint9 ລາຍນິ້ວມື 9 Fingerprint10 ລາຍນິ້ວມື 10 Scan failed ການສແກນຜິດພລາດ The fingerprint already exists ລາຍນິ້ວມືນີ້ມີອຍູ່ແລ້ວ Please scan other fingers ກະລຸນາສແກນນິ້ວມືອອື່ນສ Unknown error ຂໍ້ຜິດພລາດທີ່ໄມ່ທາບ Scan suspended ການສແກນຖືກພັກ Cannot recognize ໄມ່ສາມາດຈຳແນກໄດ້ Moved too fast ເລື່ອນໄວເກີນໄປ Finger moved too fast, please do not lift until prompted ນິ້ວມືອເລື່ອນໄວເກີນໄປ, ກະລຸນາໄມ່ຍົກອອກຈນກວ່າຈະໄດ້ຣັບແນະນຳ Unclear fingerprint ລາຍນິ້ວມືອໄມ່ຊັດເຈນ Clean your finger or adjust the finger position, and try again ທຳຄວາມສະອາດນິ້ວມືອຫລືປັບຕຳແໜ່ງນິ້ວມືອ, ແລະລອງອີກຄັ້ງ Already scanned ສແກນແລ້ວ Adjust the finger position to scan your fingerprint fully ປັບຕໍາແຫນ່ງນິ້ວມືເພື່ອສະແກນລາຍນິ້ວມືຂອງທ່ານຢ່າງເຕັມທີ່ Finger moved too fast. Please do not lift until prompted ນິ້ວມືຍ້າຍໄວເກີນໄປ. ກະລຸນາຢ່າຍົກຈົນກ່ວາທີ່ຖືກກະຕຸ້ນ Lift your finger and place it on the sensor again ຍົກນິ້ວມືຂອງທ່ານແລະວາງມັນໃສ່ເຊັນເຊີອີກຄັ້ງ Position your face inside the frame ວາງໜ້າຂອງທ່ານໃສ່ໃນກອບ Face enrolled ລົງທະບຽນໃບໝນ້າແລ້ວ Position a human face please ວາງຫນ້າຕາຂອງມະນຸດ Keep away from the camera ກະລຸນາອະຍາຫ່າງຈາກກ້ອງ Get closer to the camera ເຂົ້າໃກປ້ກ້ອງມາກຂຶ້ນ Do not position multiple faces inside the frame ໄມ່ວາງໜ້າຫລາຍຄົນໄວ້ໃນກອບ Make sure the camera lens is clean ໃຫ້ແນ່ໃຈວ່າເລນສກ້ອງສະອາດ Do not enroll in dark, bright or backlit environments ໄມ່ລົງທະບຽນໃນສິ່ງແວດລໍ້ມທີ່ມືດ, ສະຫວ່າງ ຫລື ແສງສໍ່ອງຈາກຂ້າງຫຼັງ Keep your face uncovered ໃຫ້ໜ້າຂອງທ່ານໄມ່ແອງຖືກປິດ Scan timed out ການສະແກນໝົດເວລາ Cancel ຍົກເລີກ Camera occupied! ກ້ອງຖ່າຍຮູບທີ່ຄອບຄອງ! ColorAndIcons Accent Color ສີເດັ່ນ Icon Settings ການຕັ້ງຄ່າໄອຄອນ Icon Theme ຫົວຂໍ້ໄອຄອນ Customize your theme icon ປັບແຕ່ງໄອຄອນຫົວຂໍ້ຂອງທ່ານ Cursor Theme ຫົວຂໍ້ຕົວຊີ້ Customize your theme cursor ປັບແຕ່ງຕົວກະພິບຫົວຂໍ້ຂອງທ່ານ ComfirmDeleteDialog Are you sure you want to delete this account? ທ່ານແນ່ໃຈບໍ່ວ່າທ່ານຕ້ອງການລຶບບັນຊີນີ້? Delete account directory ລຶບໂຟເດີບັນຊີ Cancel ຍົກເລີກ Delete ລົບ ComfirmSafePage Go to settings ໄປທີ່ການຕັ້ງຄ່າ Cancel ຍົກເລີກ Common Common ທົ່ວໄປ Repeat delay ຊັກຊ້າຄືນ Short ສັ້ນ Long ຍາວ Repeat rate ອັດຕາ Slow ຊ້າ Fast ໄວ Numeric Keypad ປຸ່ມກົດ test here ການທົດສອບທີ່ນີ້ Caps lock prompt ການແຈ້ງເຕືອນ Caps Lock Double Click Speed ຄວາມໄວຄິກຄູ່ Double Click Test ການທົດສອບກົດສອງຄັ້ງ Left Hand Mode ໂໝດມືຊ້າຍ Enable Keyboard ເປີດແປ້ນພິມ General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size ຂະໜາດໃຫຍ່ Small size ຂະໜາດນ້ອຍ Failed to get root access ລົ້ມເຫລວໃນການເຂົ້າເຖິງຮາກ Please sign in to your Union ID first ກະລຸນາເຂົ້າສູ່ລະບົບ ID ຂອງສະຫະພັນຂອງທ່ານກ່ອນ Cannot read your PC information ບໍ່ສາມາດອ່ານຂໍ້ມູນຄອມພິວເຕີຂອງທ່ານໄດ້ No network connection ບໍ່ມີການເຊື່ອມຕໍ່ເຄືອຂ່າຍ Certificate loading failed, unable to get root access ໃບຢັ້ງຢືນການໂຫຼດລົ້ມເຫລວ, ບໍ່ສາມາດຮັບເອົາການເຂົ້າເຖິງຮາກ Signature verification failed, unable to get root access ການຢັ້ງຢືນລາຍເຊັນລົ້ມເຫລວ, ບໍ່ສາມາດໄດ້ຮັບການເຂົ້າເຖິງຮາກ Agree and Join User Experience Program ຕົກລົງແລະເຂົ້າຮ່ວມໂຄງການປະສົບການຂອງຜູ້ໃຊ້ The Disclaimer of Developer Mode ຂໍ້ປະກາດໂມດຜູ້ພັດທະນາ Agree and Request Root Access ຕົກລົງແລະຂໍສິທທິຜູ້ດູແລຄົນ Start setting the new boot animation, please wait for a minute ເລີ່ມຕົ້ງຄ່າແອນນີເມຊັນເປີດເຄື່ອງໃຫມ່, ກະລຸນາໃສ່ຈາຍສັກຄືດ Setting new boot animation finished ການຕົ້ງຄ່າແອນນີເມຊັນເປີດເຄື່ອງໃຫມ່ເສັດແລ້ວ The settings will be applied after rebooting the system ການຕັ້ງຄ່າຈະຖືກນໍາໃຊ້ຫຼັງຈາກເປີດໃຫມ່ລະບົບ Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters ລະຫັດຜ່ານຕ້ອງມີຕົວເລກແລະຕົວອັກສອນ Password must be between 8 and 64 characters ລະຫັດຜ່ານຕ້ອງຢູ່ລະຫວ່າງ 8 ຫາ 64 ຕົວອັກສອນ CreateAccountDialog Create a new account ສ້າງບັນຊີໃຫມ່ Account type ປະເພດບັນຊີ UserName ສັນຍາລັກ Required ຈຳເປັນ FullName ເຕັມຫນ້າ Optional ທີ່ເລືອກໄດ້ Cancel ຍົກເລີກ Create account ສ້າງບັນຊີ Username cannot exceed 32 characters ຊື່ຜູ້ໃຊ້ບໍ່ສາມາດເກີນ 32 ຕົວອັກສອນ Username can only contain letters, numbers, - and _ ຊື່ຜູ້ໃຊ້ສາມາດມີພຽງແຕ່ຕົວອັກສອນ, ຕົວເລກ, - ແລະ _ Full name cannot exceed 32 characters ຊື່ເຕັມບໍ່ເກີນ 32 ຕົວອັກສອນ Full name cannot contain colons ຊື່ເຕັມບໍ່ສາມາດມີກ CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. ທ່ານຍັງບໍ່ໄດ້ອັບໂຫລດຮູບໂປຣໄຟລ໌ເທື່ອ. ກົດຫຼືລາກແລະວາງເພື່ອອັບໂຫລດຮູບພາບ. The uploaded file type is incorrect, please upload it again ປະເພດເອກະສານທີ່ຖືກອັບໂຫລດແມ່ນບໍ່ຖືກຕ້ອງ, ກະລຸນາອັບໂຫລດມັນອີກຄັ້ງ DCC_NAMESPACE::SystemInfoModel available ມີໄວ້ DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program ຕົກລົງແລະເຂົ້າຮ່ວມໂຄງການປະສົບການຂອງຜູ້ໃຊ້ <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting ວັນທີແລະເວລາ Date ວັນທີ Year ປີ Month ເດືອນ Day ວັນ Time ເວລາ Cancel ຍົກເລີກ Confirm ຢືນຢັນ Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow ມື້ອື່ນ Yesterday ມື້ວານນີ້ Today ມື້ນີ້ %1 hours earlier than local %1 ຊົ່ວໂມງກ່ອນຫນ້ານີ້ກ່ວາທ້ອງຖິ່ນ %1 hours later than local %1 ຊົ່ວໂມງຕໍ່ມາພາຍໃນທ້ອງຖິ່ນ Space ອະວະກາດ Week ອາທິດ First day of week ມື້ທໍາອິດຂອງອາທິດ Short date ວັນທີສັ້ນ Long date ວັນທີຍາວ Short time ທີ່ໃຊ້ເວລາສັ້ນ Long time ເວລາດົນ Currency symbol ສັນຍາລັກເງິນຕາ Positive currency ສິນຄ້າສະກຸນເງິນ Negative currency ສະກຸນເງິນລົບ Decimal symbol ສັນຍາລັກທົດສະນິຍົມ Digit grouping symbol ສັນຍາລັກຂອງການຈັດກຸ່ມຕົວເລກ Digit grouping ການຈັດກຸ່ມຕົວເລກ Page size ຂະຫນາດຫນ້າ Example ກະສັດ DatetimeWorker Authentication is required to change NTP server ການກວດສອບຄວາມຖືກຕ້ອງແມ່ນຈໍາເປັນຕ້ອງມີການປ່ຽນເຄື່ອງແມ່ຂ່າຍ NTP Authentication is required to set the system timezone DccColorDialog Cancel ຍົກເລີກ Save ບັນທຶກ DccWindow Control Center provides the options for system settings. ສູນຄວບຄຸມສະຫນອງທາງເລືອກສໍາລັບການຕັ້ງຄ່າລະບົບ. DeepinIDAccountSecurity Bind WeChat ຜູກມັດ WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. ໂດຍການຜູກມັດ WeChat, ທ່ານສາມາດເຂົ້າສູ່ລະບົບ %1 ID ແລະບັນຊີທ້ອງຖິ່ນຂອງທ່ານໄດ້ຢ່າງປອດໄພແລະໄວ. Unlinked ບໍ່ມີເຫລັກ Unbinding ປົດອອກ Link ການເຊື່ອມໂຍງ Are you sure you want to unbind WeChat? ທ່ານແນ່ໃຈບໍ່ວ່າທ່ານຕ້ອງການທີ່ຈະຍົກເລີກ WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. ຫຼັງຈາກຍົກເລີກການຜູກມັດ WeChat, ທ່ານຈະບໍ່ສາມາດໃຊ້ WeChat ເພື່ອສະແກນລະຫັດ QR ເພື່ອເຂົ້າສູ່ບັນຊີ %1 ຫຼືບັນຊີທ້ອງຖິ່ນ. Let me think it over ຂ້າພະເຈົ້າຂໍຄິດວ່າມັນເກີນ Local Account Binding ການຜູກມັດບັນຊີທ້ອງຖິ່ນ After binding your local account, you can use the following functions: ຫຼັງຈາກຜູກມັດບັນຊີທ້ອງຖິ່ນຂອງທ່ານ, ທ່ານສາມາດໃຊ້ຫນ້າທີ່ດັ່ງຕໍ່ໄປນີ້: WeChat Scan Code Login System ລະບົບເຂົ້າລະບົບລະຫັດລະຫັດສະແກນ WeChat Scan Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. ໃຊ້ WeChat, ເຊິ່ງຖືກຜູກມັດກັບບັດປະຈໍາຕົວ %1 ຂອງທ່ານ, ເພື່ອສະແກນລະຫັດເພື່ອເຂົ້າສູ່ບັນຊີທ້ອງຖິ່ນຂອງທ່ານ. Reset password via %1 ID ຕັ້ງລະຫັດຜ່ານຄືນໃຫມ່ຜ່ານ %1 ບັດປະຈໍາຕົວ Reset your local password via %1 ID in case you forget it. ຕັ້ງລະຫັດຜ່ານຂອງທ້ອງຖິ່ນຂອງທ່ານຄືນຜ່ານ %1 ບັດປະຈໍາຕົວໃນກໍລະນີທີ່ທ່ານລືມມັນ. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. ເພື່ອໃຊ້ຄຸນລັກສະນະຂ້າງເທິງ, ກະລຸນາໄປທີ່ສູນຄວບຄຸມ - ບັນຊີແລະເປີດຕົວເລືອກທີ່ສອດຄ້ອງກັນ. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync ຟັງຊິ້ງຂໍ້ມູນ Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. ຈັດການ %1 ID ຂອງທ່ານແລະຊິງຂໍ້ມູນສ່ວນຕົວຂອງທ່ານໃນທົ່ວອຸປະກອນ. ເຂົ້າສູ່ລະບົບ %1 ບັດປະຈໍາຕົວເພື່ອໃຫ້ມີຄຸນລັກສະນະແລະການບໍລິການທີ່ເປັນສ່ວນຕົວຂອງໂປແກຼມທ່ອງເວັບ, ຮ້ານແອັບ, ແລະອື່ນໆ. Sign In to %1 ID ເຂົ້າສູ່ລະບົບ %1 ບັດປະຈໍາຕົວ DeepinIDSyncService Auto Sync ການຊິ້ງຂໍ້ມູນອັດຕະໂນມັດ Securely store system settings and personal data in the cloud, and keep them in sync across devices ການຕັ້ງຄ່າລະບົບແລະຂໍ້ມູນສ່ວນຕົວຢ່າງປອດໄພໃນເມຄ, ແລະເກັບຮັກສາໄວ້ໃນອຸປະກອນຕ່າງໆ System Settings ການຕັ້ງຄ່າລະບົບ Last sync time: %1 ເວລາ Sync ຫຼ້າສຸດ: %1 Clear cloud data ຂໍ້ມູນທີ່ຈະແຈ້ງ Are you sure you want to clear your system settings and personal data saved in the cloud? ທ່ານແນ່ໃຈວ່າທ່ານຕ້ອງການກໍາຈັດການຕັ້ງຄ່າລະບົບແລະຂໍ້ມູນສ່ວນຕົວຂອງທ່ານທີ່ບັນທຶກໄວ້ໃນເມຄບໍ? Once the data is cleared, it cannot be recovered! ເມື່ອຂໍ້ມູນຖືກລຶບລ້າງແລ້ວ, ມັນບໍ່ສາມາດກູ້ຄືນໄດ້! Cancel ຍົກເລີກ Clear ແຈ່ມແຈ້ງ DeepinIDUserInfo Synchronization Service ບໍລິການ Synchronization Account and Security ບັນຊີແລະຄວາມປອດໄພ Sign out ອອກຈາກລະບົບ Go to web settings ໄປທີ່ການຕັ້ງຄ່າເວບໄຊທ໌ The nickname must be 1~32 characters long ຊື່ຫຼິ້ນຕ້ອງມີຄວາມຍາວ 1 ~ 32 ຕົວອັກສອນ DeepinWorker encrypt password failed ລະຫັດຜ່ານທີ່ເຂົ້າລະຫັດລົ້ມເຫລວ Wrong password, %1 chances left ລະຫັດຜ່ານທີ່ບໍ່ຖືກຕ້ອງ, %1 ໂອກາດທີ່ເຫລືອ The login error has reached the limit today. You can reset the password and try again. ຂໍ້ຜິດພາດໃນການເຂົ້າສູ່ລະບົບໄດ້ບັນລຸຂີດຈໍາກັດໃນມື້ນີ້. ທ່ານສາມາດຕັ້ງລະຫັດລັບໃຫມ່ແລະລອງໃຫມ່ອີກຄັ້ງ. Operation Successful ການປະຕິບັດງານປະສົບຜົນສໍາເລັດ The nickname can be modified only once a day ຊື່ຫຼິ້ນສາມາດໄດ້ຮັບການດັດແກ້ພຽງແຕ່ມື້ລະຄັ້ງ Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China ຈີນແຜ່ນດິນໃຫຍ່ Other regions ພາກພື້ນອື່ນໆ The feature is not available at present, please activate your system first ຄຸນນະສົມບັດບໍ່ມີຢູ່ໃນປະຈຸບັນ, ກະລຸນາກະຕຸ້ນລະບົບຂອງທ່ານກ່ອນ Subject to your local laws and regulations, it is currently unavailable in your region. ຂຶ້ນກັບກົດຫມາຍແລະລະບຽບການທ້ອງຖິ່ນຂອງທ່ານ, ມັນບໍ່ມີຢູ່ໃນຂົງເຂດຂອງທ່ານ. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' ກະລຸນາເລືອກໂປແກຼມເລີ່ມຕົ້ນເພື່ອເປີດ '%1' add ເພີ່ມ Open Desktop file ເປີດເອກະສານ desktop Apps (*.desktop) ແອັບພລິເຄຊັນ (*.desktop) All files (*) ເອກະສານທັງຫມົດ (*) DevelopModePage Root Access ການເຂົ້າເຖິງຮາກ Request Root Access ຮ້ອງຂໍການເຂົ້າເຖິງຮາກ After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. ຫຼັງຈາກທີ່ເຂົ້າໄປໃນຮູບແບບຂອງນັກພັດທະນາ, ທ່ານສາມາດໄດ້ຮັບສິດຮາກ, ແຕ່ມັນກໍ່ອາດຈະເຮັດໃຫ້ລະບົບຄວາມສັດຊື່, ສະນັ້ນກະລຸນາໃຊ້ມັນຢ່າງລະມັດລະວັງ. Allowed ໄດ້ຮັບອະນຸຍາດ Enter ໃສ່ເຂົ້າ Online ອອນລາຍ Login UOS ID ເຂົ້າສູ່ລະບົບ UOS ID Offline ອອບໄລ Import Certificate ໃບຝົດເຂົ້າ Select file ເລືອກໄຟລໄ Your UOS ID has been logged in, click to enter developer mode ID UOS ຂອງທ່ານໄດ້ເຂົ້າສູ່ລະບົບແລ້ວ, ກົດເຂົ້າໄປທີ່ໂໝດນັກພັດທະນາ Please sign in to your UOS ID first and continue ກະລຸນາເຂົ້າສູ່ລະບົບ UOS ID ຂອງທ່ານກ່ອນແລະດໍາເນີນການຕໍ່ໄປ 1.Export PC Info 1. ຂໍ້ມູນ PC Export ສົ່ງອອກ 3.Import Certificate 3. ນຳເຂົ້າໃບຢັ້ງຢືນ Development and debugging options ທາງເລືອກໃນການພັດທະນາແລະການແກ້ໄຂບັນຫາ System logging level ລະດັບການບັນທຶກລະບົບ Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off ປິດ Debug ການແກ້ໄຂຂໍ້ຜິດພາດ Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. ການປ່ຽນແປງທາງເລືອກອາດຈະໃຊ້ເວລາເຖິງນາທີເພື່ອປະມວນຜົນ, ຫຼັງຈາກໄດ້ຮັບການກະຕຸ້ນທີ່ປະສົບຜົນສໍາເລັດ, ກະລຸນາເປີດເຄື່ອງໃໝ່ເພື່ອໃຫ້ມີຜົນ. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. ເພື່ອຕິດຕັ້ງແລະເປີດໃຊ້ແອັບທີ່ໄມ່ໄດ້ລົງນາມ, ກະລຸນາໄປທີ່ <a style='text-decoration: none;' href='Security Center'> ສູນຄວາມປອດທັຍ </a> ເພື່ອປ່ຽນການຕັ້ງຄ່າ To install and run unsigned apps, please go to Security Center to change the settings. ເພື່ອຕິດຕັ້ງແລະເປີດໃຊ້ແອັບທີ່ໄມ່ໄດ້ລົງນາມ, ກະລຸນາໄປທີ່ສູນຄວາມປອດທັຍເພື່ອປ່ຽນການຕັ້ງຄ່າ You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer ຂົ້ປະກາດ Cancel ຍົກເລີກ Agree ຕົກລົງ Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: ອະນຸຍາດໃຫ້ຢູ່ດ້ານລຸ່ມຂອງແອັບ apps ທີ່ຈະເຂົ້າເຖິງເອກະສານແລະໂຟນເດີເຫຼົ່ານີ້: Documents ເອກະສານ Desktop ຂໍ້ທີ Pictures ຮູບພາບ Videos ວິດີກ້າ Music ດົນຕີ Downloads ດາວໂຫລດ folder ມານພັນ FontSizePage Size ຂະຫນາດ Standard Font ຕົວຫນັງສືມາດຕະຖານ Monospaced Font monospaced font GeneralPage Power Plans ແຜນໄຟຟ້າ Power Saving Settings ການຕັ້ງຄ່າພະລັງງານ Auto power saving on low battery ການປະຫຍັດພະລັງງານອັດຕະໂນມັດໃນແບັດເຕີຣີຕ່ໍາ Low battery threshold ຂອບເຂດຕໍາຫຼວດຕ່ໍາ Auto power saving on battery ປະຢັດພະລັງງານອັດຕະໂນມັດໃນແບດເຕີລີ່ Wakeup Settings ການຕັ້ງຄ່າ WakeUp Password is required to wake up the computer ລະຫັດຜ່ານແມ່ນຈໍາເປັນເພື່ອປຸກຄອມພິວເຕີ້ Password is required to wake up the monitor ລະຫັດຜ່ານແມ່ນຈໍາເປັນຕ້ອງໄດ້ຕື່ນຕົວຕິດຕາມກວດກາ Shutdown Settings ການຕັ້ງຄ່າການປິດເຄື່ອງ Scheduled Shutdown ການປິດເຄື່ອງຕາມຕາຕະລາງ Time ເວລາ Repeat ຊ້ໍາ Once ແລ້ວເທື່ອ Every day ທຸກໆວັນ Working days ມື້ເຮັດວຽກ Custom Time ເວລາຕາມຄູ່ Decrease screen brightness on power saver ຫຼຸດລົງຄວາມສະຫວ່າງຂອງຫນ້າຈໍໃນເຄື່ອງປະຢັດພະລັງງານ GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance ການປະຕິບັດທີ່ດີທີ່ສຸດ Balance ຕົບ Best Visuals ສາຍຕາທີ່ດີທີ່ສຸດ Disable all interface and window effects for efficient system performance. ປິດການໃຊ້ງານການໂຕ້ຕອບແລະຜົນກະທົບທັງຫມົດສໍາລັບການປະຕິບັດລະບົບທີ່ມີປະສິດຕິພາບ. Limit some window effects for excellent visuals while maintaining smooth system performance. ຈໍາກັດຜົນກະທົບຂອງປ່ອງຢ້ຽມບາງຢ່າງສໍາລັບການເບິ່ງເຫັນທີ່ດີເລີດໃນຂະນະທີ່ຮັກສາການປະຕິບັດລະບົບໃຫ້ລຽບ. Enable all interface and window effects for the best visual experience. ເປີດໃຊ້ງານການໂຕ້ຕອບທັງຫມົດແລະປ່ອງຢ້ຽມຜົນກະທົບສໍາລັບປະສົບການດ້ານສາຍຕາທີ່ດີທີ່ສຸດ. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language ພາສາ done ສຳເລັດ edit ແກ້ໄຂ Other languages ພາສາອື່ນໆ add ເພີ່ມ Region ພາກພື້ນ Area ພື້ນທີ່ Operating system and applications may provide you with local content based on your country and region ລະບົບປະຕິບັດການແລະການນໍາໃຊ້ອາດຈະໃຫ້ທ່ານມີເນື້ອໃນທ້ອງຖິ່ນໂດຍອີງໃສ່ປະເທດແລະພາກພື້ນຂອງທ່ານ Operating system and applications may set date and time formats based on regional formats ລະບົບປະຕິບັດການແລະການສະຫມັກສາມາດກໍານົດວັນທີແລະເວລາໂດຍອີງໃສ່ຮູບແບບພາກພື້ນ Regional format LangsChooserDialog Add language ເພີ່ມພາສາ Search ຄົ້ນຫາ Cancel ຍົກເລີກ Add ເພີ່ມ LoginMethod Login method ວິທີການເຂົ້າສູ່ລະບົບ Password, wechat, biometric authentication, security key ລະຫັດຜ່ານ, Wechat, ການກວດສອບຊີວະປະຫວັດ, ລະຫັດຄວາມປອດໄພ Password ລະຫັດຜ່ານ Modify password ແກ້ໄຂລະຫັດຜ່ານ Validity days ວັນທີ່ຖືກຕ້ອງ Always ສະເຫມີ Reset password ຕັ້ງລະຫັດຜ່ານຄືນໃຫມ່ LogoModule Copyright© 2011-%1 Deepin Community ລິຂະສິດ© 2011-%1 ຊຸມຊົນ Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD ລິຂະສິດ© 2019-%1 ບໍລິສັດ UnionTech Software Technology Co., ຈໍາກັດ MicrophonePage Automatic Noise Suppression ການສະກັດກັ້ນສຽງໂດຍອັດຕະໂນມັດ Input Volume ປະລິມານການປ້ອນຂໍ້ມູນ Input Level ລະດັບການປ້ອນຂໍ້ມູນ Input ການປ້ອນຂໍ້ມູນ No input device for sound found ບໍ່ມີອຸປະກອນປ້ອນຂໍ້ມູນສໍາລັບສຽງທີ່ພົບ Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices ອຸປະກອນຂອງຂ້ອຍ NativeInfoPage UOS UOS Computer name ຊື່ຄອມພິວເຕີ It cannot start or end with dashes ມັນບໍ່ສາມາດເລີ່ມຕົ້ນຫຼືສິ້ນສຸດລົງດ້ວຍ dashes OS Name os ຊື່ Version ເວີລແຈນ Edition ບານເວີລແຈນ Type ປະເພດ bit ສະກັດກັ້ນ Authorization ການໄດ້ຮັບອໍານາດ System installation time ເວລາຕິດຕັ້ງລະບົບ Kernel ແກ່ນຫລົ່ງ Graphics Platform ເວທີຮູບພາບ Processor ໂປເຊດເຊີ Memory ຄວາມຈໍາ 1~63 characters please 1 ~ 63 ຕົວອັກສອນກະລຸນາ Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices ອຸປະກອນອື່ນໆ Show Bluetooth devices without names ສະແດງອຸປະກອນ Bluetooth ໂດຍບໍ່ມີຊື່ PasswordLayout Current password ລະຫັດຜ່ານໃນປະຈຸບັນ Required ຈຳເປັນ Weak ອ່ອນແອ Medium ກາງ Strong ແຂງແຮງ Repeat Password ເຮັດຊ້ໍາອີກຄັ້ງ Password hint ຄໍາແນະນໍາລະຫັດຜ່ານ Optional ທີ່ເລືອກໄດ້ Password cannot be empty ລະຫັດຜ່ານບໍ່ສາມາດວ່າງເປົ່າ Passwords do not match ລະຫັດຜ່ານບໍ່ຕົງກັນ The hint is visible to all users. Do not include the password here. ຄໍາແນະນໍາແມ່ນສາມາດເບິ່ງເຫັນໄດ້ກັບຜູ້ໃຊ້ທັງຫມົດ. ຢ່າລວມເອົາລະຫັດຜ່ານຢູ່ທີ່ນີ້. New password ລະຫັດລັບໃຫມ່ New password should differ from the current one ລະຫັດລັບໃຫມ່ຄວນແຕກຕ່າງຈາກປະຈຸບັນ The password cannot be the same as the username. PasswordModifyDialog Modify password ແກ້ໄຂລະຫັດຜ່ານ Reset password ຕັ້ງລະຫັດຜ່ານຄືນໃຫມ່ Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. ຄວາມຍາວຂອງລະຫັດຜ່ານຄວນມີຢ່າງຫນ້ອຍ 8 ຕົວອັກສອນ, ແລະລະຫັດຜ່ານຄວນປະກອບດ້ວຍການປະສົມປະສານຢ່າງຫນ້ອຍ 3 ອັນຕໍ່ໄປນີ້: ຕົວອັກສອນໃຫຍ່, ຕົວອັກສອນນ້ອຍ, ຕົວເລກ, ແລະສັນຍາລັກ. ລະຫັດຜ່ານປະເພດນີ້ມີຄວາມປອດໄພກວ່າ. Resetting the password will clear the data stored in the keyring. ການຕັ້ງລະຫັດຜ່ານຄືນໃຫມ່ຈະເກັບກູ້ຂໍ້ມູນທີ່ເກັບໄວ້ໃນ keyring. Cancel ຍົກເລີກ Personalization Personalization PersonalizationInterface Light ແສງສະຫວ່າງ Auto ອັດຕະໂນມັດ Dark ມືດ Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom ກຳນົດເອງ PluginArea Plugin Area ບໍລິເວນປັ plugin Select which icons appear in the Dock ເລືອກຮູບສັນຍາລັກໃດທີ່ຢູ່ໃນທ່າເຮືອ Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down ປິດລົງ Suspend ແຂວນໄວ້ Hibernate ຮູດ Turn off the monitor ປິດຈໍ Monitor Show the shutdown Interface ສະແດງການປິດການປິດ Do nothing ຢ່າເຮັດຫຍັງເລີຍ PowerPage Screen and Suspend ໜ້າຈໍ ແລະ ການພັກ Turn off the monitor after ປິດໜ້າຈໍຫຼັງຈາກ Lock screen after ຂົດໜ້າຈໍຫຼັງຈາກ Computer suspends after ຄອມພິວເຕົ້ນພັກຫຼັງຈາກ When the lid is closed ເມື່ອປິດຝາແລ້ວ When the power button is pressed ເມື່ອກດປຸ່ມໄຟ PowerPlansListview High Performance ປະສິດທິພາບສູງ Balance Performance ການປະຕິບັດການດຸ່ນດ່ຽງ Aggressively adjust CPU operating frequency based on CPU load condition ປັບຄວາມຖີ່ຂອງການດໍາເນີນງານ CPU ຢ່າງຮຸນແຮງໂດຍອີງໃສ່ສະພາບການໂຫຼດຂອງ CPU Balanced ດຸ່ນດ່ຽງ Power Saver ປະຫຍັດພະລັງງານ Prioritize performance, which will significantly increase power consumption and heat generation ຈັດລໍາດັບຄວາມສໍາຄັນ, ເຊິ່ງຈະເພີ່ມທະວີການບໍລິໂພກພະລັງງານແລະການຜະລິດຄວາມຮ້ອນຢ່າງຫຼວງຫຼາຍ Balancing performance and battery life, automatically adjusted according to usage ການດຸ່ນດ່ຽງການປະຕິບັດແລະຊີວິດຫມໍ້ໄຟ, ປັບໂດຍອັດຕະໂນມັດຕາມການນໍາໃຊ້ Prioritize battery life, which the system will sacrifice some performance to reduce power consumption ຊີວິດແບດເຕີຣີ, ເຊິ່ງລະບົບຈະເສຍສະລະການສະແດງບາງຢ່າງເພື່ອຫຼຸດຜ່ອນການໃຊ້ພະລັງງານ PowerWorker Minutes ນາທີ Hour ຊົ່ວໂມງ Never ບໍ່ເຄີຍ Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy ນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ Copy Link Address ສໍາເນົາທີ່ຢູ່ທີ່ຢູ່ PwqualityManager Password cannot be empty ລະຫັດຜ່ານບໍ່ສາມາດວ່າງເປົ່າ Password must have at least %1 characters ລະຫັດຜ່ານຕ້ອງມີຢ່າງຫນ້ອຍ %1 ຕົວອັກສອນ Password must be no more than %1 characters ລະຫັດຜ່ານຕ້ອງບໍ່ເກີນ %1 ຕົວອັກສອນ Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) ລະຫັດຜ່ານສາມາດມີພຽງແຕ່ຕົວອັກສອນພາສາອັງກິດ (ຕົວພິມໃຫຍ່-ຕົວພິມນ້ອຍແຕກຕ່າງກັນ), ຕົວເລກ ຫຼື ສັນຍາລັກພິເສດ (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please ບໍ່ເກີນ%% 1 ຕົວອັກສອນ palindrome 1 ກະລຸນາ No more than %1 monotonic characters please ບໍ່ເກີນ %1 ຕົວອັກສອນ monotonic No more than %1 repeating characters please ກະລຸນາບໍ່ເກີນ %1 ຕົວອັກສອນ Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) ລະຫັດຜ່ານຕ້ອງມີຕົວພິມໃຫຍ່, ຕົວພິມນ້ອຍ, ຕົວເລກ ແລະ ສັນຍາລັກ (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters ລະຫັດຜ່ານຕ້ອງບໍ່ມີຕົວອັກສອນຫຼາຍກ່ວາ 4 palindrome Do not use common words and combinations as password ຢ່າໃຊ້ຄໍາສັບທີ່ຄ້າຍຄືກັນແລະການປະສົມປະສານກັນເປັນລະຫັດຜ່ານ Create a strong password please ສ້າງລະຫັດລັບທີ່ເຂັ້ມແຂງກະລຸນາ It does not meet password rules ມັນບໍ່ໄດ້ຕາມລະຫັດລະຫັດຜ່ານ QObject Control Center ສູນຄວບຄຸມ Activated ໄດ້ເປີດໃຊ້ງານ View ທັດສະນະ To be activated ໄດ້ຮັບການກະຕຸ້ນ Activate ກະຕຸ້ນ Expired ຫມົດອາຍຸແລ້ວ In trial period ໃນໄລຍະເວລາທົດລອງ Trial expired ການທົດລອງຫມົດອາຍຸ dde-control-center ສູນຄວບຄຸມ DDE Touch Screen Settings ການຕັ້ງຄ່າຫນ້າຈໍສໍາພັດ The settings of touch screen changed ການຕັ້ງຄ່າຂອງຫນ້າຈໍສໍາຜັດປ່ຽນແປງ This system wallpaper is locked. Please contact your admin. ຮູບວໍເປເປີລະບົບນີ້ຖືກລັອກ. ກະລຸນາຕິດຕໍ່ admin ຂອງທ່ານ. %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search ຄົ້ນຫາ Default formats ຮູບແບບໃນຕອນຕົ້ນ First day of week ມື້ທໍາອິດຂອງອາທິດ Short date ວັນທີສັ້ນ Long date ວັນທີຍາວ Short time ທີ່ໃຊ້ເວລາສັ້ນ Long time ເວລາດົນ Currency symbol ສັນຍາລັກເງິນຕາ Digit ຕົວເລກ Paper size ຂະຫນາດເຈ້ຍ Cancel ຍົກເລີກ Save ບັນທຶກ Regional format RegionsChooserWindow Search ຄົ້ນຫາ RegisterDialog Set a Password ຕັ້ງຄ່າລະຫັດຜ່ານ 8-64 characters 8-64 ຕົວອັກສອນ Repeat the password ຢືນຢັນລະຫັດຜ່ານ Cancel ຍົກເລີກ Confirm ຢືນຢັນ Passwords don't match ລະຫັດຜ່ານບໍ່ກົງກັນ ScheduledShutdownDialog Customize repetition time ລູກຄ້າກໍານົດເວລາຄ້າງຫ້ອງ Cancel ຍົກເລີກ Save ບັນທຶກ ScreenSaverPage Screensaver ແພແຫ່ preview ການສະແດງຕົວຢ່າງ Personalized screensaver ຫນ້າຈໍສ່ວນບຸກຄົນ setting ການຕັ້ງຄ່າ idle time ທີ່ໃຊ້ເວລາບໍ່ເຮັດວຽກ 1 minute 1 ນາທີ 5 minute ຫ້ານາທີ 10 minute ປະມານ 10 ນາທີ 15 minute 15 ນາທີ 30 minute 30 ນາທີ 1 hour 1 ຊົ່ວໂມງ never ບໍ່ເຄີຍ Password required for recovery ລະຫັດຜ່ານທີ່ຕ້ອງການສໍາລັບການຟື້ນຕົວ Picture slideshow screensaver ພາບຫນ້າຈໍສະແດງຮູບເງົາ System screensaver ຫນ້າຈໍລະບົບ SearchableListViewPopup Search ຄົ້ນຫາ No search results ບໍ່ມີຜົນການຄົ້ນຫາ ShortcutSettingDialog Add custom shortcut ເພີ່ມທາງລັດແບບກຳນົດເອງ Name: ຊື່: Required ຈຳເປັນ Command: ຄໍາສັ່ງ: Shortcut ລັດ None ບໍ່ມີ Cancel ຍົກເລີກ Add ເພີ່ມ The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts ກາງເຂັນ System shortcut, custom shortcut ທາງລັດລະບົບ, ທາງລັດທີ່ກໍາຫນົດເອງ Search shortcuts ທາງລັດຄົ້ນຫາ done ສຳເລັດ edit ແກ້ໄຂ Click ກົດ Cancel ຍົກເລີກ or ຫຼື Replace ປ່ຽນແທນ Restore default ຟື້ນຟູຄ່າເລີ່ມຕົ້ນ Add custom shortcut ເພີ່ມທາງລັດແບບກຳນົດເອງ please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices ອຸປະກອນຜົນໄດ້ຮັບ Select whether to enable the devices ເລືອກວ່າຈະເປີດໃຊ້ອຸປະກອນໃດຫນຶ່ງ Input Devices ອຸປະກອນປ້ອນຂໍ້ມູນ SoundEffectsPage Sound Effects ຜົນກະທົບສຽງ SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up ເປີດເຄື່ອງ Shut down ປິດ​ເຄື່ອງ Log out ອອກ​ຈາກ​ລະ​ບົບ Wake up ຕື່ນ Volume +/- ປະລິມານ +/- Notification ການແຈ້ງການ Low battery ແບດເຕີລີ່ຕ່ໍາ Send icon in Launcher to Desktop ສົ່ງຮູບສັນຍາລັກໃນ Launcher ໄປທີ່ desktop Empty Trash ຂີ້ເຫຍື້ອເປົ່າ Plug in ສຽບໃສ່ Plug out ສຽບອອກ Removable device connected ອຸປະກອນທີ່ຖອດອອກໄດ້ Removable device removed ອຸປະກອນທີ່ຖອດອອກໄດ້ Error ຜິດ SpeakerPage Mode ຮູບແບບ Output Volume ປະລິມານຜົນຜະລິດ Volume Boost ປະລິມານ boost If the volume is louder than 100%, it may distort audio and be harmful to output devices ຖ້າປະລິມານດັງກວ່າ 100%, ມັນອາດຈະບິດເບືອນສຽງແລະເປັນອັນຕະລາຍຕໍ່ອຸປະກອນການຜະລິດ Left ຊ້າຍ Right ຂວາ Output ຜົນໄດ້ຮັບ No output device for sound found ບໍ່ມີອຸປະກອນຜົນຜະລິດສໍາລັບສຽງທີ່ພົບ Left Right Balance ຄວາມສົມດຸນຊ້າຍຂວາ Merge left and right channels into a single channel ລວມຊ່ອງທາງຊ້າຍແລະຂວາເຂົ້າໄປໃນຊ່ອງທາງດຽວ Whether the audio will be automatically paused when the current audio device is unplugged ບໍ່ວ່າສຽງຈະຖືກຢຸດໂດຍອັດຕະໂນມັດເມື່ອອຸປະກອນສຽງໃນປະຈຸບັນຖືກຖອດອອກ Mono Audio Auto Pause Output Device SyncInfoListModel Sound ສຽງ Power ພະເດດ Mouse ຫນູ Update ອັບເດດ Screensaver ແພແຫ່ System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers ວໍເປເປີເພີ່ມເຕີມ TimeAndDate Auto sync time ເວລາ sync ອັດຕະໂນມັດ Ntp server Server NTP System date and time ວັນທີແລະເວລາຂອງລະບົບ Customize ປັບແຕ່ງ Settings ການກໍານົດ Server address ທີ່ຢູ່ຂອງເຄື່ອງແມ່ຂ່າຍ Required ຈຳເປັນ The ntp server address cannot be empty ທີ່ຢູ່ຂອງເຄື່ອງແມ່ຂ່າຍ NTP ບໍ່ສາມາດຫວ່າງໄດ້ Use 24-hour format ໃຊ້ຮູບແບບ 24 ຊົ່ວໂມງ system time zone ເຂດເວລາຂອງລະບົບ Timezone list ລາຍຊື່ TimeZone Add ເພີ່ມ TimeRange from ແຕ່ to ເພື່ອ TimeoutDialog Save the display settings? ບັນທຶກການຕັ້ງຄ່າຈໍສະແດງຜົນບໍ? Settings will be reverted in %1s. ການຕັ້ງຄ່າຈະຖືກສົ່ງຄືນໃນ %1s. Revert ສົ່ງລາງວັນໄດ້ Save ບັນທຶກ TimezoneDialog Add time zone ຕື່ມເຂດເວລາ Determine the time zone based on the current location ກໍານົດເຂດເວລາທີ່ອີງໃສ່ສະຖານທີ່ປະຈຸບັນ Time zone: ເຂດເວລາ: Nearest City: ເມືອງທີ່ໃກ້ທີ່ສຸດ: Cancel ຍົກເລີກ Save ບັນທຶກ TouchScreen TouchScreen ຫນ້າຈໍສໍາພັດ Set up here when connecting the touch screen ຕັ້ງຄ່າທີ່ນີ້ໃນເວລາທີ່ເຊື່ອມຕໍ່ຫນ້າຈໍສໍາພັດ Touchpad Basic Settings ການຕັ້ງຄ່າຂັ້ນພື້ນຖານ Touchpad ຈັບຄູ່ Pointer Speed ຄວາມໄວຂອງຕົວຊີ້ Slow ຊ້າ Fast ໄວ Disable touchpad during input ປິດ touchpad ໃນລະຫວ່າງການປ້ອນຂໍ້ມູນ Tap to Click ແຕະເພື່ອກົດ Natural Scrolling ເລື່ອນທໍາມະຊາດ Three-finger gestures ທ່າທາງສາມນິ້ວ Four-finger gestures ທ່າທາງສອງນິ້ວມື Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program ເຂົ້າຮ່ວມໂຄງການປະສົບການຂອງຜູ້ໃຊ້ Copy Link Address ສໍາເນົາທີ່ຢູ່ທີ່ຢູ່ VerifyDialog Security Verification ການຢັ້ງຢືນຄວາມປອດໄພ The action is sensitive, please enter the login password first ການກະທໍາແມ່ນມີຄວາມອ່ອນໄຫວ, ກະລຸນາໃສ່ລະຫັດເຂົ້າລະບົບກ່ອນ 8-64 characters 8-64 ຕົວອັກສອນ Forgot Password? ລືມລະຫັດຜ່ານ? Cancel ຍົກເລີກ Confirm ຢືນຢັນ Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper ຮູບວໍເປເປີ My pictures ຮູບພາບຂອງຂ້ອຍ System Wallpaper ຮູບວໍເປເປີລະບົບ Solid color wallpaper ຮູບວໍເປເປີສີແຂງ Customizable wallpapers ຮູບວໍເປເປີທີ່ສາມາດປັບແຕ່ງໄດ້ fill style ສະບັບເຕັມ Automatic wallpaper change ການປ່ຽນແປງພາບອັດຕະໂນມັດ never ບໍ່ເຄີຍ 30 second 30 ວິນາທີ 1 minute 1 ນາທີ 5 minute ຫ້ານາທີ 10 minute ປະມານ 10 ນາທີ 15 minute 15 ນາທີ 30 minute 30 ນາທີ login ເຂົ້າສູ່ລະບົບ wake up ຕື່ນ Live Wallpaper ພາບວໍເປເປີທີ່ມີຊີວິດ 1 hour 1 ຊົ່ວໂມງ System Wallpapers WallpaperSelectView unfold ເປີດ Set lock screen ຕັ້ງຫນ້າຈໍລັອກ Set desktop ຕັ້ງຄ່າເດັສທອບ show all - %1 items Add Picture WindowEffectPage Interface and Effects ສ່ວນຕິດຕໍ່ແລະເອຟເຟັກ Window Settings ການຕັ້ງຄ່າຫນ້າຕ່າງ Window rounded corners ມູມມົນຂອງຫນ້າຕ່າງ None ບໍ່ມີ Small ຂະຫນາດນ້ອຍ Large ໃຫຍ່ Enable transparent effects when moving windows ເປີດໃຊ້ຜົນກະທົບໂປ່ງໃສເມື່ອຍ້າຍປ່ອງຢ້ຽມ Window Minimize Effect ເອຟເຟັກການຫຍໍ້ຫນ້າຕ່າງ Scale ປັບຂະໜາດ Magic Lamp ໂຄມໄຟວິເສດ Opacity ຄວາມໂປ່ງໃສ Low ຕ່ໍາ High ສູງ Scroll Bars ແຖບເລື່ອນ Show on scrolling ສະແດງເມື່ອເລື່ອນ Keep shown ສະແດງຕະຫຼອດ Compact Display ການສະແດງແບບກະທັດຮັດ If enabled, more content is displayed in the window. ຖ້າເປີດໃຊ້ງານ, ເນື້ອຫາຫຼາຍຂື້ນຈະຖືກສະແດງຢູ່ໃນປ່ອງຢ້ຽມ. Title Bar Height ລວງສູງຂອງແຖບ Only suitable for application window title bars drawn by the window manager. ພຽງແຕ່ເຫມາະສໍາລັບແຖບຫົວຂໍ້ທີ່ໃຊ້ໃນການນໍາໃຊ້ໂດຍຜູ້ຈັດການວິນໂດ. Extremely small ຂະຫນາດນ້ອຍ Medium describe size of window rounded corners ກາງ Medium describe height of window title bar ກາງ dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) ຈີນພື້ນເມືອງ (ພາສາຈີນຮົງກົງ) Traditional Chinese (Chinese Taiwan) ພາສາຈີນແບບດັ້ງເດີມ (ໄຕ້ຫວັນຈີນ) Min Nan Chinese dcc::Locale::regionNames Taiwan China ໄຕ້ຫວັນຈີນ dccV25::AccountsController Username must be between 3 and 32 characters ຊື່ຜູ້ໃຊ້ຕ້ອງຢູ່ລະຫວ່າງ 3 ຫາ 32 ຕົວອັກສອນ The first character must be a letter or number ລັກສະນະທໍາອິດຕ້ອງເປັນຕົວອັກສອນຫລືເລກ Your username should not only have numbers ຊື່ຜູ້ໃຊ້ຂອງທ່ານບໍ່ພຽງແຕ່ມີພຽງແຕ່ຕົວເລກເທົ່ານັ້ນ The username has been used by other user accounts ຊື່ຜູ້ໃຊ້ໄດ້ຖືກນໍາໃຊ້ໂດຍບັນຊີຜູ້ໃຊ້ອື່ນໆ The full name is too long ຊື່ເຕັມແມ່ນຍາວເກີນໄປ The full name has been used by other user accounts ຊື່ເຕັມໄດ້ຖືກນໍາໃຊ້ໂດຍບັນຊີຜູ້ໃຊ້ອື່ນໆ Wrong password ລະຫັດຜ່ານຜິດ Standard User ຜູ້ໃຊ້ມາດຕະຖານ Administrator ຜູ້ຢິງບໍລິຫານ Customized ປັບແຕ່ງ dccV25::AccountsWorker Your host was removed from the domain server successfully ເຈົ້າພາບຂອງທ່ານໄດ້ຖືກຍ້າຍອອກຈາກ Domain Server ປະສົບຜົນສໍາເລັດ Your host joins the domain server successfully ເຈົ້າພາບຂອງທ່ານເຂົ້າຮ່ວມບໍລິສັດໂດເມນສໍາເລັດແລ້ວ Your host failed to leave the domain server ເຈົ້າພາບຂອງເຈົ້າລົ້ມເຫລວທີ່ຈະອອກຈາກເຊີບເວີໂດເມນ Your host failed to join the domain server ເຈົ້າພາບຂອງເຈົ້າລົ້ມເຫລວທີ່ຈະເຂົ້າຮ່ວມກັບໂດເມນຂອງໂດເມນ AD domain settings ການຕັ້ງຄ່າໂດເມນຂອງໂຄສະນາ Password not match ລະຫັດຜ່ານບໍ່ກົງກັນ dccV25::AvatarTypesModel Dimensional ມິຣະ Flat ແປ dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] ຂໍ້ຂັດແຍ່ງທາງລັດນີ້ກັບ [%1] dccV25::PwqualityManager Password cannot be empty ລະຫັດຜ່ານບໍ່ສາມາດວ່າງເປົ່າ Password must have at least %1 characters ລະຫັດຜ່ານຕ້ອງມີຢ່າງຫນ້ອຍ %1 ຕົວອັກສອນ Password must be no more than %1 characters ລະຫັດຜ່ານຕ້ອງບໍ່ເກີນ 1 ໂຕອັກສອນ 1 ໂຕອັກສອນ Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) ລະຫັດຜ່ານສາມາດມີພຽງແຕ່ຕົວອັກສອນພາສາອັງກິດ (ຕົວພິມໃຫຍ່-ຕົວພິມນ້ອຍແຕກຕ່າງກັນ), ຕົວເລກ ຫຼື ສັນຍາລັກພິເສດ (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please ບໍ່ເກີນ%% 1 ຕົວອັກສອນ palindrome 1 ກະລຸນາ No more than %1 monotonic characters please ບໍ່ເກີນ %1 ຕົວອັກສອນ monotonic No more than %1 repeating characters please ກະລຸນາບໍ່ເກີນ %1 ຕົວອັກສອນ Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) ລະຫັດຜ່ານຕ້ອງມີຕົວພິມໃຫຍ່, ຕົວພິມນ້ອຍ, ຕົວເລກ ແລະ ສັນຍາລັກ (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters ລະຫັດຜ່ານຕ້ອງບໍ່ມີຕົວອັກສອນຫຼາຍກ່ວາ 4 palindrome Do not use common words and combinations as password ຢ່າໃຊ້ຄໍາສັບທີ່ຄ້າຍຄືກັນແລະການປະສົມປະສານກັນເປັນລະຫັດຜ່ານ Create a strong password please ສ້າງລະຫັດລັບທີ່ເຂັ້ມແຂງກະລຸນາ It does not meet password rules ມັນບໍ່ໄດ້ຕາມລະຫັດລະຫັດຜ່ານ At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System ລະບົບ Window ປ່ອງຢ້ຽມ Workspace ບ່ອນເຮັດວຽກ AssistiveTools ເຄື່ອງມືຊ່ວຍເຫຼືອ Custom ກຳນົດເອງ None ບໍ່ມີ ================================================ FILE: translations/dde-control-center_lt.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Atsisakyti Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Atsisakyti Done Atlikta Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Atsisakyti Save Įrašyti BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Siųsti failus Rename Pervadinti Remove Device Šalinti įrenginį Select file Pasirinkti failą BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme apipavidalinimas After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Naujas slaptažodis: Required Password cannot be empty Slaptažodis negali būti tuščias Passwords do not match Slaptažodžiai nesutampa Repeat password: Cancel Atsisakyti Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Atsisakyti Camera occupied! ColorAndIcons Accent Color Icon Settings Piktogramų nustatymai Icon Theme Piktogramų apipavidalinimas Customize your theme icon Cursor Theme Žymeklio apipavidalinimas Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Ar tikrai norite ištrinti šią paskyrą? Delete account directory Ištrinti paskyros katalogą Cancel Atsisakyti Delete Ištrinti ComfirmSafePage Go to settings Eiti į nustatymus Cancel Atsisakyti Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Nėra tinklo ryšio Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type Paskyros tipas UserName Required FullName Optional Cancel Atsisakyti Create account Sukurti paskyrą Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Atsisakyti Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone Norint nustatyti sistemos laiko juostą, reikalingas tapatybės nustatymas DccColorDialog Cancel Atsisakyti Save Įrašyti DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Atsisakyti Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Ekranas Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Atsisakyti Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Atsisakyti Personalization Personalization Personalizacija PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Slaptažodis negali būti tuščias Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Atsisakyti Save Įrašyti Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Atsisakyti Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver Ekrano užsklanda preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver Sistemos ekrano užsklanda SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Atsisakyti Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel Atsisakyti or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Garsas Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Atsijungti Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Atjungti Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver Ekrano užsklanda System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save Įrašyti TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Atsisakyti Save Įrašyti TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Atsisakyti Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Tradicinė kinų kalba (Kinijos Honkongas) Traditional Chinese (Chinese Taiwan) Tradicinė kinų kalba (Kinijos Taivanas) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taivano Kinija dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Šis trumpinys konfliktuoja su [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Sistema Window Langas Workspace Darbo sritis AssistiveTools Pagalbiniai įrankiai Custom Pritaikytas None Nėra ================================================ FILE: translations/dde-control-center_lv.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Atcelt Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Atcelt Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Atcelt Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Atcelt Save Saglabāt BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Atcelt Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Atcelt Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Atcelt Delete ComfirmSafePage Go to settings Cancel Atcelt Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Atcelt Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Atcelt Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Atcelt Save Saglabāt DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Atcelt Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Atcelt Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Atcelt Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification Paziņojums NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Atcelt Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Izslēgt Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Atcelt Save Saglabāt Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Atcelt Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Atcelt Save Saglabāt ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Atcelt Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save Saglabāt click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel Atcelt or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Ieslēgt Shut down Izslēgt Log out Izrakstīties Wake up Pamodināt Volume +/- Skaļums +/- Notification Paziņojums Low battery Zems baterijas līmenis Send icon in Launcher to Desktop Nosūtīt Palaidēja ikonu uz Darbvirsmu Empty Trash Iztukšot miskasti Plug in Pievienot Plug out Atvienot Removable device connected Noņemamā ierīce savienota Removable device removed Noņemamā ierīce atvienota Error Kļūda SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save Saglabāt TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Atcelt Save Saglabāt TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Atcelt Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_ml.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected ബന്ധിച്ചിരിക്കുന്നു Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel റദ്ദാക്കുക Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display പ്രദർശനം Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom കസ്റ്റം PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down നിർത്തുക Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode രീതി Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left ഇടതു് Right വലതു് Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert തിരിച്ചു പോകുക Save സൂക്ഷിക്കുക TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) പരമ്പരാഗത ചൈനീസ് (ഹോങ്കോങ് ചൈനീസ്) Traditional Chinese (Chinese Taiwan) പരമ്പരാഗത ചൈനീസ് (തായ്‌വാൻ ചൈനീസ്) Min Nan Chinese dcc::Locale::regionNames Taiwan China തായ്‌വാൻ ചൈന dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] ഈ കുറുക്കുവഴി [%1] ൽ പൊരുത്തക്കേടുണ്ട് dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System സിസ്റ്റം Window വിൻഡോ Workspace വർക്ക്സ്പേസ് AssistiveTools സഹായ ഉപകരണങ്ങൾ Custom ഇഷ്ടാനുസൃതം None ഒന്നുമില്ല ================================================ FILE: translations/dde-control-center_mn.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Холбогдсон Not connected Холбогдоогүй BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Цуцлах Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Дэлгэц Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Оролтын дууны хүч Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Тусгайлсан PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Нууц үг %1 тэмдэгтээс илүүгүй байх ёстой Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Удирдлагын хэсэг Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Дууны эффект SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Ачаална Shut down Унтраах Log out Гарах Wake up Сэрээх Volume +/- Дуу +/- Notification Мэдэгдэл Low battery Бага цэнэгтэй Send icon in Launcher to Desktop Дүрсийг ажлын тавцанруу илгээх Empty Trash Хоосон хогийн сав Plug in Залгах Plug out Салгах Removable device connected Зөөвөрийн төхөөрөмж холбогдлоо Removable device removed Зөөвөрийн төхөөрөмж салгагдлаа Error Алдаа SpeakerPage Mode Горим Output Volume Гаралтын дууны хүч Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Зүүн Right Баруун Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Буцаах Save Хадгалах TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Уламжлалт хятад хэл (Хонг Конг хятад) Traditional Chinese (Chinese Taiwan) Уламжлалт хятад хэл (Тайвань хятад) Min Nan Chinese dcc::Locale::regionNames Taiwan China Тайвань Хятад dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Энэ товчлол [%1]-тэй зөрчилдөж байна dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Систем Window Цонх Workspace Ажлын орон зай AssistiveTools Туслах хэрэгслүүд Custom Тохируулсан None Байхгүй ================================================ FILE: translations/dde-control-center_mr.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom सानुकूल PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None काहीही नाही Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System सिस्टम SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None काहीही नाही Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) पारंपारिक चीनी (चीनी हॉंगकॉंग) Traditional Chinese (Chinese Taiwan) पारंपारिक चीनी (चीनी तैवान) Min Nan Chinese dcc::Locale::regionNames Taiwan China तैवान चीन dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] हा शॉर्टकट [%1] शी संघर्ष करतो dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System सिस्टम Window विंडो Workspace वर्कस्पेस AssistiveTools सहायक साधने Custom सानुकूल None काहीही नाही ================================================ FILE: translations/dde-control-center_ms.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Bersambung Not connected Tidak bersambung BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Capjari1 Fingerprint2 Capjari2 Fingerprint3 Capjari3 Fingerprint4 Capjari4 Fingerprint5 Capjari5 Fingerprint6 Capjari6 Fingerprint7 Capjari7 Fingerprint8 Capjari8 Fingerprint9 Capjari9 Fingerprint10 Capjari10 Scan failed Imbas gagal The fingerprint already exists Cap jari sudah wujud Please scan other fingers Sila imbas jari yang lain Unknown error Ralat tidak diketahui Scan suspended Imbas ditangguh Cannot recognize Tidak dapat kenal pasti Moved too fast Gerak terlalu pantas Finger moved too fast, please do not lift until prompted Jari digerak terlalu pantas. Jangan angkat sehingga diberitahu Unclear fingerprint Cap jari tidak jelas Clean your finger or adjust the finger position, and try again Bersih dahulu jari anda atau laras kedudukan jari, dan cuba sekali lagi Already scanned Sudah diimbas Adjust the finger position to scan your fingerprint fully Laras kedudukan jari supaya dapat mengimbas cap jari sepenuhnya Finger moved too fast. Please do not lift until prompted Jari digerak terlalu pantas. Jangan angkat sehingga diberitahu Lift your finger and place it on the sensor again Angkat jari anda dan letak ia di atas penderia sekali lagi Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Batal Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Pengesahihan diperlukan untuk mengubah pelayan NTP Authentication is required to set the system timezone Pengesahihan diperlukan untuk menetap zon waktu sistem DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Paparan Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Penindasan HIngar Automatik Input Volume Volum Input Input Level Aras Input Input No input device for sound found Input Device Peranti Input Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Penampilan PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Suai PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Kata laluan tidak boleh kosong Password must have at least %1 characters Kata laluan mesti sekurang-kurangnya %1 aksara Password must be no more than %1 characters Kata laluan mestilah tidak lebih daripada %1 aksara Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Kata laluan hanya boleh mengandungi abjad Inggeris (sensitif-kata), angka atau simbol khas (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Kata laluan mesti mengandungi abjad huruf besar, abjad huruf kecil, angka dan simbol (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Kata laluan mesti tidak mengandungi lebih daripada 4 aksara palindrome Do not use common words and combinations as password Jangan guna perkataan dan gabungan umum sebagai kata laluan Create a strong password please Sila cipta satu kata laluan yang kuat It does not meet password rules Ia tidak menepati peraturan kata laluan QObject Control Center Pusat Kawalan Activated Diaktifkan View Lihat To be activated Untuk diaktifkan Activate Aktifkan Expired Luput In trial period Dalam tempoh percubaan Trial expired Percubaan telah luput dde-control-center Touch Screen Settings Tetapan Skrin Sentuh The settings of touch screen changed Tetapan skrin sentuh berubah This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Bunyi Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Kesan Bunyi SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Butkan Shut down Matikan Log out Daftar keluar Wake up Bangun Volume +/- Volum +/- Notification Pemberitahuan Low battery Bateri rendah Send icon in Launcher to Desktop Hantar ikon dalam Pelancar ke Desktop Empty Trash Kosongkan Tong Sampah Plug in Palam masuk Plug out Palam keluar Removable device connected Peranti boleh tanggal bersambung Removable device removed Peranti boleh tanggal dikeluarkan Error Ralat SpeakerPage Mode Mod Output Volume Volum Output Volume Boost Galak Volum If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Kiri Right Kanan Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Peranti output SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Kembali Save Simpan TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Cina Tradisional (Cina Hong Kong) Traditional Chinese (Chinese Taiwan) Cina Tradisional (Cina Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan Cina dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Pintasan ini bercanggah dengan [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Sistem Window Tetingkap Workspace Ruang kerja AssistiveTools Alat bantuan Custom Tersuai None Tiada ================================================ FILE: translations/dde-control-center_nb.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Tilkoblet Not connected Frakoblet BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Avbryt Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Skjerm Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Inngangs Volum Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Mus og Styreplate Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personalisering PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Egendefinert PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Kontrollsenter Activated View Vis To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Lyd Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Lydeffekter SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Start opp Shut down Slå av Log out Logg ut Wake up Våkne Volume +/- Volum +/- Notification Notifikasjon Low battery Lav batteri Send icon in Launcher to Desktop Send ikon i Launcher til Skrivebord Empty Trash Tøm Papirkurv Plug in Plugg inn Plug out Plugg ut Removable device connected Fjernbar enhet tilkoblet Removable device removed Fjernbar enhet fjernet Error Feil SpeakerPage Mode Modus Output Volume Utgangs Volum Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Venstre Right Høyre Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Tilbakestille Save Lagre TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Tradisjonell kinesisk (Kinesisk Hong Kong) Traditional Chinese (Chinese Taiwan) Tradisjonell kinesisk (Kinesisk Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan Kina dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Denne snarveien er i konflikt med [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System System Window Vindu Workspace Arbeidsområde AssistiveTools Hjelpeverktøy Custom Tilpasset None Ingen ================================================ FILE: translations/dde-control-center_nb_NO.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Next Disclaimer Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Illustration Emoji custom Dimensional style Flat style Cancel Save Scenery Cartoon style BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Auto Hibernate Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Rename Select file Send Files Remove Device BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change boot menu verification password Required Password cannot be empty Passwords do not match Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Change Password Set the boot menu authentication password User Name : New Password : Repeat password: root Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en Agree and Join User Experience Program https://www.uniontech.com/agreement/experience-en <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Time Cancel Confirm Year Month Day Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Auto Sync Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Sign out Go to web settings Account and Security The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid UOS ID Cloud services deepin ID DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' Open Desktop file Apps (*.desktop) All files (*) add DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug 3.Import Certificate Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° Eye Comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature 100% 125% 150% 175% 200% 225% 250% 275% 300% The monitor only supports 100% display scaling Identify Screen rearrangement will take effect in %1s after changes Enable eye comfort %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Documents Desktop Pictures Videos Music Downloads folder Allow below apps to access these files and folders: FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Balance Best Visuals Optimal Performance Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat done edit Other languages add Region Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Language Area Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Graphics Platform Processor Memory Kernel 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound App Notifications OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Screensaver Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Computer suspends after Lock screen after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Never Minutes Hour Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password Cancel Confirm 8-64 characters Repeat the password Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Personalized screensaver idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver Screensaver preview setting SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut System shortcut, custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Input Devices Select whether to enable the devices SoundEffectsPage Sound Effects SoundMain Sound Effects Enable/disable sound effects Enable/disable audio devices Settings Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output Left Right Balance Whether the audio will be automatically paused when the current audio device is unplugged Merge left and right channels into a single channel No output device for sound found Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC View the notice of open source software User Experience Program End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy System version, device information Join the user experience program to help improve the product Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list System date and time Ntp server Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Touchpad Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first Cancel Confirm 8-64 characters Forgot Password? Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_ne.ts ================================================ AccountSettings edit सम्पादन Add new user नयाँ उपयोगकर्ता जोड्नुहोस् Set fullname कुल नाम सेट गर्नुहोस् Login settings लॉगइन सेटिङहरू Login without password पासवर्ड छैनको प्रकारमा लॉगइन गर्नुहोस् Delete current account वर्तमान खाता मात्र छुट्ट्याउनुहोस् Group setting समूह सेटिङहरू Account groups खाता समूहहरू done समाप्त Group name समूहको नाम Add group समूह जोड्नुहोस् Auto login प्रतिबिम्बित लॉगइन Account Information खाता जानकारी Account name, account fullname, account type खाताको नाम, कुल नाम, खाताको प्रकार Account name खाताको नाम Account fullname खाताको कुल नाम Account type खाताको प्रकार The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face हास्य समावेश गर्नुहोस् I have read and agree to the म जानाउँछु र विचारहरूलाई सहमत छु Disclaimer कथनको विचारहरू Next अगाध Face enrolled हास्य समावेश गरिएको Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style कार्टून रूपांतरण Dimensional style विमात्मक रूपांतरण Flat style प्लैट रूपांतरण Cancel रद्द गर्नुहोस् Save संरक्षण गर्नुहोस् BatteryPage Screen and Suspend स्क्रीन र संपन्न Turn off the monitor after स्क्रीन बाट विंदौँको बाद बाँड गर्नुहोस् Lock screen after स्क्रीन बाट विंदौँको बाद लॉक गर्नुहोस् Computer suspends after कम्प्युटर संपन्न बाट विंदौँको बाद When the lid is closed कपाल बाँडिन्छ जस्तै When the power button is pressed पावर बटन देखि दबाइन्छ जस्तै Low Battery कम बैटरी Low battery notification कम बैटरी जानाउँदा प्रतिक्रिया Auto suspend अटोमेटिक संपन्न Auto Hibernate अटोमेटिक हाइपरबीन Low battery threshold कम बैटरी अवकाश Battery Management बैटरी संचालन Display remaining using and charging time इस्तेमाल र चार्ज विमेस्ती दर्शन गर्नुहोस् Maximum capacity मैक्सिमम कैपासिटी Low battery level कम बैटरी स्तर Disable काम बाट घुमाउनुहोस् BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" ब्लूटूथ बाँड गरिएको र नाव "%1" रूपमा दर्शन गरिन्छ Bluetooth is turned on, and the name is displayed as "%1" ब्लूटूथ बाँड गरिएको र नाव "%1" रूपमा दर्शन गरिन्छ BlueToothDeviceListView Disconnect विस्तार गर्नुहोस् Connect संधारण गर्नुहोस् Send Files फाइलहरू भेट्नुहोस् Rename परिचायन बदल्नुहोस् Remove Device उपकरण छुट्टाउनुहोस् Select file फाइल छान्नुहोस् BluetoothCtl Edit सम्पादन Allow other Bluetooth devices to find this device यस उपकरणलाई अन्य Bluetooth उपकरणहरूले पाठ्य गर्न सक्ने राख्नुहोस् To use the Bluetooth function, please turn off Bluetooth फंक्शन उपयोग गर्न सक्न छ तर अन्तर्गत शून्यालय राजस्थान बिनौँ राख्नुहोस् Airplane Mode शून्यालय राजस्थान Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected संपर्क गरिएका Not connected संपर्क गरिनेको छैन BootPage Startup Settings शुरुवातीको सेटिङहरू You can click the menu to change the default startup items, or drag the image to the window to change the background image. मुख्य शुरुवातीको विषयहरू बदल्न सक्न छ तर छान छैन्न रेखाग्रहरूले लुकाउँदा वैकल्पिक पृष्ठभूमि छान्नुहोस् grub start delay grub शुरू हुने दिनाङ्क देरी theme विवरण After turning on the theme, you can see the theme background when you turn on the computer विवरण खोल्दा छन् छ जब रास्त्रपति खोल्ने तब विवरणको पृष्ठभूमि देख्न सक्छ Boot menu verification शुरुवातीको मेनु परीक्षण After opening, entering the menu editing requires a password. क्याकि खोलिने बाद मेनु संपादन गर्न लागि लघुपास्सवर्ड लाग्दछ Change Password लघुपास्सवर्ड बदल्नुहोस् Change boot menu verification password शुरुवातीको मेनु परीक्षण लघुपास्सवर्ड बदल्नुहोस् Set the boot menu authentication password शुरुवातीको मेनु परीक्षण लघुपास्सवर्ड सेट गर्नुहोस् User Name : उपयोगकर्ताको नाम : root root New Password : नयाँ लघुपास्सवर्ड : Required अनिवार्य Password cannot be empty पासवर्ड अव्यवहार्य हो सकेको छैन Passwords do not match पासवर्डहरू मिलान्याथ्यो छन् Repeat password: पुनरावृत्ति गर्नुपर्ने पासवर्ड: Cancel रद्द कर्नुहोस् Sure हामी निश्चित छु Start animation आनिमेशन शुरू गर्नुहोस् Adjust the size of the logo animation on the system startup interface सिस्टम शुरू गर्ने टाइपमा लोगो आनिमेशनको आकार सम्पादन गर्नुहोस् Camera Allow below apps to access your camera: नीचे लिस्टमा लगातार अप्पहरू तपाईको कैमरालाई डाइरेक्ट गर्न सक्न्छन्: CharaMangerModel Fingerprint1 प्रेक्षण1 Fingerprint2 प्रेक्षण2 Fingerprint3 प्रेक्षण3 Fingerprint4 प्रेक्षण4 Fingerprint5 प्रेक्षण5 Fingerprint6 प्रेक्षण6 Fingerprint7 प्रेक्षण7 Fingerprint8 प्रेक्षण8 Fingerprint9 प्रेक्षण9 Fingerprint10 प्रेक्षण10 Scan failed स्कान गर्न मिलान्याथ्यो छ The fingerprint already exists प्रेक्षण राउन्दै छ Please scan other fingers कृपया अन्य पाँचिहरूलाई स्कान गर्नुहोस् Unknown error ज्ञात छैन त्रुटि Scan suspended स्कान रद्द गरियो छ Cannot recognize पहुँच गर्न मिलान्याथ्यो छ Moved too fast जुन तेज गतिबाट ठूलो गति गरिएको छ Finger moved too fast, please do not lift until prompted नेपाली बहुत तेज गति से गुजरेको छ, कृपया आग्रह दिन्छौं भने उठाउन मग उठाउन मा राख्नुहोस् Unclear fingerprint अन्दै नजिको चिह्न Clean your finger or adjust the finger position, and try again तपाईंलाई फुलाको परिमाण बाँध्नुहोस् वा चिह्न रक्खने को स्थान रेख्नुहोस् र फिर देख्नुहोस् Already scanned भन्दा अर्को चिह्न गरिन्छ Adjust the finger position to scan your fingerprint fully फुल चिह्न गर्न लागि फुलको स्थान रेख्नुहोस् Finger moved too fast. Please do not lift until prompted नेपाली बहुत तेज गति से गुजरेको छ, कृपया आग्रह दिन्छौं भने उठाउन मग उठाउन मा राख्नुहोस् Lift your finger and place it on the sensor again फुलको उठाउनु र सेंसरको उपर राख्नुहोस् Position your face inside the frame तपाईंको चाकु बॉक्सको भित्र मा रेख्नुहोस् Face enrolled चाकु धारण गरिएको छ Position a human face please कृपया एउटा मानव चाकु रेख्नुहोस् Keep away from the camera कैमरालाई दूर राख्नुहोस् Get closer to the camera कैमरालाई लगभग राख्नुहोस् Do not position multiple faces inside the frame बॉक्सको भित्रमा बीचबीच चाकु रेख्नुपर्छैन Make sure the camera lens is clean कैमरालाई निश्चित गर्नुहोस् भने लेन्स सफाई गरिएको छ Do not enroll in dark, bright or backlit environments जानाउन मुश्किल, चमत्कारिक वा पीछावातील विस्तृतता मा न धारण गर्नुहोस् Keep your face uncovered तपाईंको चाकु खोलिएको छ Scan timed out स्कान देरमा बाहिर राखिएको छ Cancel रद्द गर्नुहोस् Camera occupied! ColorAndIcons Accent Color सामान्य रंग Icon Settings इकोन सेट्टिङस् Icon Theme इकोन थीम Customize your theme icon वेबसाइटको थीम चिनाउँको रचनाव्यावस्थापन गर्नुहोस् Cursor Theme कर्सर थीम Customize your theme cursor वेबसाइटको थीम चर्चाको रचनाव्यावस्थापन गर्नुहोस् ComfirmDeleteDialog Are you sure you want to delete this account? यो खाताको छुट्ट्याउन थप्न निश्चित छौं? Delete account directory खाताको फोल्डर छुट्ट्याउनुहोस् Cancel रद्द गर्नुहोस् Delete छुट्ट्याउनुहोस् ComfirmSafePage Go to settings सेटिङहरूलाई जानुहोस् Cancel रद्द गर्नुहोस् Common Common साधारण Repeat delay नकारात्मक दौरान क्षमता Short कुरुको Long लंबो Repeat rate नकारात्मक दर Slow स्वीकार्य गर्नुहोस् Fast हामी गर्नुहोस् Numeric Keypad संख्यालेखाशीर्षक test here याहामा परीक्षण गर्नुहोस् Caps lock prompt कैप्स लोक दर्शाउन थप्नुहोस् Double Click Speed दुवै क्लिक गतिविधि Double Click Test दुवै क्लिक परीक्षण Left Hand Mode तामिरको रूप Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size बडो आकार Small size कुरुको आकार Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program योजनालाई सहमत र जुन्न गर्नुहोस् <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting दिन र समय सेटिंग Date दिनाङ्क Year वर्ष Month महिना Day दिन Time समय Cancel रद्द Confirm निश्चित Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow कल Yesterday कामदिन Today आज %1 hours earlier than local %1 गणितै स्थानीयसँग पहिलाउँछ %1 hours later than local %1 गणितै स्थानीयसँग देखि बाहिर छ Space स्थान Week सप्ताह First day of week सप्ताहको पहिलो दिन Short date कार्यक्रमित दिनाङ्क Long date लंबो दिनाङ्क Short time कार्यक्रमित समय Long time लम्बो समय Currency symbol मुद्राको संकेत Positive currency सकारात्मक मुद्रा Negative currency विषाक्त मुद्रा Decimal symbol दशमलवको संकेत Digit grouping symbol संख्याको समूहको संकेत Digit grouping संख्याको समूहकरण Page size पेजको आकार Example DatetimeWorker Authentication is required to change NTP server NTP सर्वर बदल्न लागि परमाणु परीक्षण लागिन्छ Authentication is required to set the system timezone DccColorDialog Cancel रद्द गर्नुहोस् Save संरक्षण गर्नुहोस् DccWindow Control Center provides the options for system settings. कंट्रोल केन्द्र सिस्टम सेटिङहरूको विकल्पहरू प्रदान गर्छ। DeepinIDAccountSecurity Bind WeChat वेचाट सब्ब लगाउनुहोस् By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. वेचाट सब्ब लगाउने तपाईँले %1 आईडी र लागि लेखालेखी खाताहरूको निराकार र तेजस्वी लॉग इन गर्न सक्छन्। Unlinked लगाउँने छैनको Unbinding लगाउने छैन्दैन Link लगाउनुहोस् Are you sure you want to unbind WeChat? तपाईंले वेचाटलाई छैन्दैन चाहनुभयो भने? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. वेचाटलाई छैन्दैन भने तपाईँले वेचाटलाई %1 आईडी वा लागि लेखालेखी खातालाई जानाउँछैन जुन निराकार र QR कोड देखाउँदै लॉग इन गर्नुपर्छ। Let me think it over मन छान उन्मत्त गर्नुहोस् Local Account Binding लागि लेखालेखी खाताको लगाउँदै After binding your local account, you can use the following functions: लागि लेखालेखी खातालाई लगाउने तपाईँले अन्तर्गत यी विकल्पहरू उपयोग गर्न सक्छन्: WeChat Scan Code Login System वेचाट दर्पण कोड लॉग इन सिस्टम Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. तपाईँलाई लगाउँदा वेचाट जुन तपाईँको %1 आईडी छैन उपयोग गर्दै दर्पण कोड देखाउँदै लॉग इन गर्नुहोस् लागि लेखालेखी खातालाई। Reset password via %1 ID %1 आईडी भने खालील पासवर्ड वापस गर्नुहोस्: Reset your local password via %1 ID in case you forget it. यदि आप अपना स्थानीय पासवर्ड भूल जाते हैं, तो %1 आईडी का उपयोग करके इसे फिर से सेट कर सकते हैं। To use the above features, please go to Control Center - Accounts and turn on the corresponding options. उपरोक्त विशेषताओं का उपयोग करने के लिए, कॉन्ट्रोल केंटर - एकाउंट्स जाते हुए दिए गए संबंधित विकल्पों को इंटरनिशनल करें। DeepinIDInterface deepin डीपिन UOS यूओएस DeepinIDLogin Cloud Sync क्लाउड सिंक Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. अपने %1 आईडी को प्रबंधित करें और अपने व्यक्तिगत डेटा को उपकरणों में संश्लेषित करें। %1 आईडी में लौहा करके ब्राउजर, एप स्टोर और और अधिक के लिए व्यक्तिगत विशिष्ट विशेषताएं और सेवाएं प्राप्त करें। Sign In to %1 ID %1 आईडी में लौहा DeepinIDSyncService Auto Sync ऑटो सिंक Securely store system settings and personal data in the cloud, and keep them in sync across devices सिस्टम सेटिंग्स और व्यक्तिगत डेटा को क्लाउड में निरापद रूप से संरक्षित करें और उन्हें उपकरणों में संश्लेषित रखें System Settings सिस्टम सेटिंग्स Last sync time: %1 हालिया सिंक समय: %1 Clear cloud data क्लाउड में डेटा को निष्कासित करें Are you sure you want to clear your system settings and personal data saved in the cloud? क्या आप निश्चित हैं कि आप उपकरणों में संरक्षित रहे विस्तृत सिस्टम सेटिंग्स और व्यक्तिगत डेटा को निष्कासित करना चाहते हैं? Once the data is cleared, it cannot be recovered! एक बार डेटा को निष्कासित कर दिया जाए, तो इसे पुनरावृत्ति नहीं किया जा सकता! Cancel रद्द करें Clear निष्कासित करें DeepinIDUserInfo Synchronization Service सिंकराइज़ेशन सेवा Account and Security खाता और सुरक्षा Sign out लौहा निकालें Go to web settings वेब सेटिंग्स को जाएं The nickname must be 1~32 characters long DeepinWorker encrypt password failed पासवर्ड को एंक्रिप्ट करना विफल हो गया Wrong password, %1 chances left अधूरा पासवर्ड, आपके पास %1 अवसर शेष हैं The login error has reached the limit today. You can reset the password and try again. आज की लॉगिन त्रुटि अधिकतम अवसर तक पहुंच गई है। आप पासवर्ड को फिर से सेट करके फिर से प्रयास कर सकते हैं। Operation Successful oprेशन सफल The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China मेनलैंड चीन Other regions अन्य क्षेत्रहरू The feature is not available at present, please activate your system first वर्तमान मा यो विशिष्टता उपलब्ध छैन, प्रयोग गर्नुपर्ने नेत्र सक्रिय गर्नुहोस् Subject to your local laws and regulations, it is currently unavailable in your region. आपको अपाई देशीय कानूनहरू र कार्यक्रममा तयार भएको यो विशिष्टता आपको क्षेत्रमा उपलब्ध छैन। Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' कृपया '%1' खोल्न्छैन दिने अनुप्रयोग बाट चुन्नुहोस्, add जोड्नुहोस् Open Desktop file Desktop फाइल खोल्नुहोस् Apps (*.desktop) Apps (*.desktop), All files (*) सारी फाइलहरू (*), DevelopModePage Root Access Root एक्सेस Request Root Access Root एक्सेस अनुरोध गर्नुहोस् After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. डेवलपर मोड भएको बादले आपलाई root अनुमति अनुभाग गर्न सकिन्छ, तर यसको वजनात्मक प्रभाव सिस्टम विश्वसनीयतालाई नुकसान पहुँचाउन सकिन्छ, त्यसलाई कृपया धेरै सावधानी धारण गर्नुहोस्। Allowed निष्पक्ष Enter वास्तविक स्थानमा चल्नुहोस् Online सार्वजनिक Login UOS ID Login UOS ID Offline अनैतिक Import Certificate Certificate भेट्नुहोस् Select file फाइल चयन गर्नुहोस् Your UOS ID has been logged in, click to enter developer mode आपको UOS ID लॉग इन भएको छ, डेवलपर मोड भेट्नुहोस् कुक्कीको द्वाराले Please sign in to your UOS ID first and continue कृपया आपको UOS ID भए पहिले लॉग इन गर्नुहोस् र जारी रह्नुहोस् 1.Export PC Info 1.Export PC Info Export Export 3.Import Certificate 3.Import Certificate Development and debugging options 프로그래밍 र डिबगिंग विकल्पहरू System logging level सिस्टम लैग्री तह Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. विकल्पहरू बदल्ने दृष्टिकोण विस्तृत लैग्री गर्ने परिणाम दिने सिस्टम प्रदर्शन घटाउने र/व यात्रा स्थान ले लाग्दै उचित हुन सक्छ. Off फाइल Debug डिबग Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. विकल्प बदल्ने एक मिनिट तयार गर्न मुख्य र योग्य व्यवस्थापन लुकाउन बाद अनुकूल रूपमा काम गर्न लाग्दै र यसले प्रभाव पाउँद्छ। उपकरणलाई पुनरारंभ गर्नुपर्छ। To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: नीचे देखिन्छ आवासीय अप्पहरूले यो फाइलहरू र महावासीले लागि योग्यता दिनुहुन्छ: Documents पेपर Desktop देस्कटोप Pictures चित्रहरू Videos वीडियोहरू Music गानहरू Downloads डाउनलोडहरू folder महावासी FontSizePage Size आकार Standard Font रूपान्तरित फोन्ट Monospaced Font समान आकार फोन्ट GeneralPage Power Plans पावर प्लानहरू Power Saving Settings पावर सेवानिवृत्ति सेटिंगहरू Auto power saving on low battery लुकाउ बैटरीमा अटोमेटिक पावर सेवानिवृत्ति Low battery threshold लुकाउ बैटरी गраницा Auto power saving on battery बैटरीमा अटोमेटिक पावर सेवानिवृत्ति Wakeup Settings आकुप विकल्पहरू Password is required to wake up the computer कंप्युटरलाई जागाउन लागि सामान्य वाक्य लागिन्छ Password is required to wake up the monitor मैनिटरलाई जागाउन लागि सामान्य वाक्य लागिन्छ Shutdown Settings निर्मिति सेटिङहरू Scheduled Shutdown विनिर्धारित निर्मिति Time समय Repeat पुनरुक्तित्व Once एक बार Every day प्रत्येक दिन Working days कार्यक्रम दिनहरू Custom Time स्वामित्व दिन Decrease screen brightness on power saver शक्यता बचावको बाट तपाईंको दिल्लाई निर्वात गर्नुहोस् GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ', ... ... InterfaceEffectListview Optimal Performance [optimal performance] Balance विश्वस्त Best Visuals विश्वस्त प्रदर्शन Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language भाषा done पूरा edit संपादन Other languages अन्य भाषाएँ add जोड़ें Region क्षेत्र Area क्षेत्र Operating system and applications may provide you with local content based on your country and region ऑपरेटिंग सिस्टम और अपलोड आपको अपने देश और क्षेत्र के आधार पर स्थानीय सामग्री प्रदान कर सकते हैं. Operating system and applications may set date and time formats based on regional formats ऑपरेटिंग सिस्टम और अपलोड क्षेत्रीय फॉर्मेटों के आधार पर तारीख और समय के फॉर्मेट निर्धारित कर सकते हैं. Regional format LangsChooserDialog Add language भाषा जोड़ें Search नामांकन Cancel रद्द गर्नुहोस् Add जोड्नुहोस् LoginMethod Login method प्रवेश विधि Password, wechat, biometric authentication, security key साइन एन्टर, वेचाट, विशिष्ट विश्वासपात्रता परीक्षण, उपायनित्र सुरक्षा कुंजी Password पासवर्ड Modify password पासवर्ड बदल्नुहोस् Validity days कार्यकालित दिनहरू Always सदैव Reset password LogoModule Copyright© 2011-%1 Deepin Community कॉपीराइट© 2011-%1 Deepin समुदाय Copyright© 2019-%1 UnionTech Software Technology Co., LTD कॉपीराइट© 2019-%1 UnionTech सॉफ्टवेअर तकनीकी संस्थान, एसएलडी MicrophonePage Automatic Noise Suppression वातावरण शोर नियन्त्रण Input Volume वाच्यो ध्यानको सिंचना Input Level वाच्यो स्तर Input वाच्यो No input device for sound found सुन्न वाच्योको इनपुट यंत्र छैन देखिने Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices मा व्यस्त उपकरणहरू NativeInfoPage UOS UOS Computer name कंप्युटरको नाम It cannot start or end with dashes हामी टिकिले या अन्तिम बार टिक्का छैन OS Name OS को नाम Version वर्जन Edition संस्करण Type रूप bit बिट Authorization स्वीकृति System installation time सिस्टम इनस्टॉल भइदा Kernel करनेल Graphics Platform ग्राफिक्स प्लॅटफॉर्म Processor प्रोसेसर Memory प्रयोग यादान्वान 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices अन्य उपकरणहरू Show Bluetooth devices without names नाम छैनको ब्लूटूथ उपकरणहरू देखाउनुहोस् PasswordLayout Current password वर्तमान पासवर्ड Required निर्दिष्ट छैन्द Weak लुप्त Medium मध्यम Strong ज्यादातर निर्णायक Repeat Password पासवर्ड नकारात्मक पुनरावृत्ति Password hint पासवर्ड का उपदेश Optional वैकल्पिक Password cannot be empty पासवर्ड अव्यवस्थित छन्द छैन्द Passwords do not match पासवर्डहरू मिलाउन मिलाउँदैनन The hint is visible to all users. Do not include the password here. उपदेश सभी उपयोगकर्ताहरूले देख्न सक्छ। यस यादीमा पासवर्ड छैन्द New password New password should differ from the current one नया पासवर्ड वर्तमान पासवर्ड विशिष्ट छैन्द The password cannot be the same as the username. PasswordModifyDialog Modify password पासवर्ड परिवर्तन गर्नुहोस् Reset password पासवर्ड पुनर्व्यवस्थापन गर्नुहोस् Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. पासवर्डको विश्लेषण समावेश गर्नुपर्छ 8 वर्णहरूमा र यसमा निम्नलिखितमा तीन वटा समावेश गर्नुपर्छ: वर्गीय वर्ण, निर्वर्गीय वर्ण, संख्या र प्रतीक। यस प्रकारको पासवर्ड अधिक निर्णायक छ। Resetting the password will clear the data stored in the keyring. पासवर्डको पुनर्व्यवस्थापन दाखिला राखिएका डाटाको लगान छुट्याउने वैधता छ। Cancel रद्द गर्नुहोस् Personalization Personalization PersonalizationInterface Light लाम्बो Auto कार्यक्रमीय रूपमा Dark मोंको Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom सम्स्तता PluginArea Plugin Area प्लगइन क्षेत्र Select which icons appear in the Dock डोकमा दिखाउने चिन्हहरूको चयन गर्नुहोस् Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down बंद कर्नुहोस् Suspend कार्यक्रमीय स्वेच्छा रूपमा रूपान्तरण गर्नुहोस् Hibernate स्वास्थ्यकरण घटना चलाउनुहोस् Turn off the monitor प्रतीक्षा व्यापारिको बाट बाहिर छुनुहोस् Show the shutdown Interface निर्माण विषयको बाहिर छुनुहोस् व्यवस्थापन दर्शन गर्नुहोस् Do nothing कुनै छुनुका छैन PowerPage Screen and Suspend लुप्त र स्वास्थ्यकरण घटना चलाउनुहोस् Turn off the monitor after प्रतीक्षा व्यापारिको बाट बाहिर छुनुका बाद Lock screen after लुक्काउनुका बाद लुप्त र स्वास्थ्यकरण घटना चलाउनुहोस् Computer suspends after कंप्युटर स्वास्थ्यकरण घटना चलाउनुका बाद When the lid is closed कब तर लिड बाहिर छुनुको बाद When the power button is pressed कब तर शक्ति टाइप दबाइन्छ PowerPlansListview High Performance उच्च प्रदर्शन Balance Performance सम्युग्ल प्रदर्शन Aggressively adjust CPU operating frequency based on CPU load condition CPU भार अवस्थामा CPU चलन आवृत्ति लगातार रैकाउनुहोस् Balanced सम्युग्ल Power Saver शक्ति बचावकर Prioritize performance, which will significantly increase power consumption and heat generation प्रदर्शन लागि पहिलो राख्नुहोस्, जसका शक्ति खपन र गर्मी उत्पादनले बढी गर्नेछ Balancing performance and battery life, automatically adjusted according to usage प्रदर्शन र बैटरी जीवनकाललाई बराबरीमा राख्नुहोस्, प्रयोगको अनुसार अत्यन्त बारेमा रैकाउनुहोस् Prioritize battery life, which the system will sacrifice some performance to reduce power consumption बैटरी जीवनकाललाई पहिलो राख्नुहोस्, जसका प्रणाली केही प्रदर्शन छुन्नेको लागि शक्ति खपन घटाउनेछ PowerWorker Minutes मिनिटहरू Hour घण्टा Never कभी भनिन्छ छैन Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy गैरी सुरक्षा नीति Copy Link Address PwqualityManager Password cannot be empty लास्पास छान छैन राख्न सकिन्छ Password must have at least %1 characters लास्पासमा कम्पulsary राख्न सकिन्छ %1 वा त्यो भन्दा बढी अक्षरहरू Password must be no more than %1 characters लास्पासमा कम्पulsary राख्न सकिन्छ %1 वा त्यो भन्दा कम अक्षरहरू Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) पासवर्ड मा अंग्रेजी वर्ण (विशेष रूप से विचारले), अंकहरू वा विशेष सिम्बोलहरू (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) शामिल र सकिन्हो। No more than %1 palindrome characters please %1 तयार वापरको पलिनड्रोम वर्णहरू अनुरोध No more than %1 monotonic characters please %1 तयार वापरको एकाधिकारिक वर्णहरू अनुरोध No more than %1 repeating characters please %1 तयार वापरको वापरित वर्णहरू अनुरोध Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) पासवर्डमा उचित अक्षरहरू, निषुल्क अक्षरहरू, अंकहरू र विशेष सिम्बोलहरू (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) शामिल र सकिन्हो। Password must not contain more than 4 palindrome characters पासवर्डमा 4 तयार वापरको पलिनड्रोम वर्णहरू भन्दा अधिक वापर गर्न सकिन्हो। Do not use common words and combinations as password सामान्य शब्दहरू वा योजनाहरू उपयोग गर्ने पासवर्ड राख्न सकिन्हो। Create a strong password please कृपया शक्तिशाली पासवर्ड बनाउनुहोस् It does not meet password rules यो पासवर्ड नियमहरू सम्म न छ QObject Control Center कैंट्रल केंद्र Activated कार्यवाही गरिनेको View देखाउनुहोस् To be activated कार्यवाही गर्न थपिनेको Activate कार्यवाही गर्नुहोस् Expired मान्यता अवेक्षणको अवधि अवधि अवेक्षित गरिनेको In trial period त्रायावधीमा Trial expired त्राय अवधि अवेक्षित गरिनेको dde-control-center dde-control-center Touch Screen Settings स्पर्श रेखाले स्थिरको सेटिङहरू The settings of touch screen changed स्पर्श रेखालाई स्थिरको सेटिङहरू बदलिने This system wallpaper is locked. Please contact your admin. यो सिस्टम वॉलपेपर लॉक गरिनेको छ। कृपया आपको प्रबंधकसँग संपर्क गर्नुहोस्। %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search खोज्नुहोस् Default formats स्थानीय रूपांतरणहरू First day of week सप्ताहको पहिलो दिन Short date कार्यक्रम देखाउने तारिख Long date कार्यक्रम देखाउने बारिशको तारिख Short time कार्यक्रम देखाउने समय Long time कार्यक्रम देखाउने बारिशको समय Currency symbol पनि चिन्ह Digit अंक Paper size पेपर साइज Cancel रद्द गर्नुहोस् Save संग्रहालाई पालन गर्नुहोस् Regional format RegionsChooserWindow Search जनाउनुहोस् RegisterDialog Set a Password पासवर्ड सेट गर्नुहोस् 8-64 characters 8-64 वर्णहरू Repeat the password पासवर्ड पनि देखाउनुहोस् Cancel रद्द गर्नुहोस् Confirm निश्चित गर्नुहोस् Passwords don't match पासवर्डहरू मिलाउन सकिन्छन् ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver स्क्रीन सेवर preview भावना Personalized screensaver ल्यापनिज़ेरिझेड स्क्रीन सेवर setting सेटिङ्ग idle time क्षुद्र समय 1 minute 1 मिनिट 5 minute 5 मिनिट 10 minute 10 मिनिट 15 minute 15 मिनिट 30 minute 30 मिनिट 1 hour 1 घण्टा never कभी भी नहीं Password required for recovery पुनर्निर्माण लाई पासवर्ड लाई आवश्यक Picture slideshow screensaver यात्रा चित्र शॉवेर्सेवर System screensaver सिस्टम शॉवेर्सेवर SearchableListViewPopup Search परिचालन No search results ShortcutSettingDialog Add custom shortcut समाचारको व्यापार लगाउनुहोस् Name: नाम: Required निष्पक्ष Command: कमाण्ड: Shortcut स्क्रॅच्चर None कोई भनेर नहीं Cancel रद्द गर्नुहोस् Add लगाउनुहोस् The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts स्क्रॅच्चरहरू System shortcut, custom shortcut सिस्टम स्क्रॅच्चर, लागि नियमित स्क्रॅच्चर Search shortcuts परिचालना स्क्रॅच्चरहरू done पनि भयो edit सम्पादन Click लगाउँदै Cancel रद्द गर्नुहोस् or या Replace परिवर्तन गर्नुहोस् Restore default मूल्यावली वापर्नुहोस् Add custom shortcut समग्र छान्ति वाहन लगाउनुहोस् please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices आउटपुट उपकरणहरू Select whether to enable the devices उपकरणहरूको व्यवस्थापन गर्न अनुमति दिन अनुक्रम गर्नुहोस् Input Devices इनपुट उपकरणहरू SoundEffectsPage Sound Effects संगीत प्रभावहरू SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up प्रणाली सुरु गर्दै Shut down प्रणाली बन्द गर्दै Log out व्यक्तिगत वैश्यवास बाहेर छुट्छु Wake up जागाउनुहोस् Volume +/- स्पर्दा +/- Notification जानकारी Low battery कम बैटरी Send icon in Launcher to Desktop लैंचरमा भेट्री डेस्कटॉपमा भेट्नुहोस् Empty Trash वित्तित गर्नुहोस् Plug in योड्नुहोस् Plug out योड्न छुट्छु Removable device connected बदल्ने उपकरण संयोजित छ Removable device removed बदल्ने उपकरण छुट्छ Error अशुद्धि SpeakerPage Mode रूपरेखा Output Volume आउटपुट स्पर्दा Volume Boost आयनको वॉक्यूम वृद्धि If the volume is louder than 100%, it may distort audio and be harmful to output devices अगर आयनको वॉक्यूम 100% भन्दा बढी छ, त्यसको वायु प्रसारन उपकरनहरूमा विक्षेपित र खतरनाक छ Left बाउँच Right दाउँच Output प्रसारन No output device for sound found कुनै भन्दा शोरलाई प्रसारन गर्ने उपकरन छैन Left Right Balance बाउँच दाउँच विनिमय Merge left and right channels into a single channel बाउँच र दाउँच चैनलहरू को एउटा चैनलमा मिलाउनुहोस् Whether the audio will be automatically paused when the current audio device is unplugged कि वर्तमान आयनको उपकरन अक्षम गर्दा आयनको पौस्त्या अटोमेटिक रूपमा रुपाउन छ Mono Audio Auto Pause Output Device SyncInfoListModel Sound शोर Power बल्कोशीरा Mouse माउस Update अपडेट Screensaver स्क्रीन सेवर System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers अधिक वॉलपेपरहरू TimeAndDate Auto sync time अटो सामन्यकाल संकरिता Ntp server NTP सर्वर System date and time सिस्टम काल र तिथि Customize स्वामित्व दिनुहोस् Settings सेटिङ्स Server address सर्वर पत्र Required आवश्यक The ntp server address cannot be empty NTP सर्वर ठेका अवश्यम्बार छैन शक्छ Use 24-hour format 24 घण्टावटा वर्गीकृत गर्नुहोस् system time zone सिस्टम समय खेड़ा Timezone list समय खेड़ा सूची Add TimeRange from भेटि to बाँकी TimeoutDialog Save the display settings? दर्शन सेटिङहरू बचाउनुहोस् Settings will be reverted in %1s. %1 समयमा सेटिङहरू पुनरावृत्ति गरिफुन्छ. Revert पुनरावृत्ति Save बचाउनुहोस् TimezoneDialog Add time zone समय खेड़ा वास्तविक गर्नुहोस् Determine the time zone based on the current location वर्तमान स्थान विश्लेषण गरेर समय खेड़ा निर्धारित गर्नुहोस् Time zone: समय खेड़ा: Nearest City: नेपालिको शहर: Cancel रद्द गर्नुहोस् Save बचाउनुहोस् TouchScreen TouchScreen स्पर्श स्क्रीन Set up here when connecting the touch screen स्पर्श स्क्रीन जोड्ने जस्तै यो पानी पर सेट गर्नुहोस् Touchpad Basic Settings मूल विन्यास Touchpad स्पर्शपट्ट Pointer Speed चिह्नको गतिवैधिता Slow चालु गर्नुहोस् Fast चालु गर्नुहोस् Disable touchpad during input इनपुट गर्दा स्पर्शपट्ट अकार्य गर्नुहोस् Tap to Click क्लिक गर्ने लागि टप गर्नुहोस् Natural Scrolling प्राकृतिक चलन Three-finger gestures तिरुनारायण फ़ींगर गेस्टर्स Four-finger gestures चार फ़ींगर गेस्टर्स Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper समवायामी रंगकारी वेटरपेपर Customizable wallpapers सम्पादन गर्न सक्ने वेटरपेपरहरू fill style भरणको शैली Automatic wallpaper change वेटरपेपरको शैक्षिक परिवर्तन never नर्वे 30 second 30 सेकेंड 1 minute 1 मिनिट 5 minute 5 मिनिट 10 minute 10 मिनिट 15 minute 15 मिनिट 30 minute 30 मिनिट login लॉग इन wake up बेगुनी Live Wallpaper जीवित वेटरपेपर 1 hour 1 घण्टा System Wallpapers WallpaperSelectView unfold प्रस्तावना गर्न Set lock screen लॉक स्क्रीन निर्धारित गर्न Set desktop डेस्कटॉप निर्धारित गर्न show all - %1 items Add Picture WindowEffectPage Interface and Effects निर्माण र प्रभावहरू Window Settings विंडो व्यवस्थाहरू Window rounded corners विंडोको बाँकी छोडको छेदको पार्दा None कुनै भनिता छैन Small कम Large बडा Enable transparent effects when moving windows विंडो गतिबद्ध गर्दा पारगरी फल्का प्रभाव सकारात्मक गर्नुहोस् Window Minimize Effect विंडो कम्प्रेस फल्का प्रभाव Scale मापन Magic Lamp मागिक लाम्प Opacity पारगरी Low निच्यो High उच्च Scroll Bars स्क्रिल बारहरू Show on scrolling स्क्रिल गर्दा दिखाउनुहोस् Keep shown दिखाइएको बनाउनुहोस् Compact Display कम्पेक्ट दर्शन If enabled, more content is displayed in the window. यदि सकारात्मक गरिनुहुन्छ, विंडोमा अधिक काउंटेन दिखाउँछ। Title Bar Height शीर्ष लाइनको उंचाई Only suitable for application window title bars drawn by the window manager. केवल विंडो मैनेजर द्वारा खेल्ने वालो विंडोको शीर्ष लाइनका लागि उपयुक्त छ। Extremely small कामपन्न बहिरून कम Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) परम्परागत चिनियाँ (चिनियाँ हङकङ) Traditional Chinese (Chinese Taiwan) परम्परागत चिनियाँ (चिनियाँ ताइवान) Min Nan Chinese dcc::Locale::regionNames Taiwan China ताइवान चीन dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User станर्ड उज़र Administrator अडिमिनिस्ट्रेटर Customized स्वाप्नित गरिएको dccV25::AccountsWorker Your host was removed from the domain server successfully आपको होस्ट डोमेन सर्वर से सफलतापूर्वक हटाइएको छ Your host joins the domain server successfully आपको होस्ट डोमेन सर्वरमा सफलतापूर्वक जुटेको छ Your host failed to leave the domain server आपको होस्ट डोमेन सर्वर से निकाल्ने में फाल्ट भएको छ Your host failed to join the domain server आपको होस्ट डोमेन सर्वरमा जुट्ने में फाल्ट भएको छ AD domain settings AD डोमेन सेटिंगहरू Password not match पासवर्ड सामान भनिन्छ dccV25::AvatarTypesModel Dimensional विमानित Flat स्तूपी dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] यो चार्टरक्रेट विवादित छ [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System प्रणाली Window विन्डो Workspace कार्यक्षेत्र AssistiveTools सहायक उपकरणहरू Custom अनुकूलन None कुनै पनि छैन ================================================ FILE: translations/dde-control-center_nl.ts ================================================ AccountSettings edit Bewerken Add new user Gebruiker toevoegen Set fullname Voer de volledige naam in Login settings Aanmeldinstellingen Login without password Aanmelden zonder wachtwoord Delete current account Account verwijderen Group setting Groepsinstellingen Account groups Accountgroepen done Klaar Group name Groepsnaam Add group Nieuwe groep Auto login Automatisch aanmelden Account Information Accountinformatie Account name, account fullname, account type Accountnaam, volledige naam, soort account Account name Accountnaam Account fullname Volledige naam Account type Soort account The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face Gezichtsherkenning I have read and agree to the Ik geef hierbij aan dat ik kennisgenomen heb van en akkoord ga met Disclaimer Verklaring Next Volgende Face enrolled Je gezicht is herkend Failed to enroll your face Je gezicht is niet herkend Done Klaar Cancel Annuleren Retry Enroll Opnieuw proberen Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Annuleren Done Klaar Enroll Finger Vingerafdrukherkenning Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Plaats de gewenste vinger op de sensor en veeg van boven naar beneden. Haal je vinger vervolgens van de sensor. I have read and agree to the Ik geef hierbij aan dat ik kennisgenomen heb van en akkoord ga met Disclaimer Verklaring Next Volgende Retry Enroll Opnieuw proberen "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. ‘Biometrische authenticatie’ is een functie die de gebruiker authenticeert. Deze functie wordt aangeboden door UnionTech Software Technology Co., Ltd. De biometrische gegevens worden vergeleken met de lokale gegevens op het apparaat, waarna er al dan niet verificatie plaatsvindt. Let op: UnionTech Software verzamelt geen biometrische gegevens en heeft er ook geen toegang tot, aangezien alles lokaal wordt opgeslagen op je apparaat. Schakel biometrische authenticatie alléén in op je persoonlijke apparaat en gebruik het alleen voor authenticatiedoeleinden. Schakel de functie uit en/of verwijder de biometrische gegevens van anderen. UnionTech Software doet onderzoek naar de verbetering en beveiliging van de functie, alsmede de juistheid en stabiliteit. Er is echter geen garantie dat de functie niet tijdelijk te omzeilen is. Zorg er dan ook voor dat je de functie naast andere inlogmethoden gebruikt op UnionTech OS. Heb je vragen of suggesties hieromtrent? Geef dan feedback via ‘Dienstverlening en ondersteuning’ op UnionTech OS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Automatisch aanmelden kan slechts op één account worden ingeschakeld. Schakel deze functie uit bij het account ‘%1’. Ok Oké AvatarSettingsDialog Images Afbeeldingen Human Mens Animal Dier Scenery Landschap Illustration Tekening Emoji Emoji custom Aangepast Cartoon style Stripstijl Dimensional style 3D-stijl Flat style Platte stijl Cancel Annuleren Save Opslaan BatteryPage Screen and Suspend Beeldscherm en pauzestand Turn off the monitor after Beeldscherm uitschakelen na Lock screen after Scherm vergrendelen na Computer suspends after Computer onderbreken na When the lid is closed Actie na sluiten van deksel When the power button is pressed Actie na indrukken van aan-/uitknop Low Battery Laag accuniveau Low battery notification Melding tonen als accuniveau laag is Auto suspend Automatisch pauzeren Auto Hibernate Automatisch slapen Low battery threshold Laag accuniveau Battery Management Accubeheer Display remaining using and charging time Resterend gebruik en resterende oplaadtijd tonen Maximum capacity Maximale capaciteit Low battery level Laag accuniveau Disable Uitschakelen BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is uitgeschakeld en de getoonde naam is ‘%1’ Bluetooth is turned on, and the name is displayed as "%1" Bluetooth is ingeschakeld en de getoonde naam is ‘%1’ BlueToothDeviceListView Disconnect Verbinding verbreken Connect Verbinden Send Files Bestanden versturen Rename Naam wijzigen Remove Device Apparaat verwijderen Select file Kies een bestand BluetoothCtl Edit Bewerken Allow other Bluetooth devices to find this device Andere bluetoothapparaten toestaan dit apparaat te vinden To use the Bluetooth function, please turn off Schakel uit om de bluetoothfunctie te kunnen gebruiken Airplane Mode Vliegtuigstand Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Verbonden Not connected Niet verbonden BootPage Startup Settings Opstartinstellingen You can click the menu to change the default startup items, or drag the image to the window to change the background image. Klik op het menu om items aan te passen of versleep een afbeelding naar het venster om de achtergrond te wijzigen. grub start delay Grub-opstartvertraging theme Thema After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Vingerafdruk 1 Fingerprint2 Vingerafdruk 2 Fingerprint3 Vingerafdruk 3 Fingerprint4 Vingerafdruk 4 Fingerprint5 Vingerafdruk 5 Fingerprint6 Vingerafdruk 6 Fingerprint7 Vingerafdruk 7 Fingerprint8 Vingerafdruk 8 Fingerprint9 Vingerafdruk 9 Fingerprint10 Vingerafdruk 10 Scan failed Scannen mislukt The fingerprint already exists Deze vingerafdruk is al toegevoegd Please scan other fingers Scan andere vingers Unknown error Onbekende fout Scan suspended Scannen onderbroken Cannot recognize Niet herkend Moved too fast Te snel bewogen Finger moved too fast, please do not lift until prompted De vinger is te snel bewogen - til niet op totdat dit wordt aangegeven Unclear fingerprint Onduidelijke vingerafdruk Clean your finger or adjust the finger position, and try again Maak je vinger schoon of pas je vingerpositie aan en probeer het opnieuw Already scanned Reeds gescand Adjust the finger position to scan your fingerprint fully Pas je vingerpositie aan om je gehele vinger te scannen Finger moved too fast. Please do not lift until prompted De vinger is te snel bewogen - til niet op totdat dit wordt aangegeven Lift your finger and place it on the sensor again Til je vinger op en plaats hem nogmaals op de lezer Position your face inside the frame Houd je gezicht binnen het kader Face enrolled Je gezicht is herkend Position a human face please Alleen menselijke gezichten zijn toegestaan Keep away from the camera Ga iets naar achteren Get closer to the camera Ga iets naar voren Do not position multiple faces inside the frame Zorg dat alleen jóuw gezicht te zien is Make sure the camera lens is clean Zorg dat de cameralens schoon is Do not enroll in dark, bright or backlit environments Voer de herkenning niet uit in te donkere of overbelichte omgevingen Keep your face uncovered Zorg dat je gezicht onbedekt is Scan timed out Het scannen is verlopen Cancel Annuleren Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Voer je wachtwoord in om de ntp-server te wijzigen Authentication is required to set the system timezone Voer je wachtwoord in om de systeemtijdzone in te stellen DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Beeldscherm Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin-gemeenschap Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Automatische ruisonderdrukking Input Volume Invoervolume Input Level Invoerniveau Input No input device for sound found Input Device Invoerapparaat Mouse Mouse and Touchpad Muis en touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personalisatie PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Aangepast PluginArea Plugin Area Systeemvak Select which icons appear in the Dock Geef aan welke pictogrammen op het dock moeten worden getoond Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Voer een wachtwoord in Password must have at least %1 characters Het wachtwoord moet minimaal %1 tekens bevatten Password must be no more than %1 characters Het wachtwoord mag niet langer zijn dan %1 tekens Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Het wachtwoord mag alleen Nederlandstalige letters (hoofdlettergevoelig), cijfers of speciale tekens (~!@#$%^&*()[]{}\|/?,.<>) bevatten No more than %1 palindrome characters please Maximaal %1 palindroomtekens No more than %1 monotonic characters please Maximaal %1 monotone tekens No more than %1 repeating characters please Maximaal %1 dezelfde tekens Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Het wachtwoord moet hoofdletters, kleine letters, getallen en speciale tekens bevatten (~!@#$%^&*()[]{}\|/?,.<>) Password must not contain more than 4 palindrome characters Het wachtwoord mag niet meer dan 4 palindroomtekens bevatten Do not use common words and combinations as password Het wachtwoord mag geen algemene woorden of samenstellingen bevatten Create a strong password please Stel een sterk wachtwoord samen It does not meet password rules Het wachtwoord voldoet niet aan de vereisten QObject Control Center Instellingencentrum Activated Geactiveerd View Bekijk To be activated Activatie benodigd Activate Activeren Expired Verlopen In trial period Proefperiode Trial expired Proefperiode verlopen dde-control-center Touch Screen Settings Touchscreeninstellingen The settings of touch screen changed De touchscreeninstellingen zijn aangepast This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Geluid Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Geluidseffecten SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Opstarten Shut down Afsluiten Log out Afmelden Wake up Ontwaken Volume +/- Volume +/- Notification Meldingen Low battery Laag accuniveau Send icon in Launcher to Desktop Bureaubladsnelkoppeling maken Empty Trash Prullenbak legen Plug in Aankoppelen Plug out Loskoppelen Removable device connected Verwijderbaar apparaat aangekoppeld Removable device removed Verwijderbaar apparaat losgekoppeld Error Foutmelding SpeakerPage Mode Modus Output Volume Uitvoervolume Volume Boost Volumeverhoging If the volume is louder than 100%, it may distort audio and be harmful to output devices Als het volume hoger dan 100% wordt ingesteld, is er kans op vervormd geluid en luidsprekerschade Left Links Right Rechts Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Uitvoerapparaat SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Wil je de beeldscherminstellingen opslaan? Settings will be reverted in %1s. De instellingen worden over %1 sec. teruggezet. Revert Herstellen Save Opslaan TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditioneel Chinees (Chinees Hong Kong) Traditional Chinese (Chinese Taiwan) Traditioneel Chinees (Chinees Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Deze snelkoppeling conflicteert met [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Systeem Window Venster Workspace Werkruimte AssistiveTools Hulpmiddelen Custom Aangepast None Geen ================================================ FILE: translations/dde-control-center_pa.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done ਮੁਕੰਮਲ Cancel ਰੱਦ ਕਰੋ Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel ਰੱਦ ਕਰੋ Done ਮੁਕੰਮਲ Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done ਮੁਕੰਮਲ Cancel ਰੱਦ ਕਰੋ Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel ਰੱਦ ਕਰੋ Save ਸੰਭਾਲੋ BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty ਪਾਸਵਰਡ ਖਾਲੀ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ Passwords do not match Repeat password: Cancel ਰੱਦ ਕਰੋ Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel ਰੱਦ ਕਰੋ Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel ਰੱਦ ਕਰੋ Delete ComfirmSafePage Go to settings Cancel ਰੱਦ ਕਰੋ Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel ਰੱਦ ਕਰੋ Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel ਰੱਦ ਕਰੋ Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel ਰੱਦ ਕਰੋ Save ਸੰਭਾਲੋ DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel ਰੱਦ ਕਰੋ Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel ਰੱਦ ਕਰੋ Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel ਰੱਦ ਕਰੋ Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification ਨੋਟੀਫਿਕੇਸ਼ਨ NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty ਪਾਸਵਰਡ ਖਾਲੀ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel ਰੱਦ ਕਰੋ Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down ਬੰਦ ਕਰੋ Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty ਪਾਸਵਰਡ ਖਾਲੀ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center ਕੰਟਰੋਲ ਸੈਂਟਰ Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel ਰੱਦ ਕਰੋ Save ਸੰਭਾਲੋ Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel ਰੱਦ ਕਰੋ Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel ਰੱਦ ਕਰੋ Save ਸੰਭਾਲੋ ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel ਰੱਦ ਕਰੋ Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save ਸੰਭਾਲੋ click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel ਰੱਦ ਕਰੋ or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down ਬੰਦ ਕਰੋ Log out ਲਾਗ ਆਉਟ ਕਰੋ Wake up Volume +/- Notification ਨੋਟੀਫਿਕੇਸ਼ਨ Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save ਸੰਭਾਲੋ TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel ਰੱਦ ਕਰੋ Save ਸੰਭਾਲੋ TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel ਰੱਦ ਕਰੋ Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty ਪਾਸਵਰਡ ਖਾਲੀ ਨਹੀਂ ਹੋ ਸਕਦਾ ਹੈ Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_pam.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel I-cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit <a href="%1"> %1</a>.</p> Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. DisclaimerControl Disclaimer Cancel Agree FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device MousePage Mouse Pointer Speed Slow Fast Pointer Size Short Long Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationWorker Custom Custom PluginArea Plugin Area Select which icons appear in the Dock PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts Custom done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error Kamalian SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save Isinup TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar Accounts Account Account manager AccountsMain Other accounts Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... BlueTooth Bluetooth settings, devices Bluetooth CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options Datetime Time and date Time and date, time zone settings Language and region System language, regional formats dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Ing shortcut a ini maki conflict ya king [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System System Window Window Workspace Workspace AssistiveTools AssistiveTools Custom Custom None Ala Deepinid deepin ID UOS ID Cloud services Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal Device Device Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound Personalization Personalization PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders Sound Sound Output, input, sound effects, devices SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model ================================================ FILE: translations/dde-control-center_pl.ts ================================================ AccountSettings edit Edytuj Add new user Dodaj nowego użytkownika Set fullname Ustaw imię i nazwisko Login settings Ustawienia logowania Login without password Logowanie bez hasła Delete current account Usuń wybrane konto Group setting Ustawienia grupy Account groups Grupy konta done Gotowe Group name Nazwa grupy Add group Dodaj grupę Auto login Automatyczne logowanie Account Information Informacje o koncie Account name, account fullname, account type Nazwa konta, imię i nazwisko, typ konta Account name Nazwa konta Account fullname Imię i nazwisko Account type Typ konta The full name is too long Imię i nazwisko jest za długie Group names should be no more than 32 characters Nazwa grupy nie powinna przekraczać 32 znaków Group names cannot only have numbers Nazwy grup nie mogą składać się wyłącznie z cyfr Use letters,numbers,underscores and dashes only, and must start with a letter Wyłącznie litery, cyfry, podkreślenia i myślniki. Musi zaczynać się od litery. The group name has been used Nazwa grupy już istnieje quick login, Auto login, login without password Szybkie logowanie, automatyczne logowanie, logowanie bez hasła Undo Cofnij Redo Ponów Cut Wytnij Copy Kopiuj Paste Wklej Select All Zaznacz wszystko Quick login Szybkie logowanie Accounts Account Konto Account manager Menedżer kont AccountsMain Other accounts Inne konta AddFaceinfoDialog Enroll Face Zapisz twarz I have read and agree to the Przeczytałem i akceptuję Disclaimer Ostrzeżenie Next Dalej Face enrolled Twarz zapisana Failed to enroll your face Nie udało się zapisać twarzy Done Gotowe Cancel Anuluj Retry Enroll Spróbuj ponownie zapisać Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. Rozpoznawanie twarzy nie posiada funkcji wykrywania kontaktu z żywą osobą, przez co niesie ze sobą pewne zagrożenia. Aby pomyślnie odblokować urządzenie: 1. Twarz powinna być wyraźnie widoczna i nie należy jej zakrywać (czapkami, okularami, maskami itp.). 2. Należy zapewnić odpowiednie oświetlenie i unikać bezpośredniego światła słonecznego. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. „Uwierzytelnienie biometryczne” to funkcja uwierzytelnienia tożsamości użytkownika stworzona przez UnionTech Software Technology Co., Ltd. Dzięki „uwierzytelnieniu biometrycznemu” zebrane dane biometryczne będą porównywane z danymi przechowywanymi na urządzeniu, a tożsamość użytkownika zostanie zweryfikowana na podstawie wyniku porównania. Należy pamiętać, że UnionTech Software Technology Co., Ltd. nie będzie gromadzić, ani uzyskiwać dostępu do żadnych danych biometrycznych użytkownika, które będą przechowywane lokalnie na urządzeniu. Aktywuj uwierzytelnienie biometryczne wyłącznie na swoim urządzeniu osobistym i posługuj się wyłącznie swoimi informacjami biometrycznymi. Pamiętaj również, aby usunąć dane innych użytkowników, by uniknąć potencjalnych problemów w przyszłości. Firma UnionTech Software Technology Co., Ltd. jest zaangażowana w badania i poprawę jakości bezpieczeństwa, dokładności i stabilności uwierzytelniania biometrycznego. Jednak ze względu na czynniki środowiskowe, sprzętowe, techniczne i tym podobne oraz kontrole ryzyka związanego z tą technologią, nie możemy zagwarantować, że to rozwiązanie będzie działać za każdym razem. Dlatego nie należy traktować uwierzytelniania biometrycznego jako jedyny sposób logowania do systemu UOS. Jeśli masz jakiekolwiek pytania lub sugestie dotyczące uwierzytelniania biometrycznego, możesz przekazać opinię poprzez „Serwis i wsparcie” w systemie UOS. AddFingerDialog Cancel Anuluj Done Gotowe Enroll Finger Dodaj odcisk palca Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Połóż palec na czytniku i przesuwaj z góry na dół. Podnieś swój palec po zakończeniu. I have read and agree to the Przeczytałem i akceptuję Disclaimer Ostrzeżenie Next Dalej Retry Enroll Spróbuj ponownie "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. „Uwierzytelnienie biometryczne” to funkcja uwierzytelnienia tożsamości użytkownika stworzona przez UnionTech Software Technology Co., Ltd. Dzięki „uwierzytelnieniu biometrycznemu” zebrane dane biometryczne będą porównywane z danymi przechowywanymi na urządzeniu, a tożsamość użytkownika zostanie zweryfikowana na podstawie wyniku porównania. Należy pamiętać, że UnionTech Software Technology Co., Ltd. nie będzie gromadzić, ani uzyskiwać dostępu do żadnych danych biometrycznych użytkownika, które będą przechowywane lokalnie na urządzeniu. Aktywuj uwierzytelnienie biometryczne wyłącznie na swoim urządzeniu osobistym i posługuj się wyłącznie swoimi informacjami biometrycznymi. Pamiętaj również, aby usunąć dane innych użytkowników, by uniknąć potencjalnych problemów w przyszłości. Firma UnionTech Software Technology Co., Ltd. jest zaangażowana w badania i poprawę jakości bezpieczeństwa, dokładności i stabilności uwierzytelniania biometrycznego. Jednak ze względu na czynniki środowiskowe, sprzętowe, techniczne i tym podobne oraz kontrole ryzyka związanego z tą technologią, nie możemy zagwarantować, że to rozwiązanie będzie działać za każdym razem. Dlatego nie należy traktować uwierzytelniania biometrycznego jako jedyny sposób logowania do systemu UOS. Jeśli masz jakiekolwiek pytania lub sugestie dotyczące uwierzytelniania biometrycznego, możesz przekazać opinię poprzez „Serwis i wsparcie” w systemie UOS. AddIrisDialog Enroll Iris Zapisz tęczówkę I have read and agree to the Przeczytałem i akceptuję Disclaimer Ostrzeżenie Next Dalej Done Gotowe Cancel Anuluj Retry Enroll Spróbuj ponownie Iris enrolled Tęczówka zapisana Failed to enroll your iris Nie udało się zapisać tęczówki "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. „Uwierzytelnienie biometryczne” to funkcja uwierzytelnienia tożsamości użytkownika stworzona przez UnionTech Software Technology Co., Ltd. Dzięki „uwierzytelnieniu biometrycznemu” zebrane dane biometryczne będą porównywane z danymi przechowywanymi na urządzeniu, a tożsamość użytkownika zostanie zweryfikowana na podstawie wyniku porównania. Należy pamiętać, że UnionTech Software Technology Co., Ltd. nie będzie gromadzić, ani uzyskiwać dostępu do żadnych danych biometrycznych użytkownika, które będą przechowywane lokalnie na urządzeniu. Aktywuj uwierzytelnienie biometryczne wyłącznie na swoim urządzeniu osobistym i posługuj się wyłącznie swoimi informacjami biometrycznymi. Pamiętaj również, aby usunąć dane innych użytkowników, by uniknąć potencjalnych problemów w przyszłości. Firma UnionTech Software Technology Co., Ltd. jest zaangażowana w badania i poprawę jakości bezpieczeństwa, dokładności i stabilności uwierzytelniania biometrycznego. Jednak ze względu na czynniki środowiskowe, sprzętowe, techniczne i tym podobne oraz kontrole ryzyka związanego z tą technologią, nie możemy zagwarantować, że to rozwiązanie będzie działać za każdym razem. Dlatego nie należy traktować uwierzytelniania biometrycznego jako jedyny sposób logowania do systemu UOS. Jeśli masz jakiekolwiek pytania lub sugestie dotyczące uwierzytelniania biometrycznego, możesz przekazać opinię poprzez „Serwis i wsparcie” w systemie UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Skup wzrok na urządzeniu i upewnij się, że oczy znajdują się w obszarze skanowania. Authentication Biometric Authentication Uwierzytelnienie biometryczne AuthenticationMain Biometric Authentication Uwierzytelnienie biometryczne Face Twarz Up to 5 facial data can be entered Można dodać maksymalnie 5 twarzy Fingerprint Odcisk palca Identifying user identity through scanning fingerprints Rozpoznawanie tożsamości użytkownika skanując odcisk palca Iris Tęczówka Identity recognition through iris scanning Rozpoznawanie tożsamości użytkownika skanując tęczówkę Use letters, numbers and underscores only, and no more than 15 characters Używaj tylko liter, cyfr i znaków podkreślenia, nie więcej niż 15 znaków Use letters, numbers and underscores only Używaj tylko liter, cyfr i podkreśleń No more than 15 characters Nie więcej niż 15 znaków This name already exists Taka nazwa już istnieje Add a new %1 ... Dodaj nowe %1 ... The name cannot be empty Nazwa użytkownika nie może być pusta AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first "Automatyczne logowanie" może być włączone tylko dla jednego użytkownika, najpierw wyłącz tę opcję dla "%1" Ok Ok AvatarSettingsDialog Images Obrazy Human Ludzie Animal Zwierzęta Scenery Krajobraz Illustration Ilustracja Emoji Emoji custom Własne Cartoon style Styl kreskówkowy Dimensional style Styl wymiarowy Flat style Styl płaski Cancel Anuluj Save Zapisz BatteryPage Screen and Suspend Ekran i wstrzymanie Turn off the monitor after Wyłącz monitor po Lock screen after Zablokuj ekran po Computer suspends after Wstrzymaj komputer po When the lid is closed Kiedy pokrywa jest zamknięta When the power button is pressed Po naciśnięciu przycisku zasilania Low Battery Niski poziom baterii Low battery notification Powiadomienie o niskim poziomie baterii Auto suspend Automatycznie wstrzymaj Auto Hibernate Automatycznie hibernuj Low battery threshold Próg niskiego naładowania Battery Management Zarządzanie baterią Display remaining using and charging time Wyświetl pojemność i pozostały czas ładowania Maximum capacity Maksymalna pojemność Low battery level Niski poziom baterii Disable Wyłącz BlueTooth Bluetooth settings, devices Ustawienia Bluetooth, urządzenia Bluetooth Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth jest wyłączony pod nazwą "%1" Bluetooth is turned on, and the name is displayed as "%1" Bluetooth jest włączony pod nazwą "%1" BlueToothDeviceListView Disconnect Rozłącz Connect Połącz Send Files Wyślij pliki Rename Zmień nazwę Remove Device Usuń urządzenie Select file Wybierz plik BluetoothCtl Edit Edytuj Allow other Bluetooth devices to find this device Zezwól innym urządzeniom Bluetooth znaleźć to urządzenie To use the Bluetooth function, please turn off Aby korzystać z funkcji Bluetooth, najpierw wyłącz Airplane Mode Tryb samolotowy Bluetooth name cannot exceed 64 characters Nazwa Bluetooth nie może przekraczać 64 znaków BluetoothDeviceModel Connected Połączono Not connected Nie połączono BootPage Startup Settings Ustawienia startu systemu You can click the menu to change the default startup items, or drag the image to the window to change the background image. Kliknij na wpis w menu, aby zmienić domyślną opcję uruchamiania lub przeciągnij obraz, aby zmienić tło. grub start delay Opóźnienie startu Grub theme Motyw After turning on the theme, you can see the theme background when you turn on the computer Po zmianie motywu, możesz zobaczyć nowe tło w trakcie uruchamiania komputera Boot menu verification Uwierzytelnienie menu rozruchu After opening, entering the menu editing requires a password. Po otwarciu, edytowanie menu wymaga wprowadzenia hasła. Change Password Zmień hasło Change boot menu verification password Zmień hasło uwierzytelnienia menu rozruchu Set the boot menu authentication password Ustaw hasło uwierzytelnienia menu rozruchu User Name : Nazwa użytkownika: root root New Password : Nowe hasło: Required Wymagane Password cannot be empty Hasło nie może być puste Passwords do not match Hasła nie pasują do siebie Repeat password: Powtórz hasło: Cancel Anuluj Sure Pewnie Start animation Animacja uruchamiania Adjust the size of the logo animation on the system startup interface Dostosuj rozmiar animacji loga podczas startu systemu Camera Allow below apps to access your camera: Zezwól aplikacjom poniżej na dostęp do kamery: CharaMangerModel Fingerprint1 Odcisk palca 1 Fingerprint2 Odcisk palca 2 Fingerprint3 Odcisk palca 3 Fingerprint4 Odcisk palca 4 Fingerprint5 Odcisk palca 5 Fingerprint6 Odcisk palca 6 Fingerprint7 Odcisk palca 7 Fingerprint8 Odcisk palca 8 Fingerprint9 Odcisk palca 9 Fingerprint10 Odcisk palca 10 Scan failed Skanowanie nie powiodło się The fingerprint already exists Odcisk palca już istnieje Please scan other fingers Proszę zeskanować inne palce Unknown error Nieznany błąd Scan suspended Skanowanie zatrzymane Cannot recognize Nie można rozpoznać Moved too fast Przesunięto zbyt szybko Finger moved too fast, please do not lift until prompted Palec został przesunięty zbyt szybko, nie podnoś go bez otrzymania komunikatu Unclear fingerprint Nieczytelny odcisk palca Clean your finger or adjust the finger position, and try again Oczyść palec lub dostosuj pozycję palca i spróbuj ponownie Already scanned Już zeskanowane Adjust the finger position to scan your fingerprint fully Dostosuj pozycję palca, aby w pełni zeskanować odcisk palca Finger moved too fast. Please do not lift until prompted Palec został przesunięty zbyt szybko, proszę nie podnoś go bez otrzymania komunikatu Lift your finger and place it on the sensor again Podnieś palec i ponownie umieść go na czujniku Position your face inside the frame Ustaw swoją twarz wewnątrz ramki Face enrolled Twarz zapisana Position a human face please Proszę o ustawienie ludzkiej twarzy Keep away from the camera Oddal się od kamery Get closer to the camera Zbliż się do kamery Do not position multiple faces inside the frame Nie wprowadzaj więcej niż jednej twarzy wewnątrz ramki Make sure the camera lens is clean Upewnij się, że soczewka kamery jest czysta Do not enroll in dark, bright or backlit environments Nie skanuj w ciemnych, jaskrawych lub podświetlonych miejscach Keep your face uncovered Utrzymuj swoją twarz odkrytą Scan timed out Upłynął czas oczekiwania skanowania Cancel Anuluj Camera occupied! Kamera zajęta! ColorAndIcons Accent Color Kolor akcentu Icon Settings Ustawienia ikon Icon Theme Motyw ikon Customize your theme icon Dostosuj motyw ikon Cursor Theme Motyw kursora Customize your theme cursor Dostosuj motyw kursora ComfirmDeleteDialog Are you sure you want to delete this account? Czy na pewno chcesz usunąć to konto? Delete account directory Usuń katalog konta Cancel Anuluj Delete Usuń ComfirmSafePage Go to settings Przejdź do ustawień Cancel Anuluj Common Common Ogólne Repeat delay Opóźnienie powtórzenia Short Krótka Long Długa Repeat rate Tempo powtórzenia Slow Wolne Fast Szybkie Numeric Keypad Klawiatura numeryczna test here Przetestuj tutaj Caps lock prompt Komunikat Caps Lock Double Click Speed Szybkość dwukrotnego kliknięcia Double Click Test Test dwukrotnego kliknięcia Left Hand Mode Tryb dla leworęcznych Enable Keyboard Włącz klawiaturę General Ogólne Scrolling Speed Szybkość przewijania CommonInfoMain Boot Menu Menu rozruchu Manage your boot menu Zarządzaj menu rozruchu Developer root permission management Zarządzanie uprawnieniami konta root Developer Options Opcje programisty Developer debugging options Opcje debugowania dewelopera CommonInfoWork Large size Duży rozmiar Small size Mały rozmiar Failed to get root access Nie udało się uzyskać dostępu do konta root Please sign in to your Union ID first Najpierw zaloguj się na swoje konto Union ID Cannot read your PC information Nie można odczytać informacji o komputerze No network connection Brak połączenia z siecią Certificate loading failed, unable to get root access Błąd wczytywania certyfikatu, nie można uzyskać dostępu do konta root Signature verification failed, unable to get root access Weryfikacja sygnatury nie powiodła się, nie można uzyskać dostępu do konta root Agree and Join User Experience Program Zaakceptuj i dołącz do programu doświadczeń użytkownika The Disclaimer of Developer Mode Ostrzeżenie o trybie programisty Agree and Request Root Access Zaakceptuj i poproś o dostęp do konta root Start setting the new boot animation, please wait for a minute Ustawianie nowej animacji uruchamiania, proszę czekać Setting new boot animation finished Ustawiono pomyślnie nową animacje uruchamiania The settings will be applied after rebooting the system Ustawienia zostaną zastosowane po ponownym uruchomieniu Restart now Uruchom ponownie teraz Dismiss Pomiń Restart device to finish applying Solid System Read-Only Protection settings Uruchom ponownie urządzenie, aby włączyć ochronę systemu tylko-do-odczytu ConfirmManager Password must contain numbers and letters Hasło musi się składać z cyfr i liter Password must be between 8 and 64 characters Hasło musi zawierać od 8 do 64 znaków CreateAccountDialog Create a new account Utwórz nowe konto Account type Typ konta UserName Nazwa użytkownika Required Wymagane FullName Imię i nazwisko Optional Opcjonalne Cancel Anuluj Create account Utwórz konto Username cannot exceed 32 characters Nazwa użytkownika nie może przekraczać 32 znaków Username can only contain letters, numbers, - and _ Nazwa użytkownika musi zawierać tylko litery, liczby, - i _ Full name cannot exceed 32 characters Imię i nazwisko nie może przekraczać 32 znaków Full name cannot contain colons Imię i nazwisko nie może zawierać dwukropka CustomAvatarCropper small mały big duży CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Awatar nie został jeszcze ustawiony. Kliknij lub przeciągnij, aby załadować zdjęcie. The uploaded file type is incorrect, please upload it again Przesłany plik jest nieprawidłowy, wyślij go ponownie DCC_NAMESPACE::SystemInfoModel available dostępne DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Zaakceptuj i dołącz do programu doświadczeń użytkownika <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>Jesteśmy świadomi jak ważne Twoje dane osobiste są dla Ciebie. Mając to na uwadze, stworzyliśmy Politykę Prywatności, która tłumaczy jak zbieramy, używamy, udostępniamy, przenosimy, ujawniamy publicznie i przechowujemy Twoje informacje.</p><p>Możesz <a href="%1">kliknąć tutaj</a>, aby zobaczyć naszą najnowszą politykę prywatności i/lub zobaczyć ją online poprzez odwiedziny <a href="%1">%1</a>. Prosimy abyś uważnie przeczytał i przyswoił nasze działania w stosunku do prywatności konsumentów. Jeśli masz jakieś pytania, skontaktuj się z nami pod adresem: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Przystąpienie do Programu doświadczeń użytkowników oznacza, że udzielasz nam zgody i upoważniasz nas do gromadzenia i wykorzystywania informacji o Twoim urządzeniu, systemie i aplikacjach. Jeśli nie zgadzasz się na przetwarzanie wyżej wymienionych danych, nie dołączaj do programu. Aby uzyskać szczegółowe informacje, zapoznaj się z Polityką prywatności Deepin (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">Przystąpienie do Programu doświadczeń użytkowników oznacza, że udzielasz nam zgody i upoważniasz nas do gromadzenia i wykorzystywania informacji o Twoim urządzeniu, systemie i aplikacjach. Jeśli nie zgadzasz się na przetwarzanie wyżej wymienionych danych, nie dołączaj do programu. Aby uzyskać szczegółowe informacje, zapoznaj się z Polityką prywatności Deepin </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Ustawienia daty i godziny Date Data Year Rok Month Miesiąc Day Dzień Time Godzina Cancel Anuluj Confirm Potwierdź Datetime Time and date Czas i data Time and date, time zone settings Czas i data, ustawienia strefy czasowej DatetimeMain Language and region Język i region System language, regional formats Język systemu, format regionu DatetimeModel Tomorrow Jutro Yesterday Wczoraj Today Dzisiaj %1 hours earlier than local %1 godziny wcześniej niż lokalnie %1 hours later than local %1 godziny później niż lokalnie Space Spacja Week Tydzień First day of week Pierwszy dzień tygodnia Short date Krótka data Long date Długa data Short time Krótka godzina Long time Długa godzina Currency symbol Symbol waluty Positive currency Liczby dodatnie waluty Negative currency Liczby ujemne waluty Decimal symbol Symbol ułamka Digit grouping symbol Symbol grupowania cyfr Digit grouping Grupowanie cyfr Page size Rozmiar strony Example Przykład DatetimeWorker Authentication is required to change NTP server Wymagane jest uwierzytelnienie do zmiany serwera NTP Authentication is required to set the system timezone Wymagane jest uwierzytelnienie, aby ustawić strefę czasową systemu DccColorDialog Cancel Anuluj Save Zapisz DccWindow Control Center provides the options for system settings. Centrum kontroli umożliwia zmianę ustawień systemowych. DeepinIDAccountSecurity Bind WeChat Powiąż WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Powiązanie konta WeChat, pozwala na bezpieczne i szybkie logowanie na swoje konto %1 ID, jak i konta lokalne. Unlinked Niepowiązane Unbinding Rozłączanie Link Powiąż Are you sure you want to unbind WeChat? Czy na pewno chcesz odłączyć konto WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Po odłączeniu konta WeChat, nie będziesz mógł skanować kodów QR, aby zalogować się do %1 ID lub konta lokalnego poprzez WeChat. Let me think it over Jeszcze to przemyślę Local Account Binding Łączenie kont lokalnych After binding your local account, you can use the following functions: Po powiązaniu konta lokalnego, będziesz mógł korzystać z następujących funkcji: WeChat Scan Code Login System System logowania kodem WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Korzystaj z WeChat, które jest powiązane z Twoim %1 ID, aby logować się do swojego konta lokalnego. Reset password via %1 ID Zresetuj hasło poprzez %1 ID Reset your local password via %1 ID in case you forget it. Zresetuj swoje hasło lokalne poprzez %1 ID, jeśli je zapomnisz. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Aby skorzystać z powyższych funkcji, przejdź do Centrum kontroli - Konta włączając odpowiednie opcje. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Synchronizacja z chmurą Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Zarządzaj swoim %1 ID i synchronizuj dane użytkownika pomiędzy urządzeniami. Zaloguj się do %1 ID, aby uzyskać usługi i funkcje Przeglądarki, sklepu App Store i wiele więcej dostosowane do Twoich potrzeb. Sign In to %1 ID Zaloguj się do %1 ID DeepinIDSyncService Auto Sync Automatyczna synchronizacja Securely store system settings and personal data in the cloud, and keep them in sync across devices Przechowuj bezpiecznie w chmurze ustawienia systemowe i dane osobowe, synchronizując je między urządzeniami System Settings Ustawienia systemowe Last sync time: %1 Ostatnia synchronizacja: %1 Clear cloud data Wyczyść dane w chmurze Are you sure you want to clear your system settings and personal data saved in the cloud? Czy na pewno wyczyścić ustawienia systemowe i dane użytkownika zapisane w chmurze? Once the data is cleared, it cannot be recovered! Po usunięciu danych nie będzie można ich odzyskać! Cancel Anuluj Clear Wyczyść DeepinIDUserInfo Synchronization Service Usługa synchronizacji Account and Security Konto i bezpieczeństwo Sign out Wyloguj Go to web settings Przejdź do ustawień sieciowych The nickname must be 1~32 characters long Pseudonim musi zawierać od 1 do 32 znaków DeepinWorker encrypt password failed Wystąpił błąd szyfrowania hasła Wrong password, %1 chances left Błędne hasło, pozostały %1 próby The login error has reached the limit today. You can reset the password and try again. Osiągnięto maksymalny limit dzienny zalogowań. Spróbuj zresetować hasło i spróbuj ponownie później. Operation Successful Operacja zakończona pomyślnie The nickname can be modified only once a day Pseudonim można zmienić tylko raz dziennie Deepinid deepin ID deepin ID UOS ID UOS ID Cloud services Usługi w chmurze DeepinidModel Mainland China Chiny kontynentalne Other regions Inne regiony The feature is not available at present, please activate your system first Aby uzyskać dostęp do tej funkcji, najpierw aktywuj system Subject to your local laws and regulations, it is currently unavailable in your region. Ze względu na lokalne prawa i regulacje w Twoim regionie, ta obecnie funkcja nie jest dostępna. Defaultapp Default App Aplikacje domyślne Set the default application for opening various types of files Ustaw aplikację domyślną do otwierania różnych typów plików DefaultappMain Webpage Witryna Mail Poczta Text Tekst Music Muzyka Video Wideo Picture Zdjęcie Terminal Terminal DetailItem Please choose the default program to open '%1' Wybierz program domyślny do otworzenia '%1' add Dodaj Open Desktop file Otwórz plik Desktop Apps (*.desktop) Aplikacje (*.desktop) All files (*) Wszystkie pliki (*) DevelopModePage Root Access Dostęp do konta root Request Root Access Poproś o dostęp do konta root After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Wejście do trybu programisty umożliwia dostęp do konta root, co potencjalnie może naruszyć integralność systemu. Prosimy zachować ostrożność. Allowed Dozwolone Enter Wprowadź Online Online Login UOS ID Zaloguj się do UOS ID Offline Offline Import Certificate Importuj certyfikat Select file Wybierz plik Your UOS ID has been logged in, click to enter developer mode Zalogowano pomyślnie na konto UOS ID, kliknij aby przejść do trybu programisty Please sign in to your UOS ID first and continue Najpierw zaloguj się na swoje konto UOS ID, aby kontynuować 1.Export PC Info 1. Wyeksportuj informacje o komputerze Export Eksportuj 3.Import Certificate 3. Zaimportuj certyfikat Development and debugging options Opcje debugowania dewelopera System logging level Poziom zbierania logów systemu Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Zwiększenie ilości zbieranych danych może wpłynąć na wydajność systemu i zwiększyć zużycie miejsca na dysku. Off Wyłączone Debug Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Zmiana tej opcji może zając parę minut, gdy zmiany zostaną wprowadzone pomyślnie, uruchom ponownie urządzenie. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. Aby zainstalować i uruchomić niepodpisane aplikacje, przejdź do <a style='text-decoration: none;' href='Security Center'>Centrum bezpieczeństwa</a> i dostosuj ustawienia. To install and run unsigned apps, please go to Security Center to change the settings. Aby instalować niepodpisane aplikacje, przejdź do Centrum bezpieczeństwa, aby zmienić ustawienia. You have entered developer mode Dołączono do trybu programisty OK OK 2.please go to %1 to Download offline certificate. 2. Przejdź do %1 i pobierz certyfikat offline. The feature is not available at present, please activate your system first. Aby uzyskać dostęp do tej funkcji, najpierw aktywuj system Solid System Read-Only Protection Ochrona systemu tylko-do-odczytu Disabling protection unlocks system directories,This action carries a high risk of system damage. Wyłączenie tej opcji zezwala na edycję katalogów systemowych, co zwiększa ryzyko uszkodzenia systemu. Enable protection to lock system directories and ensure optimal stability. Włącz ochronę, aby zablokować katalogi systemowe zwiększając stabilność systemu. Device Bluetooth and Devices Bluetooth i inne urządzenia DisclaimerControl Disclaimer Ostrzeżenie Cancel Anuluj Agree Akceptuj Display Display Ekran Brightness,resolution,scaling Jasność, rozdzielczość, skalowanie itp. DisplayMain 100% 100% 125% 125% 150% 150% 175% 175% 200% 200% 225% 225% 250% 250% 275% 275% 300% 300% Duplicate Duplikuj Extend Rozszerz Default Domyślne Fit Dopasuj Stretch Rozciągnij Center Wyśrodkuj Only on %1 Tylko na %1 Multiple Displays Settings Opcje wielu ekranów Identify Identyfikuj Screen rearrangement will take effect in %1s after changes Zmiana ułożenia ekranu nastąpi za %1s, po zatwierdzeniu ustawień Mode Tryb Main Screen Ekran główny Display And Layout Ekran i układ ekranów Brightness Jasność Resolution Rozdzielczość Resize Desktop Zmień rozmiar pulpitu Refresh Rate Częstotliwość odświeżania Rotation Obrót Standard Standardowy 90° 90° 180° 180° 270° 270° The monitor only supports 100% display scaling Monitor obsługuje tylko 100% skalowanie ekranu Eye Comfort Komfort oczu Enable eye comfort Włącz komfort oczu Adjust screen display to warmer colors, reducing screen blue light Dostosuj wyświetlacz do cieplejszych kolorów, redukując przy tym światło niebieskie Time Czas All day Cały dzień Sunset to Sunrise Od wschodu do zachodu Custom Time Własny czas from od to do Color Temperature Temperatura koloru %1x%2 (Recommended) %1x%2 (Zalecane) %1x%2 %1x%2 %1Hz (Recommended) %1Hz (Zalecane) %1Hz %1Hz Scaling Skalowanie Dock Desktop and taskbar Pulpit i pasek zadań Desktop organization, taskbar mode, plugin area settings Organizacja pulpitu, tryb paska zadań, ustawienia obszaru wtyczek DockMain Dock Dok Mode Tryb Classic Mode Tryb klasyczny Centered Mode Tryb wyśrodkowany Dock size Rozmiar doku Small Mały Large Duży Position on the screen Pozycja na ekranie Top Góra Bottom Dół Left Lewo Right Prawo Status Status Keep shown Zawsze wyświetlaj Keep hidden Zawsze ukrywaj Smart hide Inteligentne ukrywanie Multiple Displays Wiele ekranów Set the position of the taskbar on the screen Ustaw położenie paska zadań na ekranie Only on main Tylko na głównym On screen where the cursor is Na ekranie, tam gdzie jest kursor Plugin Area Strefa wtyczek Select which icons appear in the Dock Wybierz ikony, które pojawią się w doku Lock the Dock Zablokuj dok Combine application icons Połącz ikony aplikacji FileAndFolder Allow below apps to access these files and folders: Zezwól aplikacjom poniżej na dostęp do plików i folderów: Documents Dokumenty Desktop Pulpit Pictures Zdjęcia Videos Filmy Music Muzyka Downloads Pobrane folder Folder FontSizePage Size Rozmiar Standard Font Czcionka zwykła Monospaced Font Czcionka o stałej szerokości GeneralPage Power Plans Plany zasilania Power Saving Settings Ustawienia oszczędzania energii Auto power saving on low battery Automatyczne oszczędzanie energii przy niskim poziomie naładowania Low battery threshold Próg niskiego naładowania Auto power saving on battery Automatyczne oszczędzanie energii na baterii Wakeup Settings Ustawienia wybudzania Password is required to wake up the computer Wymagaj hasło po wybudzeniu komputera Password is required to wake up the monitor Wymagaj hasło po wybudzeniu monitora Shutdown Settings Ustawienia wyłączania Scheduled Shutdown Zaplanowane wyłączenie Time Godzina Repeat Powtórzenie Once Raz Every day Codziennie Working days Dni robocze Custom Time Własna data Decrease screen brightness on power saver Zmniejsz jasność ekranu w trybie oszczędzania energii GestureModel Three-finger up Trzy palce w górę Three-finger down Trzy palce w dół Three-finger left Trzy palce w lewo Three-finger right Trzy palce w prawo Three-finger tap Stuknięcie trzema palcami Four-finger up Cztery palce w górę Four-finger down Cztery palce w dół Four-finger left Cztery palce w lewo Four-finger right Cztery palce w prawo Four-finger tap Stuknięcie czterema palcami HomePage , , ... ... InterfaceEffectListview Optimal Performance Optymalna wydajność Balance Zrównoważony Best Visuals Najlepsze efekty wizualne Disable all interface and window effects for efficient system performance. Wyłącz wszystkie efekty interfejsu i okien dla wydajnego działania systemu. Limit some window effects for excellent visuals while maintaining smooth system performance. Ogranicz niektóre animacje okien, aby zachować optymalną wydajność systemu. Enable all interface and window effects for the best visual experience. Włącz wszystkie efekty interfejsu i okien dla najlepszych doświadczeń wizualnych. Keyboard Keyboard Klawiatura General Settings, input method, shortcuts Ustawienia ogólne, metody wprowadzania, skróty KeyboardMain Common Ogólne LangAndFormat Language Język done Gotowe edit Edytuj Other languages Inne języki add Dodaj Region Region Area Rejon Operating system and applications may provide you with local content based on your country and region System operacyjny i aplikacje mogą dostosowywać zawartość do kraju i regionu, w którym się znajdujesz Operating system and applications may set date and time formats based on regional formats System operacyjny i aplikacje mogą dostosować format daty i godziny do kraju i regionu, w którym się znajdujesz Regional format Format regionu LangsChooserDialog Add language Dodaj język Search Szukaj Cancel Anuluj Add Dodaj LoginMethod Login method Sposób logowania Password, wechat, biometric authentication, security key Hasło, WeChat, uwierzytelnienie biometryczne, klucz bezpieczeństwa Password Hasło Modify password Zmień hasło Validity days Dni ważności Always Zawsze Reset password Zresetuj hasło LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Automatyczne tłumienie hałasu Input Volume Głośność wejściowa Input Level Poziom wejściowy Input Wejście No input device for sound found Nie znaleziono urządzenia wejściowego audio Input Device Urządzenie wejściowe Mouse Mouse and Touchpad Mysz i panel dotykowy Common、Mouse、Touchpad Ogólne, mysz, panel dotykowy MouseMain Common Ogólne Mouse Mysz Touchpad Panel dotykowy MousePage Mouse Mysz Pointer Speed Szybkość wskaźnika Slow Powolna Fast Szybka Pointer Size Rozmiar wskaźnika Mouse Acceleration Akceleracja myszy Disable touchpad when a mouse is connected Wyłącz panel dotykowy po podłączeniu myszy Natural Scrolling Naturalne przewijanie Small Mały Medium Średni Large Duży X-Large Ogromny Some apps require logout or system restart to take effect Niektóre aplikacje wymagają wylogowania lub ponownego uruchomienia systemu, aby zastosować zmiany. MyDevice My Devices Moje urządzenia NativeInfoPage UOS UOS Computer name Nazwa komputera It cannot start or end with dashes Bez myślnika na początku lub końcu OS Name Nazwa systemu Version Wersja Edition Wydanie Type Typ bit bity Authorization Autoryzacja System installation time Data instalacji systemu Kernel Kernel Graphics Platform Platforma graficzna Processor Procesor Memory Pamięć 1~63 characters please 1-63 znaków Notification DND mode, app notifications Tryb Nie przeszkadzać, powiadomienia aplikacji Notification Powiadomienia NotificationMain Do Not Disturb Settings Ustawienia Nie przeszkadzać App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Powiadomienia aplikacji nie będą wyświetlane, dźwięki zostaną wyciszone, a wszystkie wiadomości będzie można przeczytać w centrum powiadomień. Enable Do Not Disturb Włącz tryb Nie przeszkadzać When the screen is locked Gdy ekran jest zablokowany Number of notifications shown on the desktop Liczba powiadomień widocznych na pulpicie App Notifications Powiadomienia aplikacji Allow Notifications Zezwól na powiadomienia Display notification on desktop or show unread messages in the notification center Wyświetl powiadomienia na pulpicie lub pokaż nieprzeczytane wiadomości w Centrum powiadomień Desktop Pulpit Lock Screen Ekran blokady Notification Center Centrum powiadomień Show message preview Pokaż podgląd wiadomości Play a sound Odtwórz dźwięk OtherDevice Other Devices Inne urządzenia Show Bluetooth devices without names Pokaż urządzenia Bluetooth bez nazwy PasswordLayout Current password Aktualne hasło Required Wymagane Weak Słabe Medium Średnie Strong Silne Repeat Password Powtórz hasło Password hint Wskazówka do hasła Optional Opcjonalne Password cannot be empty Hasło nie może być puste Passwords do not match Hasła nie pasują do siebie The hint is visible to all users. Do not include the password here. Wskazówka jest widoczna dla wszystkich użytkowników. Nie podawaj tutaj swojego hasła. New password Nowe hasło New password should differ from the current one Nowe hasło powinno różnić się od bieżącego The password cannot be the same as the username. Hasło musi różnić się od nazwy użytkownika PasswordModifyDialog Modify password Zmień hasło Reset password Zresetuj hasło Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Hasło musi zawierać co najmniej 8 znaków i kombinację co najmniej 3 typów: małe litery, duże litery, liczby i symbole. Resetting the password will clear the data stored in the keyring. Zresetowanie hasła spowoduje usunięcie danych zapisanych w keyringu. Cancel Anuluj Personalization Personalization Personalizacja PersonalizationInterface Light Jasny Auto Automatycznie Dark Ciemny Picker service is not available Usługa suplikanta nie jest dostępna Invalid color format: %1 Błędny format koloru: %1 PersonalizationMain Theme Motyw Appearance Wygląd Window effect Efekty okien Personalize your wallpaper and screensaver Ustaw swoją tapetę i wygaszacz ekranu Screensaver Wygaszacz ekranu Colors and icons Kolory i ikony Adjust accent color and theme icons Dostosuj kolor akcentu i motyw ikon Font and font size Czcionka i rozmiar czcionki Change system font and size Zmień czcionkę systemu i jej rozmiar Wallpaper Tapeta Select light, dark or automatic theme appearance Wybierz motyw jasny, ciemny lub automatycznie Interface and effects, rounded corners Interfejs, efekty i zaokrąglony róg PersonalizationWorker Custom Własne PluginArea Plugin Area Strefa wtyczek Select which icons appear in the Dock Wybierz, które wtyczki pojawią się w doku Power Power saving settings, screen and suspend Ustawienia planu zasilania, ekran i wstrzymywanie Power Zasilanie PowerMain General Ogólne Power plans, power saving settings, wakeup settings, shutdown settings Plany zasilania, ustawienia oszczędzania energii, wybudzenie i wyłączanie Plugged In Podłączony Screen and suspend Ekran i wstrzymywanie On Battery Na baterii screen and suspend, low battery, battery management Ekran, wstrzymywanie i zarządzanie baterią PowerOperatorModel Shut down Wyłącz Suspend Wstrzymaj Hibernate Hibernacja Turn off the monitor Wyłącz monitor Show the shutdown Interface Pokaż interfejs wyłączania Do nothing Nic nie rób PowerPage Screen and Suspend Ekran i wstrzymanie Turn off the monitor after Wyłącz monitor po Lock screen after Zablokuj ekran po Computer suspends after Wstrzymaj komputer po When the lid is closed Kiedy pokrywa jest zamknięta When the power button is pressed Po naciśnięciu przycisku zasilania PowerPlansListview High Performance Wysoka wydajność Balance Performance Wydajność zbalansowana Aggressively adjust CPU operating frequency based on CPU load condition Agresywnie dostosuj częstotliwość procesora zależnie od jego obciążenia Balanced Zrównoważony Power Saver Oszczędzanie energii Prioritize performance, which will significantly increase power consumption and heat generation Wysoki priorytet wydajności, znacznie zwiększy pobór energii i generowanie ciepła Balancing performance and battery life, automatically adjusted according to usage Zbalansowana wydajność i zużycie baterii, automatycznie dostosuje się do zapotrzebowania Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Wysoki priorytet oszczędzania baterii, zmniejszy poboru energii kosztem wydajności PowerWorker Minutes Minutach Hour Godzinie Never Nigdy Privacy Privacy and Security Prywatność i bezpieczeństwo Camera, folder permissions Kamera, uprawnienia folderów PrivacyMain Camera Kamera Choose whether the application has access to the camera Wybierz aplikacje z dostępem do kamery Files and Folders Pliki i foldery Choose whether the application has access to files and folders Wybierz aplikacje z dostępem do plików i folderów PrivacyPolicyPage Privacy Policy Polityka prywatności Copy Link Address Kopiuj adres linka PwqualityManager Password cannot be empty Hasło nie może być puste Password must have at least %1 characters Hasło musi zawierać co najmniej %1 znaków Password must be no more than %1 characters Hasło nie może przekraczać %1 znaków Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Hasło musi zawierać tylko litery angielskie (z rozróżnieniem wielkich i małych), cyfry lub symbole specjalne (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Nie więcej niż %1 znaki palindromowe No more than %1 monotonic characters please Nie więcej niż %1 znaki monotoniczne No more than %1 repeating characters please Nie więcej niż %1 powtarzające się znaki Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Hasło musi zawierać wielkie litery, małe litery, cyfry i symbole (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Hasło nie może zawierać więcej niż 4 znaki palindromowe Do not use common words and combinations as password Nie używaj popularnych słów i ich kombinacji jako hasła Create a strong password please Utwórz silne hasło It does not meet password rules Nie spełnia zasad dotyczących haseł QObject Control Center Centrum kontroli Activated Aktywowany View Wyświetl To be activated Do aktywacji Activate Aktywuj Expired Wygasł In trial period W okresie próbnym Trial expired Okres próbny wygasł dde-control-center dde-control-center Touch Screen Settings Ustawienia ekranu dotykowego The settings of touch screen changed Zmieniono ustawienia ekranu dotykowego This system wallpaper is locked. Please contact your admin. Tapeta systemu jest zablokowana. Skontaktuj się ze swoim administratorem. %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search Szukaj Default formats Formaty domyślne First day of week Pierwszy dzień tygodnia Short date Krótka data Long date Długa data Short time Krótka godzina Long time Długa godzina Currency symbol Symbol waluty Digit Cyfra Paper size Rozmiar strony Cancel Anuluj Save Zapisz Regional format Format regionu RegionsChooserWindow Search Szukaj RegisterDialog Set a Password Ustaw hasło 8-64 characters 8-64 znaków Repeat the password Powtórz hasło Cancel Anuluj Confirm Potwierdź Passwords don't match Hasła nie pasują do siebie ScheduledShutdownDialog Customize repetition time Własny czas powtarzania Cancel Anuluj Save Zapisz ScreenSaverPage Screensaver Wygaszacz ekranu preview Podgląd Personalized screensaver Własny wygaszacz ekranu setting Ustaw idle time Czas bezczynności 1 minute 1 minuta 5 minute 5 minut 10 minute 10 minut 15 minute 15 minut 30 minute 30 minut 1 hour 1 godzina never nigdy Password required for recovery Wymagaj hasło po wybudzeniu Picture slideshow screensaver Pokaz slajdów jako wygaszacz ekranu System screensaver Systemowe wygaszacze ekranu SearchableListViewPopup Search Szukaj No search results Brak wyników wyszukiwania ShortcutSettingDialog Add custom shortcut Dodaj własny skrót Name: Nazwa: Required Wymagane Command: Komenda: Shortcut Skrót None Brak Cancel Anuluj Add Dodaj The shortcut name is already in use. Choose a different name. Nazwa skrótu jest już w użyciu. Wybierz inną nazwę. Change custom shortcut Zmień własny skrót please enter a shortcut key wprowadź skrót Save Zapisz click Save to make this shortcut key effective kliknij Zapisz, aby zastosować skrót click Add to make this shortcut key effective kliknij Dodaj, aby zastosować skrót Shortcuts Shortcuts Skróty System shortcut, custom shortcut Skrót systemowy, własny skrót Search shortcuts Szukaj skrótów done Gotowe edit Edytuj Click Kliknij Cancel Anuluj or lub Replace Zamień Restore default Przywróć domyślne Add custom shortcut Dodaj własny skrót please enter a new shortcut key wprowadź skrót Sound Sound Dźwięk Output, input, sound effects, devices Wyjście, wejście, efekty dźwiękowe, urządzenia SoundDevicemanagesPage Output Devices Urządzenia wyjściowe Select whether to enable the devices Wybierz urządzenia do włączenia Input Devices Urządzenia wejściowe SoundEffectsPage Sound Effects Dźwięki systemu SoundMain Settings Ustawienia Sound Effects Dźwięki systemu Enable/disable sound effects Włącz/wyłącz dźwięki systemu Enable/disable audio devices Włącz/wyłącz urządzenia audio Devices Management Zarządzanie urządzeniami SoundModel Boot up Uruchomienie Shut down Wyłączenie Log out Wylogowanie Wake up Wybudzenie Volume +/- Głośność +/- Notification Powiadomienie Low battery Niski poziom baterii Send icon in Launcher to Desktop Wysłanie ikony programu wywołującego na pulpit Empty Trash Opróżnienie kosza Plug in Podłączenie do zasilania Plug out Odłączenie od zasilania Removable device connected Urządzenie wymienne zostało podłączone Removable device removed Urządzenie wymienne zostało usunięte Error Błąd SpeakerPage Mode Tryb Output Volume Głośność wyjściowa Volume Boost Zwiększenie głośności If the volume is louder than 100%, it may distort audio and be harmful to output devices Jeśli głośność przekracza 100%, może to zniekształcić dźwięk i być szkodliwe dla głośnika Left Lewo Right Prawo Output Wyjście No output device for sound found Nie znaleziono urządzenia wyjściowego audio Left Right Balance Balans lewo-prawo Merge left and right channels into a single channel Połącz lewy i prawy kanał w jeden Whether the audio will be automatically paused when the current audio device is unplugged Dźwięk zostanie automatycznie zatrzymany, gdy używane urządzenie audio zostanie odłączone Mono Audio Dźwięk mono Auto Pause Automatyczna pauza Output Device Urządzenie wyjściowe SyncInfoListModel Sound Dźwięk Power Zasilanie Mouse Mysz Update Aktualizacja Screensaver Wygaszacz ekranu System Common settings Ustawienia ogólne System System SystemInfo Auxiliary Information Informacje dodatkowe SystemInfoMain About This PC O tym komputerze System version, device information Wersja systemu, informacje o urządzeniu View the notice of open source software Wyświetl notatkę oprogramowania open-source User Experience Program Program doświadczeń użytkownika Join the user experience program to help improve the product Dołącz do programu doświadczeń użytkownika i pomóż nam ulepszać nasze produkty End User License Agreement Umowa licencyjna EULA View the end user license agreement Wyświetl umowę licencyjną EULA Privacy Policy Polityka prywatności View information about privacy policy Wyświetl informacje o polityce prywatności Open Source Software Notice Informacja oprogramowania open-source ThemeSelectView More Wallpapers Więcej tapet TimeAndDate Auto sync time Automatyczna synchronizacja czasu Ntp server Serwer NTP System date and time Data i czas systemu Customize Dostosuj Settings Ustawienia Server address Adres serwera Required Wymagane The ntp server address cannot be empty Adres serwera NTP nie może być pusty Use 24-hour format Użyj formatu 24-godzinnego system time zone Strefa czasowa systemu Timezone list Lista stref czasowych Add Dodaj TimeRange from od to do TimeoutDialog Save the display settings? Zapisać ustawienia wyświetlania? Settings will be reverted in %1s. Ustawienia zostaną przywrócone za %1s. Revert Przywróć Save Zapisz TimezoneDialog Add time zone Dodaj strefę czasową Determine the time zone based on the current location Określ strefę czasową na podstawie aktualnej lokalizacji Time zone: Strefa czasowa: Nearest City: Najbliższe miasto: Cancel Anuluj Save Zapisz TouchScreen TouchScreen Ekran dotykowy Set up here when connecting the touch screen Skonfiguruj po podłączeniu ekranu dotykowego Touchpad Basic Settings Ustawienia podstawowe Touchpad Panel dotykowy Pointer Speed Szybkość wskaźnika Slow Wolna Fast Szybka Disable touchpad during input Wyłącz panel dotykowy podczas pisania Tap to Click Klikanie stuknięciem Natural Scrolling Naturalne przewijanie Three-finger gestures Gesty trzech palców Four-finger gestures Gesty czterech palców Gestures Gesty Touchscreen Touchscreen Ekran dotykowy Configuring Touchscreen Konfiguracja ekranu dotykowego TouchscreenMain Common Ogólne UserExperienceProgramPage Join User Experience Program Dołącz do programu doświadczeń użytkownika Copy Link Address Kopiuj adres linka VerifyDialog Security Verification Weryfikacja bezpieczeństwa The action is sensitive, please enter the login password first Wybrane działanie wymaga potwierdzenia loginu i hasła 8-64 characters 8-64 znaków Forgot Password? Zapomniałeś hasła? Cancel Anuluj Confirm Potwierdź Wacom wacom Wacom Configuring wacom Konfiguracja Wacom WacomMain wacom Wacom Pen Mode Tryb pióra Mouse Mode Tryb myszy Pressure Sensitivity Czułość nacisku Light Lekka Heavy Ciężka Model Model WallpaperPage wallpaper Tapeta My pictures Moje zdjęcia System Wallpaper Tapeta systemowa Solid color wallpaper Tapeta jednolitego koloru Customizable wallpapers Własne tapety fill style Typ wypełnienia Automatic wallpaper change Automatycznie zmieniaj tapetę never nigdy 30 second 30 sekund 1 minute 1 minuta 5 minute 5 minut 10 minute 10 minut 15 minute 15 minut 30 minute 30 minut login Logowanie wake up Wybudzenie Live Wallpaper Animowana tapeta 1 hour 1 godzina System Wallpapers Tapety systemowe WallpaperSelectView unfold rozwiń Set lock screen Ustaw blokadę ekranu Set desktop Ustaw pulpit show all - %1 items pokaż wszystkie - %1 przedmiotów Add Picture Dodaj zdjęcie WindowEffectPage Interface and Effects Efekty i interfejs Window Settings Ustawienia okien Window rounded corners Zaokrąglone rogi okna None Brak Small Małe Large Duże Enable transparent effects when moving windows Włącz efekty przezroczystości podczas ruszania oknem Window Minimize Effect Efekt minimalizacji okna Scale Skalowanie Magic Lamp Magiczna lampa Opacity Nieprzezroczystość Low Niska High Wysoka Scroll Bars Pasek przewijania Show on scrolling Tylko podczas przewijania Keep shown Zawsze widoczny Compact Display Wyświetlanie kompaktowe If enabled, more content is displayed in the window. Po włączeniu, więcej zawartości jest widoczne na ekranie Title Bar Height Wysokość paska tytułu Only suitable for application window title bars drawn by the window manager. Tylko dla aplikacji, których pasek tytułu jest rysowany przez menedżera okien. Extremely small Bardzo mała Medium describe size of window rounded corners Średnie Medium describe height of window title bar Średnia dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Chiński tradycyjny (Chiński Hong Kong) Traditional Chinese (Chinese Taiwan) Chiński tradycyjny (Chiński Tajwański) Min Nan Chinese Chiński Min Nan dcc::Locale::regionNames Taiwan China Tajwan Chiny dccV25::AccountsController Username must be between 3 and 32 characters Nazwa użytkownika musi zawierać od 3 do 32 znaków The first character must be a letter or number Pierwszy znak musi być literą lub cyfrą Your username should not only have numbers Twoja nazwa użytkownika nie powinna zawierać tylko cyfr The username has been used by other user accounts Inne konta korzystają już z tej nazwy użytkownika The full name is too long Imię i nazwisko jest za długie The full name has been used by other user accounts Imię i nazwisko jest już używane przez innych użytkowników Wrong password Błędne hasło Standard User Użytkownik standardowy Administrator Administrator Customized Dostosuj dccV25::AccountsWorker Your host was removed from the domain server successfully Twój host został pomyślnie usunięty z serwera domeny Your host joins the domain server successfully Twój host pomyślnie dołączył do serwera domeny Your host failed to leave the domain server Twój host nie mógł opuścić serwera domeny Your host failed to join the domain server Twój host nie mógł połączyć się z serwerem domeny AD domain settings Ustawienia domeny AD Password not match Hasła nie pasują do siebie dccV25::AvatarTypesModel Dimensional Wymiarowe Flat Płaskie dccV25::FaceAuthController Faceprint Odbitka twarzy Face Twarz Use your face to unlock the device and make settings later Odblokuj urządzenie za pomocą swojej twarzy i skonfiguruj urządzenie później dccV25::FingerprintAuthController Fingerprint Odcisk palca Place your finger Umieść palec Place your finger firmly on the sensor until you're asked to lift it Pewnie przyłóż palec do czujnika, aż zostaniesz poproszony o jego podniesienie Lift your finger Podnieś palec Lift your finger and place it on the sensor again Podnieś palec i ponownie umieść go na czujniku Lift your finger and do that again Podnieś palec i zrób to jeszcze raz Scan Suspended Skanowanie zatrzymane Scan the edges of your fingerprint Zeskanuj krawędzie odcisku palca Place the edges of your fingerprint on the sensor Umieść krawędzie odcisku palca na czujniku Adjust the position to scan the edges of your fingerprint Dostosuj pozycję, aby zeskanować krawędzie odcisku palca Fingerprint added Dodano odcisk palca dccV25::IrisAuthController Iris Tęczówka Use your iris to unlock the device and make settings later Odblokuj urządzenie za pomocą swojej tęczówki i skonfiguruj urządzenie później dccV25::KeyboardController This shortcut conflicts with [%1] Ten skrót jest w konflikcie z [%1] dccV25::PwqualityManager Password cannot be empty Hasło nie może być puste Password must have at least %1 characters Hasło musi zawierać co najmniej %1 znaków Password must be no more than %1 characters Hasło nie może przekraczać %1 znaków Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Hasło musi zawierać tylko litery angielskie (z rozróżnieniem wielkich i małych), cyfry lub symbole specjalne (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Nie więcej niż %1 znaki palindromowe No more than %1 monotonic characters please Nie więcej niż %1 znaki monotoniczne No more than %1 repeating characters please Nie więcej niż %1 powtarzające się znaki Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Hasło musi zawierać wielkie litery, małe litery, cyfry i symbole (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Hasło nie może zawierać więcej niż 4 znaki palindromowe Do not use common words and combinations as password Nie używaj popularnych słów i ich kombinacji jako hasła Create a strong password please Utwórz silne hasło It does not meet password rules Nie spełnia zasad dotyczących haseł At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. Hasło musi zawierać łącznie co najmniej %1 małych liter, wielkich liter, cyfr i symboli, jak i różnić się od nazwy użytkownika. dccV25::ShortcutModel System System Window Okno Workspace Obszar roboczy AssistiveTools Narzędzia pomocnicze Custom Własne None Brak ================================================ FILE: translations/dde-control-center_ps.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save ساتل BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save ساتل DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom دوديز PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save ساتل Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ساتل ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save ساتل click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save ساتل TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save ساتل TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom دوديز None ================================================ FILE: translations/dde-control-center_pt.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Cancelar Done Concluído Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Ligado Not connected Desligado BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Impressão digital1 Fingerprint2 Impressão digital2 Fingerprint3 Impressão digital3 Fingerprint4 Impressão digital4 Fingerprint5 Impressão digital5 Fingerprint6 Impressão digital6 Fingerprint7 Impressão digital7 Fingerprint8 Impressão digital8 Fingerprint9 Impressão digital9 Fingerprint10 Impressão digital10 Scan failed Falha ao verificar The fingerprint already exists A impressão digital já existe Please scan other fingers Verificar outros dedos Unknown error Erro desconhecido Scan suspended Verificação suspensa Cannot recognize Não é possível reconhecer Moved too fast Movido demasiado depressa Finger moved too fast, please do not lift until prompted O dedo moveu-se demasiado depressa. Não levantar o dedo até ser solicitado Unclear fingerprint Impressão digital pouco clara Clean your finger or adjust the finger position, and try again Limpar ou ajustar a posição do dedo e tentar novamente Already scanned Já verificado Adjust the finger position to scan your fingerprint fully Ajustar a posição do dedo para verificar completamente a sua impressão digital Finger moved too fast. Please do not lift until prompted O dedo moveu-se demasiado depressa. Não levantar o dedo até ser solicitado Lift your finger and place it on the sensor again Levante o dedo e coloque-o novamente sobre o sensor Position your face inside the frame Posicione a sua face na moldura Face enrolled Rosto registado Position a human face please Use uma face humana por favor Keep away from the camera Afaste-se da câmara Get closer to the camera Aproxime-se da câmara Do not position multiple faces inside the frame Não posicione várias faces dentro da moldura Make sure the camera lens is clean Certifique-se que a lente da câmara está limpa Do not enroll in dark, bright or backlit environments Não usar em ambientes de iluminação reduzida ou excessiva Keep your face uncovered Manter o rosto descoberto Scan timed out Tempo de verificação esgotado Cancel Cancelar Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server É necessária autenticação para alterar o servidor NTP Authentication is required to set the system timezone É necessária a autenticação para definir o fuso horário do sistema DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Ecrã Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Supressão automática de ruído Input Volume Volume de entrada Input Level Nível de entrada Input No input device for sound found Input Device Dispositivo de entrada Mouse Mouse and Touchpad Rato e Teclado Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personalização PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Personalizado PluginArea Plugin Area Área de plugins Select which icons appear in the Dock Seleccione quais ícones são visiveis na Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty A palavra-passe não pode estar em branco Password must have at least %1 characters A palavra-passe deve ter pelo menos %1 caracteres Password must be no more than %1 characters A palavra-passe não deve ter mais do que %1 caracteres Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A palavra-passe apenas pode conter letras em Inglês (maiúsculas e minúsculas), números ou símbolos especiais (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Não mais de %1 caracteres palíndroma por favor No more than %1 monotonic characters please Não mais de %1 caracteres mono tónicos por favor No more than %1 repeating characters please Não mais de %1 caracteres repetidos por favor Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A palavra-passe deve conter letras maiúsculas, letras minúsculas, números e símbolos (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters A palavra-passe não deve conter mais de 4 caracteres palíndromo Do not use common words and combinations as password Não utilizar palavras e combinações comuns como palavra-passe Create a strong password please Crie uma palavra-passe forte It does not meet password rules Não cumpre as regras de palavra-passe QObject Control Center Centro de Controlo Activated Ativado View Ver To be activated A ser ativado Activate Ativar Expired Expirado In trial period Em período experimental Trial expired O período experimental expirou dde-control-center Touch Screen Settings Definições do ecrã tátil The settings of touch screen changed As definições do ecrã tátil foram alteradas This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Som Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Efeitos sonoros SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Arrancar Shut down Encerrar Log out Terminar sessão Wake up Retomar Volume +/- Volume +/- Notification Notificação Low battery Bateria fraca Send icon in Launcher to Desktop Enviar ícone no lançador para o ambiente de trabalho Empty Trash Esvaziar o lixo Plug in Ligar Plug out Desligar Removable device connected Dispositivo removível ligado Removable device removed Dispositivo removível retirado Error Erro SpeakerPage Mode Modo Output Volume Volume de saída Volume Boost Aumento do volume If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Esquerda Right Direita Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Dispositivo de saída SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Reverter Save Guardar TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Chinês Tradicional (Chinês Hong Kong) Traditional Chinese (Chinese Taiwan) Chinês Tradicional (Chinês Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Este atalho entra em conflito com [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Sistema Window Janela Workspace Área de trabalho AssistiveTools Ferramentas de Assistência Custom Personalizado None Nenhum ================================================ FILE: translations/dde-control-center_pt_BR.ts ================================================ AccountSettings edit Editar Add new user Adicionar novo usuário Set fullname Definir nome completo Login settings Configurações de login Login without password Entrar sem senha Delete current account Excluir conta Group setting Configuração de grupo Account groups Grupos de contas done Feito Group name Nome do grupo Add group Adicionar grupo Auto login Login automático Account Information Informações da conta Account name, account fullname, account type Nome da conta, nome completo da conta, tipo de conta Account name Nome da conta Account fullname Nome completo da conta Account type Tipo de conta The full name is too long O nome completo é muito longo Group names should be no more than 32 characters Os nomes dos grupos não devem ter mais de 32 caracteres Group names cannot only have numbers Os nomes dos grupos não podem ter apenas números Use letters,numbers,underscores and dashes only, and must start with a letter Use apenas letras, números, sublinhados e travessões e deve começar com uma letra The group name has been used O nome do grupo já está em uso quick login, Auto login, login without password login rápido, login automático, login sem senha Undo Desfazer Redo Refazer Cut Recortar Copy Copiar Paste Colar Select All Selecionar tudo Quick login Login rápido Accounts Account Contas Account manager Gerenciador de contas AccountsMain Other accounts Outras contas AddFaceinfoDialog Enroll Face Cadastrar rosto I have read and agree to the Li e concordo com os termos Disclaimer Isenção de responsabilidade Next Próximo Face enrolled Rosto cadastrado Failed to enroll your face Falha ao cadastrar seu rosto Done Feito Cancel Cancelar Retry Enroll Tentar cadastrar seu rosto novamente Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. O reconhecimento facial não possui detecção de vivacidade, e o método de verificação pode apresentar riscos. Para garantir o acesso: 1. Mantenha o rosto visível e não o cubra (chapéus, óculos escuros, máscaras e etc.). 2. Garanta boa iluminação e evite luz solar direta. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. A autenticação biométrica é uma função de verificação de identidade do usuário fornecida pela UnionTech Software Technology Ltda. Por meio da autenticação biométrica, os dados biométricos coletados serão comparados com os armazenados no dispositivo, e a identidade do usuário será verificada com base no resultado da comparação. Observe que a UnionTech Software Technology Ltda. não coletará nem acessará suas informações biométricas, que serão armazenadas no seu dispositivo local. Ative a autenticação biométrica apenas em seu dispositivo pessoal e utilize apenas seus próprios dados biométricos para as operações relacionadas. Remova prontamente as informações biométricas de outras pessoas do dispositivo; caso contrário, você assumirá os riscos decorrentes disso. A UnionTech Software Technology Ltda. está comprometida em pesquisar e melhorar a segurança, a precisão e a estabilidade da autenticação biométrica. No entanto, devido a fatores ambientais, de hardware, técnicos e de controle de risco, não há garantia de que você será aprovado na autenticação biométrica em todas as tentativas. Portanto, não utilize a autenticação biométrica como a única forma de login no UOS. Se você tiver dúvidas ou sugestões ao utilizar a autenticação biométrica, poderá enviar feedback por meio de “Serviço e Suporte” no UOS. AddFingerDialog Cancel Cancelar Done Concluído Enroll Finger Cadastrar biometria Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Coloque o dedo que será usado no sensor de impressão digital e mova-o de baixo para cima. Após concluir a ação, levante o dedo. I have read and agree to the Li e concordo com os termos Disclaimer Isenção de responsabilidade Next Próximo Retry Enroll Tentar cadastrar biometria novamente "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. "A autenticação biométrica" ​​é uma função para autenticação de identidade do usuário fornecida pela UnionTech Software Technology Co., Ltd. Por meio da "autenticação biométrica", os dados biométricos coletados serão comparados com os armazenados no dispositivo, e a identidade do usuário será verificada com base no resultado da comparação.Observe que a UnionTech Software Technology Co., Ltd. não coletará ou acessará suas informações biométricas, que serão armazenadas em seu dispositivo local. Habilite apenas a autenticação biométrica em seu dispositivo pessoal e use suas próprias informações biométricas para operações relacionadas, e desabilite ou exclua imediatamente as informações biométricas de outras pessoas naquele dispositivo, caso contrário, você arcará com o risco decorrente disso.A UnionTech Software Technology Co., Ltd. está comprometida em pesquisar e melhorar a segurança, precisão e estabilidade da autenticação biométrica. No entanto, devido a fatores ambientais, de equipamento, técnicos e outros e controle de risco, não há garantia de que você passará pela autenticação biométrica temporariamente. Portanto, não tome a autenticação biométrica como a única maneira de fazer login no UOS. Caso tenha alguma dúvida ou sugestão ao usar a autenticação biométrica, você pode nos dar um feedback através de "Serviço e Suporte" no UOS. AddIrisDialog Enroll Iris Cadastrar íris I have read and agree to the Li e concordo com os Disclaimer Aviso Next Avançar Done Concluído Cancel Cancelar Retry Enroll Tentar cadastrar novamente Iris enrolled Íris cadastrada Failed to enroll your iris Falha ao cadastrar a íris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. A autenticação biométrica é uma função de verificação de identidade do usuário fornecida pela UnionTech Software Technology Ltda. Por meio da autenticação biométrica, os dados biométricos coletados serão comparados com os armazenados no dispositivo, e a identidade do usuário será verificada com base no resultado da comparação. Observe que a UnionTech Software Technology Ltda. não coletará nem acessará suas informações biométricas, que serão armazenadas no seu dispositivo local. Ative a autenticação biométrica apenas em seu dispositivo pessoal e utilize apenas seus próprios dados biométricos para as operações relacionadas. Remova prontamente as informações biométricas de outras pessoas do dispositivo; caso contrário, você assumirá os riscos decorrentes disso. A UnionTech Software Technology Ltda. está comprometida em pesquisar e melhorar a segurança, a precisão e a estabilidade da autenticação biométrica. No entanto, devido a fatores ambientais, de hardware, técnicos e de controle de risco, não há garantia de que você será aprovado na autenticação biométrica em todas as tentativas. Portanto, não utilize a autenticação biométrica como a única forma de login no UOS. Se você tiver dúvidas ou sugestões ao utilizar a autenticação biométrica, poderá enviar feedback por meio de “Serviço e Suporte” no UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Mantenha os olhos voltados para o dispositivo e certifique-se de que ambos estejam dentro da área de captura Authentication Biometric Authentication Autenticação biométrica AuthenticationMain Biometric Authentication Autenticação biométrica Face Rosto Up to 5 facial data can be entered É possível cadastrar até 5 dados faciais Fingerprint Impressão digital Identifying user identity through scanning fingerprints Identificando o usuário por meio da leitura de impressões digitais Iris Íris Identity recognition through iris scanning Reconhecimento de identidade por meio da leitura de íris Use letters, numbers and underscores only, and no more than 15 characters Use apenas letras, números e sublinhados, com no máximo 15 caracteres Use letters, numbers and underscores only Use apenas letras, números e sublinhados No more than 15 characters No máximo 15 caracteres This name already exists Este nome já existe Add a new %1 ... Adicionar um novo %1 ... The name cannot be empty O nome não pode estar vazio AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first "Auto Logon" só pode ser habilitado apenas para uma conta, desabilite-o primeiro para a conta "%1" Ok Ok AvatarSettingsDialog Images Imagens Human Humano Animal Animal Scenery Cenário Illustration Ilustração Emoji Emoji custom personalizada Cartoon style Estilo desenho animado Dimensional style Estilo dimensional Flat style Estilo plano Cancel Cancelar Save Salvar BatteryPage Screen and Suspend Tela e suspensão Turn off the monitor after A tela será desligada após Lock screen after A tela será bloqueada após Computer suspends after O computador será suspenso após When the lid is closed Quando a tampa estiver fechada When the power button is pressed Quando o botão de energia é pressionado Low Battery Bateria fraca Low battery notification Notificação de bateria fraca Auto suspend Suspensão automática Auto Hibernate Hibernação automática Low battery threshold Limitador de bateria fraca Battery Management Gerenciamento de bateria Display remaining using and charging time Exibir tempo restante de uso e carregamento Maximum capacity Capacidade máxima Low battery level Nível de bateria fraca Disable Desativar BlueTooth Bluetooth settings, devices Configurações de Bluetooth, dispositivos Bluetooth Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" O Bluetooth está desligado e o nome é exibido como "%1" Bluetooth is turned on, and the name is displayed as "%1" O Bluetooth está ligado e o nome é exibido como "%1" BlueToothDeviceListView Disconnect Desconectar Connect Conectar Send Files Enviar arquivos Rename Renomear Remove Device Renomear dispositivo Select file Selecionar arquivo BluetoothCtl Edit Editar Allow other Bluetooth devices to find this device Permitir que outros dispositivos Bluetooth encontrem este dispositivo To use the Bluetooth function, please turn off Para usar a função Bluetooth, desligue Airplane Mode Modo avião Bluetooth name cannot exceed 64 characters O nome do Bluetooth não pode exceder 64 caracteres BluetoothDeviceModel Connected Conectado Not connected Desconectado BootPage Startup Settings Configurações de inicialização You can click the menu to change the default startup items, or drag the image to the window to change the background image. Você pode clicar no menu para alterar os itens de inicialização padrão ou arrastar a imagem para a janela para alterar a imagem de fundo. grub start delay Atrasar inicialização theme Tema After turning on the theme, you can see the theme background when you turn on the computer Depois de ativar o tema, você pode ver o plano de fundo do tema ao ligar o computador Boot menu verification Verificação do menu de inicialização After opening, entering the menu editing requires a password. Após a abertura, é necessário digitar uma senha para entrar no menu de edição. Change Password Alterar a senha Change boot menu verification password Alterar senha de verificação do menu de inicialização Set the boot menu authentication password Defina a senha de autenticação do menu de inicialização User Name : Nome de usuário root root New Password : Nova senha: Required Obrigatória Password cannot be empty A senha não pode estar vazia Passwords do not match As senhas não correspondem Repeat password: Repita a senha: Cancel Cancelar Sure Certeza Start animation Animação de inicialização Adjust the size of the logo animation on the system startup interface Ajuste o tamanho do logotipo na interface de inicialização do sistema Camera Allow below apps to access your camera: Permita que os aplicativos abaixo acessem sua câmera: CharaMangerModel Fingerprint1 Impressão digital 1 Fingerprint2 Impressão digital 2 Fingerprint3 Impressão digital 3 Fingerprint4 Impressão digital 4 Fingerprint5 Impressão digital 5 Fingerprint6 Impressão digital 6 Fingerprint7 Impressão digital 7 Fingerprint8 Impressão digital 8 Fingerprint9 Impressão digital 9 Fingerprint10 Impressão digital 10 Scan failed A leitura falhou The fingerprint already exists A impressão digital já existe Please scan other fingers Digitalize os outros dedos Unknown error Erro desconhecido Scan suspended Leitura suspensa Cannot recognize Não reconhecida Moved too fast Moveu-se muito rápido Finger moved too fast, please do not lift until prompted O dedo se moveu muito rápido; não levante até que seja solicitado Unclear fingerprint Impressão digital pouco nítida Clean your finger or adjust the finger position, and try again Limpe o dedo ou ajuste a posição do mesmo, e tente novamente Already scanned Já digitalizado Adjust the finger position to scan your fingerprint fully Ajuste a posição do dedo para digitalizar totalmente a impressão digital Finger moved too fast. Please do not lift until prompted O dedo se moveu muito rápido; não levante até que seja solicitado Lift your finger and place it on the sensor again Levante o dedo e posicione-o sobre o sensor Position your face inside the frame Posicione seu rosto dentro da moldura Face enrolled Rosto cadastrado Position a human face please Posicione um rosto humano Keep away from the camera Afaste-se da câmera Get closer to the camera Aproxime-se da câmera Do not position multiple faces inside the frame Não posicione vários rostos dentro da moldura Make sure the camera lens is clean Certifique-se que a lente da câmera está limpa Do not enroll in dark, bright or backlit environments Não cadastre-se em ambientes escuros, claros ou com luz de fundo Keep your face uncovered Mantenha seu rosto descoberto Scan timed out O tempo limite da varredura expirou Cancel Cancelar Camera occupied! Câmera ocupada! ColorAndIcons Accent Color Cor de destaque Icon Settings Configurações dos ícones Icon Theme Tema dos ícones Customize your theme icon Personalizar o tema do ícone Cursor Theme Tema do cursor Customize your theme cursor Personalizar o tema do cursor ComfirmDeleteDialog Are you sure you want to delete this account? Excluir esta conta? Delete account directory Excluir diretório da conta Cancel Cancelar Delete Excluir ComfirmSafePage Go to settings Ir para as configurações Cancel Cancelar Common Common Padrão Repeat delay Atraso de repetição Short Baixa Long Alta Repeat rate Taxa de repetição Slow Lento Fast Rápido Numeric Keypad Indicador visual do teclado numérico: ativado/desligado test here teste aqui Caps lock prompt Indicador visual do Caps Lock: ativado/desligado Double Click Speed Velocidade do clique duplo Double Click Test Teste do clique duplo Left Hand Mode Modo para canhotos Enable Keyboard Habilitar teclado General Geral Scrolling Speed Velocidade de rolagem CommonInfoMain Boot Menu Menu de inicialização Manage your boot menu Gerenciar menu de inicialização Developer root permission management Gerenciamento de permissões de root para desenvolvedores Developer Options Opções do desenvolvedor Developer debugging options Opções de depuração do desenvolvedor CommonInfoWork Large size Grande Small size Pequeno Failed to get root access Falha ao obter acesso root Please sign in to your Union ID first Por favor, primeiro faça login no seu Union ID Cannot read your PC information Impossível ler as informações do PC No network connection Nenhuma conexão de rede Certificate loading failed, unable to get root access O carregamento do certificado falhou, impossível obter acesso root Signature verification failed, unable to get root access A verificação da assinatura falhou, impossível obter acesso root Agree and Join User Experience Program Concordar e aderir ao Programa de Experiência do Usuário The Disclaimer of Developer Mode Isenção de responsabilidade do modo de desenvolvedor Agree and Request Root Access Concordar e solicitar acesso root Start setting the new boot animation, please wait for a minute Começando a definir a nova animação de inicialização, aguarde um minuto Setting new boot animation finished A configuração da nova animação de inicialização foi concluída The settings will be applied after rebooting the system As configurações serão aplicadas após a reinicialização do sistema Restart now Reiniciar Dismiss Dispensar Restart device to finish applying Solid System Read-Only Protection settings Reinicie o dispositivo para concluir a aplicação das configurações de Proteção de Sistema Somente Leitura Solid ConfirmManager Password must contain numbers and letters A senha deve conter números e letras Password must be between 8 and 64 characters A senha deve ter entre 8 e 64 caracteres CreateAccountDialog Create a new account Criar uma nova conta Account type Tipo de conta UserName Nome de usuário Required Obrigatório FullName Nome completo Optional Opcional Cancel Cancelar Create account Criar conta Username cannot exceed 32 characters O nome do usuário não pode ultrapassar 32 caracteres Username can only contain letters, numbers, - and _ O nome do usuário só pode conter letras, números, "-" e "_" Full name cannot exceed 32 characters O nome completo não pode ultrapassar 32 caracteres Full name cannot contain colons O nome completo não pode conter ":" CustomAvatarCropper small Pequeno big Grande CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Você ainda não carregou um avatar. Clique ou arraste e solte para carregar uma imagem The uploaded file type is incorrect, please upload it again O tipo do arquivo enviado está incorreto, envie novamente DCC_NAMESPACE::SystemInfoModel available Disponível DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Concordar e aderir ao Programa de Experiência do Usuário <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>Estamos plenamente cientes da importância das suas informações pessoais para você. Por isso, temos uma Política de Privacidade que abrange como coletamos, usamos, compartilhamos, transferimos, divulgamos publicamente e armazenamos suas informações.</p><p>Você pode <a href="%1">clicar aqui</a> para visualizar nossa política de privacidade mais recente e/ou consultá-la online acessando<a href="%1"> %1</a>. Leia atentamente e compreenda totalmente nossas práticas de privacidade do cliente. Se tiver dúvidas, entre em contato conosco em: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Ao participar do Programa de Experiência do Usuário, você concede e autoriza a coleta e o uso de informações do seu dispositivo, sistema e aplicativos. Caso não concorde com a coleta e o uso dessas informações, não participe do Programa de Experiência do Usuário. Para mais detalhes, consulte a Política de Privacidade do deepin (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">Ao participar do Programa de Experiência do Usuário, você concede e autoriza a coleta e o uso de informações do seu dispositivo, sistema e aplicativos. Caso não concorde com a coleta e o uso dessas informações, não participe. Para mais detalhes sobre o Programa de Experiência do Usuário, visite </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Configuração de data e hora Date Data Year Ano Month Mês Day Dia Time Hora Cancel Cancelar Confirm Confirmar Datetime Time and date Data e hora Time and date, time zone settings Data e hora, configurações de fuso horário DatetimeMain Language and region Idioma e região System language, regional formats Idioma do sistema, formatos regionais DatetimeModel Tomorrow Amanhã Yesterday Ontem Today Hoje %1 hours earlier than local %1 horas antes do horário local %1 hours later than local %1 horas depois do horário local Space Espaço Week Semana First day of week Primeiro dia da semana Short date Data abreviada Long date Data completa Short time Hora abreviada Long time Hora completa Currency symbol Símbolo de moeda Positive currency Formato de moeda positivo Negative currency Formato de moeda negativo Decimal symbol Símbolo decimal Digit grouping symbol Símbolo de agrupamento de dígitos Digit grouping Agrupamento de dígitos Page size Tamanho de página Example Exemplo DatetimeWorker Authentication is required to change NTP server A autenticação é necessária para alterar o servidor NTP Authentication is required to set the system timezone A autenticação é necessária para alterar o fuso horário DccColorDialog Cancel Cancelar Save Salvar DccWindow Control Center provides the options for system settings. As Configurações fornece todas as opções para a configuração do sistema. DeepinIDAccountSecurity Bind WeChat Vincular WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Ao vincular o WeChat, você pode efetuar login com segurança e rapidez em sua ID %1 e contas locais. Unlinked Desvinculado Unbinding Desvinculando Link Vincular Are you sure you want to unbind WeChat? Desvincular o WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Após desvincular o WeChat, você não poderá usá-lo para escanear o código QR para fazer login no ID %1 ou na conta local. Let me think it over Deixe-me pensar sobre isso Local Account Binding Vinculação de conta local After binding your local account, you can use the following functions: Depois de vincular sua conta local, você pode usar as seguintes funções: WeChat Scan Code Login System Sistema de login no WeChat por escaneamento de código Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Use o WeChat, que está vinculado ao seu ID %1, para escanear o código e fazer login na sua conta local. Reset password via %1 ID Redefinir senha via %1 ID Reset your local password via %1 ID in case you forget it. Redefina sua senha local via %1 ID caso você a esqueça. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Para usar os recursos acima, acesse o Configurações - Contas e ative as opções correspondentes DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Cloud Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Gerencie seu %1 ID e sincronize seus dados pessoais em todos os dispositivos.Faça login no %1 ID para obter recursos e serviços personalizados do navegador, App Store e muito mais. Sign In to %1 ID Entrar com %1 ID DeepinIDSyncService Auto Sync Sincronização automática Securely store system settings and personal data in the cloud, and keep them in sync across devices Armazene com segurança as configurações do sistema e os dados pessoais na nuvem e mantenha-os sincronizados em todos os dispositivos System Settings Configurações do sistema Last sync time: %1 Última vez sincronizado: %1 Clear cloud data Limpar dados da nuvem Are you sure you want to clear your system settings and personal data saved in the cloud? Limpar as configurações do sistema e os dados pessoais salvos na nuvem? Once the data is cleared, it cannot be recovered! Depois que os dados forem apagados, eles não poderão ser recuperados! Cancel Cancelar Clear Limpar DeepinIDUserInfo Synchronization Service Serviço de Sincronização Account and Security Conta e Segurança Sign out Sair Go to web settings Ir para as configurações da web The nickname must be 1~32 characters long O apelido deve ter entre 1 e 32 caracteres DeepinWorker encrypt password failed Falha na criptografia da senha Wrong password, %1 chances left Senha errada, %1 chances restantes The login error has reached the limit today. You can reset the password and try again. O erro de login atingiu o limite hoje. Você pode redefinir a senha e tentar novamente. Operation Successful Operação bem-sucedida The nickname can be modified only once a day O apelido só pode ser modificado uma vez por dia Deepinid deepin ID deepin ID UOS ID UOS ID Cloud services Serviços em nuvem DeepinidModel Mainland China China continental Other regions Outras regiões The feature is not available at present, please activate your system first O recurso não está disponível no momento, ative seu sistema primeiro Subject to your local laws and regulations, it is currently unavailable in your region. Sujeito às leis e regulamentações locais, ele não está disponível em sua região no momento. Defaultapp Default App Aplicativo padrão Set the default application for opening various types of files Definir o aplicativo padrão para abrir diferentes tipos de arquivos DefaultappMain Webpage Navegador Mail E-mail Text Texto Music Música Video Vídeo Picture Visualizador de imagem Terminal Terminal DetailItem Please choose the default program to open '%1' Por favor, escolha o programa padrão para abrir '%1' add Adicionar Open Desktop file Abrir arquivo na área de trabalho Apps (*.desktop) Aplicativos (*.desktop) All files (*) Todos os arquivos (*) DevelopModePage Root Access Acesso root Request Root Access Solicitar acesso root After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Após entrar no modo de desenvolvedor, você pode obter permissões de root, mas isso também pode danificar a integridade do sistema, portanto, use-o com cautela. Allowed Permitido Enter Entrar Online Online Login UOS ID Entrar com UOS ID Offline Offline Import Certificate Importar Certificado Select file Selecionar arquivo Your UOS ID has been logged in, click to enter developer mode Seu ID UOS foi conectado, clique para entrar no modo de desenvolvedor Please sign in to your UOS ID first and continue Entre com seu UOS ID para continuar 1.Export PC Info 1.Exportar informações do PC Export Exportar 3.Import Certificate 3.Importar certificado Development and debugging options Opções do desenvolvedor e depuração System logging level Nível de registro do sistema Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Alterar as opções resulta em registros mais detalhados que podem degradar o desempenho do sistema e/ou ocupar mais espaço de armazenamento. Off Desativado Debug Depurar Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. A alteração da opção pode levar até um minuto para ser processada. Após receber um prompt de configuração bem-sucedida, reinicie o dispositivo para que a configuração tenha efeito. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. Para instalar e executar aplicativos não assinados, acesse a <a style='text-decoration: none;' href='Security Center'> Central de Segurança </a> para alterar as configurações. To install and run unsigned apps, please go to Security Center to change the settings. Para instalar e executar aplicativos não assinados, acesse a Central de Segurança e altere as configurações. You have entered developer mode Você entrou no modo desenvolvedor OK Ok 2.please go to %1 to Download offline certificate. 2 . Acesse %1 para baixar o certificado offline. The feature is not available at present, please activate your system first. O recurso não está disponível no momento. Ative o sistema primeiro. Solid System Read-Only Protection Proteção de Sistema Somente Leitura Solid Disabling protection unlocks system directories,This action carries a high risk of system damage. Desativar a proteção desbloqueia os diretórios do sistema. Esta ação apresenta alto risco de danos ao sistema. Enable protection to lock system directories and ensure optimal stability. Ativar a proteção bloqueia os diretórios do sistema e garante maior estabilidade. Device Bluetooth and Devices Bluetooth e dispositivos DisclaimerControl Disclaimer Aviso legal Cancel Cancelar Agree Concordo Display Display Tela Brightness,resolution,scaling Brilho, resolução e escala DisplayMain 100% 100% 125% 125% 150% 150% 175% 175% 200% 200% 225% 225% 250% 250% 275% 275% 300% 300% Duplicate Duplicar Extend Estender Default Padrão Fit Preencher Stretch Esticar Center Centralizar Only on %1 Apenas em %1 Multiple Displays Settings Configurações de vários monitores Identify Identificar Screen rearrangement will take effect in %1s after changes O rearranjo das telas será aplicado em %1s após as alterações Mode Modo Main Screen Tela principal Display And Layout Exibição e layout Brightness Brilho Resolution Resolução Resize Desktop Redimensionar a área de trabalho Refresh Rate Taxa de atualização Rotation Rotação Standard Padrão 90° 90° 180° 180° 270° 270° The monitor only supports 100% display scaling O monitor suporta apenas escala de exibição de 100% Eye Comfort Conforto ocular Enable eye comfort Ativar conforto ocular Adjust screen display to warmer colors, reducing screen blue light Ajusta a exibição da tela para cores mais quentes, reduzindo a luz azul Time Formato de hora All day Dia inteiro Sunset to Sunrise Pôr do sol ao nascer do sol Custom Time Horário personalizado from de to até Color Temperature Temperatura de cor %1x%2 (Recommended) %1x%2 (Recomendado) %1x%2 %1x%2 %1Hz (Recommended) %1Hz (Recomendado) %1Hz %1Hz Scaling Escala Dock Desktop and taskbar Área de trabalho e barra de tarefas Desktop organization, taskbar mode, plugin area settings Organização da área de trabalho, modo da barra de tarefas, configurações da área de plugins DockMain Dock Fixar no dock Mode Modo Classic Mode Clássico Centered Mode Moderno Dock size Tamanho do dock Small Pequeno Large Grande Position on the screen Posição na tela Top Superior Bottom Inferior Left Esquerdo Right Direito Status Visibilidade Keep shown Sempre exibir Keep hidden Sempre ocultar Smart hide Ocultar automaticamente Multiple Displays Várias telas Set the position of the taskbar on the screen Definir a posição da barra de tarefas na tela Only on main Apenas na principal On screen where the cursor is Na tela onde está o cursor Plugin Area Área de plugins Select which icons appear in the Dock Selecione quais ícones aparecem no dock Lock the Dock Bloquear dock Combine application icons Agrupar ícones de aplicativos FileAndFolder Allow below apps to access these files and folders: Permitir que os aplicativos abaixo acessem esses arquivos e pastas: Documents Documentos Desktop Área de trabalho Pictures Fotos Videos Vídeos Music Música Downloads Downloads folder Pasta FontSizePage Size Tamanho Standard Font Fonte padrão Monospaced Font Fonte monoespaçada GeneralPage Power Plans Planos de energia Power Saving Settings Configurações de economia de energia Auto power saving on low battery Economia automática de energia em caso de bateria fraca Low battery threshold Limitador de bateria fraca Auto power saving on battery Economia automática de energia na bateria Wakeup Settings Configurações ao despertar Password is required to wake up the computer Solicitar senha ao acordar o computador Password is required to wake up the monitor Solicitar senha ao acordar o monitor Shutdown Settings Configurações de desligamento Scheduled Shutdown Desligamento programado Time Hora Repeat Repetir Once Uma vez Every day Diariamente Working days Dias úteis Custom Time Hora personalizada Decrease screen brightness on power saver Reduzir o brilho da tela no modo de economia de energia em GestureModel Three-finger up Deslizar três dedos para cima Three-finger down Deslizar três dedos para baixo Three-finger left Deslizar três dedos para a esquerda Three-finger right Deslizar três dedos para a direita Three-finger tap Toque com três dedos Four-finger up Deslizar quatro dedos para cima Four-finger down Deslizar quatro dedos para baixo Four-finger left Deslizar quatro dedos para a esquerda Four-finger right Deslizar quatro dedos para a direita Four-finger tap Toque com quatro dedos HomePage , , ... ... InterfaceEffectListview Optimal Performance Alto desempenho Balance Equilibrado Best Visuals Visual aprimorado Disable all interface and window effects for efficient system performance. Desabilite todos os efeitos de interface e janela para um desempenho eficiente do sistema. Limit some window effects for excellent visuals while maintaining smooth system performance. Limite alguns efeitos de janela para obter visuais excelentes, mantendo o bom desempenho do sistema. Enable all interface and window effects for the best visual experience. Habilite todos os efeitos de interface e janela para obter uma melhor experiência visual. Keyboard Keyboard Teclado General Settings, input method, shortcuts Configurações gerais, método de entrada, atalhos KeyboardMain Common Comum LangAndFormat Language Idioma done Feito edit Editar Other languages Outras idiomas add Adicionar Region Região Area País ou região Operating system and applications may provide you with local content based on your country and region O sistema operacional e os aplicativos podem fornecer conteúdo local com base em seu país e região Operating system and applications may set date and time formats based on regional formats O sistema operacional e os aplicativos podem definir formatos de data e hora com base em formatos regionais Regional format Formato regional LangsChooserDialog Add language Adicionar idioma Search Pesquisar Cancel Cancelar Add Adicionar LoginMethod Login method Método de login Password, wechat, biometric authentication, security key Senha, wechat, autenticação biométrica, senha de segurança Password Senha Modify password Modificar senha Validity days Dias de validade Always Sempre Reset password Redefinir senha LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Ltda. MicrophonePage Automatic Noise Suppression Cancelamento Automático de Ruído Input Volume Volume de entrada Input Level Nível de entrada Input Entrada No input device for sound found Nenhum dispositivo de entrada de som encontrado Input Device Dispositivo de entrada Mouse Mouse and Touchpad Mouse e Touchpad Common、Mouse、Touchpad Comum, Mouse, Touchpad MouseMain Common Comum Mouse Mouse Touchpad Touchpad MousePage Mouse Mouse Pointer Speed Velocidade do ponteiro Slow Lento Fast Rápido Pointer Size Tamanho do ponteiro Mouse Acceleration Aceleração do mouse Disable touchpad when a mouse is connected Desativar o touchpad quando um mouse estiver conectado Natural Scrolling Rolagem natural Small Pequeno Medium Médio Large Grande X-Large Extra grande Some apps require logout or system restart to take effect Alguns aplicativos exigem sair da sessão ou reiniciar o sistema para que as alterações tenham efeito MyDevice My Devices Dispositivos pareados NativeInfoPage UOS UOS Computer name Nome do computador It cannot start or end with dashes Não pode começar ou terminar com traços OS Name Sistema operacional Version Versão Edition Edição Type Arquitetura bit bit Authorization Autorização System installation time Data de instalação do sistema Kernel Kernel Graphics Platform Servidor de exibição Processor Processador Memory Memória RAM 1~63 characters please 1 a 63 caracteres, por favor Notification DND mode, app notifications Modo não perturbe, notificações de aplicativos Notification Notificações NotificationMain Do Not Disturb Settings Configurações do Não Perturbe App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. As notificações de aplicativos não serão exibidas na área de trabalho e os sons serão silenciados mas você pode ver todas as mensagens na central de notificações. Enable Do Not Disturb Ativar Não Perturbe When the screen is locked Quando a tela estiver bloqueada Number of notifications shown on the desktop Número de notificações exibidas na área de trabalho App Notifications Notificações de aplicativos Allow Notifications Permitir notificações Display notification on desktop or show unread messages in the notification center Exibir notificações na área de trabalho ou mostrar mensagens não lidas na central de notificações Desktop Área de Trabalho Lock Screen Tela de bloqueio Notification Center Central de Notificações Show message preview Exibir prévia da mensagem Play a sound Reproduzir som OtherDevice Other Devices Outros dispositivos Show Bluetooth devices without names Mostrar dispositivos Bluetooth sem nomes PasswordLayout Current password Senha atual Required Obrigatória Weak Fraca Medium Média Strong Forte Repeat Password Repita a sua senha Password hint Dica de senha Optional Opcional Password cannot be empty A senha não pode estar vazia Passwords do not match As senhas não coincidem The hint is visible to all users. Do not include the password here. A dica é visível para todos os usuários. Não inclua a senha aqui New password Nova senha New password should differ from the current one A nova senha deve ser diferente da atual The password cannot be the same as the username. A senha não pode ser igual ao nome de usuário PasswordModifyDialog Modify password Alterar senha Reset password Redefinir senha Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. O comprimento da senha deve ter pelo menos 8 caracteres, e a senha deve conter uma combinação de pelo menos 3 dos seguintes: letras maiúsculas, letras minúsculas, números e símbolos. Este tipo de senha é mais seguro. Resetting the password will clear the data stored in the keyring. Redefinir a senha apagará os dados armazenados no chaveiro. Cancel Cancelar Personalization Personalization Personalização PersonalizationInterface Light Tema claro Auto Automático Dark Tema escuro Picker service is not available O serviço de seleção não está disponível Invalid color format: %1 Formato de cor inválido %1 PersonalizationMain Theme Tema Appearance Aparência Window effect Efeitos visuais Personalize your wallpaper and screensaver Personalize seu papel de parede e protetor de tela Screensaver Protetor de tela Colors and icons Cores e ícones Adjust accent color and theme icons Ajustar a cor de destaque e os ícones do tema Font and font size Fonte e tamanho da fonte Change system font and size Alterar a fonte e o tamanho do sistema Wallpaper Papel de parede Select light, dark or automatic theme appearance Selecionar o tema claro, escuro ou automático Interface and effects, rounded corners Interface e efeitos, cantos arredondados PersonalizationWorker Custom Personalizar PluginArea Plugin Area Área de complementos Select which icons appear in the Dock Selecione quais ícones devem aparecer no dock Power Power saving settings, screen and suspend Configurações de economia de energia, tela e suspensão Power Energia PowerMain General Geral Power plans, power saving settings, wakeup settings, shutdown settings Planos de energia, configurações de economia de energia, configurações de despertar, configurações de desligamento Plugged In Na tomada Screen and suspend Tela e suspensão On Battery Na bateria screen and suspend, low battery, battery management Tela e suspensão, bateria fraca e gerenciamento de bateria PowerOperatorModel Shut down Desligar Suspend Suspender Hibernate Hibernar Turn off the monitor Desligar a tela Show the shutdown Interface Exibir menu de energia Do nothing Não fazer nada PowerPage Screen and Suspend Tela e suspensão Turn off the monitor after A tela será desligada após Lock screen after A tela será bloqueada após Computer suspends after O computador será suspenso após When the lid is closed Quando a tampa estiver fechada When the power button is pressed Quando o botão de energia é pressionado PowerPlansListview High Performance Alto desempenho Balance Performance Equilibrado Aggressively adjust CPU operating frequency based on CPU load condition Ajustar agressivamente a frequência operacional da CPU com base na condição de carga da CPU Balanced Equilibrado Power Saver Economia de energia Prioritize performance, which will significantly increase power consumption and heat generation Prioriza o desempenho, o que aumentará significativamente o consumo de energia e a geração de calor Balancing performance and battery life, automatically adjusted according to usage Equilíbrio entre desempenho e duração da bateria, ajustado automaticamente de acordo com o uso Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Priorizar a duração da bateria, significa que o sistema sacrificará parte do desempenho para reduzir o consumo de energia PowerWorker Minutes minutos Hour Hora Never Nunca Privacy Privacy and Security Privacidade e segurança Camera, folder permissions Câmera, permissões de pasta PrivacyMain Camera Câmera Choose whether the application has access to the camera Escolha se o aplicativo tem acesso à câmera Files and Folders Arquivos e pastas Choose whether the application has access to files and folders Escolha se o aplicativo tem acesso a arquivos e pastas PrivacyPolicyPage Privacy Policy Política de privacidade Copy Link Address Copiar endereço do link PwqualityManager Password cannot be empty A senha não pode ficar vazia Password must have at least %1 characters A senha deve ter pelo menos %1 caracteres Password must be no more than %1 characters A senha não deve ter mais do que %1 caracteres Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A senha pode conter apenas letras em Inglês (sensível a maiúsculas e minúsculas), números ou símbolos especiais (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Não mais do que %1 caracteres palíndromos, por favor No more than %1 monotonic characters please Não mais que %1 caracteres monotônicos, por favor No more than %1 repeating characters please Não mais do que %1 caracteres repetidos, por favor Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A senha deve conter letras maiúsculas, letras minúsculas, números e símbolos (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters A senha não deve conter mais do que 4 caracteres palíndromos Do not use common words and combinations as password Não utilize palavras comuns e combinações como senha Create a strong password please Crie uma senha forte It does not meet password rules Não atende às regras de senha QObject Control Center Configurações Activated Ativado View Exibir To be activated Para ser ativado Activate Ativar Expired Expirado In trial period Em período de avaliação Trial expired A avaliação expirou dde-control-center dde-control-center Touch Screen Settings Configurações do Touch Screen The settings of touch screen changed As configurações do touch screen foram alteradas This system wallpaper is locked. Please contact your admin. Este papel de parede do sistema está bloqueado. Entre em contato com seu administrador. %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search Pesquisar Default formats Formatos padrão First day of week Primeiro dia da semana Short date Data abreviada Long date Data completa Short time Hora abreviada Long time Hora completa Currency symbol Símbolo de moeda Digit Dígito Paper size Tamanho de página Cancel Cancelar Save Salvar Regional format Formato regional RegionsChooserWindow Search Pesquisar RegisterDialog Set a Password Definir uma senha 8-64 characters 8-64 caracteres Repeat the password Repita a senha Cancel Cancelar Confirm Confirmar Passwords don't match As senhas não coincidem ScheduledShutdownDialog Customize repetition time Personalize o tempo de repetição Cancel Cancelar Save Salvar ScreenSaverPage Screensaver Protetor de tela preview pré-visualização Personalized screensaver Protetor de tela personalizado setting Configuração idle time Tempo ocioso 1 minute 1 minuto 5 minute 5 minutos 10 minute 10 minutos 15 minute 15 minutos 30 minute 30 minutos 1 hour 1 hora never Nunca Password required for recovery Senha necessária para recuperação Picture slideshow screensaver Protetor de tela e apresentação de slides de imagens System screensaver Protetor de tela do sistema SearchableListViewPopup Search Pesquisar No search results Nenhum resultado de pesquisa ShortcutSettingDialog Add custom shortcut Adicionar atalho personalizado Name: Nome: Required Obrigatório Command: Comando: Shortcut Atalho None Nenhum Cancel Cancelar Add Adicionar The shortcut name is already in use. Choose a different name. O nome do atalho já está em uso. Escolha um nome diferente. Change custom shortcut Alterar atalho personalizado please enter a shortcut key Insira uma tecla de atalho Save Salvar click Save to make this shortcut key effective Clique em Salvar para ativar esta tecla de atalho click Add to make this shortcut key effective Clique em Adicionar para ativar esta tecla de atalho Shortcuts Shortcuts Atalhos System shortcut, custom shortcut Atalho do sistema, atalho personalizado Search shortcuts Pesquisar atalhos done Feito edit Editar Click Clique Cancel Cancelar or ou Replace Substituir Restore default Restaurar padrão Add custom shortcut Adicionar atalho personalizado please enter a new shortcut key Insira um novo atalho de teclado Sound Sound Som Output, input, sound effects, devices Saída, entrada, efeitos sonoros, dispositivos SoundDevicemanagesPage Output Devices Dispositivo de saída Select whether to enable the devices Selecione se deseja habilitar os dispositivos Input Devices Dispositivo de entrada SoundEffectsPage Sound Effects Efeitos sonoros SoundMain Settings Configurações Sound Effects Efeitos sonoros Enable/disable sound effects Ativar/desativar efeitos sonoros Enable/disable audio devices Ativar/desativar dispositivos de áudio Devices Management Gerenciamento de dispositivos SoundModel Boot up Inicialização Shut down Desligar Log out Sair Wake up Ligar Volume +/- Volume +/- Notification Notificações Low battery Bateria fraca Send icon in Launcher to Desktop Enviar ícone do Lançador para a Área de Trabalho Empty Trash Esvaziar Lixeira Plug in Plugar Plug out Desplugar Removable device connected Dispositivo removível conectado Removable device removed Dispositivo removível desconectado Error Erro SpeakerPage Mode Modo Output Volume Volume de saída Volume Boost Amplificar volume If the volume is louder than 100%, it may distort audio and be harmful to output devices Se o volume for superior a 100%, haverá distorção do áudio e o alto-falante poderá ser danificado Left Esquerdo Right Direito Output Saída No output device for sound found Nenhum dispositivo de saída de som encontrado Left Right Balance Balanço de áudio Merge left and right channels into a single channel Mesclar canais esquerdo e direito em um único canal Whether the audio will be automatically paused when the current audio device is unplugged O áudio será pausado automaticamente quando o dispositivo de áudio atual for desconectado Mono Audio Áudio mono Auto Pause Pausar automaticamente Output Device Dispositivo de Saída SyncInfoListModel Sound Som Power Energia Mouse Mouse Update Atualização Screensaver Protetor de tela System Common settings Configurações comuns System Sistema SystemInfo Auxiliary Information Informações auxiliares SystemInfoMain About This PC Sobre este computador System version, device information Versão do sistema, informações do dispositivo View the notice of open source software Exibir aviso de software de código aberto User Experience Program Programa de experiência do usuário Join the user experience program to help improve the product Participar do programa de experiência do usuário para ajudar a melhorar o produto End User License Agreement Contrato de licença de usuário final View the end user license agreement Exibir contrato de licença de usuário final Privacy Policy Política de privacidade View information about privacy policy Exibir informações sobre a política de privacidade Open Source Software Notice Aviso de software de código aberto ThemeSelectView More Wallpapers Mais papéis de parede TimeAndDate Auto sync time Sincronização automática de horário Ntp server Servidor NTP System date and time Sistema data e hora Customize Personalizar Settings Configurações Server address Endereço do servidor Required Obrigatório The ntp server address cannot be empty O endereço do servidor NTP não pode estar vazio Use 24-hour format Usar formato 24 horas system time zone Fuso horário do sistema Timezone list Lista de fusos horários Add Adicionar TimeRange from A partir to Até TimeoutDialog Save the display settings? Salvar configurações de exibição? Settings will be reverted in %1s. As configurações serão revertidas em %1s. Revert Reverter Save Salvar TimezoneDialog Add time zone Adicionar fuso horário Determine the time zone based on the current location Determinar o fuso horário com base na localização atual Time zone: Fuso horário: Nearest City: Cidade mais próxima: Cancel Cancelar Save Salvar TouchScreen TouchScreen Tela sensível ao toque Set up here when connecting the touch screen Configure aqui ao conectar a tela sensível ao toque Touchpad Basic Settings Configurações básicas Touchpad Touchpad Pointer Speed Velocidade do ponteiro Slow Lento Fast Rápido Disable touchpad during input Desativar touchpad durante a digitação Tap to Click Toque para clicar Natural Scrolling Rolagem natural Three-finger gestures Gestos de três dedos Four-finger gestures Gestos de quatro dedos Gestures Gestos Touchscreen Touchscreen Touchscreen Configuring Touchscreen Configurando touchscreen TouchscreenMain Common Comum UserExperienceProgramPage Join User Experience Program Participar do Programa de Experiência do Usuário Copy Link Address Copiar endereço do link VerifyDialog Security Verification Verificação de segurança The action is sensitive, please enter the login password first A ação é sensível, digite primeiro a senha de login 8-64 characters 8-64 caracteres Forgot Password? Esqueceu sua senha? Cancel Cancelar Confirm Confirmar Wacom wacom Wacom Configuring wacom Configurando Wacom WacomMain wacom Wacom Pen Mode Modo de caneta Mouse Mode Modo de mouse Pressure Sensitivity Sensibilidade à pressão Light Claro Heavy Forte Model Modelo WallpaperPage wallpaper Papel de parede My pictures Minhas fotos System Wallpaper Papel de parede do sistema Solid color wallpaper Papel de parede de cor sólida Customizable wallpapers Papéis de parede personalizáveis fill style estilo de preenchimento Automatic wallpaper change Alterar automaticamente o papel de parede never Nunca 30 second 30 segundos 1 minute 1 minuto 5 minute 5 minutos 10 minute 10 minutos 15 minute 15 minutos 30 minute 30 minutos login Login wake up Ligar Live Wallpaper Papel de parede animado 1 hour 1 hora System Wallpapers Papéis de parede do sistema WallpaperSelectView unfold Exibir parcialmente Set lock screen Definir tela de bloqueio Set desktop Definir área de trabalho show all - %1 items Exibir tudo - %1 itens Add Picture Adicionar imagem WindowEffectPage Interface and Effects Interface e efeitos Window Settings Configurações da janela Window rounded corners Cantos arredondados das janelas None Nenhum Small Pequeno Large Grande Enable transparent effects when moving windows Efeitos de transparência ao mover janelas Window Minimize Effect Efeito ao minimizar janelas Scale Escala Magic Lamp Lâmpada mágica Opacity Opacidade Low Baixa High Alta Scroll Bars Barras de rolagem Show on scrolling Exibir ao rolar Keep shown Sempre exibir Compact Display Exibição compacta If enabled, more content is displayed in the window. Se ativado, mais conteúdo será exibido na janela. Title Bar Height Altura da barra de título Only suitable for application window title bars drawn by the window manager. Adequado somente para barras de título de janelas de aplicativos desenhadas pelo gerenciador de janelas. Extremely small Mínima Medium describe size of window rounded corners Médio Medium describe height of window title bar Médio dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Chinês Tradicional (Hong Kong) Traditional Chinese (Chinese Taiwan) Chinês Tradicional (Taiwan) Min Nan Chinese Min Nan Chinês dcc::Locale::regionNames Taiwan China Taiwan dccV25::AccountsController Username must be between 3 and 32 characters O nome de usuário deve ter entre 3 e 32 caracteres The first character must be a letter or number O primeiro caractere deve ser uma letra ou número Your username should not only have numbers Seu nome de usuário não deve ter apenas números The username has been used by other user accounts O nome de usuário foi usado por outra conta de usuário The full name is too long O nome completo é muito longo The full name has been used by other user accounts O nome completo foi usado por outra conta de usuário Wrong password Senha incorreta Standard User Usuário padrão Administrator Administrador Customized Personalizado dccV25::AccountsWorker Your host was removed from the domain server successfully Seu host foi removido do servidor de domínio com sucesso Your host joins the domain server successfully Seu host se conectou ao servidor de domínio com sucesso Your host failed to leave the domain server Seu host não conseguiu se desconectar do servidor de domínio Your host failed to join the domain server Seu host falhou ao ingressar no servidor de domínio AD domain settings Configurações de domínio do AD Password not match As senhas não coincidem dccV25::AvatarTypesModel Dimensional Dimensional Flat Plano dccV25::FaceAuthController Faceprint Biometria facial Face Rosto Use your face to unlock the device and make settings later Use seu rosto para desbloquear o dispositivo e configurar depois dccV25::FingerprintAuthController Fingerprint Impressão digital Place your finger Posicione seu dedo Place your finger firmly on the sensor until you're asked to lift it Posicione o dedo firmemente no sensor até ser solicitado a levantá-lo Lift your finger Levante o dedo Lift your finger and place it on the sensor again Levante o dedo e posicione-o novamente no sensor Lift your finger and do that again Levante o dedo e repita o processo Scan Suspended Escaneamento suspenso Scan the edges of your fingerprint Escaneie as bordas da sua impressão digital Place the edges of your fingerprint on the sensor Posicione as bordas da sua impressão digital no sensor Adjust the position to scan the edges of your fingerprint Ajuste a posição para escanear as bordas da sua impressão digital Fingerprint added Impressão digital adicionada dccV25::IrisAuthController Iris Íris Use your iris to unlock the device and make settings later Use sua íris para desbloquear o dispositivo e configurar depois dccV25::KeyboardController This shortcut conflicts with [%1] Este atalho entra em conflito com [%1] dccV25::PwqualityManager Password cannot be empty A senha não pode ficar vazia Password must have at least %1 characters A senha deve ter pelo menos %1 caracteres Password must be no more than %1 characters A senha não deve ter mais que %1 caracteres Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A senha pode conter apenas letras (maiúsculas e minúsculas), números ou símbolos especiais (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Não mais que %1 caracteres palíndromos, por favor No more than %1 monotonic characters please Não mais que %1 caracteres monótonos, por favor No more than %1 repeating characters please Não mais que %1 caracteres repetidos, por favor Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) A senha deve conter letras maiúsculas, letras minúsculas, números e símbolos (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters A senha não deve conter mais de 4 caracteres palíndromos Do not use common words and combinations as password Não use palavras e combinações comuns como senha Create a strong password please Crie uma senha forte, por favor It does not meet password rules Não atende às regras de segurança de senha At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. Inclua pelo menos %1 tipos entre letras minúsculas, letras maiúsculas, números e símbolos e a senha não pode ser igual ao nome de usuário dccV25::ShortcutModel System Sistema Window Janela Workspace Espaço de trabalho AssistiveTools Ferramentas Assistivas Custom Personalizado None Nenhum ================================================ FILE: translations/dde-control-center_qu.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_ro.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Conectat Not connected Neconectat BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Amprenta1 Fingerprint2 Amprenta2 Fingerprint3 Amprenta3 Fingerprint4 Amprenta4 Fingerprint5 Amprenta Fingerprint6 Amprenta6 Fingerprint7 Amprenta7 Fingerprint8 Amprenta8 Fingerprint9 Amprenta9 Fingerprint10 Amprenta10 Scan failed Scanare eșuată The fingerprint already exists Amprenta există deja Please scan other fingers Vă rugăm scanați alte degete Unknown error Eroare necunoscută Scan suspended Scanare suspendată Cannot recognize Nu se poate recunoaște Moved too fast Ați mișcat prea repede Finger moved too fast, please do not lift until prompted Degetul s-a mișcat prea repede, nu ridicați degetul până nu vi se solicită Unclear fingerprint Amprentă neclară Clean your finger or adjust the finger position, and try again Curățați degetul sau reglați poziția degetului și încercați din nou Already scanned Scanat deja Adjust the finger position to scan your fingerprint fully Reglați poziția degetului pentru a vă scana complet amprenta Finger moved too fast. Please do not lift until prompted Degetul se mișcă prea repede. Vă rugăm să nu ridicați până când vi se solicită Lift your finger and place it on the sensor again Ridicați degetul și plasați-l din nou pe senzor Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Anulează Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Autentificare necesară pentru scimbare server NTP Authentication is required to set the system timezone Autentificare necesară pentru setare fus orar sistem DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Afişaj Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Suprimarea automată a zgomotului Input Volume Volum intrare Input Level Nivel introducere Input No input device for sound found Input Device Dispozitiv de intrare Mouse Mouse and Touchpad Mouse şi panou tactil Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personalizare PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Personalizare PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Parolă goală interzis Password must have at least %1 characters Parola trebuie să aibă cel puțin %1 caractere Password must be no more than %1 characters Parola nu trebuie să conțină mai mult de %1 caractere Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Parola nu trebuie să conțină mai mult de 4 caractere palindrome Do not use common words and combinations as password Nu utilizați cuvinte și combinații obișnuite ca parolă Create a strong password please It does not meet password rules Nu respectă regulile de parolă QObject Control Center Centru Control Activated Activat View Aspect To be activated Pentru a fi activat Activate Activați Expired Expirat In trial period In perioadă de probă Trial expired Perioadă de probă expirată dde-control-center Touch Screen Settings Setări Ecran Tactil The settings of touch screen changed Setările ecranului tactil au fost schimbate This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Sunet Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Efecte sonore SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Pornire Shut down Închidere Log out Ieșire Wake up Trezire Volume +/- Volum +/- Notification Notificare Low battery Baterie descărcată Send icon in Launcher to Desktop Trimite pictograma din Lansator pe desktop Empty Trash Golire Coşul de Gunoi Plug in Conecteaza Plug out Deconecteaza Removable device connected Dispozitiv detașabil conectat Removable device removed Dispozitiv detașabil deconectat Error Eroare SpeakerPage Mode Mod Output Volume Volum ieşire Volume Boost Boost Volum If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Stânga Right Dreapta Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Dispozitiv de ieșire SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Înversați Save Salvare TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_ru.ts ================================================ AccountSettings edit редактировать Add new user Добавить нового пользователя Set fullname Напишите полное имя Login settings Настройки входа Login without password Входить в систему без ввода пароля Delete current account Удалить текущую учетную запись Group setting Настройки групп Account groups Группы учетной записи done готово Group name Имя группы Add group Добавить группу Auto login Автоматический вход Account Information Информация об аккаунте Account name, account fullname, account type Имя и полное имя аккаунта, тип аккаунта Account name Имя аккаунта Account fullname Полное имя аккаунта Account type Тип аккаунта The full name is too long Полное имя слишком длинное Group names should be no more than 32 characters Название группы должно быть не более 32 символов Group names cannot only have numbers Название группы не может состоять только из цифр Use letters,numbers,underscores and dashes only, and must start with a letter Используйте только буквы, цифры, подчеркивания и тире, и оно должно начинаться с буквы The group name has been used Название группы уже используется quick login, Auto login, login without password Быстрый и автоматический вход, вход без пароля Undo Отмена Redo Далее Cut Вырезать Copy Копировать Paste Вставить Select All Выбрать все Quick login Быстрый вход Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face Сканировать лицо I have read and agree to the Я прочитал и согласен с Disclaimer Отказ от ответственности Next Далее Face enrolled Лицо отсканировано Failed to enroll your face Не удалось отсканировать ваше лицо Done Готово Cancel Отмена Retry Enroll Повторить сканирование Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. Распознавание лиц не поддерживает определение живости, и метод верификации может быть рискованным. Чтобы гарантировать успешный вход: 1. Держите черты лица четко видимыми и не закрывайте их (шляпы, солнцезащитные очки, маски и т. д.). 2. Обеспечьте достаточное освещение и избегайте прямого солнечного света. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Отмена Done Готово Enroll Finger Зарегистрировать палец Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Поместите палец для ввода в сенсор отпечатка пальца и переместите его снизу вверх. После выполнения действия поднимите палец. I have read and agree to the Я прочитал и согласен с Disclaimer Отказ от ответственности Next Далее Retry Enroll Повторить регистрацию "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. «Биометрическая аутентификация» - это функция аутентификации личности пользователя, предоставляемая компанией UnionTech Software Technology Co., Ltd. С помощью «биометрической аутентификации» собранные биометрические данные сравниваются с данными, хранящимися в устройстве, и личность пользователя проверяется на основе результатов сравнения. Обратите внимание, что UnionTech Software Technology Co., Ltd. не будет собирать или получать доступ к вашей биометрической информации, которая будет храниться на вашем локальном устройстве. Пожалуйста, включайте биометрическую аутентификацию только на своем личном устройстве и используйте свою собственную биометрическую информацию для соответствующих операций, а также своевременно отключайте или удаляйте чужую биометрическую информацию на этом устройстве, в противном случае вы будете нести риск, вытекающий из этого. Компания UnionTech Software Technology Co., Ltd. стремится исследовать и улучшать безопасность, точность и стабильность биометрической аутентификации. Тем не менее, из-за экологических, технических, аппаратных и других факторов и контроля рисков нет гарантии, что вы временно пройдете биометрическую аутентификацию. Поэтому, пожалуйста, не воспринимайте биометрическую аутентификацию как единственный способ входа в UOS. Если у вас возникли вопросы или предложения по использованию биометрической аутентификации, вы можете оставить отзыв через раздел «Сервис и поддержка» в UOS. AddIrisDialog Enroll Iris Сканирование радужной оболочки глаза I have read and agree to the Я прочитал и согласен с Disclaimer Отказ от ответственности Next Далее Done Выполнено Cancel Отмена Retry Enroll Повторить сканирование Iris enrolled Радужная оболочка глаза отсканирована Failed to enroll your iris Не удалось отсканировать радужную оболочку глаза "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. «Биометрическая аутентификация» - это функция аутентификации личности пользователя, предоставляемая компанией UnionTech Software Technology Co., Ltd. С помощью «биометрической аутентификации» собранные биометрические данные сравниваются с данными, хранящимися в устройстве, и личность пользователя проверяется на основе результатов сравнения. Обратите внимание, что UnionTech Software Technology Co., Ltd. не будет собирать или получать доступ к вашей биометрической информации, которая будет храниться на вашем локальном устройстве. Пожалуйста, включайте биометрическую аутентификацию только на своем личном устройстве и используйте свою собственную биометрическую информацию для соответствующих операций, а также своевременно отключайте или удаляйте чужую биометрическую информацию на этом устройстве, в противном случае вы будете нести риск, вытекающий из этого. Компания UnionTech Software Technology Co., Ltd. стремится исследовать и улучшать безопасность, точность и стабильность биометрической аутентификации. Тем не менее, из-за экологических, технических, аппаратных и других факторов и контроля рисков нет гарантии, что вы временно пройдете биометрическую аутентификацию. Поэтому, пожалуйста, не воспринимайте биометрическую аутентификацию как единственный способ входа в UOS. Если у вас возникли вопросы или предложения по использованию биометрической аутентификации, вы можете оставить отзыв через раздел «Сервис и поддержка» в UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Пожалуйста, смотрите на устройство и убедитесь, что оба глаза находятся в области сканирования Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Автоматический вход можно включить только для одного аккаунта, пожалуйста, сначала отключите его для аккаунта "%1" Ok Ок AvatarSettingsDialog Images Изображения Human Человек Animal Животное Scenery Пейзаж Illustration Иллюстрация Emoji Эмодзи custom персонализированное Cartoon style Мультипликационный стиль Dimensional style Космический стиль Flat style Плоский стиль Cancel Отмена Save Сохранить BatteryPage Screen and Suspend Экран и приостановка Turn off the monitor after Выключить экран через Lock screen after Закрыть экран через Computer suspends after Компьютер будет приостановлен через When the lid is closed При закрытии крышки When the power button is pressed При нажатии кнопки питания Low Battery Низкий заряд Low battery notification Уведомление о низком заряде Auto suspend Автоматическое приостановление Auto Hibernate Автогибернация Low battery threshold Порог низкого заряда Battery Management Управление батареей Display remaining using and charging time Отображение оставшегося времени использования и зарядки Maximum capacity Максимальная емкость Low battery level Уровень низкого заряда Disable Отключить BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth выключен, и имя отображается как "%1" Bluetooth is turned on, and the name is displayed as "%1" Bluetooth включен, и имя отображается как "%1" BlueToothDeviceListView Disconnect Отключить Connect Подключить Send Files Отправить файлы Rename Переименовать Remove Device Удалить устройство Select file Выбрать файл BluetoothCtl Edit Редактировать Allow other Bluetooth devices to find this device Разрешить другим устройствам Bluetooth найти это устройство To use the Bluetooth function, please turn off Чтобы использовать функцию Bluetooth, пожалуйста, выключите Airplane Mode Режим полета Bluetooth name cannot exceed 64 characters Имя устройства не может быть более 64 символов BluetoothDeviceModel Connected Подключено Not connected Не подключено BootPage Startup Settings Настройки запуска You can click the menu to change the default startup items, or drag the image to the window to change the background image. Вы можете кликнуть на меню для изменения стандартных элементов запуска, или перетащить изображение в окно для изменения фона grub start delay Задержка загрузки GRUB theme тема After turning on the theme, you can see the theme background when you turn on the computer После включения темы вы увидите фон темы при запуске компьютера Boot menu verification Проверка меню загрузки After opening, entering the menu editing requires a password. После открытия редактирование меню требует пароль. Change Password Сменить пароль Change boot menu verification password Изменить пароль проверки меню загрузки Set the boot menu authentication password Установить пароль для аутентификации в меню загрузки User Name : Имя пользователя : root root New Password : Новый пароль : Required Необходимо Password cannot be empty Пароль не может быть пустым Passwords do not match Пароли не совпадают Repeat password: Повторите пароль: Cancel Отмена Sure Уверен Start animation Старт анимации Adjust the size of the logo animation on the system startup interface Измените размер анимации логотипа на интерфейсе запуска системы. Camera Allow below apps to access your camera: Разрешить нижеуказанным приложениям доступ к вашей камере: CharaMangerModel Fingerprint1 Отпечаток пальца1 Fingerprint2 Отпечаток пальца2 Fingerprint3 Отпечаток пальца3 Fingerprint4 Отпечаток пальца4 Fingerprint5 Отпечаток пальца5 Fingerprint6 Отпечаток пальца6 Fingerprint7 Отпечаток пальца7 Fingerprint8 Отпечаток пальца8 Fingerprint9 Отпечаток пальца9 Fingerprint10 Отпечаток пальца10 Scan failed Сканирование не удалось The fingerprint already exists Отпечаток пальца уже существует Please scan other fingers Пожалуйста, сканируйте другие пальцы Unknown error Неизвестная ошибка Scan suspended Сканирование приостановлено Cannot recognize Не получилось распознать Moved too fast Слишком быстро перемещен Finger moved too fast, please do not lift until prompted Палец двигался слишком быстро, не поднимайте его до тех пор, пока не будет дано соответствующее указание Unclear fingerprint Неясный отпечаток пальца Clean your finger or adjust the finger position, and try again Очистите палец или перенесите его в другое положение, и попробуйте снова Already scanned Отпечаток пальца уже сканирован Adjust the finger position to scan your fingerprint fully Переместите палец для полного сканирования отпечатка пальца Finger moved too fast. Please do not lift until prompted Палец двигался слишком быстро. Не поднимайте его до тех пор, пока не будет дано соответствующее указание Lift your finger and place it on the sensor again Поднимите палец и снова положите его на сенсор Position your face inside the frame Положите лицо внутри кадра Face enrolled Лицо зарегистрировано Position a human face please Пожалуйста, положите человеческое лицо Keep away from the camera Отойдите от камеры Get closer to the camera Приблизьтесь к камере Do not position multiple faces inside the frame Не располагайте несколько лиц внутри кадра Make sure the camera lens is clean Убедитесь, что объектив камеры чист Do not enroll in dark, bright or backlit environments Не регистрируйтесь в темных, ярких или освещенных сзади условиях Keep your face uncovered Сохраняйте лицо непокрытым Scan timed out Время сканирования истекло Cancel Отмена Camera occupied! Камера занята! ColorAndIcons Accent Color Цвет акцента Icon Settings Настройки иконок Icon Theme Тема иконок Customize your theme icon Настройте иконку темы Cursor Theme Тема курсора Customize your theme cursor Настройте курсор темы ComfirmDeleteDialog Are you sure you want to delete this account? Вы действительно хотите удалить этот аккаунт? Delete account directory Удалить папку аккаунта Cancel Отмена Delete Удалить ComfirmSafePage Go to settings Перейти в настройки Cancel Отмена Common Common Общее Repeat delay Задержка повтора Short Короткий Long Длинный Repeat rate Частота повтора Slow Медленный Fast Быстрый Numeric Keypad Набор чисел test here проверить здесь Caps lock prompt Предупреждение о Caps Lock Double Click Speed Скорость двойного клика Double Click Test Тест двойного клика Left Hand Mode Режим левой руки Enable Keyboard Включить клавиатуру General Общие Scrolling Speed Скорость прокрутки CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Большой размер Small size Маленький размер Failed to get root access Не удалось получить root-доступ Please sign in to your Union ID first Пожалуйста, сначала войдите в свой аккаунт Union ID Cannot read your PC information Не удалось прочитать информацию о вашем ПК No network connection Нет подключения к сети Certificate loading failed, unable to get root access Ошибка загрузки сертификата, не удалось получить root-доступ Signature verification failed, unable to get root access Ошибка проверки подписи, не удалось получить root-доступ Agree and Join User Experience Program Дать согласие и присоединиться к программе взаимодействия с пользователем The Disclaimer of Developer Mode Уведомление о режиме разработчика Agree and Request Root Access Дать согласие и запросить root-доступ Start setting the new boot animation, please wait for a minute Начинаем настройку новой анимации загрузки, пожалуйста, подождите минуту Setting new boot animation finished Настройка новой анимации загрузки завершена The settings will be applied after rebooting the system Настройки будут применены после перезагрузки системы Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Пароль должен содержать цифры и буквы Password must be between 8 and 64 characters Пароль должен содержать от 8 до 64 символов CreateAccountDialog Create a new account Создать новый аккаунт Account type Тип аккаунта UserName Имя пользователя Required Необходимо FullName Полное имя Optional Необязательно Cancel Отмена Create account Создать аккаунт Username cannot exceed 32 characters Имя пользователя не должно быть более 32 символов Username can only contain letters, numbers, - and _ Имя пользователя может содержать только буквы, цифры, - и _ Full name cannot exceed 32 characters Полное имя не должно быть более 32 символов Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Вы еще не загрузили аватар. Нажмите или перетащите изображение для загрузки. The uploaded file type is incorrect, please upload it again Тип загруженного файла некорректен, пожалуйста, загрузите другой файл DCC_NAMESPACE::SystemInfoModel available доступно DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Дать согласие и присоединиться к программе взаимодействия с пользователем <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Настройка даты и времени Date Дата Year Год Month Месяц Day День Time Время Cancel Отмена Confirm Подтвердить Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Завтра Yesterday Вчера Today Сегодня %1 hours earlier than local На %1 ч. раньше местного %1 hours later than local На %1 ч. позже местного Space Пробел Week Неделя First day of week Первый день недели Short date Короткая дата Long date Длинная дата Short time Короткое время Long time Длинное время Currency symbol Символ валюты Positive currency Положительная валюта Negative currency Отрицательная валюта Decimal symbol Символ десятичной точки Digit grouping symbol Символ группировки цифр Digit grouping Группировка цифр Page size Размер страницы Example Пример DatetimeWorker Authentication is required to change NTP server Для изменения сервера NTP требуется аутентификация Authentication is required to set the system timezone Для установки часового пояса системы требуется аутентификация DccColorDialog Cancel Отмена Save Сохранить DccWindow Control Center provides the options for system settings. Центр управления предоставляет опции для настроек системы. DeepinIDAccountSecurity Bind WeChat Привязать WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Привязав WeChat, вы сможете безопасно и быстро войти в свой аккаунт %1 и локальные аккаунты. Unlinked Разъединено Unbinding Разъединение Link Привязать Are you sure you want to unbind WeChat? Вы уверены, что хотите разъединить WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. После разъединения WeChat вы не сможете использовать WeChat для сканирования QR-кода входа в аккаунт %1 или локальный аккаунт. Let me think it over Позвольте подумать Local Account Binding Привязка локального аккаунта After binding your local account, you can use the following functions: После привязки локального аккаунта вы сможете использовать следующие функции: WeChat Scan Code Login System Система входа в аккаунт с помощью сканирования кода WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Используйте WeChat, привязанный к вашему аккаунту %1, для сканирования кода входа в локальный аккаунт. Reset password via %1 ID Сбросить пароль с помощью аккаунта %1 Reset your local password via %1 ID in case you forget it. Сбросьте локальный пароль с помощью аккаунта %1, если вы его забыли. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Чтобы использовать вышеуказанные функции, пожалуйста, перейдите в Центр управления - Аккаунты и включите соответствующие опции. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Синхронизация облака Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Управляйте своим идентификатором %1 и синхронизируйте личные данные между устройствами. Войдите в свой идентификатор %1, чтобы получить уникальные функции и возможности Браузера, Магазина приложений и т.д. Sign In to %1 ID Войти в свой идентификатор %1 DeepinIDSyncService Auto Sync Авто-cинхронизация Securely store system settings and personal data in the cloud, and keep them in sync across devices Безопасно храните параметры системы и личные данные в облаке и синхронизируйте их между устройствами System Settings Настройки системы Last sync time: %1 Последнее время синхронизации: %1 Clear cloud data Очистить данные облака Are you sure you want to clear your system settings and personal data saved in the cloud? Вы уверены, что хотите очистить параметры системы и личные данные, сохраненные в облаке? Once the data is cleared, it cannot be recovered! После очистки данные не могут быть восстановлены! Cancel Отмена Clear Очистить DeepinIDUserInfo Synchronization Service Синхронизация сервиса Account and Security Счет и безопасность Sign out Выйти Go to web settings Перейти в настройки веб-сайта The nickname must be 1~32 characters long Никнейм должен содержать от 1 до 32 символов. DeepinWorker encrypt password failed Не удалось зашифровать пароль Wrong password, %1 chances left Неверный пароль, осталось попыток: %1 The login error has reached the limit today. You can reset the password and try again. Ошибки входа достигли лимита сегодня. Вы можете сбросить пароль и попробовать снова. Operation Successful Операция выполнена успешно The nickname can be modified only once a day Никнейм можно изменить только один раз в сутки Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Китайский континент Other regions Другие регионы The feature is not available at present, please activate your system first Функция недоступна в настоящее время, пожалуйста, сначала активируйте систему Subject to your local laws and regulations, it is currently unavailable in your region. Согласно местному законодательству и регламенту, эта функция недоступна в вашем регионе. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' Пожалуйста, выберите программу по умолчанию для открытия '%1' add Добавить Open Desktop file Открыть файл рабочего стола Apps (*.desktop) Программы (*.desktop) All files (*) Все файлы (*) DevelopModePage Root Access Доступ с root правами Request Root Access Запросить root-доступ After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. После входа в режим разработчика вы сможете получить права root, но это может также повредить целостность системы, поэтому используйте это с осторожностью. Allowed Разрешено Enter Войти Online Онлайн Login UOS ID Войти в UOS ID Offline Офлайн Import Certificate Импортировать сертификат Select file Выбрать файл Your UOS ID has been logged in, click to enter developer mode Вы вошли в UOS ID, нажмите, чтобы перейти в режим разработчика Please sign in to your UOS ID first and continue Пожалуйста, сначала войдите в свой UOS ID, чтобы продолжить 1.Export PC Info 1. Экспорт информации о ПК Export Экспорт 3.Import Certificate 3. Импортировать сертификат Development and debugging options Опции разработки и отладки System logging level Уровень логирования системы Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Изменение параметров приводит к более подробному логированию, что может ухудшить производительность системы и/или увеличить использование места на диске. Off Выключено Debug Отладка Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Изменение опции может занять до минуты. После получения уведомления о успешной настройке перезагрузите устройство для применения изменений. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. Для установки и запуска неподписанных приложений перейдите в <a href="Security Center">Центр безопасности</a> для изменения настроек. To install and run unsigned apps, please go to Security Center to change the settings. Чтобы установить и запустить неподписанные приложения, перейдите в Центр безопасности и измените настройки. You have entered developer mode Вы вошли в режим разработчика OK OK 2.please go to %1 to Download offline certificate. 2. Пожалуйста, перейдите на %1, чтобы скачать оффлайн сертификат. The feature is not available at present, please activate your system first. В настоящее время функция недоступна, пожалуйста, сначала активируйте вашу систему Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Отказ от ответственности Cancel Отмена Agree Согласен Display Display Дисплей Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Разрешить ниже перечисленным приложениям доступ к этим файлам и папкам: Documents Документы Desktop Рабочий стол Pictures Фотографии Videos Видео Music Музыка Downloads Загрузки folder папка FontSizePage Size Размер Standard Font Шрифт стандартного размера Monospaced Font Шрифт фиксированной ширины GeneralPage Power Plans Программы питания Power Saving Settings Настройки энергосбережения Auto power saving on low battery Автоматическое включение режима энергосбережения при низком заряде батареи Low battery threshold Порог низкого заряда батареи Auto power saving on battery Автоматическое включение режима энергосбережения при работе от батареи Wakeup Settings Настройки пробуждения Password is required to wake up the computer Требовать пароль после пробуждения компьютера Password is required to wake up the monitor Требовать пароль после включения экрана Shutdown Settings Настройки выключения Scheduled Shutdown Запланированное выключение Time Время Repeat Повторять Once Однократно Every day Каждый день Working days Рабочие дни Custom Time Во время, которое вы выберете Decrease screen brightness on power saver Уменьшить яркость экрана в энергосберегающем режиме GestureModel Three-finger up Тремя пальцами вверх Three-finger down Тремя пальцами вниз Three-finger left Тремя пальцами влево Three-finger right Тремя пальцами вправо Three-finger tap Нажатие тремя пальцами Four-finger up Четырьмя пальцами вверх Four-finger down Четырьмя пальцами вниз Four-finger left Четырьмя пальцами влево Four-finger right Четырьмя пальцами вправо Four-finger tap Нажатие четырьмя пальцами HomePage , , ... ... InterfaceEffectListview Optimal Performance Оптимальная производительность Balance Баланс Best Visuals Лучшие визуальные эффекты Disable all interface and window effects for efficient system performance. Отключите все эффекты интерфейса и окон для повышения производительности системы. Limit some window effects for excellent visuals while maintaining smooth system performance. Ограничение некоторых оконных эффектов, чтобы добиться отличного качества изображения и при этом сохранить плавность работы системы. Enable all interface and window effects for the best visual experience. Включите все эффекты интерфейса и окон для лучшего визуального опыта. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language Язык done Готово edit Редактировать Other languages Другие языки add Добавить Region Регион Area Регион Operating system and applications may provide you with local content based on your country and region Система и приложения могут предоставить вам локальный контент на основе вашего страны и региона Operating system and applications may set date and time formats based on regional formats Система и приложения могут устанавливать форматы дат и времени на основе региональных форматов Regional format Формат региона LangsChooserDialog Add language Добавить язык Search Поиск Cancel Отмена Add Добавить LoginMethod Login method Метод входа Password, wechat, biometric authentication, security key Пароль, WeChat, биометрическая аутентификация, ключ безопасности Password Пароль Modify password Изменить пароль Validity days Срок действия дней Always Всегда Reset password Сбросить пароль LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Сообщество Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Автоматическое шумоподавление Input Volume Уровень входного звука Input Level Уровень входа Input Вход No input device for sound found Не найдено устройств для звука Input Device Устройство ввода Mouse Mouse and Touchpad Мышь и тачпад Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices Мои устройства NativeInfoPage UOS UOS Computer name Имя компьютера It cannot start or end with dashes Нельзя начинать или заканчивать имя компьютера тире OS Name Название ОС Version Версия Edition Редакция Type Тип bit бит Authorization Авторизация System installation time Время установки системы Kernel Ядро Graphics Platform Платформа графики Processor Процессор Memory Оперативная память 1~63 characters please Должно быть от 1 до 63 символов Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Другие устройства Show Bluetooth devices without names Показывать Bluetooth-устройства без названий PasswordLayout Current password Текущий пароль Required Необходимо Weak Слабый Medium Средний Strong Сильный Repeat Password Повторите пароль Password hint Подсказка к паролю Optional Необязательно Password cannot be empty Пароль не может быть пустым Passwords do not match Пароли не совпадают The hint is visible to all users. Do not include the password here. Подсказка видна всем пользователям. Не включайте тут пароль. New password Новый пароль New password should differ from the current one Новый пароль должен отличаться от текущего The password cannot be the same as the username. PasswordModifyDialog Modify password Изменить пароль Reset password Сбросить пароль Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Длина пароля должна быть не менее 8 символов, а пароль должен содержать комбинацию из минимум 3 из следующего: заглавные буквы, строчные буквы, цифры и символы. Такой пароль более безопасен. Resetting the password will clear the data stored in the keyring. Сброс пароля очистит данные, сохраненные в ключевом ящике. Cancel Отмена Personalization Personalization Персональные настройки PersonalizationInterface Light Светлая Auto Авто Dark Темная Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Пользовательская PluginArea Plugin Area Область плагинов Select which icons appear in the Dock Выберите иконки, которые будут отображаться в доке Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Выключить Suspend Приостановить Hibernate Спящий режим Turn off the monitor Выключить монитор Show the shutdown Interface Показать интерфейс выключения Do nothing Не делать ничего PowerPage Screen and Suspend Экран и приостановка Turn off the monitor after Выключить экран через Lock screen after Заблокировать экран через Computer suspends after Компьютер будет приостановлен через When the lid is closed Когда закрыта крышка When the power button is pressed Когда нажата кнопка питания PowerPlansListview High Performance Высокая производительность Balance Performance Баланс производительности Aggressively adjust CPU operating frequency based on CPU load condition Агрессивно регулировать частоту работы процессора в зависимости от нагрузки Balanced Баланс Power Saver Экономия энергии Prioritize performance, which will significantly increase power consumption and heat generation Приоритет производительности, что значительно увеличит потребление энергии и генерацию тепла Balancing performance and battery life, automatically adjusted according to usage Баланс производительности и заряда батареи, автоматически регулируемый в зависимости от использования Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Приоритет заряда батареи, при котором система компрометирует некоторые параметры производительности для снижения энергопотребления PowerWorker Minutes Минуты Hour Час Never Никогда Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Политика конфиденциальности Copy Link Address Скопировать ссылку PwqualityManager Password cannot be empty Пароль не может быть пустым Password must have at least %1 characters Пароль должен содержать не менее %1 символов Password must be no more than %1 characters Пароль не должен превышать %1 символов Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Пароль может содержать только английские буквы (включая регистр), цифры или специальные символы (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please Пожалуйста, не более %1 полиндромных символов No more than %1 monotonic characters please Пожалуйста, не более %1 монотонных символов No more than %1 repeating characters please Пожалуйста, не более %1 повторяющихся символов Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Пароль должен содержать заглавные буквы, строчные буквы, цифры и символы (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Пароль не должен содержать более 4 палиндромных символов Do not use common words and combinations as password Не используйте общие слова и комбинации в пароле Create a strong password please Создайте сильный пароль, пожалуйста It does not meet password rules Пароль не соответствует правилам QObject Control Center Центр управления Activated Активировано View Просмотр To be activated Для активации Activate Активировать Expired Истекло In trial period На пробном периоде Trial expired Пробный период истек dde-control-center dde-control-center Touch Screen Settings Настройки тачскрина The settings of touch screen changed Настройки тачскрина изменены This system wallpaper is locked. Please contact your admin. Эти системные обои заблокированы. Пожалуйста, свяжитесь с администратором. %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search Поиск Default formats По умолчанию форматы First day of week Первый день недели Short date Короткий формат даты Long date Длинный формат даты Short time Короткий формат времени Long time Длинный формат времени Currency symbol Символ валюты Digit Число Paper size Cancel Отмена Save Сохранить Regional format RegionsChooserWindow Search Поиск RegisterDialog Set a Password Установить пароль 8-64 characters 8-64 символа Repeat the password Повторите пароль Cancel Отмена Confirm Подтвердить Passwords don't match Пароли не совпадают ScheduledShutdownDialog Customize repetition time Cancel Отмена Save Сохранить ScreenSaverPage Screensaver preview предпросмотр Personalized screensaver setting настройка idle time Время ожидания 1 minute 1 минута 5 minute 5 минут 10 minute 10 минут 15 minute 15 минут 30 minute 30 минут 1 hour 1 час never никогда Password required for recovery Для восстановления необходим пароль Picture slideshow screensaver System screensaver SearchableListViewPopup Search Поиск No search results Ничего не найдено ShortcutSettingDialog Add custom shortcut Добавить пользовательскую комбинацию клавиш Name: Имя: Required Необходимо Command: Команда: Shortcut Комбинация клавиш None Нет Cancel Отмена Add Добавить The shortcut name is already in use. Choose a different name. Название комбинации уже используется. Выберете другое. Change custom shortcut please enter a shortcut key Save Сохранить click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts Комбинации клавиш System shortcut, custom shortcut Системная горячая клавиша, пользовательская горячая клавиша Search shortcuts Поиск комбинаций клавиш done Готово edit редактировать Click Нажмите Cancel Отмена or или Replace Заменить Restore default Восстановить по умолчанию Add custom shortcut Добавить пользовательскую комбинацию клавиш please enter a new shortcut key Sound Sound Звук Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Выходные устройства Select whether to enable the devices Выберите, включать ли устройства Input Devices Входные устройства SoundEffectsPage Sound Effects Звуковые эффекты SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Загрузка Shut down Выключение Log out Выйти Wake up Подключение Volume +/- Громкость +/− Notification Уведомление Low battery Низкий уровень заряда Send icon in Launcher to Desktop Отправить значок в пусковом механизме на рабочий стол Empty Trash Очистить корзину Plug in Вставить Plug out Извлечь Removable device connected Съемное устройство подключено Removable device removed Съемное устройство отключено Error Ошибка SpeakerPage Mode Режим Output Volume Громкость выхода Volume Boost Увеличение громкости If the volume is louder than 100%, it may distort audio and be harmful to output devices Если громкость превышает 100%, это может искажать звук и навредить выходным устройствам Left Левый Right Правый Output Выход No output device for sound found Не найдено устройство вывода звука Left Right Balance Баланс левого и правого каналов Merge left and right channels into a single channel Соединить левый и правый каналы в один канал Whether the audio will be automatically paused when the current audio device is unplugged Автоматически приостановить аудио, когда текущее устройство аудио будет отключено Mono Audio Моноаудио Auto Pause Автопауза Output Device Выходное устройство SyncInfoListModel Sound Звук Power Сила Mouse Мышь Update Обновление Screensaver Экранная сохранность System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers Больше обоев TimeAndDate Auto sync time Автоматический синхронизаци времени Ntp server Ntp-сервер System date and time Дата и время системы Customize Настроить Settings Настройки Server address Адрес сервера Required Необходимо The ntp server address cannot be empty Адрес ntp-сервера не может быть пустым Use 24-hour format Использовать формат 24-часового времени system time zone Часовой пояс системы Timezone list Список часовых поясов Add Добавить TimeRange from от to до TimeoutDialog Save the display settings? Сохранить настройки экрана? Settings will be reverted in %1s. Настройки будут восстановлены через %1с. Revert Восстановить Save Сохранить TimezoneDialog Add time zone Добавить временной пояс Determine the time zone based on the current location Определить временной пояс на основе текущего местоположения Time zone: Временной пояс: Nearest City: Ближайший город: Cancel Отмена Save Сохранить TouchScreen TouchScreen Тачскрин Set up here when connecting the touch screen Настройте здесь при подключении тачскрина Touchpad Basic Settings Основные настройки Touchpad Тачпад Pointer Speed Скорость курсора Slow Медленно Fast Быстро Disable touchpad during input Отключить тачпад во время ввода Tap to Click Нажатие для клика Natural Scrolling Естественная прокрутка Three-finger gestures Двухпальцевые жесты Four-finger gestures Трехпальцевые жесты Gestures Жесты Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Присоединиться к программе взаимодействия с пользователем Copy Link Address Скопировать ссылку VerifyDialog Security Verification Проверка безопасности The action is sensitive, please enter the login password first Действие чувствительно, пожалуйста, сначала введите пароль для входа 8-64 characters 8-64 символа Forgot Password? Забыли пароль? Cancel Отмена Confirm Подтвердить Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper обои My pictures Мои фотографии System Wallpaper Системные обои Solid color wallpaper Обои с однотонным цветом Customizable wallpapers Настраиваемые обои fill style стиль заполнения Automatic wallpaper change Автоматический смена обоев never никогда 30 second 30 секунд 1 minute 1 минута 5 minute 5 минут 10 minute 10 минут 15 minute 15 минут 30 minute 30 минут login вход wake up проснуться Live Wallpaper Живая обои 1 hour 1 час System Wallpapers WallpaperSelectView unfold развернуть Set lock screen Установить экран блокировки Set desktop Установить рабочий стол show all - %1 items Add Picture WindowEffectPage Interface and Effects Интерфейс и эффекты Window Settings Настройки окна Window rounded corners Округлые углы окна None Нет Small Маленький Large Большой Enable transparent effects when moving windows Включить прозрачные эффекты при перемещении окон Window Minimize Effect Эффект сворачивания окна Scale Масштабирование Magic Lamp Магическая лампа Opacity Прозрачность Low Низкий High Высокий Scroll Bars Полосы прокрутки Show on scrolling Показывать при прокрутке Keep shown Сохранить отображение Compact Display Компактный экран If enabled, more content is displayed in the window. Если включено, больше контента отображается в окне. Title Bar Height Высота заголовка окна Only suitable for application window title bars drawn by the window manager. Только для заголовков окон приложений, рисуемых менеджером окон. Extremely small Очень маленький Medium describe size of window rounded corners Средний Medium describe height of window title bar Средний dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Традиционная китайская (Китайская Гонконг) Traditional Chinese (Chinese Taiwan) Традиционная китайская (Китайская Тайвань) Min Nan Chinese dcc::Locale::regionNames Taiwan China Тайвань Китай dccV25::AccountsController Username must be between 3 and 32 characters Имя пользователя должно содержать от 3 до 32 символов The first character must be a letter or number Первый символ должен быть буквой или цифрой Your username should not only have numbers Имя пользователя не должно состоять только из цифр The username has been used by other user accounts Имя пользователя уже используется другими учетными записями The full name is too long Полное имя слишком длинное The full name has been used by other user accounts Полное имя уже используется другой учетной записью Wrong password Неправильный пароль Standard User Стандартный пользователь Administrator Администратор Customized Настроенный dccV25::AccountsWorker Your host was removed from the domain server successfully Ваш хост успешно удален с доменного сервера Your host joins the domain server successfully Ваш хост успешно присоединился к доменному серверу Your host failed to leave the domain server Ваш хост не смог покинуть доменный сервер Your host failed to join the domain server Ваш хост не смог присоединиться к доменному серверу AD domain settings Настройки домена AD Password not match Пароли не совпадают dccV25::AvatarTypesModel Dimensional Двумерный Flat Плоский dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Отпечаток пальца Place your finger Разместите свой палец Place your finger firmly on the sensor until you're asked to lift it Lift your finger Поднимите палец Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Сканирование приостановлено Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added Отпечаток добавлен dccV25::IrisAuthController Iris Iris Use your iris to unlock the device and make settings later Используйте Iris для разблокировки устройства и последующих настроек dccV25::KeyboardController This shortcut conflicts with [%1] Эта комбинация клавиш конфликтует с [%1] dccV25::PwqualityManager Password cannot be empty Пароль не может быть пустым Password must have at least %1 characters Пароль должен содержать не менее %1 символов Password must be no more than %1 characters Пароль не должен содержать более %1 символов Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Пароль может содержать только английские буквы (в учитывается регистр), цифры или специальные символы (~`!@#$%^&*()-_+=|{}[]:"<>,.?/) No more than %1 palindrome characters please Пожалуйста, не более %1 палиндромных символов No more than %1 monotonic characters please Пожалуйста, не более %1 монотонных символов No more than %1 repeating characters please Пожалуйста, не более %1 повторяющихся символов Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Пароль должен содержать заглавные и строчные буквы, цифры и символы (~`!@#$%^&*()-_+=|{}[]:"<>,.?/) Password must not contain more than 4 palindrome characters Пароль не должен содержать более 4 палиндромных символов Do not use common words and combinations as password Не используйте распространенные слова и комбинации в качестве пароля Create a strong password please Пожалуйста, создайте сильный пароль It does not meet password rules Пароль не соответствует правилам At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Система Window Окно Workspace Рабочее пространство AssistiveTools Средства доступа Custom Пользовательский None Нет ================================================ FILE: translations/dde-control-center_ru_UA.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_sc.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_si.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected සම්බන්ධයි Not connected සම්බන්ධතා නොමැත BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed පරිලෝකනය අසාර්ථක විය The fingerprint already exists ඇඟිලි සලකුණ දැනටමත් පවතී Please scan other fingers කරුණාකර වෙනත් ඇඟිලි පරිලෝකනය කරන්න Unknown error Scan suspended Cannot recognize Moved too fast ඉතා වේගයෙන් චලනය විය Finger moved too fast, please do not lift until prompted ඇඟිල්ල වේගයෙන් චලනය විය, කරුණාකර විමසන තුරු ඔසවන්න එපා Unclear fingerprint අපැහැදිලි ඇඟිලි සලකුණකි Clean your finger or adjust the finger position, and try again ඔබේ ඇඟිල්ල පිරිසිදු කර හෝ ඇඟිල්ලේ පිහිටීම සකසා නැවත උත්සාහ කරන්න Already scanned දැනටමත් පරිලෝකනය කර ඇත Adjust the finger position to scan your fingerprint fully ඔබේ ඇඟිලි සලකුණ සම්පූර්ණයෙන් පරිලෝකනය කිරීමට ඇඟිලි ස්ථානය සකසන්න Finger moved too fast. Please do not lift until prompted ඇඟිල්ල වේගයෙන් චලනය විය, කරුණාකර විමසන තුරු ඔසවන්න එපා Lift your finger and place it on the sensor again ඔබේ ඇඟිල්ල ඔසවා නැවත සංවේදකය මත තබන්න Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel අවලංගු කරන්න Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server NTP සේවාදායකය/server වෙනස් කිරීම සඳහා සත්‍යාපනය අවශ්‍ය වේ Authentication is required to set the system timezone පද්ධතියේ වේලා කලාපය සකස් කිරීම සඳහා සත්‍යාපනය අවශ්‍ය වේ DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume ආදාන ශබ්ද පරිමාව Input Level ආදාන මට්ටම Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty මුරපදය හිස් විය නොහැක Password must have at least %1 characters Password must be no more than %1 characters මුරපදය අක්ෂර %1 ට නොඅඩු විය යුතුය Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center පාලන මධ්‍යස්ථානය Activated සක්‍රීයයි View දැක්ම To be activated සක්‍රීය කළ යුතුව ඇත Activate සක්‍රිය කරන්න Expired කල් ඉකුත් වී ඇත In trial period අත්හදා බැලීමේ කාල පරිච්ඡේදයේ පවතී Trial expired අත්හදා බැලීමේ කාල පරිච්ඡේදය අවසන් වී ඇත dde-control-center Touch Screen Settings ස්පර්ශ තිර සැකසුම් The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects ශබ්ද ප්‍රයෝග SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up ආරම්භ කරන්න Shut down වසා දමන්න Log out ඉවත් වන්න Wake up අවදි කරන්න Volume +/- ශබ්ද පරිමාව +/- Notification දැනුම්දීම් Low battery අඩු බැටරි ධාරිතාවයකි Send icon in Launcher to Desktop රඳවනයේ හි ඇති අයිනක ඩෙස්ක්ටොප් එක වෙත යවන්න Empty Trash අප ද්‍රව්‍ය හිස් කරන්න Plug in සම්බන්ධ කරන්න Plug out සම්බන්ධතාව ඉවත් කරන්න Removable device connected ඉවත් කළ හැකි උපාංගය සම්බන්ධයි Removable device removed ඉවත් කළ හැකි උපාංගය ඉවත් කරන ලදි Error දෝෂයකි SpeakerPage Mode ප්‍රකාරය Output Volume ප්‍රතිදාන ශබ්ද පරිමාව Volume Boost පරිමාව වැඩි කිරීම If the volume is louder than 100%, it may distort audio and be harmful to output devices Left වම Right දකුණ Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save සුරකින්න TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) සම්ප්‍රදායික චීන (චීන හොංකොං) Traditional Chinese (Chinese Taiwan) සම්ප්‍රදායික චීන (චීන තායිවානය) Min Nan Chinese dcc::Locale::regionNames Taiwan China තායිවානය චීනය dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] මෙම කෙටිමග [%1] සමඟ ගැටේ dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System පද්ධතිය Window කවුළුව Workspace වැඩකරන ස්ථානය AssistiveTools සහායක මෙවලම් Custom අභිරුචි None කිසිවක් නැත ================================================ FILE: translations/dde-control-center_sk.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Zrušiť Done Hotovo Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Pripojené Not connected Nepripojené BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Prst sa hýbal príliš rýchlo, nedvíhajte ho prosím, kým sa zobrazí výzva Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Zrušiť Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Na zmenu NTP servera je potrebné overenie Authentication is required to set the system timezone Na nastavenie časového pásma systému je potrebné overenie DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Zobraziť Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Vstupná hlasitosť Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Myš a Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Personalizácia PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Vlastný PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Heslo nemôže byť prázdne. Password must have at least %1 characters Heslo musí mať aspoň %1 znakov Password must be no more than %1 characters Heslo nesmie obsahovať viac ako %1 znakov Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Ovládacie centrum Activated Aktivované View Pohľad To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Zvuk Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Zvukové efekty SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Spustiť Shut down Vypnúť Log out Odhlásiť Wake up Prebudiť Volume +/- Hlasitosť +/- Notification Oznámenie Low battery Slabá batéria Send icon in Launcher to Desktop Odoslať ikonu z Launchra na pracovnú plochu Empty Trash Vysypať kôš Plug in Pripojiť Plug out Odpojiť Removable device connected Odpojiteľné zariadenie je pripojené Removable device removed Odpojiteľné zariadenie bolo odstránené Error Chyba SpeakerPage Mode Režim Output Volume Výstupná hlasitosť Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Vľavo Right Vpravo Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Vrátiť Save Uložiť TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Tradičná čínština (čínsky Hong Kong) Traditional Chinese (Chinese Taiwan) Tradičná čínština (čínsky Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan Čína dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Táto skratka je v konflikte s [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Systém Window Okno Workspace Pracovná plocha AssistiveTools Asistenčné nástroje Custom Vlastné None Žiadne ================================================ FILE: translations/dde-control-center_sl.ts ================================================ AccountSettings edit uredi Add new user Dodaj novo uporabniško ime Set fullname Nastavi celotno ime Login settings Nastavitve prijave Login without password Prijavi se brez gesla Delete current account Izbriši trenutno račun Group setting Nastavitve skupine Account groups Nastavitve skupin računov done Gotovo Group name Ime skupine Add group Dodaj skupino Auto login Samodejni prijavo Account Information Podatki o računu Account name, account fullname, account type Ime računa, celotno ime računa, vrsta računa Account name Ime računa Account fullname Celotno ime računa Account type Vrsta računa The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face Udeleži se očetka I have read and agree to the Sem prebral/a in se strinjam z Disclaimer Oznanitvama Next Naprej Face enrolled Očetek udeležen Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Kartunska štil Dimensional style Dimenzionalni stil Flat style Površinski stil Cancel Prekliči Save Shrani BatteryPage Screen and Suspend Začrtaj in preklici Turn off the monitor after Iskalniški zaslon izklopi po Lock screen after Začrtaj zaslon po Computer suspends after Računalnik prekliče po When the lid is closed Ko je zatvorišče zaprt When the power button is pressed Ko je pritisnjen gumb naštevila Low Battery Nizka nivoj Low battery notification Opozorilo nizkega nivoja Auto suspend Samodejno preklici Auto Hibernate Samodejno hibernacija Low battery threshold Prenizka nivoj omejitev Battery Management Upravljanje baterijo Display remaining using and charging time Pokaži preostal včas in čas naložbe Maximum capacity Maksimalna kapaciteta Low battery level Nizki nivoj Disable Onemogoči BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth je izključen, in ime je prikazano kot "%1" Bluetooth is turned on, and the name is displayed as "%1" Bluetooth je vključen, in ime je prikazano kot "%1" BlueToothDeviceListView Disconnect Odspajanje Connect Povezava Send Files Posla datoteke Rename Ponovi ime Remove Device Odstrani urejevalniško napravo Select file Izberi datoteko BluetoothCtl Edit Uredi Allow other Bluetooth devices to find this device Dozvoli, da se drugi Bluetooth urejevalne naprave najdijo tega urejevalnega naprava To use the Bluetooth function, please turn off Za uporabo funkcije Bluetooth, prosimo začnite s izključevanjem Airplane Mode Režim letalnice Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Povezan Not connected Ne povezan BootPage Startup Settings Nastavitve pričetka You can click the menu to change the default startup items, or drag the image to the window to change the background image. lahko kliknete na meni, da sprememnete predtečne predmete za pričetek, ali pa povlečete sliko v okno, da jo sprememnete za pozadino. grub start delay Zagotovite časovno posplošitev za pričetek grub theme tema After turning on the theme, you can see the theme background when you turn on the computer Po priključitvi teme lahko vidite temo pozadine, ko začnete računalnik Boot menu verification Overjanje niza za pričetek After opening, entering the menu editing requires a password. Po odpiranju je odpiranje urejanja menija za pričetek zahtevano z geslom. Change Password Spremeni geslo Change boot menu verification password Spremeni geslo za overjanje niza za pričetek Set the boot menu authentication password Nastavi geslo za overjanje niza za pričetek User Name : Uporabniško ime : root root New Password : Novo geslo : Required Potrebno Password cannot be empty Geslo ne more biti prazno Passwords do not match Gesli se ne ujemata Repeat password: Ponovno vnesite geslo: Cancel Prekliči Sure Naravno Start animation Začni animacijo Adjust the size of the logo animation on the system startup interface Spremeni velikost animacije logotipa na začetni zaslavi sistema Camera Allow below apps to access your camera: Dovoli spodnjim programom dostop do vaše kamere: CharaMangerModel Fingerprint1 Odstop1 Fingerprint2 Odstop2 Fingerprint3 Odstop3 Fingerprint4 Odstop4 Fingerprint5 Odstop5 Fingerprint6 Odstop6 Fingerprint7 Odstop7 Fingerprint8 Odstop8 Fingerprint9 Odstop9 Fingerprint10 Odstop10 Scan failed Skeniranje je spodletelo The fingerprint already exists Odstop že obstaja Please scan other fingers Poskuste skenirati druge otroke Unknown error Neprepoznana napaka Scan suspended Skeniranje je premaknjenega Cannot recognize Ne morem razpoznati Moved too fast Premajha premaknili Finger moved too fast, please do not lift until prompted Palce je premikal prehitro, prosimo, da ne odvzete, dokler ga ne odprete Unclear fingerprint Nedoločen palcevni črnil Clean your finger or adjust the finger position, and try again Počistite svoj palce ali prilagodite položaj palačke in poskusite znova Already scanned Se nahajal že obiskan Adjust the finger position to scan your fingerprint fully Prilagodite položaj palačke, da bi se naredil celotni obisk palcev Finger moved too fast. Please do not lift until prompted Palcev je premikal prehitro. Prosimo, da ne odvzete, dokler ga ne odprete Lift your finger and place it on the sensor again Odvzrite svoj palce in ga ponovno postavite na senzor Position your face inside the frame Postavite svoje obličje v okvir Face enrolled Obličje je vključeno Position a human face please Prosimo, postavite obličje človeka Keep away from the camera Presočite se od kamera Get closer to the camera Približite se kamera Do not position multiple faces inside the frame Ne postavljajte več obličj v okvir Make sure the camera lens is clean Ustrezno izmenjajte zračilnico kamere Do not enroll in dark, bright or backlit environments Ne vključujte v temne, svetle ali ozlijalne okoliščine Keep your face uncovered Nebrezirate svoje obličje Scan timed out Obisk je presegel čas Cancel Prekliči Camera occupied! ColorAndIcons Accent Color Naravni barva Icon Settings Nastavitve ikone Icon Theme Tematika ikone Customize your theme icon Spremeni ikono tema Cursor Theme Tema kazalečka Customize your theme cursor Spremeni kazaleček tema ComfirmDeleteDialog Are you sure you want to delete this account? Ali ste сигурни, da želite izbrisati ta nalog? Delete account directory Izbriši direktorij nalog Cancel Prekliči Delete Izbriši ComfirmSafePage Go to settings Priduži nastavitve Cancel Prekliči Common Common Splošno Repeat delay Zaporedje z opazovanjem Short Kratko Long Dolgo Repeat rate Frekvenca ponovitve Slow Zapretno Fast Hitro Numeric Keypad Numerična tipka test here test sem Caps lock prompt Pomoc pri velikem začrtanju Double Click Speed Hitrost dvojnih klikov Double Click Test Test dvojnih klikov Left Hand Mode Način za levo ruku Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Velika velikost Small size Mala velikost Failed to get root access Neuspešen pristup na root Please sign in to your Union ID first Prijava na vaš UnijaID najprej Cannot read your PC information Ne morem prebrati informacij o vašem računalniku No network connection Ni povezave s omrežjem Certificate loading failed, unable to get root access Napaka pri nalaganju certifikata, neuspešen pristop na root Signature verification failed, unable to get root access Napaka pri preverjanju potovanja, neuspešen pristop na root Agree and Join User Experience Program Sodobni in se pripišite Programu za izkušnje uporabnikov The Disclaimer of Developer Mode Opozorilo za način razvijalcev Agree and Request Root Access Sodobni in zahtevajte pristop na root Start setting the new boot animation, please wait for a minute Začnite nastavljati novo zagonovo animacijo, počakajte eno minuto Setting new boot animation finished Nastavitev nove zagonove animacije je končana The settings will be applied after rebooting the system Nastavitve bodo prispevek po ponovnem zagonu sistema Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Geslo mora vsebovati števil in znamk Password must be between 8 and 64 characters Geslo mora biti med 8 in 64 znakom CreateAccountDialog Create a new account Ustvarite nov račun Account type Tip računa UserName Uporabniško ime Required Nujno FullName Ime in priimek Optional Možno Cancel Prekliči Create account Ustvari račun Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. še niste naložili avatara. Kliknite ali ga povlecite in spustite, da ga naložite. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available na voljo DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/zaštitni-politika-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/izkušnje-en Agree and Join User Experience Program Sodobni in se pridruži Programu za izkušnje <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Nastava datuma in ur Date Datum Year Leto Month Mesec Day Dan Time Ura Cancel Prekliči Confirm Potrdi Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Zdaj + 1 dan Yesterday Zdaj - 1 dan Today Danes %1 hours earlier than local %1 ur prej od lokalnega časa %1 hours later than local %1 ur zdišje od lokalnega časa Space Prostor Week Teden First day of week Prvi dan tega tedenja Short date Kratak datum Long date Dolg datum Short time Kratak čas Long time Dolgotno časovno Currency symbol Simbol enote Positive currency Pozitivna enota Negative currency Negativna enota Decimal symbol Decimalni znak Digit grouping symbol Znak za skupanje cifr Digit grouping Skupanje cifr Page size Velikost strani Example DatetimeWorker Authentication is required to change NTP server Za spremembo strežnika NTP je potrebna overjanja Authentication is required to set the system timezone Za določanje časovnega pasu je potrebna overitev DccColorDialog Cancel Prekliči Save Shrani DccWindow Control Center provides the options for system settings. Središnji upravljalnik ponuja možnosti za postavitve sistema. DeepinIDAccountSecurity Bind WeChat Povezaj WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Za povezavo WeChata lahko varno in hitro prijavitev se na vaš %1 ID in lokalne račune. Unlinked Odstopljeno Unbinding Odpiranje povezave Link Povezava Are you sure you want to unbind WeChat? Ali ste prepričani, da želite odpirati povezavo WeChata? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Po odpiranju povezave WeChata ne boste mogli uporabiti WeChata za prejemanje QR-kode za prijavo na %1 ID ali lokalno račun. Let me think it over Pomislih nad tem Local Account Binding Povezava lokalnega računa After binding your local account, you can use the following functions: Po povezavi vašega lokalnega računa lahko uporabljate naslednje funkcije: WeChat Scan Code Login System Sistem za prijavo skeniranjem QR-kode WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Uporabite WeChat, ki je povezan z vašim %1 ID, za skeniranje kode za prijavo na vaš lokalni račun. Reset password via %1 ID Ponastavite geslo skozi %1 ID Reset your local password via %1 ID in case you forget it. V pomoči %1 ID posodobi vaš lokalni geslo, če ga zanemarite. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Za uporabo zgoraj navedenih funkcij, poskusite Prehodnik - Računi in zaprite odgovarjalne možnosti. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Zaznamovanje v oblaku Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Upravljajte svojo %1 ID in zaznamujte vaše osebne podatke na vseh napravah. Prijava na %1 ID vam omogoči osebne funkcije in storitve, kot so prehodnik in Trg aplikacij, in več. Sign In to %1 ID Prijava na %1 ID DeepinIDSyncService Auto Sync Samodejno zaznamovanje Securely store system settings and personal data in the cloud, and keep them in sync across devices Varno shranjujte nastavitve sistema in osebne podatke v oblaku in jih ohranjajte zaznamovane na vseh napravah. System Settings Nastavitve sistema Last sync time: %1 Združenje z poslednje vremeni: %1 Clear cloud data Počistite podatke v oblaku Are you sure you want to clear your system settings and personal data saved in the cloud? Ste prepričani, da želite počistiti nastavitve sistema in osebne podatke shranjene v oblaku? Once the data is cleared, it cannot be recovered! Po počistitvi se podatki ne morete vrniti! Cancel Prekliči Clear Počisti DeepinIDUserInfo Synchronization Service Usluga zaznamovanja Account and Security Račun in varnost Sign out Odjava Go to web settings Pojdi na nastavitve spleta The nickname must be 1~32 characters long DeepinWorker encrypt password failed šifriranje gesla je spodletelo Wrong password, %1 chances left Napačno geslo, preostalo %1 próba The login error has reached the limit today. You can reset the password and try again. Napaka pri prijavi danes dosegle omejeno število. Lahko posodobite geslo in poskusite znova. Operation Successful Operacija je uspešna The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Zemlja v glavnem delu Kina Other regions Države ali območja, ki še niso na voljo The feature is not available at present, please activate your system first Ta funkcija trenutno ni na voljo, prosimo, začnete s aktivacijo sistema Subject to your local laws and regulations, it is currently unavailable in your region. Zahtevek za vaše lokalne zakone in pravila, trenutno ni na voljo v vašem regiji. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' Izberite privzeto program, ki ga želite odpreti '%1', add Dodaj Open Desktop file Odpri datoteko za stol Apps (*.desktop) Programi (*.desktop All files (*) Vse datoteke (* DevelopModePage Root Access Dostop za root Request Root Access Zahtevajte dostop za root After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Po vstopu v razvijalski način lahko pridite v dostop za root, vendar pa je tudi možno, da to izgrmi sistem, zato uporabite z opremljenostjo. Allowed Dovoljen Enter Vnesite Online Online Login UOS ID Prijava UOS ID Offline Sečasno Import Certificate Uvoziti certifikat Select file Izberite datoteko Your UOS ID has been logged in, click to enter developer mode Vaš UOS ID je prijavljen, kliknite za vstop v razvijalski način Please sign in to your UOS ID first and continue Prosim, prijavite se na vaš UOS ID in nadaljujte 1.Export PC Info 1.Izvoz informacij o računalniku Export Izvoz 3.Import Certificate 3.Uvoziti certifikat Development and debugging options Možnosti razvoja in odprtega shraničevanja System logging level Počasnost zapisovanja sistema Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Spremena možnosti povzroči podrobnejši zapis, ki je mogoče, da prenese zmagovalno zmoto sistema in/ali več prostora na shrambo. Off Iskalnik Debug Odprte shraničevanje Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Sprememba možnosti lahko traja do enega minuta, po uspešnem zahtevu za nastavitev, prosimo, ponovno zagnite uređaj, da bi začela vplivati. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Prikazovalnik Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Dozvoli spodnjim programom dostop do tih datotek in map: Documents Dokumenti Desktop Oberstavek Pictures Slik Videos Video Music Pesmi Downloads Prenosi folder mapa FontSizePage Size Velikost Standard Font Standardna vplavec Monospaced Font Vplavec z enako širino znakov GeneralPage Power Plans Naravne programski razporeditve Power Saving Settings Nastavitve spremembe narave Auto power saving on low battery Spremenljiv spremembe narave na niskem vratnem pritoku Low battery threshold Naprej vratnega pritoka Auto power saving on battery Spremenljiv spremembe narave na vratnem pritoku Wakeup Settings Nastavitve vzhoda Password is required to wake up the computer Za vzhod je zahtevan geslo Password is required to wake up the monitor Za vzhod je zahtevan geslo Shutdown Settings Nastavitve za izgradnjo Scheduled Shutdown Urejeno izgradnje Time Čas Repeat Ponovitev Once Enkrat Every day Vsak dan Working days Rabni dnevi Custom Time Vlastiti čas Decrease screen brightness on power saver Zmanjšaj osvetlitev zaslona v načinu ščitnice GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ' ... ... InterfaceEffectListview Optimal Performance Optimalna zmogljivost Balance Začetek Best Visuals Najboljše vizualne Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language Jezik done položeno edit uredi Other languages Drugi jeziki add dodaj Region Oblast Area Območje Operating system and applications may provide you with local content based on your country and region Operacijski sistem in aplikacije vam morda ponudijo lokalno vsebino glede na vašo državo in območje Operating system and applications may set date and time formats based on regional formats Operacijski sistem in aplikacije morda postavijo format datuma in ur glede na regionalne formate Regional format LangsChooserDialog Add language Dodaj jezik Search Iskanje Cancel Prekliči Add Dodaj LoginMethod Login method Metoda prijave Password, wechat, biometric authentication, security key Geslo, WeChat, biometričnaščina, varnostna ključ Password Geslo Modify password Uredi geslo Validity days Dnevi veličenja Always Zavedno Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Samodejno preprečevanje zvočnih sporočil Input Volume Vločnost vstava Input Level Stopnja vstava Input Vstava No input device for sound found Naprej ni najden vhodni začetek za zvok Input Device Vhodna naprava Mouse Mouse and Touchpad Miška in Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices Moje naprave NativeInfoPage UOS UOS Computer name Ime računalnika It cannot start or end with dashes Nemogač začeti ali končati z znaku OS Name Ime operacijskega sistema Version Številka različice Edition Izdanje Type Tip bit bit Authorization Ponudba System installation time Čas instalacije sistema Kernel Jezik Graphics Platform Platforma za grafične vmesnice Processor Procesor Memory Pomnilnik 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Druge naprave Show Bluetooth devices without names Pokaži Bluetooth naprave brez imena PasswordLayout Current password Trenutno geslo Required Zahtevek Weak Slab Medium Srednji Strong Močan Repeat Password Ponovno vnesi geslo Password hint Pomocna opomba gesla Optional Možno Password cannot be empty Geslo ni mogoče pustiti praznega Passwords do not match Gesli se ne ujemata The hint is visible to all users. Do not include the password here. Opomba je vidna za vse uporabnike. Tu ne vključujte gesla. New password New password should differ from the current one Novo geslo naj se razlikuje od trenutnega The password cannot be the same as the username. PasswordModifyDialog Modify password Uredi geslo Reset password Ponastavi geslo Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Dolžina gesla naj bo vsaj 8 znakov, in geslo naj vsebuje kombinacijo vsaj 3 izmed naslednjih: velikih črter, maleh črter, števil in znakov. Ta vrsta gesla je varnejša. Resetting the password will clear the data stored in the keyring. Ponastavitev gesla pusti vse shranjeno podatke v ključnici. Cancel Prekliči Personalization Personalization Prilagoditev PersonalizationInterface Light Svetlo Auto Automatično Dark Temo Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Napravljeno po meri PluginArea Plugin Area Območje vstavkov Select which icons appear in the Dock Izberi, katere ikone se pojavijo v Docku Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Iskalci Suspend Spreminjanje stanja Hibernate Hibernacija Turn off the monitor Isključi zaslon Show the shutdown Interface Prikaži okno za izgradnjo Do nothing Naredi nič PowerPage Screen and Suspend Zaslon in zaustavitev Turn off the monitor after Isključi zaslon po Lock screen after Zakleni zaslon po Computer suspends after Računalna zaustavitev po When the lid is closed Ko je zatvoro zatvorenega When the power button is pressed Ko je pritisnjen gumb za energijo PowerPlansListview High Performance Visoka vstopna moč Balance Performance Zaščitena vstopna moč Aggressively adjust CPU operating frequency based on CPU load condition Zahtevno nadzorično povezavo frekvenco CPU glede na CPU napor Balanced Zaščitena Power Saver Ohranilnik energije Prioritize performance, which will significantly increase power consumption and heat generation Pridruži se vstopni moči, ki poveča značilno potrošnjo energije in teploto Balancing performance and battery life, automatically adjusted according to usage Zaščitena vstopna moč in življenje baterije, samodejno prilagajanje glede na uporabo Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Zaščitite življenje baterije, ki bo sistem priporočil nekaj moči za zmanjšanje potrošnje energije PowerWorker Minutes Minut Hour Ura Never nikoli Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Zasebnostna politika Copy Link Address PwqualityManager Password cannot be empty Geslo ni mogoče pustiti praznega Password must have at least %1 characters Geslo mora imeti vsaj %1 znakov Password must be no more than %1 characters Geslo ne sme biti več kot %1 znakov Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) geslo lahko vsebuje le angleške črke (dolgo/kratko različico), številke ali posebne znake (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please Prosim, ne več od %1 palindromskih znakov No more than %1 monotonic characters please Prosim, ne več od %1 monotonnih znakov No more than %1 repeating characters please Prosim, ne več od %1 ponavljajočih se znakov Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) geslo mora vsebovati velikih črkar, maleh črkar, števil in znakov (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) Password must not contain more than 4 palindrome characters geslo ne sme vsebovati več od 4 palindromskih znakov Do not use common words and combinations as password Ne uporabljajte običajnih besed in kombinacij kot gesla Create a strong password please Prosim, ustvarite močno geslo It does not meet password rules Nedostaja za uporabo gesla QObject Control Center Kontrolni center Activated Dezaktivirano View Pogled To be activated Dezaktivirano Activate Dezaktiviraj Expired Iztrajalo se je In trial period V probnem obdobju Trial expired Probno obdobje je iztrajalo se dde-control-center dde-control-center Touch Screen Settings Nastavitve dotične zaslonske plošče The settings of touch screen changed Nastavitve dotične zaslonske plošče so spremenile This system wallpaper is locked. Please contact your admin. Ta zaslonska obilica sistema je zaklenjena. Prosimo, se obračunajte s administratorjem. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Išči Default formats Privzeti formate First day of week Prvi dan v tedenu Short date Kratica datum Long date Dolgova nizka datum Short time Kratica čas Long time Dolgova nizka čas Currency symbol Simbol enote Digit Črka Paper size Velikost papirja Cancel Prekliči Save Shrani Regional format RegionsChooserWindow Search Išči RegisterDialog Set a Password Nastavi geslo 8-64 characters 8-64 znakov Repeat the password Ponovni geslo Cancel Prekliči Confirm Potrdi Passwords don't match Gesli se ne ujemata ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver Zapreši zaslone preview nogled Personalized screensaver Zapreši zaslone z osebnimi nalogami setting nastavitev idle time čas neaktivnosti 1 minute 1 minuta 5 minute 5 minut 10 minute 10 minut 15 minute 15 minut 30 minute 30 minut 1 hour 1 ura never nikoli Password required for recovery Za obnovitev je potrebnega gesla Picture slideshow screensaver Zaščitnik z obravnavijo slik v glidu System screensaver Zaščitnik sistema SearchableListViewPopup Search Iskanje No search results ShortcutSettingDialog Add custom shortcut Dodaj prilagojen krik Name: Ime: Required Zahtevano Command: Naredba: Shortcut Krik None Nič Cancel Prekliči Add Dodaj The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts Krik System shortcut, custom shortcut Sistemski krik, prilagojen krik Search shortcuts Iskalni kriki done zaključeno edit Uredi Click Kliknite Cancel Prekliči or ali Replace Zamenjaj Restore default Ponastavi na privzeto Add custom shortcut Dodaj prilagojeni preklic please enter a new shortcut key Sound Sound Zvok Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Izhodne naprave Select whether to enable the devices Izberi, ali naj so naprave omogočene Input Devices Vhodne naprave SoundEffectsPage Sound Effects Zvukovske effekti SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Zagotovi zagon Shut down Ustavi Log out Odjavite se Wake up Bodi Volume +/- Glasilnik +/− Notification Oznanica Low battery Nizka nivoj baterije Send icon in Launcher to Desktop Pošlji ikono v Launcherju na stol Empty Trash Počisti koš Plug in Vstavi Plug out Izvstavi Removable device connected Odstranljiva naprava povezana Removable device removed Odstranljiva naprava odstranjena Error Napaka SpeakerPage Mode Način Output Volume Izhodni glasilnik Volume Boost Povezni zvok If the volume is louder than 100%, it may distort audio and be harmful to output devices Če je zvok za 100% večji, lahko vpliva na zvok in je možno nevaren za izhodne ure Left Levo Right Desno Output Izhod No output device for sound found Ne najden ure za zvok Left Right Balance Poročilo o zavihek Merge left and right channels into a single channel Poveži levo in desno kanal v en kanal Whether the audio will be automatically paused when the current audio device is unplugged Ali bo zvok samodejno spremnjen, ko je trenutna ure za zvok odspojena Mono Audio Auto Pause Output Device Izhodna naprava SyncInfoListModel Sound Zvok Power Naprej Mouse Miš Update Ažuriranje Screensaver Zapretniški zvok System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers Več zaščitnikov zaslonskega ekrana TimeAndDate Auto sync time Samodejno usklajevanje časa Ntp server NTP strežnik System date and time Sistemski datum in čas Customize Pristroj Settings Nastavitve Server address Naslov strežnika Required Nujno The ntp server address cannot be empty Naslov strežnika ntp ne sme biti prazen Use 24-hour format Uporabi 24-urni format system time zone sistemski časovni razdelitev Timezone list Seznam časovnih razdelitev Add TimeRange from od to do TimeoutDialog Save the display settings? Shrani nastavitve prikaza Settings will be reverted in %1s. Nastavitve bodo povrnitev v %1s. Revert Povrnevanje Save Shrani TimezoneDialog Add time zone Dodaj časovni razdelitev Determine the time zone based on the current location Odredi časovni razdelitev na podlagi trenutne lokacije Time zone: Časovni razdelitev: Nearest City: Najblizja grad: Cancel Prekliči Save Shrani TouchScreen TouchScreen NaprtiPovršina Set up here when connecting the touch screen Nastavite tu pri povezavi z naprtim površino Touchpad Basic Settings Osnovne nastavitve Touchpad NaprtiPovršina Pointer Speed Hitrost kazalečka Slow Slow Fast Hitro Disable touchpad during input Onemogoči naprtiPovršino pri vnosu Tap to Click Klik z natiskom Natural Scrolling Priravnjeno naključje Three-finger gestures Tri-pongi potez Four-finger gestures Štiri-pongi potez Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Pridruži se programu za izkušnje uporabnikov Copy Link Address VerifyDialog Security Verification Varnostna potrditev The action is sensitive, please enter the login password first Dejanje je senzibilno, vnesite najprej geslo za prijavo. 8-64 characters 8-64 znakov Forgot Password? Zapomnili ste geslo? Cancel Prekliči Confirm Potrdi Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper zadetek za zaslonsko ploščo My pictures Moje slike System Wallpaper Zadetek za zaslonsko ploščo sistema Solid color wallpaper Združen barvna oblačilnica Customizable wallpapers Prilagodljive zaslonske oblačilnice fill style način začetka Automatic wallpaper change Samodejno sprememba zaslonske oblačilnice never nikoli 30 second 30 sekund 1 minute 1 minuta 5 minute 5 minut 10 minute 10 minut 15 minute 15 minut 30 minute 30 minut login prijava wake up priklopi Live Wallpaper Življenjske zaslonske obliki 1 hour 1 ura System Wallpapers WallpaperSelectView unfold razvij Set lock screen Nastavi zaskrbljeni zaslonski rez Set desktop Nastavi stol show all - %1 items Add Picture WindowEffectPage Interface and Effects Vmesnik in učinki Window Settings Nastavitve okna Window rounded corners Okvirna zakrivljeni krogi None Nič Small Malo Large Veliko Enable transparent effects when moving windows Omogoči prehode transparentnih efektov ob premikanju okna Window Minimize Effect Efekt minimalizacije okna Scale Skaliranje Magic Lamp Magična lampica Opacity Nepremika Low Nizka High Visoka Scroll Bars Potezne vrstice Show on scrolling Pokaži pri potezni vrstici Keep shown Obstaja prikazan Compact Display Zakrsleno prikazovanje If enabled, more content is displayed in the window. Če je omogočeno, bo prikazano več vsebine v oknu. Title Bar Height Višina naslovnega vrščika Only suitable for application window title bars drawn by the window manager. Učinkovito le za naslovnike okvirev aplikacij, ki jih nariše upravljač okvirov. Extremely small Preprosto malo Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Tradicionalna kitajščina (kitajski Hong Kong) Traditional Chinese (Chinese Taiwan) Tradicionalna kitajščina (kitajski Tajvan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Tajvan Kitajska dccV25::AccountsController Username must be between 3 and 32 characters Uporabniško ime mora biti med 3 in 32 znake The first character must be a letter or number Prvi znak mora biti črka ali številka Your username should not only have numbers Vaše uporabniško ime ne sme imeti le števil The username has been used by other user accounts Uporabniško ime je že uporabljal drug uporabniški račun The full name is too long Ime je preprosto dolgo The full name has been used by other user accounts Ime je že uporabljal drug uporabniški račun Wrong password Napačno geslo Standard User Uporabniški račun Administrator Administrator Customized Prilagajljiv dccV25::AccountsWorker Your host was removed from the domain server successfully Vaš gostitelj je uspešno odstranjen iz domenskega strežnika Your host joins the domain server successfully Vaš gostitelj je uspešno pripovezal domenski strežnik Your host failed to leave the domain server Vaš gostitelj ni uspešno odstranil domenskega strežnika Your host failed to join the domain server Vaš gostitelj ni uspešno pripovezal domenskega strežnika AD domain settings Nastavitve domene AD Password not match Gesli se ne ujemata dccV25::AvatarTypesModel Dimensional Dimenzionalni Flat Ravni dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Ta kombinacija tipkov je konfliktna z [%1] dccV25::PwqualityManager Password cannot be empty Geslo ni mogoče pustiti brez vnosnega polja Password must have at least %1 characters Geslo mora imeti vsaj %1 znakov Password must be no more than %1 characters Geslo mora biti dolgo največ %1 znakov Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Geslo lahko vsebuje samo angleške črte (senzitivno glede velikosti črter), števke ali posebne znake (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please Prosim, da bo geslo vsebovalo največ %1 palindromskih znakov No more than %1 monotonic characters please Prosim, da bo geslo vsebovalo največ %1 monotonskih znakov No more than %1 repeating characters please Prosim, da bo geslo vsebovalo največ %1 ponavljajúcih znakov Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Geslo mora vsebovati velikih črter, male črter, števk in znakov (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) Password must not contain more than 4 palindrome characters Geslo ne sme vsebovati več kot 4 palindromskih znakov Do not use common words and combinations as password Ne uporabljajte običajnih besed ali kombinacij kot gesla Create a strong password please Prosim, ustvarite močno geslo It does not meet password rules Geslo se ne ustreza pravilom At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Sistem Window Okno Workspace Delovno prostor AssistiveTools Pomočna oprema Custom Prilagojen None Nič ================================================ FILE: translations/dde-control-center_sq.ts ================================================ AccountSettings edit përpunoni Add new user Shtoni përdorues të ri Set fullname Caktoni emër të plotë Login settings Rregullime hyrjeje Login without password Hyni pa fjalëkalim Delete current account Fshije llogarinë e tanishme Group setting Rregullim grupi Account groups Grupe llogarish done u bë Group name Emër grupi Add group Shto grup Auto login Hyrje e automatizuar Account Information Hollësi Llogarie Account name, account fullname, account type Emër llogarie, emër i plotë llogarie, lloj llogarie Account name Emër llogarie Account fullname Emër i plotë për llogarinë Account type Lloj llogarie The full name is too long Emri i plotë është shumë i gjatë Group names should be no more than 32 characters Emrat e grupeve s’duhet të jenë më tepër se 32 shenja Group names cannot only have numbers Emrat e grupit s’mund të kenë vetëm numra Use letters,numbers,underscores and dashes only, and must start with a letter Përdorni vetëm shkronja, numra, nënvija dhe vija ndarëse në mes, si dhe duhet të fillojë me një shkronjë The group name has been used Emri i grupit është përdorur quick login, Auto login, login without password hyrje e shpejtë, Hyrje vetvetiu, hyrje pa fjalëkalim Undo Zhbëje Redo Ribëje Cut Prije Copy Kopjoje Paste Ngjite Select All Përzgjidhi Krejt Quick login Hyrje e shpejtë Accounts Account Llogari Account manager Përgjegjës llogarish AccountsMain Other accounts Llogari të tjera AddFaceinfoDialog Enroll Face Jepni Fytyrë I have read and agree to the I kam lexuar dhe pajtohem me Disclaimer Klauzolë Next Pasuesi Face enrolled Fytyra u dha Failed to enroll your face S’u arrit të merrej fytyra juaj Done U bë Cancel Anuloje Retry Enroll Riprovoni Dhënie Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. Njohja e fytyrave s’mbulon pikasje të të qenit gjallë dhe metoda e verifikimit mund të bartë rreziqe. Që të garantohet dhënie e suksesshme: 1. Mbajini pjesët e fytyrës qartësisht të dukshme dhe mos i mbuloni (kapele, syze dielli, maska, etj.). 2. Garantoni ndriçim të mjaftueshëm dhe shmangni dritë të drejtpërdrejtë diellore. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. “Mirëfilltësimi biometrik” është një funksion mirëfilltësimi identiteti përdoruesi, që jepet nga UnionTech Software Technology Co., Ltd. Përmes “mirëfilltësimit biometrik”, të dhënat biometrike të grumbulluara do të krahasohen me ato të depozituara në pajisje dhe identiteti i përdoruesit do të verifikohet bazuar në përfundimin e krahasimit. Ju lutemi, kini parasysh se UnionTech Software Technology Co., Ltd. s’do të grumbullojë apo përdorë informacion biometrik tuajin,, i cili do të depozitohet në pajisjen tuaj vendore. Ju lutemi, aktivizojeni mirëfilltësimin biometrik në pajisjen tuaj personale dhe përdorni të dhëna tuajat biometrike vetëm për veprimet përkatëse dhe çaktivizojeni pa humbur kohë, ose fshini në atë pajisje të dhëna biometrike personash të tjerë, ndryshme do të jeni përballë rrezikut të rrjedhur prej tyre. UnionTech Software Technology Co., Ltd. është e përkushtuar të studiojë dhe përmirësojë sigurinë, përpikërinë dhe qëndrueshmërinë e mirëfilltësimit biometrik. Sidoqoftë, për shkak faktorësh mjedisorë, pajisjeje, teknikë dhe të tjerë, si dhe kontrolli rreziku, s’ka garanci se do të kaloni mirëfilltësimin biometrik përkohësisht. Ndaj, ju lutemi, mos e merrni mirëfilltësimin biometrik si të vetmen rrugë për të bërë hyrjen në UOS. Nëse keni pyetje apo sugjerime, kur përdorni mirëfilltësimin biometrik, mund të jepni idetë tuaja përmes “Shërbim dhe Asistencë” te UOS. AddFingerDialog Cancel Anuloje Done U bë Enroll Finger Jepni Gisht Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Vendosni te ndijuesi i shenjave të gishtave gishtin që duhet dhënë dhe lëvizeni nga poshtë lart. Pas plotësimit të veprimit, ju lutemi, hiqeni gishtin. I have read and agree to the I kam lexuar dhe pajtohem me Disclaimer Klauzolën Next Pasuesi Retry Enroll Riprovoni Dhënien "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. “Mirëfilltësimi biometrik” është një funksion mirëfilltësimi identiteti përdoruesi, që jepet nga UnionTech Software Technology Co., Ltd. Përmes “mirëfilltësimit biometrik”, të dhënat biometrike të grumbulluara do të krahasohen me ato të depozituara në pajisje dhe identiteti i përdoruesit do të verifikohet bazuar në përfundimin e krahasimit. Ju lutemi, kini parasysh se UnionTech Software Technology Co., Ltd. s’do të grumbullojë apo përdorë informacion biometrik tuajin,, i cili do të depozitohet në pajisjen tuaj vendore. Ju lutemi, aktivizojeni mirëfilltësimin biometrik në pajisjen tuaj personale dhe përdorni të dhëna tuajat biometrike vetëm për veprimet përkatëse dhe çaktivizojeni pa humbur kohë, ose fshini në atë pajisje të dhëna biometrike personash të tjerë, ndryshme do të jeni përballë rrezikut të rrjedhur prej tyre. UnionTech Software Technology Co., Ltd. është e përkushtuar të studiojë dhe përmirësojë sigurinë, përpikërinë dhe qëndrueshmërinë e mirëfilltësimit biometrik. Sidoqoftë, për shkak faktorësh mjedisorë, pajisjeje, teknikë dhe të tjerë, si dhe kontrolli rreziku, s’ka garanci se do të kaloni mirëfilltësimin biometrik përkohësisht. Ndaj, ju lutemi, mos e merrni mirëfilltësimin biometrik si të vetmen rrugë për të bërë hyrjen në UOS. Nëse keni pyetje apo sugjerime, kur përdorni mirëfilltësimin biometrik, mund të jepni idetë tuaja përmes “Shërbim dhe Asistencë” te UOS. AddIrisDialog Enroll Iris Jepni Bebe Syri I have read and agree to the E kam lexuar dhe pajtohem me Disclaimer Klauzolë Next Pasuesi Done U bë Cancel Anuloje Retry Enroll Riprovoni Dhënien Iris enrolled U dha bebe syri Failed to enroll your iris S’u arrit të merrej bebe syri "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. “Mirëfilltësimi biometrik” është një funksion mirëfilltësimi identiteti përdoruesi, që jepet nga UnionTech Software Technology Co., Ltd. Përmes “mirëfilltësimit biometrik”, të dhënat biometrike të grumbulluara do të krahasohen me ato të depozituara në pajisje dhe identiteti i përdoruesit do të verifikohet bazuar në përfundimin e krahasimit. Ju lutemi, kini parasysh se UnionTech Software Technology Co., Ltd. s’do të grumbullojë apo përdorë informacion biometrik tuajin,, i cili do të depozitohet në pajisjen tuaj vendore. Ju lutemi, aktivizojeni mirëfilltësimin biometrik në pajisjen tuaj personale dhe përdorni të dhëna tuajat biometrike vetëm për veprimet përkatëse dhe çaktivizojeni pa humbur kohë, ose fshini në atë pajisje të dhëna biometrike personash të tjerë, ndryshme do të jeni përballë rrezikut të rrjedhur prej tyre. UnionTech Software Technology Co., Ltd. është e përkushtuar të studiojë dhe përmirësojë sigurinë, përpikërinë dhe qëndrueshmërinë e mirëfilltësimit biometrik. Sidoqoftë, për shkak faktorësh mjedisorë, pajisjeje, teknikë dhe të tjerë, si dhe kontrolli rreziku, s’ka garanci se do të kaloni mirëfilltësimin biometrik përkohësisht. Ndaj, ju lutemi, mos e merrni mirëfilltësimin biometrik si të vetmen rrugë për të bërë hyrjen në UOS. Nëse keni pyetje apo sugjerime, kur përdorni mirëfilltësimin biometrik, mund të jepni idetë tuaja përmes “Shërbim dhe Asistencë” te UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Ju lutemi, kini mendjen te pajisja dhe siguroni se të dy sytë gjenden brenda zonës së marrjes Authentication Biometric Authentication Mirëfilltësim Biometrik AuthenticationMain Biometric Authentication Mirëfilltësim Biometrik Face Fytyrë Up to 5 facial data can be entered Mund të jepen deri në 5 të dhëna fytyrash Fingerprint Shenja gishtash Identifying user identity through scanning fingerprints Identifikim identiteti përdoruesi përmes skanimi shenjash gishtash Iris Iris Identity recognition through iris scanning Njohje identiteti përmes skanimi bebeje syri Use letters, numbers and underscores only, and no more than 15 characters Përdorni vetë shkronja, numra dhe nënvija dhe jo më shumë se 15 shenja Use letters, numbers and underscores only Përdorni vetë shkronja, numra dhe nënvija No more than 15 characters Jo më shumë se 15 shenja This name already exists Ky emër ekziston tashmë Add a new %1 ... Shtoni një %1 të re … The name cannot be empty Emri s’mund të jetë i zbrazët AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first “Hyre e Automatizuar” mund të aktivizohet vetëm për një llogari, ju lutemi, së pari çaktivizojeni për llogarinë “%1” Ok Ok AvatarSettingsDialog Images Figura Human Njeri Animal Kafshë Scenery Peizazh Illustration Ilustrim Emoji Emoxhi custom vetjake Cartoon style Në stil “film vizatimor” Dimensional style Në stil përmasor Flat style Në stil të sheshtë Cancel Anuloje Save Ruaje BatteryPage Screen and Suspend Ekran dhe Pezullim Turn off the monitor after Fike ekranin pas Lock screen after Kyçe ekranin pas Computer suspends after Kompjuteri pezullohet pas When the lid is closed Kur mbyllet kapaku When the power button is pressed Kur shtypet butoni i energjisë Low Battery Bateri e Pakët Low battery notification Njoftim për bateri të pakët Auto suspend Vetëpezulloje Auto Hibernate Vetëplogështoje Low battery threshold Prag për bateri të ulët Battery Management Administrim Baterie Display remaining using and charging time Shfaq kohën e mbetur për përdorimin dhe atë për ngarkimin Maximum capacity Kapacitet maksimum Low battery level Nivel i ulët baterie Disable Çaktivizoje BlueTooth Bluetooth settings, devices Rregullime Bluetooth, pajisje Bluetooth Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth-i është i çaktivizuar dhe emri është shfaqur si “%1” Bluetooth is turned on, and the name is displayed as "%1" Bluetooth-i është i aktivizuar dhe emri është shfaqur si “%1” BlueToothDeviceListView Disconnect Shkëpute Connect Lidhe Send Files Dërgoni Kartela Rename Riemërtojeni Remove Device Hiqe Pajisjen Select file Përzgjidhni kartelë BluetoothCtl Edit Përpunoni Allow other Bluetooth devices to find this device Lejoji pajisjet e tjera Bluetooth të gjejnë këtë pajisje To use the Bluetooth function, please turn off Që të përdorni funksionin Bluetooth, ju lutemi, çaktivizojeni Airplane Mode Mënyra Aeroplan Bluetooth name cannot exceed 64 characters Emri Bluetooth s’duhet të tejkalojë 64 shenja BluetoothDeviceModel Connected I lidhur Not connected Jo i lidhur BootPage Startup Settings Rregullime Nisjeje You can click the menu to change the default startup items, or drag the image to the window to change the background image. Mund të klikoni menunë, që të ndryshoni objekte parazgjedhje nisjeje, ose të tërhiqni figurën te dritarja për të ndryshuar figurën sfond. grub start delay vonesë nisjeje grub-i theme temë After turning on the theme, you can see the theme background when you turn on the computer Pas aktivizimit të temës, mund të shihni sfondin e temës, kur ndizni kompjuterin Boot menu verification Verifikim menuje nisjesh After opening, entering the menu editing requires a password. Pas hapjes, hyrja në përpunim menuje lyp fjalëkalim. Change Password Ndryshoni Fjalëkalimin Change boot menu verification password Ndryshoni fjalëkalim verifikimi menuje nisjeje Set the boot menu authentication password Caktoni fjalëkalimin e verifikimit të menusë së nisjes User Name : Emër Përdoruesi: root rrënjë New Password : Fjalëkalim i Ri: Required E domosdoshme Password cannot be empty Fjalëkalimi s’mund të jetë i zbrazët Passwords do not match Fjalëkalimet s’përputhen Repeat password: Rijepeni fjalëkalimin: Cancel Anuloje Sure Patjetër Start animation Fillo animacionin Adjust the size of the logo animation on the system startup interface Përimtoni madhësinë e animacionit të stemës te ndërfaqja e nisjes së sistemit Camera Allow below apps to access your camera: Lejoji aplikacionet më poshtë të përdorin kamerën tuaj: CharaMangerModel Fingerprint1 Shenjëgishti1 Fingerprint2 Shenjëgishti2 Fingerprint3 Shenjëgishti3 Fingerprint4 Shenjëgishti4 Fingerprint5 Shenjëgishti5 Fingerprint6 Shenjëgishti6 Fingerprint7 Shenjëgishti7 Fingerprint8 Shenjëgishti8 Fingerprint9 Shenjëgishti9 Fingerprint10 Shenjëgishti10 Scan failed Skanimi dështoi The fingerprint already exists Shenja e gishtit ekziston tashmë Please scan other fingers Ju lutemi, skanoni gishta të tjerë Unknown error Gabim i panjohur Scan suspended Skanimi u pezullua Cannot recognize S’bëhet dot njohja Moved too fast U lëviz shumë shpejt Finger moved too fast, please do not lift until prompted Gishti u lëviz shumë shpejt, ju lutemi, mos e ngrini para se t’ju kërkohet Unclear fingerprint Shenjë gishti e paqartë Clean your finger or adjust the finger position, and try again Pastroni gishtin, ose rregulloni pozicion gishti dhe riprovoni Already scanned Skanuar tashmë Adjust the finger position to scan your fingerprint fully Rregullojeni pozicionin e gishtit që të skanohet plotësisht shenja e gishtit Finger moved too fast. Please do not lift until prompted Gishti u lëviz shumë shpejt. Ju lutemi, mos e ngrini, pa jua kërkuar Lift your finger and place it on the sensor again Ngrijeni gishtin dhe rivendoseni te ndijuesi Position your face inside the frame Vendoseni fytyrën tuaj brenda kuadrit Face enrolled Fytyra u dha Position a human face please Ju lutemi, vendosni një fytyrë njeriu Keep away from the camera Mbajeni kamerën larg vetes Get closer to the camera Afrojuni kamerës Do not position multiple faces inside the frame Mos vendosni brenda kuadrit disa fytyra Make sure the camera lens is clean Sigurohuni se thjerrat e kamerës janë të pastra Do not enroll in dark, bright or backlit environments Mos bëni dhënie fytyre në mjedise të errët, të ndritshëm, apo të ndriçuar nga pas Keep your face uncovered Mbajeni zbuluar fytyrën tuaj Scan timed out Skanimit i mbaroi koha Cancel Anuloje Camera occupied! Kamera e zënë! ColorAndIcons Accent Color Ngjyrë Theksimi Icon Settings Rregullime Ikonash Icon Theme Temë Ikonash Customize your theme icon Përshtatni ikonën e temës tuaj Cursor Theme Temë Kursori Customize your theme cursor Përshtatni kursorin e temës tuaj ComfirmDeleteDialog Are you sure you want to delete this account? Jeni i sigurt se doni të fshihet kjo llogari? Delete account directory Fshi drejtori llogarie Cancel Anuloje Delete Fshije ComfirmSafePage Go to settings Kaloni te rregullimet Cancel Anuloje Common Common Hollësi të Rëndomta Repeat delay Vonesë përsëritjeje Short E shkurtër Long E gjatë Repeat rate Shpejtësi përsëritjeje Slow E ngadaltë Fast E shpejtë Numeric Keypad Pjesa Numerike test here provojeni këtu Caps lock prompt Menu nisjesh Double Click Speed Shpejtësi Dyklikimi Double Click Test Provë Dyklikimi Left Hand Mode Mënyra “Mëngjarash” Enable Keyboard Aktivizo Tastierë General Të përgjithshme Scrolling Speed Shpejtësi Rrëshqitjeje CommonInfoMain Boot Menu Menu Nisjesh Manage your boot menu Administroni menunë tuaj të nisjeve Developer root permission management Administrim lejesh rrënje për zhvilluesit Developer Options Mundësi Zhvilluesish Developer debugging options Mundësi diagnostikimi për zhvillues CommonInfoWork Large size Madhësi e madhe Small size Madhësi e vogël Failed to get root access S’u arrit të përfitohet hyrje si rrënjë Please sign in to your Union ID first Ju lutemi, së pari, bëni hyrjen te Union ID juaj Cannot read your PC information S’lexohen dot hollësi të PC-së tuaj No network connection S’ka lidhje rrjeti Certificate loading failed, unable to get root access Ngarkimi i dëshmisë dështoi, s’arrihet të merret hyrje si rrënjë Signature verification failed, unable to get root access Verifikimi i nënshkrimit dështoi, s’arrihet të merret hyrje si rrënjë Agree and Join User Experience Program Pajtohuni dhe Merrni Pjesë te “User Experience Program” The Disclaimer of Developer Mode Klauzola Mënyre Zhvillues Agree and Request Root Access Pajtohuni dhe Kërkoni Hyrje Si Rrënjë Start setting the new boot animation, please wait for a minute Fillojani duke ujdisur animacion të ri nisjeje, ju lutemi, prisni një minutë Setting new boot animation finished Përfundoi ujdisja e animacionit të ri të nisjes The settings will be applied after rebooting the system Rregullimet do të aplikohen pas rinisjes së sistemit Restart now Rinise tani Dismiss Hidhe tej Restart device to finish applying Solid System Read-Only Protection settings Rinisni pajisjen që të përfundojë aplikimi i rregullimeve për Mbrojtje Vetë-Lexim Sistemi Solid ConfirmManager Password must contain numbers and letters Fjalëkalimi duhet të përmbajë numra dhe shkronja Password must be between 8 and 64 characters Fjalëkalimi duhet të jetë mes 8 dhe 6e pakta 8 shenja CreateAccountDialog Create a new account Krijoni llogari të re Account type Lloj llogarie UserName Emër përdoruesi Required I domosdoshëm FullName Emër i plotë Optional Opsional Cancel Anuloje Create account Krijo llogari Username cannot exceed 32 characters Emri i përdoruesit s’mund të jetë më i gjatë se 32 shenja Username can only contain letters, numbers, - and _ Emri i përdoruesit mund të përmbajnë vetëm shkronja, numra, - dhe _ Full name cannot exceed 32 characters Emri i plotë s’mund të jetë më i gjatë se 32 shenja Full name cannot contain colons Emri i plotë s’mund të përmbajë pikëpresje CustomAvatarCropper small e vogël big e madhe CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. S’keni ngarkuar ende ndonjë avatar. Që të ngarkoni një figurë, klikoni ose tërhiqni një të tillë. The uploaded file type is incorrect, please upload it again Lloji i kartelës së ngarkuar është i pasaktë, ju lutemi, ringarkojeni DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Pajtohuni dhe Merrni Pjesë te “User Experience Program” <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>Jemi thellësisht të ndërgjegjshëm mbi rëndësinë që ka për ju informacioni juaj personal. Ndaj kemi Rregullat e Privatësisë që mbulojnë si i grumbullojmë, përdorim, ndajmë me të tjerët, shpërngulim, zbulojmë publikisht dhe depozitojmë informacion tuajin.</p><p>Që të shihni rregulat tona më të reja të privatësisë, mund të <a href="%1">klikoni këtu</a> dhe/ose t’i shihni në internet duk vizituar <a href="%1"> %1</a>. Ju lutemi, lexojini me kujdes dhe kuptojini plotësisht praktikat tona rreth privatësisë së klientëve. Nëse keni ndonjë pyetje, ju lutemi, lidhuni me ne përmes: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Pjesëmarrja te “User Experience Program” do të thotë se na akordoni leje dhe autorizoni të grumbullojmë dhe përdorim informacion të pajisjes, sistemit dhe aplikacioneve tuaja. Nëse s’pranoni grumbullimin dhe përdorim prej nesh të informacioneve të përmendura më sipër, mos merrni pjesë te “User Experience Program”. Për hollësi, ju lutemi, referojuni Rregullave të Privatësisë së Deepin-it (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">Pjesëmarrja te “User Experience Program” do të thotë se na akordoni leje dhe autorizoni të grumbullojmë dhe përdorim informacion të pajisjes, sistemit dhe aplikacioneve tuaja. Nëse s’pranoni grumbullimin dhe përdorim prej nesh të informacioneve të përmendura më sipër, mos merrni pjesë në të. Për hollësi rreth “User Experience Program”, ju lutemi, vizitoni </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Rregullim date dhe kohe Date Datë Year Vit Month Muaj Day Ditë Time Kohë Cancel Anuloje Confirm Ripohojeni Datetime Time and date Datë dhe kohë Time and date, time zone settings Datë dhe kohë, rregullime zone kohore DatetimeMain Language and region Gjuhë dhe rajon System language, regional formats Gjuhë sistemi, formate rajonalë DatetimeModel Tomorrow Nesër Yesterday Dje Today Sot %1 hours earlier than local %1 orë më herët se vendorja %1 hours later than local %1 orë më vonë se vendorja Space Hapësirë Week Javë First day of week Dita e parë e javës Short date Datë e shkurtër Long date Datë e gjatë Short time Kohë e shkurtër Long time Kohë e gjatë Currency symbol Simbol monedhe Positive currency Monedhë pozitive Negative currency Monedhë negative Decimal symbol Simbol dhjetor Digit grouping symbol Simbol grupimi shifrash Digit grouping Grupim shifrash Page size Madhësi faqeje Example Shembull DatetimeWorker Authentication is required to change NTP server Që të ndryshoni shërbyes NTP, lypset mirëfilltësim Authentication is required to set the system timezone Që të ujdisni zonën kohore të sistemit, lypset mirëfilltësim DccColorDialog Cancel Anuloje Save Ruaje DccWindow Control Center provides the options for system settings. Qendra e Kontrollit furnizon mundësitë për rregullime sistemi. DeepinIDAccountSecurity Bind WeChat Lidhe WeChat-in By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Duke përshoqëruar WeChat-in, mundeni të hyni në mënyrë të parrezik dhe shpejt e shpejt në llogaritë tuaja %1 ID dhe vendore. Unlinked E palidhur Unbinding Po hiqet lidhja Link Lidhje Are you sure you want to unbind WeChat? Jeni i sigurt se doni të hiqet përshoqërimi me WeChat-in? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Pas heqjes së lidhjes me WeChat-in, s’do të jeni në gjendje të përdorni WeChat-in për të skanuar kodin QR që të bëni hyrjen në llogari %1 ID apo vendore. Let me think it over Lermëni ta mendoj Local Account Binding Lidhje Llogarie Vendore After binding your local account, you can use the following functions: Pas lidhjes së llogarisë tuaj vendore, mund të përdorni funksionet vijuese: WeChat Scan Code Login System Sistem Hyrjesh Me Skanim Kodi WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Përdorim WeChat-i, i cili është i lidhur me ID-në tuaj %1 ID, që të skanoni kod për hyrje te llogaria juaj vendore. Reset password via %1 ID Ricaktojeni fjalëkalimin përmes ID-je %1 Reset your local password via %1 ID in case you forget it. Ricaktoni fjalëkalimin tuaj vendor përmes ID-së %1, në rast se e harroni. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Që të përdorni veçoritë më sipër, ju lutemi, kaloni te Qendra e Kontrollit - Llogari dhe aktivizoni mundësitë përkatëse. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Njëkohësim Me Renë Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Administroni %1 ID tuaj dhe njëkohësoni të dhëna tuajat personale nëpër pajisje. Bëni hyrjen te %1 ID, që të merrni veçori dhe shërbime të personalizuara Shfletuesi, Shitoreje Aplikacionesh, etj. Sign In to %1 ID Bëni hyrjen te %1 ID DeepinIDSyncService Auto Sync Vetë-njëkohësohu Securely store system settings and personal data in the cloud, and keep them in sync across devices Depozitoni në re në mënyrë të parrezik rregullime sistemi dhe të dhëna personale dhe mbajini të njëkohësuara nëpër pajisje System Settings Rregullime Sistemi Last sync time: %1 Kohë njëkohësimi të fundit: %1 Clear cloud data Spastro të dhëna reje Are you sure you want to clear your system settings and personal data saved in the cloud? Jeni i sigurt se doni të spastrohen rregullimet e sistemit tuaj dhe të dhëna personale të ruajtura në re? Once the data is cleared, it cannot be recovered! Pasi të spastrohen të dhënat, s’mund të rikthehen! Cancel Anuloje Clear Spastroji DeepinIDUserInfo Synchronization Service Shërbim Njëkohësimi Account and Security Llogari dhe Siguri Sign out Dilni Go to web settings Kaloni te rregullime web The nickname must be 1~32 characters long Nofka duhet të jetë 1~32 shenja e gjatë DeepinWorker encrypt password failed fshehtëzimi i fjalëkalimit dështoi Wrong password, %1 chances left Fjalëkalim i gabuar, edhe %1 prova The login error has reached the limit today. You can reset the password and try again. U mbërrit në kufi gabimesh hyrjeje për sot. Mund të ricaktoni fjalëkalimin dhe të riprovoni. Operation Successful Veprim i Suksesshëm The nickname can be modified only once a day Nofka mund të ndryshohet vetëm një herë në ditë Deepinid deepin ID ID deepin UOS ID ID UOS Cloud services Shërbime në re DeepinidModel Mainland China Kina Kontinentale Other regions Rajone të tjera The feature is not available at present, please activate your system first Veçoria s’mund të kihet tani për tani, ju lutemi, aktivizoni së pari sistemin tuaj Subject to your local laws and regulations, it is currently unavailable in your region. Subjekt i ligjeve dhe rregulloreve tuaja vendore, aktualisht i papërdorshëm në rajonin tuaj. Defaultapp Default App Aplikacion Parazgjedhje Set the default application for opening various types of files Caktoni aplikacionin parazgjedhje për hapje llojesh të ndryshëm kartelash DefaultappMain Webpage Faqe web Mail Postë Text Tekst Music Muzikë Video Video Picture Foto Terminal Terminal DetailItem Please choose the default program to open '%1' Ju lutemi, zgjidhni programin parazgjedhje për hapjen e '%1' add shtoje Open Desktop file Hapni kartelë Desktop Apps (*.desktop) Aplikacione (*.desktop) All files (*) Krejt kartelat (*) DevelopModePage Root Access Hyrje si Rrënjë Request Root Access Kërkoni Hyrje Si Rrënjë After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Pas kalimit nën mënyrën zhvillues, mund të përfitoni leje rrënje, por prej kësaj mundet edhe të cenohet integriteti i sistemit, ndaj, ju lutemi, përdoreni me kujdes. Allowed E lejuar Enter Tasti Enter Online Në linjë Login UOS ID Bëni hyrjen te ID UOS Offline Jo në linjë Import Certificate Importo Dëshmi Select file Përzgjidhni kartelë Your UOS ID has been logged in, click to enter developer mode Është bërë hyrja në ID-në tuaj UOS, klikoni që të kalohet nën mënyrën zhvillues Please sign in to your UOS ID first and continue Ju lutemi, së pari, bëni hyrjen te Union ID juaj dhe vazhdoni 1.Export PC Info 1. Eksportoni Hollësi PC-je Export Eksportoje 3.Import Certificate 3. Importoni Dëshmi Development and debugging options Mundësi zhvillimi dhe diagnostikimi System logging level Shkallë regjistrimi sistemi Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Ndryshimi i mundësive shpie në regjistrim më të hollësishëm, që mund të ulë funksionimin e sistemit dhe/ose të zërë më tepër hapësirë depozitimi. Off Off Debug Diagnostiko Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Ndryshimi i mundësisë mund të dojë deri në një minutë që të kryhet, pas marrjes së pohimit për rregullim të suksesshëm, ju lutemi, rinisni pajisjen, që të hyjë në fuqi. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. Që të instaloni dhe xhironi aplikacione të panënshkruar, ju lutemi, kaloni te <a style='text-decoration: none;' href='Security Center'> Qendër Sigurie </a> që të ndryshoni rregullimet. To install and run unsigned apps, please go to Security Center to change the settings. Që të instaloni dhe xhironi aplikacione të panënshkruar, ju lutemi, kaloni te Qendër Sigurie, që të ndryshoni rregullimet. You have entered developer mode Keni kaluar në mënyrën zhvillim OK OK 2.please go to %1 to Download offline certificate. 2. ju lutemi, kaloni te %1 që të Shkarkoni dëshmi jashtë linje. The feature is not available at present, please activate your system first. Kjo veçori s’është e passhme tani, ju lutemi, së pari aktivizoni sistemin tuaj. Solid System Read-Only Protection Mbrojtje Vetë-Lexim Sistemi Solid Disabling protection unlocks system directories,This action carries a high risk of system damage. Çaktivizimi i mbrojtjes shkyç drejtori sistemi, ky veprim bart rrezik të madh dëmtimi sistemi. Enable protection to lock system directories and ensure optimal stability. Aktivizoni mbrojtjen, që të kyçe drejtori sistemi dhe të garantohet qëndrueshmëri optimale. Device Bluetooth and Devices Bluetooth dhe Pajisje DisclaimerControl Disclaimer Klauzolë Cancel Anuloje Agree Pajtohuni Display Display Ekran Brightness,resolution,scaling Ndriçim, qartësi, ripërmasim DisplayMain 100% 100% 125% 125% 150% 150% 175% 175% 200% 200% 225% 225% 250% 250% 275% 275% 300% 300% Duplicate Përsëdyte Extend Zgjeroje Default Parazgjedhje Fit Sa ta nxërë Stretch Shformoje Center Qendër Only on %1 Vetëm në %1 Multiple Displays Settings Rregullime për Shumë Ekrane Identify Identifikoje Screen rearrangement will take effect in %1s after changes Risistemimi i ekraneve do të hyjë në fuqi te %1s pas ndryshimeve Mode Mënyrë Main Screen Ekrani kryesor Display And Layout Ekran dhe Skemë Brightness Ndriçim Resolution Qartësi Resize Desktop Ripërmasoni Desktopin Refresh Rate Shpejtësi Rifreskimi Rotation Rrotullim Standard Standard 90° 90° 180° 180° 270° 270° The monitor only supports 100% display scaling Monitoni mbulon vetëm ripërmasim 100% ekrani Eye Comfort Rehati Sysh Enable eye comfort Aktivizo rehati sysh Adjust screen display to warmer colors, reducing screen blue light Përimtoni shfaqjen e ekrani me ngjyra më të ngrohta, duke reduktuar ndriçimin e kaltër Time Kohë All day Tërë ditën Sunset to Sunrise Nga Lindja deri në Perëndim të Diellit Custom Time Kohë Vetjake from nga to deri më Color Temperature Temperaturë Ngjyrash %1x%2 (Recommended) %1x%2 (E rekomanduar) %1x%2 %1x%2 %1Hz (Recommended) %1Hz (E rekomanduar) %1Hz %1Hz Scaling Ripërmasim Dock Desktop and taskbar Desktop dhe shtyllë punësh Desktop organization, taskbar mode, plugin area settings Sistemim desktopi, mënyrë shtylle punësh, rregullime zone shtojcash DockMain Dock Panel Mode Mënyrë Classic Mode Mënyra Klasike Centered Mode Mënyra e Qendërzuar Dock size Madhësi paneli Small I vogël Large I madh Position on the screen Pozicion në ekran Top Në krye Bottom Në fund Left Mjatas Right Djathtas Status Gjendje Keep shown Mbaje të shfaqur Keep hidden Mbaje të fshehur Smart hide Fshehje e mençur Multiple Displays Disa Ekrane Set the position of the taskbar on the screen Caktoni pozicionin në ekran të shtyllës së punëve Only on main Vetëm te kryesori On screen where the cursor is Te ekrani ku gjendet kursori Plugin Area Zonë Shtojcash Select which icons appear in the Dock Përzgjidhni cilat ikona të shfaqen te Paneli Lock the Dock Kyçe Panelin Combine application icons Ndërthur ikona aplikacionesh FileAndFolder Allow below apps to access these files and folders: Lejoji aplikacionet më poshtë të përdorin këto kartela dhe dosje: Documents Dokumente Desktop Desktop Pictures Foto Videos Video Music Muzikë Downloads Shkarkime folder dosje FontSizePage Size Madhësi Standard Font Shkronja Standarde Monospaced Font Shkronja Monospace GeneralPage Power Plans Plane Energjie Power Saving Settings Rregullime Kursimi Energjie Auto power saving on low battery Kursim i automatizuar energjie, kur bateria është e pakët Low battery threshold Prag për bateri të ulët Auto power saving on battery Kursim i automatizuar energjie, kur është nën bateri Wakeup Settings Rregullime Zgjimi Password is required to wake up the computer Që të zgjohet kompjuteri, është i domosdoshëm fjalëkalim Password is required to wake up the monitor Që të zgjohet monitori, është i domosdoshëm fjalëkalim Shutdown Settings Rregullime Fikjeje Scheduled Shutdown Fikje e Planifikuar Time Kohë Repeat Përsëritje Once Një herë Every day Çdo ditë Working days Ditë pune Custom Time Kohë Vetjake Decrease screen brightness on power saver Ule ndriçimin e ekranit nën kursyes energjie GestureModel Three-finger up Sipër me tre gishta Three-finger down Poshtë me tre gishta Three-finger left Majtas me tre gishta Three-finger right Djathtas me tre gishtash Three-finger tap Prekje me tre gishta Four-finger up Sipër me katër gishta Four-finger down Poshtë me katër gishta Four-finger left Majtas me katër gishta Four-finger right Djathas me katër gishta Four-finger tap Prekje me katër gishta HomePage , , ... InterfaceEffectListview Optimal Performance Funksionim Optimal Balance Baraspeshim Best Visuals Anë Pamore Më të Mirat Disable all interface and window effects for efficient system performance. Çaktivizo krejt efektet e ndërfaqes dhe dritareve, për funksionim efikas të sistemit. Limit some window effects for excellent visuals while maintaining smooth system performance. Kufizo disa efekte dritaresh, për anë pamore të shkëlqyera, teksa mirëmbahet funksionim i rrjedhshëm i sistemit. Enable all interface and window effects for the best visual experience. Aktivizo krejt efektet e ndërfaqes dhe dritareve, për më të mirat e anëve pamore. Keyboard Keyboard Tastierë General Settings, input method, shortcuts Rregullime të Përgjithshme, metodë dhëniesh, shkurtore KeyboardMain Common E rëndomtë LangAndFormat Language Gjuhë done u bë edit përpunoni Other languages Gjuhë të tjera add shtoje Region Rajon Area Zonë Operating system and applications may provide you with local content based on your country and region Sistemi operativ dhe aplikacionet mund t’ju japin lëndë vendore bazuar në formate rajonalë Operating system and applications may set date and time formats based on regional formats Sistemi operativ dhe aplikacionet mund të caktojnë formate datash dhe kohe bazuar në formate rajonalë Regional format Format rajonal LangsChooserDialog Add language Shtoni gjuhë Search Kërko Cancel Anuloje Add Shtoje LoginMethod Login method Metodë hyrjeje Password, wechat, biometric authentication, security key Fjalëkalim, wechat, mirëfilltësim biometrik, kyç sigurie Password Fjalëkalim Modify password Ndryshoni fjalëkalim Validity days Ditë vlefshmërie Always Përherë Reset password Ricaktoni fjalëkalimin LogoModule Copyright© 2011-%1 Deepin Community Të drejta kopjimi© 2011-%1 Bashkësia Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD Të drejta kopjimi© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Mbytje e Automatizuar Zhurmash Input Volume Volum Në Hyrje Input Level Nivel Në Hyrje Input No input device for sound found S’u gjet pajisje në hyrje për zërin Input Device Pajisje Në Hyrje Mouse Mouse and Touchpad Mi dhe Touchpad Common、Mouse、Touchpad MouseMain Common I rëndomtë Mouse Mi Touchpad Touchpad MousePage Mouse Mi Pointer Speed Shpejtësi Treguesi Slow E ngadaltë Fast E shpejtë Pointer Size Madhësi Treguesi Mouse Acceleration Përshpejtim Miu Disable touchpad when a mouse is connected Çaktivizo touchpad-in, kur lidhet një mi Natural Scrolling Rrëshqitje e Natyrshme Small I vogël Medium Mesatar Large I madh X-Large X-I madh Some apps require logout or system restart to take effect Disa aplikacione lypin dalje nga llogaria, ose rinisje sistemi, që të hyjnë në fuqi ndryshimet MyDevice My Devices Pajisjet e Mia NativeInfoPage UOS UOS Computer name Emër kompjuteri It cannot start or end with dashes S’mund të fillojë, ose përfundojë me vija ndarëse në mes OS Name Emër OS-i Version Version Edition Edicion Type Lloj bit bit Authorization Autorizim System installation time Kohë instalimi sistemi Kernel Kernel Graphics Platform Platformë Grafike Processor Procesor Memory Kujtesë 1~63 characters please Ju lutemi, 1~63 shenja Notification DND mode, app notifications Mënyrë MMSh, njoftime aplikacionesh Notification Njoftim NotificationMain Do Not Disturb Settings Rregullime për “Mos më Shqetësoni” App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Njoftimet e plaikacioneve s’do të shfaqen në desktop dhe tingujt do të heshtohen, por mundeni të shihni krejt mesazhet te qendra e njoftimeve. Enable Do Not Disturb Aktivizo “Mos më Shqetësoni” When the screen is locked Kur ekrani është i kyçur Number of notifications shown on the desktop Numër njoftimesh për t’u shfaqur te dekstopi App Notifications Njoftime Aplikacionesh Allow Notifications Lejo Njoftime Display notification on desktop or show unread messages in the notification center Shfaq njoftim në dekstop, ose shfaq te qendra e njoftimeve mesazhe të palexuar Desktop Desktop Lock Screen Kyçe Ekranin Notification Center Qendër Njoftimesh Show message preview Shfaq paraparje mesazhi Play a sound Luaj një tingull OtherDevice Other Devices Pajisje të Tjera Show Bluetooth devices without names Shfaq pajisje Bluetooth pa emra PasswordLayout Current password Fjalëkalimi i tanishëm Required I domosdoshme Weak I dobët Medium Çka Strong I fortë Repeat Password Rijepeni Fjalëkalimin Password hint Ndihmëz fjalëkalimi Optional Opsionale Password cannot be empty Fjalëkalimi s’mund të jetë i zbrazët Passwords do not match Fjalëkalimet s’përputhen The hint is visible to all users. Do not include the password here. Ndihmëza është e dukshme për krejt përdoruesit. Këtu mos përfshini fjalëkalimin. New password Fjalëkalim i ri New password should differ from the current one Fjalëkalimi i ri duhet të jetë i ndryshëm nga i tanishmi The password cannot be the same as the username. Fjalëkalimi s’mund të jetë i njëjti me emrin e përdoruesit. PasswordModifyDialog Modify password Ndryshoni fjalëkalim Reset password Ricaktoni fjalëkalimin Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Gjatësia e fjalëkalimeve duhet të jetë e pakta 8 shenja dhe fjalëkalimi duhet të përmbajë një ndërthurje e të paktën 3 nga shkronjat e mëdha, shkronjat e vogla, numrat dhe simbolet vijuese. Ky lloj fjalëkalimesh është më i siguruar. Resetting the password will clear the data stored in the keyring. Ricaktimi i fjalëkalimit do të spastrojë të dhënat e depozituara te vargu i kyçeve. Cancel Anuloje Personalization Personalization Personalizim PersonalizationInterface Light E çelët Auto Auto Dark E errët Picker service is not available Invalid color format: %1 Format i pavlefshëm ngjyrash: %1 PersonalizationMain Theme Temë Appearance Dukje Window effect Efekt dritaresh Personalize your wallpaper and screensaver Personalizoni sfondin dhe ekrankursyesin tuaj Screensaver Ekrankursyes Colors and icons Ngjyra dhe ikona Adjust accent color and theme icons Përimtoni njgyrë theksimesh dhe ikona temash Font and font size Shkronja dhe madhësi shkronjash Change system font and size Ndryshoni shkronja sistemi dhe madhësi të tyre Wallpaper Sfond Select light, dark or automatic theme appearance Përzgjidhni temë të çelët, të errët ose të automatizuar Interface and effects, rounded corners Ndërfaqe dhe efekte, cepa të rrumbullakosur PersonalizationWorker Custom Vetjake PluginArea Plugin Area Zonë Shtojcash Select which icons appear in the Dock Përzgjidhni cilat ikona shfaqen te Paneli Power Power saving settings, screen and suspend Rregullime kursimi energjie, ekran dhe pezullim Power Energji PowerMain General Të përgjithshme Power plans, power saving settings, wakeup settings, shutdown settings Regjime energjie, rregullime kursimi energjie, rregullime zgjimi, rregullime fikjeje Plugged In Në Prizë Screen and suspend Ekran dhe pezullim On Battery Me bateri screen and suspend, low battery, battery management ekran dhe pezullim, bateri e pakët, administrim baterie PowerOperatorModel Shut down Fike Suspend Pezulloje Hibernate Plogështoje Turn off the monitor Fike monitorin Show the shutdown Interface Shfaq Ndërfaqen e fikjes Do nothing Mos bëj gjë PowerPage Screen and Suspend Ekran dhe Pezullim Turn off the monitor after Fike ekranin pas Lock screen after Kyçe ekranin pas Computer suspends after Kompjuteri pezullohet pas When the lid is closed Kur mbyllet kapaku When the power button is pressed Kur shtypet butoni i energjisë PowerPlansListview High Performance Balance Performance Baraspesho Funksionimin Aggressively adjust CPU operating frequency based on CPU load condition Rregullo në mënyrë agresive frekuencën e punës së CPU-së bazuar në kushte ngarkese të CPU-së Balanced E baraspeshuar Power Saver Kursyes Energjie Prioritize performance, which will significantly increase power consumption and heat generation Jepi përparësi funksionimit, çka do të rrisë në mënyrë të dukshme konsumin e energjisë dhe prodhimin e nxehtësisë Balancing performance and battery life, automatically adjusted according to usage Baraspeshim funksionimi dhe jetëgjatësie baterie, e përshtatur automatikisht sipas përdorimit Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Jepi përparësi jetëgjatësisë së baterisë, prej kësaj sistemi do të sakrifikojë në shkallë funksionimi, për të reduktuar harxhimin e energjisë PowerWorker Minutes Minuta Hour Orë Never Kurrë Privacy Privacy and Security Privatësi dhe Siguri Camera, folder permissions Kamerë, leje mbi dosje PrivacyMain Camera Kamerë Choose whether the application has access to the camera Zgjidhni nëse aplikacioni mund të përdorë kamerën apo jo Files and Folders Kartela dhe Dosje Choose whether the application has access to files and folders Zgjidhni nëse aplikacioni mund të përdorë kartela dhe dosje PrivacyPolicyPage Privacy Policy Rregulla Privatësie Copy Link Address Kopjo Adresë Lidhjeje PwqualityManager Password cannot be empty Fjalëkalimi s’mund të jetë i zbrazët Password must have at least %1 characters Fjalëkalimi duhet të ketë të paktën %1 shenja Password must be no more than %1 characters Fjalëkalimi s’duhet të jetë më i madh se %1 shenja Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Fjalëkalimi mund të përmbajë vetëm shkronja anglisht (bëhet dallimi mes shkrimit me të mëdha dhe të vogla), numra ose simbole speciale (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Ju lutemi, jo më shumë se %1 shenja palindromike No more than %1 monotonic characters please Ju lutemi, jo më shumë se %1 shenja monotonike No more than %1 repeating characters please Ju lutemi, jo më shumë se %1 shenja që përsëriten Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Fjalëkalimi duhet të përmbajë vetëm shkronja të mëdha, shkronja të vogla, numra dhe simbole (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Fjalëkalimi s’duhet të përmbajë më shumë se 4 shenja palindromike Do not use common words and combinations as password Mos përdorni si fjalëkalim fjalë dhe kombinime të zakonshme Create a strong password please Ju lutemi, krijoni një fjalëkalim të fortë It does not meet password rules S’plotëson rregullat për fjalëkalime QObject Control Center Qendër Kontrolli Activated E aktivizuar View Shiheni To be activated Për t’u aktivizuar Activate Aktivizoje Expired Ka skaduar In trial period Në periudhë prove Trial expired Prova skadoi dde-control-center dde-control-center Touch Screen Settings Rregullime Ekrani Me Prekje The settings of touch screen changed Rregullimet për ekranin me prekje u ndryshuan This system wallpaper is locked. Please contact your admin. Ky sfond sistemi është i kyçur. Ju lutemi, lidhuni me përgjegjësin tuaj. %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search Kërko Default formats Formate parazgjedhje First day of week Dita e parë e javës Short date Datë e shkurtër Long date Datë e gjatë Short time Kohë e shkurtër Long time Kohë e gjatë Currency symbol Simbol monedhe Digit Shifër Paper size Madhësi letre Cancel Anuloje Save Ruaje Regional format Format rajonal RegionsChooserWindow Search Kërko RegisterDialog Set a Password Caktoni një Fjalëkalim 8-64 characters 8-64 shenja Repeat the password Rijepni fjalëkalimin Cancel Anuloje Confirm Ripohojeni Passwords don't match Fjalëkalimet s’përputhen ScheduledShutdownDialog Customize repetition time Përshtatni kohë përsëritjesh Cancel Anuloje Save Ruaje ScreenSaverPage Screensaver Ekrankursyes preview paraparje Personalized screensaver Ekrankursyes i personalizuar setting rregullim idle time kohë plogështie 1 minute 1 minutë 5 minute 5 minuta 10 minute 10 minuta 15 minute 15 minuta 30 minute 30 minuta 1 hour 1 orë never kurrë Password required for recovery Për rimarrje lypset fjalëkalim Picture slideshow screensaver Ekrankursyes “shfaqje diapozitivash” System screensaver Ekrankursyes sistemi SearchableListViewPopup Search Kërko No search results S’ka përfundime kërkimi ShortcutSettingDialog Add custom shortcut Shtoni shkurtore vetjake Name: Emër: Required E domosdoshme Command: Urdhër: Shortcut Shkurtore None Asnjë Cancel Anuloje Add Shto The shortcut name is already in use. Choose a different name. Emri i shkurtores është tashmë në përdorim. Zgjidhni një emër tjetër Change custom shortcut Ndryshoni shkurtore vetjake please enter a shortcut key ju lutemi, jepni një tast shkurtoreje Save Ruaje click Save to make this shortcut key effective që ta bëni këtë shkurtore të hyjë në fuqi, klikoni mbi Ruaje click Add to make this shortcut key effective që ta bëni këtë shkurtore të hyjë në fuqi, klikoni mbi Shtoje Shortcuts Shortcuts Shkurtore System shortcut, custom shortcut Shkurtore sistemi, shkurtore vetjake Search shortcuts Shkurtore kërkimesh done u bë edit përpunojeni Click Klikim Cancel Anuloje or ose Replace Zëvendësoje Restore default Rikthe parazgjedhjen Add custom shortcut Shtoni shkurtore vetjake please enter a new shortcut key ju lutemi, jepni për shkurtoren një tast të ri Sound Sound Tingull Output, input, sound effects, devices Tinguj në dalje, në hyrje, efekte zanore, pajisje SoundDevicemanagesPage Output Devices Pajisje Në Dalje Select whether to enable the devices Përzgjidhni të aktivizohen ajo pajisjet Input Devices Pajisje Në Hyrje SoundEffectsPage Sound Effects Efekte Zanore SoundMain Settings Rregullime Sound Effects Efekte Zanore Enable/disable sound effects Aktivizoni/çaktivizoni efekte zanore Enable/disable audio devices Aktivizoni/çaktivizoni pajisje audio Devices Management Administrim Pajisjesh SoundModel Boot up Nisu Shut down Fike Log out Dalje Wake up Zgjohu Volume +/- Volum +/- Notification Njoftim Low battery Bateri e pakët Send icon in Launcher to Desktop Dërgoje ikonën te Nisës në Desktop Empty Trash Zbraz Hedhurinat Plug in Fute Plug out Nxirre Removable device connected U lidh pajisje e heqshme Removable device removed U hoq pajisje e heqshme Error Gabim SpeakerPage Mode Mënyrë Output Volume Volum Në Dalje Volume Boost Përforcim Volumi If the volume is louder than 100%, it may distort audio and be harmful to output devices Nëse volumi është më i fortë se 100%, mund të shformohen tingujt dhe të jetë e dëmshme për altoparlantët tuaj Left Majtas Right Djathtas Output Në Dalje No output device for sound found S’u gjet pajisje output-i për zërin Left Right Balance Balancë Majtas-Djathtas Merge left and right channels into a single channel Përzje në një kanal të vetëm kanalet majtas dhe djathtas Whether the audio will be automatically paused when the current audio device is unplugged Të ndalet a jo automatikisht audioja, kur hiqet pajisja audio e çastit Mono Audio Audio Mono Auto Pause Pauzë e Automatizuar Output Device Pajisje Në Dalje SyncInfoListModel Sound Tingull Power Energji Mouse Mi Update Përditësoje Screensaver Ekrankursyes System Common settings Rregullime të rëndomëta System Sistem SystemInfo Auxiliary Information Informacion Ndihmës SystemInfoMain About This PC Mbi Këtë PC System version, device information Version sistemi, informacion pajisjesh View the notice of open source software Shihni shënimin rreth software-i me burim të hapët User Experience Program Join the user experience program to help improve the product Merrni pjesë te “User Experience Program” që të ndihmoni të përmirësohet produkti End User License Agreement Marrëveshje Licence Përdoruesi të Thjeshtë View the end user license agreement Shihni marrëveshjen e licencës së përdoruesit të thjeshtë Privacy Policy Rregulla Privatësie View information about privacy policy Shihni informacion rreth rregullash privatësie Open Source Software Notice Shënim Software-i Me Burim të Hapët ThemeSelectView More Wallpapers Më Tepër Sfonde TimeAndDate Auto sync time Vetënjëkohësohë kohën Ntp server Shërbyes NTP System date and time Datë dhe kohë e sistemit Customize Përshtateni Settings Rregullime Server address Adresë shërbyesi Required E domosdoshme The ntp server address cannot be empty Adresa e shërbyesit ntp s’mund të jetë e zbrazët Use 24-hour format Përdorin formatin 24-orësh system time zone zonë kohore sistemi Timezone list Listë zonash kohore Add Shtoje TimeRange from nga to TimeoutDialog Save the display settings? Të ruhen rregullimet për ekranin? Settings will be reverted in %1s. Rregullimet do të kthehen te %1s. Revert Riktheji Save Ruaje TimezoneDialog Add time zone Shtoni zonë kohore Determine the time zone based on the current location Përcaktoje zonën kohore bazuar në vendndodhjen aktuale Time zone: Zonë kohore: Nearest City: Qyteti Më i Afërt: Cancel Anuloje Save Ruaje TouchScreen TouchScreen Ekran me prekje Set up here when connecting the touch screen Touchpad Basic Settings Rregullime Elementare Touchpad Touchpad Pointer Speed Shpejtësi Treguesi Slow E ngadaltë Fast E shpejtë Disable touchpad during input Tap to Click Prekeni që të Klikohet Natural Scrolling Rrëshqitje e Natyrshme Three-finger gestures Gjeste me tre gishta Four-finger gestures Gjeste me katër gishta Gestures Gjeste Touchscreen Touchscreen Ekran me prekje Configuring Touchscreen Formësim Ekrani Me Prekje TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Merrni Pjesë te “User Experience Program” Copy Link Address Kopjo Adresë Lidhjeje VerifyDialog Security Verification Verifikim Sigurie The action is sensitive, please enter the login password first Veprimi është me spec, ju lutemi, së pari jepni fjalëkalimin për hyrje 8-64 characters 8-64 shenja Forgot Password? Harruat Fjalëkalimin? Cancel Anuloje Confirm Ripohojeni Wacom wacom Configuring wacom Formësim wacom-i WacomMain wacom Pen Mode Mënyra Penë Mouse Mode Mënyra Mi Pressure Sensitivity Ndjeshmëri Trysnie Light E vogël Heavy E madhe Model Model WallpaperPage wallpaper sfond My pictures Fotot e mia System Wallpaper Sfond Sistemi Solid color wallpaper Sfond ngjyrë e plotë Customizable wallpapers Sfonde që mund të përshtaten fill style stil mbushjeje Automatic wallpaper change Ndryshim i automatizuar sfondi never kurrë 30 second 30 sekonda 1 minute 1 minutë 5 minute 5 minuta 10 minute 10 minuta 15 minute 15 minuta 30 minute 30 minuta login hyrje wake up zgjohu Live Wallpaper Sfond Live 1 hour 1 orë System Wallpapers Sfonde Sistemi WallpaperSelectView unfold shmbështille Set lock screen Ujdisni kyçje ekrani Set desktop Caktoni desktop show all - %1 items shfaqi krejt - %1 objektet Add Picture Shtoni Foto WindowEffectPage Interface and Effects Ndërfaqe dhe Efekte Window Settings Rregullime Dritareje Window rounded corners Cepa të rrumbullakët dritaresh None Asnjë Small E vogël Large E madhe Enable transparent effects when moving windows Aktivizo efekte tejdukshmërie, kur lëvizet një dritare Window Minimize Effect Efekt Minimizimi Dritaresh Scale Ripërmasojeni Magic Lamp Llambë Magjike Opacity Patejdukshmëri Low E ulët High E lartë Scroll Bars Shtylla Rrëshqitjeje Show on scrolling Shfaqe gjatë rrëshqitjesh Keep shown Mbaje të shfaqur Compact Display Shfaqje Kompakte If enabled, more content is displayed in the window. Në u aktivizoftë, te dritarja shfaqet më tepër lëndë. Title Bar Height Lartësi Shtylle Titulli Only suitable for application window title bars drawn by the window manager. E përshtatshme vetëm për shtylla titujsh dritaresh aplikacionesh të vizatuara nga përgjegjësi i dritareve. Extremely small Tejet e vockël Medium describe size of window rounded corners Mesatare Medium describe height of window title bar Mesatare dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Kineze Tradicionale (Kineze Hong-Kongu) Traditional Chinese (Chinese Taiwan) Kineze Tradicionale (Kineze Tajvani) Min Nan Chinese Kineze Min Nan dcc::Locale::regionNames Taiwan China Kina Tajvan dccV25::AccountsController Username must be between 3 and 32 characters Emri i përdoruesit duhet të jetë nga 3 deri në 32 shenja The first character must be a letter or number Shenja e parë duhet të jetë shkronjë ose numër Your username should not only have numbers Emri juaj i përdoruesit s’duhet të përmbajë vetëm numra The username has been used by other user accounts Emri i përdoruesit është përdorur nga të tjera llogari përdoruesish The full name is too long Emri i plotë është shumë i gjatë The full name has been used by other user accounts Emri i plotë është përdorur nga të tjera llogari përdoruesish Wrong password Fjalëkalim i gabuar Standard User Përdorues Standard Administrator Përgjegjës Customized E përshtatur dccV25::AccountsWorker Your host was removed from the domain server successfully Streha juaj u hoq me sukses nga shërbyesi i përkatësive Your host joins the domain server successfully Streha juaj u bë me sukses pjesë e shërbyesit të përkatësive Your host failed to leave the domain server S’u arrit të braktisej shërbyesi i përkatësive nga streha juaj Your host failed to join the domain server S’u arrit që streha juaj të bëhej pjesë e shërbyesit të përkatësive AD domain settings Rregullime përkatësie AD Password not match Fjalëkalimi s’përputhet dccV25::AvatarTypesModel Dimensional Përmasor Flat I sheshtë dccV25::FaceAuthController Faceprint Face Fytyrë Use your face to unlock the device and make settings later Përdorni fytyrën tuaj që të shkyçni pajisjen dhe për të bërë ujdisjen më vonë dccV25::FingerprintAuthController Fingerprint Shenja gishtash Place your finger Vendosni gishtin tuaj Place your finger firmly on the sensor until you're asked to lift it Vendoseni gishtin tuaj te ndijuesi pa e lëvizur, deri sa t’ju kërkohet ta hiqni Lift your finger Hiqeni gishtin Lift your finger and place it on the sensor again Ngrijeni gishtin dhe rivendoseni te ndijuesi Lift your finger and do that again Ngrijeni gishtin dhe ribëjeni Scan Suspended Skanimi u Pezullua Scan the edges of your fingerprint Skanoni skajet e shenjës tuaj të gishtit Place the edges of your fingerprint on the sensor Vendosni te ndijuesi skajet e mollëzës së gishtit tuaj Adjust the position to scan the edges of your fingerprint Rregullojeni pozicionin që të skanohen skajet e shenjës së gishtit tuaj Fingerprint added U shtuan shenja gishtash dccV25::IrisAuthController Iris Bebe syri Use your iris to unlock the device and make settings later Përdorni fytyrën tuaj që të shkyçni pajisjen dhe për të bërë ujdisjen më vonë dccV25::KeyboardController This shortcut conflicts with [%1] Kjo shkurtore përplaset me [%1] dccV25::PwqualityManager Password cannot be empty Fjalëkalimi s’mund të jetë i zbrazët Password must have at least %1 characters Fjalëkalimi duhet të ketë e pakta %1 shenja Password must be no more than %1 characters Fjalëkalimi s’duhet të jetë më tepër se %1 shenja Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Fjalëkalimi mund të përmbajë vetëm shkronja anglisht (bëhet dallimi mes shkrimit me të mëdha dhe të vogla), numra ose simbole speciale (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Ju lutemi, jo më shumë se %1 shenja palindromike No more than %1 monotonic characters please Ju lutemi, jo më shumë se %1 shenja monotonike No more than %1 repeating characters please Ju lutemi, jo më shumë se %1 shenja të përsëritura Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Fjalëkalimi duhet të përmbajë shkronja të mëdha, shkronja të vogla, numra dhe simbole (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Fjalëkalimi s’duhet të përmbajë më shumë se 4 shenja palindromike Do not use common words and combinations as password Mos përdorni si fjalëkalim fjalë dhe kombinime të zakonshme Create a strong password please Ju lutemi, krijoni një fjalëkalim të fortë It does not meet password rules S’plotëson rregullat për fjalëkalime At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. Përfshini të paktën %1 lloje nga shkronja me të vogla, me të mëdha, numra dhe simbole dhe fjalëkalimi s’mund të jetë i njëjtë me emrin e përdoruesit. dccV25::ShortcutModel System Sistem Window Dritare Workspace Hapësirë pune AssistiveTools Mjete Ndihmuese Custom Vetjake None Asnjë ================================================ FILE: translations/dde-control-center_sr.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Повезани сте Not connected Нисте повезани BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Отисак прста 1 Fingerprint2 Отисак прста 2 Fingerprint3 Отисак прста 3 Fingerprint4 Отисак прста 4 Fingerprint5 Отисак прста 5 Fingerprint6 Отисак прста 6 Fingerprint7 Отисак прста 7 Fingerprint8 Отисак прста 8 Fingerprint9 Отисак прста 9 Fingerprint10 Отисак прста 10 Scan failed Неуспешно очитавање The fingerprint already exists Отисак прста већ постоји Please scan other fingers Молимо очитајте друге прсте Unknown error Непозната грешка Scan suspended Очитавање је обустављено Cannot recognize Непрепознатљиво Moved too fast Пребрзо склоњен Finger moved too fast, please do not lift until prompted Прст је пребрзо склоњен, молимо не подижите до обавештења Unclear fingerprint Нејасан отисак прста Clean your finger or adjust the finger position, and try again Очистите прст или прилагодите позицију прста и покушајте поново Already scanned Већ очитано Adjust the finger position to scan your fingerprint fully Прилагодите положај прста да очитате цео отисак Finger moved too fast. Please do not lift until prompted Прст је пребрзо склоњен. Молимо не подижите до обавештења Lift your finger and place it on the sensor again Склоните прст и поново га прислоните на читач Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Откажи Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Идентификација је неопходна за промену НТП сервера Authentication is required to set the system timezone Идентификација је неопходна за поставку временске зоне DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Приказ Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Аутоматско сузбијање буке Input Volume Улазна јачина Input Level Улазни ниво Input No input device for sound found Input Device Улазни уређај Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization Личне промене PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Прилагођен PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Лозинка не може бити празна Password must have at least %1 characters Лозинка мора садржати најмање %1 карактера Password must be no more than %1 characters Лозинка не може бити дужа од %1 карактера Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Лозинка може садржати само енглеска слова (осетљива на величину), бројеве и специјалне карактере (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Лозинка може садржати само велика и мала слова, бројеве и специјалне карактере (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Лозинка не сме садржати више од 4 палиндромна карактера Do not use common words and combinations as password Немојте користити уобичајене речи и комбинације као лозинку Create a strong password please Молимо направите јаку лозинку It does not meet password rules Не задовољава правила за лозинке QObject Control Center Контролни Центар Activated Активиран View Прегледај To be activated Потребно активирати Activate Активирај Expired Истекло In trial period Пробни период Trial expired Пробни период је истекао dde-control-center Touch Screen Settings Подешавање екрана на додир The settings of touch screen changed Подешавања екрана на додир су промењена This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Звук Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects Звучни ефекти SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Покретање Shut down Искључи Log out Одјави се Wake up Буђење Volume +/- Гласноћа +/- Notification Обавештења Low battery Батерија при крају Send icon in Launcher to Desktop Слање иконице из Покретача Програма на Радну површину Empty Trash Пражњење смећа Plug in Прикључење Plug out Ископчавање Removable device connected Уклоњиви уређај прикључен Removable device removed Уклоњиви уређај уклоњен Error Грешка SpeakerPage Mode Режим Output Volume Излазна jачина Volume Boost Увећање јачине If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Лево Right Десно Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device Излазни уређај SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Врати Претходно Save Сачувај TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Традиционални кинески (кинески Хонг Конг) Traditional Chinese (Chinese Taiwan) Традиционални кинески (кинески Тајван) Min Nan Chinese dcc::Locale::regionNames Taiwan China Тајван Кина dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Ова пречица се конфликтује са [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Систем Window Прозор Workspace Радни простор AssistiveTools Помоћни алати Custom Прилагођено None Ништа ================================================ FILE: translations/dde-control-center_sv.ts ================================================ AccountSettings edit redigera Add new user Lägg till ny användare Set fullname Ställ in fullt namn Login settings Inloggningstillaggnings Login without password Inloggning utan lösenord Delete current account Ta bort aktuellt konto Group setting Gruppinställningar Account groups Kontogrupper done färdig Group name Gruppnamn Add group Lägg till grupp Auto login Automatisk inloggning Account Information Kontoinformation Account name, account fullname, account type Kontonamn, fullt namn, kontotyp Account name Kontonamn Account fullname Fullt namn Account type Kontotyp The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face Registrera ansikte I have read and agree to the Jag har läst och godkänt Disclaimer Varningsbeteende Next Face enrolled Ansikte registrerat Failed to enroll your face Misslyckades med att registrera ditt ansikte Done Cancel Retry Enroll Försök igen Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Registrera fingret Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Placera det finger du vill registrera i fingerprint-sensorn och rör det från nedan till övre. När du har slutfört åtgärden, vänligen hejka dit din finger. I have read and agree to the Jag har läst och godkänt Disclaimer Varning Next Retry Enroll Försök igen "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Biometrisk autentisering är en funktion för användaridentitetsautentisering som tillhandahålls av UnionTech Software Technology Co., Ltd. Genom biometrisk autentisering kommer de biometriska data som samlat in att jämföras med de som lagras på enheten, och användaridentiteten kommer att verifieras baserat på jämförelseresultatet. Vänligen notera att UnionTech Software Technology Co., Ltd. kommer inte att samla in eller åtkomst till dina biometriska data, vilka kommer att lagras på din lokala enhet. Vänligen aktivera endast biometrisk autentisering i ditt personliga enhet och använd dina egna biometriska data för relaterade operationer, och ta bort eller ta bort andra personers biometriska data på enheten på ett snabbt och effektivt sätt, annars kommer du att ta på risken som uppstår därifrån. UnionTech Software Technology Co., Ltd. är engagerat att forskar och förbättra säkerheten, noggrannheten och stabiliteten för biometrisk autentisering. Eftersom det finns faktorer och riskkontroll som miljö, utrustning, teknik och andra faktorer, kan det inte garanteras att du kommer att lyckas med biometrisk autentisering i viss mån. Därför vänligen inte ta biometrisk autentisering som den enda sättet att logga in på UOS. Om du har några frågor eller förslag när du använder biometrisk autentisering, kan du ge feedback genom AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Automatisk inloggning kan aktiveras för endast en konto, vänligen inaktivera den för konto "%1" först Ok OK AvatarSettingsDialog Images Human Människa Animal Djur Scenery Sättning Illustration Illustration Emoji Emoji custom anpassad Cartoon style Manga stil Dimensional style Dimensionell stil Flat style Platt stil Cancel Save BatteryPage Screen and Suspend Slå av skärmen och häng paus Turn off the monitor after Slå av skärmen efter Lock screen after Lås skärmen efter Computer suspends after Datorn pauserar efter When the lid is closed När skärmfönstret stängs When the power button is pressed När trycks på maktknappen Low Battery Låg batteri Low battery notification Meddelande om låg batteri Auto suspend Automatisk suspendering Auto Hibernate Automatisk hibernation Low battery threshold Nedåt batterilivslöftesvärde Battery Management Batterihantering Display remaining using and charging time Visa kvarvarande användning och laddningstid Maximum capacity Maksimal kapacitet Low battery level Nedåt batterilivslängd Disable Avaktivera BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth är av, och namnet visas som "%1" Bluetooth is turned on, and the name is displayed as "%1" Bluetooth är på, och namnet visas som "%1" BlueToothDeviceListView Disconnect Connect Send Files Skicka filer Rename Byt namn Remove Device Ta bort enhet Select file Välj fil BluetoothCtl Edit Allow other Bluetooth devices to find this device Tillåt andra Bluetooth-enheter att hitta denna enhet To use the Bluetooth function, please turn off För att använda Bluetooth-funktionen, vänligen avaktivera Airplane Mode Flytturkonditioner Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Ansluten Not connected Inte ansluten BootPage Startup Settings Startinställningar You can click the menu to change the default startup items, or drag the image to the window to change the background image. Du kan klicka på menyn för att ändra standardstartelement, eller dra bilden till fönstret för att ändra bakgrundsbild. grub start delay grub startfördröjning theme tema After turning on the theme, you can see the theme background when you turn on the computer Efter att aktiverat tema kan du se teman bakgrund när du startar datorn Boot menu verification StartmenyalVerifiering After opening, entering the menu editing requires a password. Efter att öppnat krävs ett lösenord för att gå in och redigera menyn. Change Password Ändra Lösenord Change boot menu verification password Ändra startmenyalverifieringslösenord Set the boot menu authentication password Ställ in autentiseringslösenordet för startmenyn User Name : Användarnamn : root root New Password : Nytt Lösenord : Required Password cannot be empty Lösenordet kan inte vara tomt Passwords do not match Lösenorden matchar inte Repeat password: Repetera lösenord: Cancel Sure Värdet Start animation Starta animation Adjust the size of the logo animation on the system startup interface Justera storleken på logotypanimationen på systemstartskärmen Camera Allow below apps to access your camera: Tillåt nedanstående program att komma åt din kamera: CharaMangerModel Fingerprint1 Fingerprint1 Fingerprint2 Fingerprint2 Fingerprint3 Fingerprint3 Fingerprint4 Fingerprint4 Fingerprint5 Fingerprint5 Fingerprint6 Fingerprint6 Fingerprint7 Fingerprint7 Fingerprint8 Fingerprint8 Fingerprint9 Spåra 9 Fingerprint10 Spåra 10 Scan failed Skanning misslyckades The fingerprint already exists Fingeravtrycket finns redan Please scan other fingers Skanna andra fingrar Unknown error Okänt fel Scan suspended Skanning pausad Cannot recognize Kan inte identifiera Moved too fast Flyttade för snabbt Finger moved too fast, please do not lift until prompted Fingret flyttades för snabbt, vänligen släp pa tillbaka förrän du får ett meddelande Unclear fingerprint Osäkert fingeravtryck Clean your finger or adjust the finger position, and try again Rensa din finger eller justera fingerens position och försök igen Already scanned Redan skannat Adjust the finger position to scan your fingerprint fully Justera fingerens position för att skanna hela fingeravtrycket Finger moved too fast. Please do not lift until prompted Fingret flyttades för snabbt. Vänligen släp pa tillbaka förrän du får ett meddelande Lift your finger and place it on the sensor again Släp upp fingret och placera det på sensorn igen Position your face inside the frame Placera din ansiktsbild inuti ramen Face enrolled Ansikte registrerat Position a human face please Placera ett ansikte, vänligen Keep away from the camera Bli bortom kameran Get closer to the camera Kom närmare kameran Do not position multiple faces inside the frame Placera inte flera ansikten inuti ramen Make sure the camera lens is clean Säkerställ att kameran lens är ren Do not enroll in dark, bright or backlit environments registrera inte i mörka, ljusa eller baklysade miljöer Keep your face uncovered Bli ansiktsutrymme Scan timed out Scannen tidsutgått Cancel Avbryt Camera occupied! ColorAndIcons Accent Color Accent färg Icon Settings Ikoninställningar Icon Theme Customize your theme icon Anpassa ditt tema ikon Cursor Theme Customize your theme cursor Anpassa ditt tema muspekare ComfirmDeleteDialog Are you sure you want to delete this account? Är du säker på att du vill ta bort denna konto Delete account directory Cancel Delete ComfirmSafePage Go to settings Gå till inställningar Cancel Common Common Vanliga Repeat delay Upprepningsfördröjning Short Long Repeat rate Uppprepningstakt Slow Fast Numeric Keypad Talrutin test here testa här Caps lock prompt Caps lock meddelande Double Click Speed Dubbelklickhastighet Double Click Test Dubbelklicktest Left Hand Mode Vänsterhandläge Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Stor storlek Small size Liten storlek Failed to get root access Kunde inte få root åtkomst Please sign in to your Union ID first Var vänlig att logga in på din Union ID först Cannot read your PC information Kan inte läsa din datorinformation No network connection Ingen nätverksanslutning Certificate loading failed, unable to get root access Kortladdningen misslyckades, kan inte få root åtkomst Signature verification failed, unable to get root access Verifiering av signatur misslyckades, kan inte få root tillgång Agree and Join User Experience Program Godkänn och gå med i Användarupplevelsesprogrammet The Disclaimer of Developer Mode Varning om utvecklarläge Agree and Request Root Access Godkänn och begär root tillgång Start setting the new boot animation, please wait for a minute Starta att ställa in den nya boot-animeringen, vänta en minut Setting new boot animation finished Ny boot-animering ställt in The settings will be applied after rebooting the system Inställningarna kommer att tillämpas efter att systemet har startats om Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Lösenordet måste innehålla siffror och bokstäver Password must be between 8 and 64 characters Lösenordet måste vara mellan 8 och 64 tecken CreateAccountDialog Create a new account Skapa ett nytt konto Account type Kontotyp UserName Användarnamn Required FullName Fullt namn Optional Cancel Create account Skapa konto Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Du har fortfarande inte uppladdat ett avatar-bild. Klicka eller dra och släpp för att uppladda en bild. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available tillgänglig DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Godkänn och gå med i Användarupplevelsesprogrammet <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Datum- och tidsinställning Date Datum Year Month Day Time Tid Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local %1 timmar senare än lokalt Space Mellanrum Week Vecka First day of week Första dagen i veckan Short date Kort datum Long date Lång datum Short time Kort tid Long time Lång tid Currency symbol Valutabelik Positive currency Positiv valuta Negative currency Negativ valuta Decimal symbol Desimaltecken Digit grouping symbol Grupperings-tecken för siffror Digit grouping Gruppering av siffror Page size Sidan storlek Example DatetimeWorker Authentication is required to change NTP server Autentisering krävs för att ändra NTP-server Authentication is required to set the system timezone Autentisering krävs för att ställa in tidszon DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. Styrcentrum ger alternativ för systeminställningar. DeepinIDAccountSecurity Bind WeChat Anslut WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Genom att ansluta WeChat kan du logga in på din %1 ID och lokala konton säkert och snabbt. Unlinked Avkopplad Unbinding Avkoppling Link Anslut Are you sure you want to unbind WeChat? Är du säker på att du vill avkoppla WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Efter att du har avkopplat WeChat kommer du inte att kunna använda WeChat för att scanna QR-koden för att logga in på %1 ID eller lokala konton. Let me think it over Låt mig tänka på det Local Account Binding Lokalt konto bindning After binding your local account, you can use the following functions: Efter att binda ditt lokala konto kan du använda följande funktioner: WeChat Scan Code Login System WeChat Skanera koden inloggningssystem Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Använd WeChat, som är bindat till din %1 ID, för att skanna koden för att inloggning till ditt lokala konto. Reset password via %1 ID Återställ lösenord via %1 ID Reset your local password via %1 ID in case you forget it. Återställ ditt lokala lösenord via %1 ID om du glömmer det. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. För att använda ovanstående funktioner, gå till Kontrollcentrum - Konton och aktivera motsvarande alternativ. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Moln-synkronisering Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Hantera din %1 ID och synkronisera dina personliga data mellan enheter. Sign In to %1 ID Logga in på %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices Säkert lagra systeminställningar och personliga data i molnet och synkronisera dem mellan enheter System Settings Systeminställningar Last sync time: %1 Senaste synkroniseringstid: %1 Clear cloud data Rensa moln-data Are you sure you want to clear your system settings and personal data saved in the cloud? Är du säker på att du vill rensa dina systeminställningar och personliga data som sparats i molnet? Once the data is cleared, it cannot be recovered! När data är rensat kan det inte återhållas! Cancel Clear Rensa DeepinIDUserInfo Synchronization Service Synkroniserings-tjänst Account and Security Konto och säkerhet Sign out Logga ut Go to web settings Gå till webbinställningar The nickname must be 1~32 characters long DeepinWorker encrypt password failed kryptering av lösenord misslyckades Wrong password, %1 chances left Felaktig lösenord, %1 chans kvar The login error has reached the limit today. You can reset the password and try again. Inloggningsfel nått gränsen idag. Du kan återställa ditt lösenord och försöka igen. Operation Successful Åtgärd lyckades The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Kina Other regions Övriga regioner The feature is not available at present, please activate your system first Funktionen är för närvarande inte tillgänglig, aktivera systemet först Subject to your local laws and regulations, it is currently unavailable in your region. Förutsatt av lokala lagar och regleringar är det för närvarande olagligt i din region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' Vänligen välj standardprogram för att öppna '%1', add Lägg till Open Desktop file Apps (*.desktop) Apps (*.desktop), All files (*) Alla filer (*), DevelopModePage Root Access Root åtkomst Request Root Access Använda Root åtkomst After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. När du har gått in i utvecklarläge kan du få root åtkomst, men det kan också skada systemets integritet, så vänligen använd det med försiktighet. Allowed Tillåten Enter Gå in Online Online Login UOS ID Logga in på UOS ID Offline Offline Import Certificate Importera certifikat Select file Välj fil Your UOS ID has been logged in, click to enter developer mode Din UOS ID har loggats in, klicka för att gå in i utvecklarläge Please sign in to your UOS ID first and continue Vänligen logga in på din UOS ID först och fortsätt 1.Export PC Info 1.Exportera datorinformation Export Exportera 3.Import Certificate 3.Importera certifikat Development and debugging options Utvecklings- och felhanteringstester System logging level Nivå för systemloggning Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Ändring av inställningarna resulterar i mer detaljerad loggning som kan påverka systemprestandan och/eller kräva fler lagringsplatser. Off Av Debug Felhantering Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Ändring av inställningen kan ta upp till en minut att bearbeta. Efter att ha mottagit ett lyckat inställningsmeddelande, starta om enheten för att åtgärden ska börja gälla. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Bildskärm Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Tillåt nedan angivna program att åtkomst till dessa filer och mappar: Documents Dokument Desktop Desktop Pictures Bilder Videos Videor Music Downloads Hämtningar folder mapp FontSizePage Size Standard Font Monospaced Font Monospaced Font GeneralPage Power Plans Maktenheter Power Saving Settings Sparande på energiinställningar Auto power saving on low battery Automatisk energisparring vid lågt batteriläge Low battery threshold Låg batterilägesgräns Auto power saving on battery Automatisk energisparring vid batteri Wakeup Settings Uppväckningsinställningar Password is required to wake up the computer Ett lösenord krävs för att väcka datorn Password is required to wake up the monitor Ett lösenord krävs för att väcka skärmen Shutdown Settings Avslutningsinställningar Scheduled Shutdown Planerat avslut Time Tid Repeat Förflytta Once En gång Every day Varje dag Working days Arbetsdagar Custom Time Anpassad tid Decrease screen brightness on power saver Minska skärmhjulns ljusstyrka i energisparsning GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , (),' ... ... InterfaceEffectListview Optimal Performance Optimerad prestanda Balance Balans Best Visuals Bästa visuella Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language Språk done färdig edit redigera Other languages Övriga språk add lägg till Region Region Area Område Operating system and applications may provide you with local content based on your country and region Operativsystem och program kan ge dig lokal innehåll baserat på ditt land och region Operating system and applications may set date and time formats based on regional formats Operativsystem och program kan ställa in datum- och tidsformat baserat på regionella format Regional format LangsChooserDialog Add language Lägg till språk Search Cancel Add LoginMethod Login method Loggningsmetod Password, wechat, biometric authentication, security key Lösenord, WeChat, biometrisk autentisering, säkerhetsnyckel Password Modify password Ändra lösenord Validity days Giltighetsdagar Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Automatisk störsuppression Input Volume Ingångsvolym Input Level Inmatningsnivå Input No input device for sound found Inga indataenheter för ljud hittades Input Device Mouse Mouse and Touchpad Mus och Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices Mina enheter NativeInfoPage UOS UOS Computer name Datorns namn It cannot start or end with dashes Det kan inte börja eller sluta med bindestreck OS Name Operativsystemets namn Version Edition Utgåva Type bit bit Authorization Autentisering System installation time Tid för systeminstallation Kernel Kernel Graphics Platform Gráfikplattform Processor Processorn Memory Minnesutrymme 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Andra enheter Show Bluetooth devices without names Visa Bluetooth-enheter utan namn PasswordLayout Current password Nuvarande lösenord Required Weak Medium Strong Stark Repeat Password Password hint Tips för lösenord Optional Password cannot be empty Lösenordet kan inte vara tomt Passwords do not match Lösenorden matchar inte The hint is visible to all users. Do not include the password here. Tipsen är synlig för alla användare. Ange inte lösenordet här. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Ändra lösenord Reset password Återställ lösenord Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Lösenordet bör vara minst 8 tecken långt och innehålla en kombination av minst 3 av följande: stora bokstäver, små bokstäver, siffror och symboler. Detta lösenord är säkrare. Resetting the password will clear the data stored in the keyring. Återställandet av lösenordet kommer att radera data lagrade i lösenordsspelet. Cancel Personalization Personalization Anpassning PersonalizationInterface Light Auto Dark Mörkt Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Anpassat PluginArea Plugin Area Plugin område Select which icons appear in the Dock Välj vilka ikoner som visas i docken Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Avsluta monitor Show the shutdown Interface Visa avslutningsgränssnittet Do nothing Gör inget PowerPage Screen and Suspend Skärm och avsluta Turn off the monitor after Avsluta monitor efter Lock screen after Lås skärm efter Computer suspends after Dator avslutas efter When the lid is closed När luksen stängs When the power button is pressed När tryckknappen trycks PowerPlansListview High Performance Hög prestanda Balance Performance Balansera prestanda Aggressively adjust CPU operating frequency based on CPU load condition Anpassa CPU-frekvens aggressivt beroende på CPU-bolagskondition Balanced Power Saver Sparsamhet Prioritize performance, which will significantly increase power consumption and heat generation Prioritiera prestanda, vilket kommer att öka betydligt energiförbrukning och varmeutbildning Balancing performance and battery life, automatically adjusted according to usage Balansera prestanda och batteriliv genom automatisk justering efter användning Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Prioritera batteriliv, vilket systemet kommer att ge upp någon prestanda för att minska energiförbrukning PowerWorker Minutes Minuter Hour Timme Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Integritetspolicy Copy Link Address PwqualityManager Password cannot be empty Lösenord kan inte vara tomt Password must have at least %1 characters Lösenordet måste ha minst %1 tecken Password must be no more than %1 characters Lösenordet får inte ha mer än %1 tecken Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Lösenordet kan endast innehålla engelska bokstäver (källskiftkänsligt), siffror eller speciella symboler (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please Ge inte mer än %1 palindromtecken, tack No more than %1 monotonic characters please Ge inte mer än %1 monoton tecken, tack No more than %1 repeating characters please Ge inte mer än %1 upprepade tecken, tack Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Lösenordet måste innehålla gemena bokstäver, små bokstäver, siffror och symboler (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) Password must not contain more than 4 palindrome characters Lösenordet får inte innehålla fler än 4 palindromtecken Do not use common words and combinations as password Använd inte vanliga ord och kombinationer som lösenord Create a strong password please Skapa ett starkt lösenord, tack It does not meet password rules Det uppfyller inte lösenordets regler QObject Control Center Kontrollcenter Activated Aktiverad View Visa To be activated Att aktivera Activate Aktivera Expired Utgått In trial period I probetid Trial expired Försök upphört dde-control-center dde-control-center Touch Screen Settings Inställningar för dottkort The settings of touch screen changed Inställningarna för dottkortet har ändrats This system wallpaper is locked. Please contact your admin. Detta systembakgrund är låst. Vänligen kontakta din administratör. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats Standardformateringar First day of week Första dagen i veckan Short date Kort datum Long date Längre datum Short time Kort tid Long time Längre tid Currency symbol Valutakürv Digit Siffra Paper size Pappersstorlek Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password Ställ in ett lösenord 8-64 characters 8-64 tecken Repeat the password Repetera lösenord Cancel Confirm Passwords don't match Lösenord matchar inte ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver Skärmskydd preview förhandsgranska Personalized screensaver Anpassat skärmskydd setting inställning idle time tillåten inaktivitetstid 1 minute 1 minut 5 minute 5 minuter 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Ljud Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices Indataenheter SoundEffectsPage Sound Effects Ljudeffekter SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Uppstart Shut down Stäng av Log out Logga ut Wake up Väcka Volume +/- Volym +/- Notification Avisering Low battery Låg batterinivå Send icon in Launcher to Desktop Skicka ikon från Launchern till Skrivbordet Empty Trash Töm papperskorgen Plug in Koppla in Plug out Koppla ur Removable device connected Flyttbar enhet är ansluten Removable device removed Flyttbar enhet togs bort Error Fel SpeakerPage Mode Läge Output Volume Utgångsvolym Volume Boost Volymboost If the volume is louder than 100%, it may distort audio and be harmful to output devices Om ljudet är högre än 100% kan det förstöra ljudet och vara skadligt för utdataenheter Left Vänster Right Höger Output No output device for sound found Inga utdataenheter för ljud hittades Left Right Balance Vänster-höger balans Merge left and right channels into a single channel Slå ihop vänster och höger kanaler till en enda kanal Whether the audio will be automatically paused when the current audio device is unplugged Om ljudet kommer att pausas automatiskt när den aktuella ljudenheten avslutats Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Uppdatera Screensaver Schemalägg skärmskyttningsprogram System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers Mer tapeter TimeAndDate Auto sync time Synkronisera tid automatiskt Ntp server NTP-server System date and time Systemdatum och tid Customize Anpassa Settings Inställningar Server address Serveradress Required The ntp server address cannot be empty NTP-serveradressen kan inte vara tom Use 24-hour format Använd 24-timmarsformat system time zone systemtidszoner Timezone list Tidszonlista Add TimeRange from från to till TimeoutDialog Save the display settings? Spara skärminställningarna? Settings will be reverted in %1s. Inställningarna återställs om %1 sekunder. Revert Återställ Save Spara TimezoneDialog Add time zone Lägg till tidzoner Determine the time zone based on the current location Bestäm tidzonen baserat på nuvarande plats Time zone: Tidzoner: Nearest City: Nästlågstad stad: Cancel Save TouchScreen TouchScreen Dotternyta Set up here when connecting the touch screen Konfigurera här när du ansluter dotternyta Touchpad Basic Settings Basic Inställningar Touchpad Pointer Speed Slow Fast Disable touchpad during input Avaktivera dotternyta under inmatning Tap to Click Natural Scrolling Three-finger gestures Tre-finger-bewegningar Four-finger gestures Fyra-finger-bewegningar Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Dra med dig i Användarupplevelsesprogrammet Copy Link Address VerifyDialog Security Verification Säkerhetsverifiering The action is sensitive, please enter the login password first Åtgärden är sensibel, ange inloggningslösenord först 8-64 characters 8-64 tecken Forgot Password? Glömt lösenord? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper bakgrundsbild My pictures Mina bilder System Wallpaper Systembakgrundsbild Solid color wallpaper Enkla färbbakgrundsbild Customizable wallpapers Anpassningsbara bakgrundsbilder fill style fyll stil Automatic wallpaper change Automatisk väggpappersbyxt never aldrig 30 second 30 sekunder 1 minute 1 minut 5 minute 5 minuter 10 minute 10 minuter 15 minute 15 minuter 30 minute 30 minuter login inloggning wake up uppsak Live Wallpaper Livsväggpappr 1 hour 1 timme System Wallpapers WallpaperSelectView unfold utbilda Set lock screen Sätt låstskärm Set desktop Sätt skrivbord show all - %1 items Add Picture WindowEffectPage Interface and Effects Gränssnitt och effekter Window Settings Fönsterr settningar Window rounded corners Avrundade fönsterrör None Small Large Enable transparent effects when moving windows Aktivera transparenta effekter när fönster flyttas Window Minimize Effect Fönsterminimeringseffekt Scale Skala Magic Lamp Magiska lamp Opacity Transparens Low Låg High Hög Scroll Bars Rullbarr Show on scrolling Visa vid rullning Keep shown Håll visad Compact Display Komprimerad visning If enabled, more content is displayed in the window. Om aktiverat visas mer innehåll i fönstret. Title Bar Height Rubriksbårhöjd Only suitable for application window title bars drawn by the window manager. Endast lämpligt för programfönsterrubrikar som ritas av fönsterverwaltung. Extremely small Överallt små Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditionell kinesiska (kinesiska Hong Kong) Traditional Chinese (Chinese Taiwan) Traditionell kinesiska (kinesiska Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan Kina dccV25::AccountsController Username must be between 3 and 32 characters Användarnamnet måste vara mellan 3 och 32 tecken långt The first character must be a letter or number Första tecknet måste vara en bokstav eller ett siffertal Your username should not only have numbers Ditt användarnamn bör inte bestå endast av siffror The username has been used by other user accounts Användarnamnet används redan av andra användarkonton The full name is too long Komplettera namnet är för långt The full name has been used by other user accounts Komplettera namnet används redan av andra användarkonton Wrong password Standard User Standardanvändare Administrator Customized Anpassat dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Dimensionell Flat Plan dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Denna snabbtangent konflikt med [%1] dccV25::PwqualityManager Password cannot be empty Lösenord kan inte vara tomt Password must have at least %1 characters Lösenordet måste innehålla minst %1 tecken Password must be no more than %1 characters Lösenordet får inte innehålla mer än %1 tecken Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Lösenordet kan endast innehålla engelska bokstäver (kasesensitive), siffror eller speciella tecken (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please För varje palindromtecken, var vänlig att inte använda mer än %1 No more than %1 monotonic characters please För varje monoton tecken, var vänlig att inte använda mer än %1 No more than %1 repeating characters please För varje upprepade tecken, var vänlig att inte använda mer än %1 Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Lösenordet måste innehålla gemensamma bokstäver, små bokstäver, siffror och symboler (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) Password must not contain more than 4 palindrome characters Lösenordet får inte innehålla mer än 4 palindromtecken Do not use common words and combinations as password Använd inte vanliga ord och kombinationer som lösenord Create a strong password please Skapa ett starkt lösenord, var vänlig It does not meet password rules Det uppfyller inte lösenordets regler At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System System Window Fönster Workspace Arbetsyta AssistiveTools Assistivverktyg Custom Anpassat None Ingen ================================================ FILE: translations/dde-control-center_sv_SE.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_sw.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Imemuunganwa Not connected Haimuunganwa BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Katisha Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone Thibitisha inahitaji kuchagua pahali pa saa ya mfumo DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Kituo cha ulinzi Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Anza Shut down Zima Log out Aga Wake up Amka Volume +/- Sauti +/- Notification Taarifa Low battery Betri ndogo Send icon in Launcher to Desktop Tuma ikon kutoka kizinduzi kwa eneo la kazi Empty Trash Toa taka Plug in Ziba Plug out Zibua Removable device connected Kifaa inaweza kutoa imeunganishwa Removable device removed Kifaa inaweza kutoa imetenganisha Error Kosa SpeakerPage Mode Hali Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Kushoto Right Kulia Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save Hifadhi TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Kichina cha Jadi (Kichina Hong Kong) Traditional Chinese (Chinese Taiwan) Kichina cha Jadi (Kichina Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Njia hii ya haraka inakinzana na [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Mfumo Window Dirisha Workspace Nafasi ya Kazi AssistiveTools Zana za Kusaidia Custom Maalum None Hakuna ================================================ FILE: translations/dde-control-center_ta.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected இணைக்கப்பட்டுள்ளது Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel நிறுத்து Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display திரை Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume உள்ளீடு தொகுதி Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad சுட்டி மற்றும் டச்பேட் Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization தனிப்பயனாக்கம் PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom விருப்பம் PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center கட்டுப்பாட்டு மையம் Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound ஒலி Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down நிறுத்து Log out வெளியேறு Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode முறை Output Volume வெளியீடு ஒலியளவு Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left இடது Right வலது Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert திருப்பு / மாற்றியமை Save சேமி TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) பாரம்பரிய சீனம் (சீன ஹாங்காங்) Traditional Chinese (Chinese Taiwan) பாரம்பரிய சீனம் (சீன தைவான்) Min Nan Chinese dcc::Locale::regionNames Taiwan China தைவான் சீனா dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] இந்த குறுக்குவழி [%1] உடன் முரண்படுகிறது dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System அமைப்பு Window சாளரம் Workspace பணியிடம் AssistiveTools உதவி கருவிகள் Custom தனிப்பயன் None ஏதுமில்லை ================================================ FILE: translations/dde-control-center_te.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_th.ts ================================================ AccountSettings edit แก้ไข Add new user เพิ่มผู้ใช้ใหม่ Set fullname กำหนดชื่อจริง Login settings การตั้งค่าการเข้าสู่ระบบ Login without password เข้าสู่ระบบโดยไม่ต้องใช้รหัสผ่าน Delete current account ลบบัญชีปัจจุบัน Group setting การตั้งค่ากลุ่ม Account groups กลุ่มบัญชี done เสร็จสิ้น Group name ชื่อกลุ่ม Add group เพิ่มกลุ่ม Auto login เข้าสู่ระบบอัตโนมัติ Account Information ข้อมูลบัญชี Account name, account fullname, account type ชื่อบัญชี, ชื่อจริงของบัญชี, ประเภทบัญชี Account name ชื่อบัญชี Account fullname ชื่อจริงของบัญชี Account type ประเภทบัญชี The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face ลงทะเบียนใบหน้า I have read and agree to the ฉันได้อ่านและยอมรับ Disclaimer คำเตือน Next ถัดไป Face enrolled ใบหน้าได้ลงทะเบียนแล้ว Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style สไตล์การ์ตูน Dimensional style สไตล์มิติ Flat style สไตล์แบน Cancel ยกเลิก Save บันทึก BatteryPage Screen and Suspend หน้าจอและสั่งพัก Turn off the monitor after ปิดหน้าจอหลังจาก Lock screen after ล็อกหน้าจอหลังจาก Computer suspends after คอมพิวเตอร์สั่งพักหลังจาก When the lid is closed เมื่อปิดฝาแล็ปท็อป When the power button is pressed เมื่อป�ธ์เปิดคอมพิวเตอร์ถูกกด Low Battery แบตเตอรี่ต่ำ Low battery notification การแจ้งเตือนแบตเตอรี่ต่ำ Auto suspend สั่งพักอัตโนมัติ Auto Hibernate Hibernate อัตโนมัติ Low battery threshold 閾值 Battery Management การจัดการแบตเตอรี่ Display remaining using and charging time แสดงเวลาการใช้งานและชาร์จที่เหลือ Maximum capacity ความจุสูงสุด Low battery level ระดับแบตเตอรี่ต่ำ Disable ปิดใช้งาน BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth ปิด และชื่อแสดงว่า "%1" Bluetooth is turned on, and the name is displayed as "%1" Bluetooth เปิด และชื่อแสดงว่า "%1" BlueToothDeviceListView Disconnect ยกเลิกการเชื่อมต่อ Connect เชื่อมต่อ Send Files ส่งไฟล์ Rename เปลี่ยนชื่อ Remove Device ลบอุปกรณ์ Select file เลือกไฟล์ BluetoothCtl Edit แก้ไข Allow other Bluetooth devices to find this device อนุญาตให้อุปกรณ์ Bluetooth อื่นๆ ค้นหาอุปกรณ์นี้ To use the Bluetooth function, please turn off เพื่อใช้ฟังก์ชัน Bluetooth โปรดปิด Airplane Mode โหมดเครื่องบิน Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected เชื่อมต่อ Not connected ไม่เชื่อมต่อ BootPage Startup Settings การตั้งค่าการเริ่มต้น You can click the menu to change the default startup items, or drag the image to the window to change the background image. คุณสามารถคลิกเมนูเพื่อเปลี่ยนรายการเริ่มต้นที่ตั้งค่าไว้หรือลากภาพเข้าไปในหน้าต่างเพื่อเปลี่ยนภาพพื้นหลัง grub start delay การล่าช้าในการเริ่มต้น grub theme ธีม After turning on the theme, you can see the theme background when you turn on the computer หลังจากเปิดใช้ธีม คุณจะเห็นภาพพื้นหลังของธีมเมื่อเปิดคอมพิวเตอร์ Boot menu verification การยืนยันรายการเมนูการเริ่มต้น After opening, entering the menu editing requires a password. หลังจากเปิดใช้ ต้องใช้รหัสผ่านในการแก้ไขรายการเมนู Change Password เปลี่ยนรหัสผ่าน Change boot menu verification password เปลี่ยนรหัสผ่านการยืนยันรายการเมนูการเริ่มต้น Set the boot menu authentication password ตั้งรหัสผ่านการยืนยันรายการเมนูการเริ่มต้น User Name : ชื่อผู้ใช้ : root root New Password : รหัสผ่านใหม่ : Required จำเป็น Password cannot be empty ไม่สามารถทิ้งรหัสผ่านว่างได้ Passwords do not match รหัสผ่านไม่ตรงกัน Repeat password: ยืนยันรหัสผ่าน: Cancel ยกเลิก Sure แน่นอน Start animation เริ่มต้นการเคลื่อนไหว Adjust the size of the logo animation on the system startup interface ปรับขนาดการเคลื่อนไหวของโลโก้บนหน้าต้อนรับของระบบ Camera Allow below apps to access your camera: อนุญาตให้แอพด้านล่างเข้าถึงกล้องของคุณ: CharaMangerModel Fingerprint1 นิ้วนิ้ว 1 Fingerprint2 นิ้วนิ้ว 2 Fingerprint3 นิ้วนิ้ว 3 Fingerprint4 นิ้วนิ้ว 4 Fingerprint5 นิ้วนิ้ว 5 Fingerprint6 นิ้วนิ้ว 6 Fingerprint7 นิ้วนิ้ว 7 Fingerprint8 นิ้วนิ้ว 8 Fingerprint9 นิ้วนิ้ว 9 Fingerprint10 นิ้วนิ้ว 10 Scan failed การสแกนล้มเหลว The fingerprint already exists นิ้วนิ้วนี้มีอยู่แล้ว Please scan other fingers กรุณาสแกนนิ้วอื่น Unknown error ข้อผิดพลาดไม่ทราบ Scan suspended การสแกนถูกระงับ Cannot recognize ไม่สามารถรับรู้ได้ Moved too fast เคลื่อนที่เร็วเกินไป Finger moved too fast, please do not lift until prompted ข้อมือเคลื่อนที่เร็วเกินไป กรุณานำข้อมือออกเมื่อถูกเรียกให้ทำ Unclear fingerprint ลายนิ้วมือไม่ชัดเจน Clean your finger or adjust the finger position, and try again ล้างมือหรือปรับตำแหน่งมือให้ถูกต้องแล้วลองใหม่ Already scanned ได้สแกนแล้ว Adjust the finger position to scan your fingerprint fully ปรับตำแหน่งมือให้ถูกต้องเพื่อสแกนลายนิ้วมือให้สมบูรณ์ Finger moved too fast. Please do not lift until prompted ข้อมือเคลื่อนที่เร็วเกินไป กรุณานำข้อมือออกเมื่อถูกเรียกให้ทำ Lift your finger and place it on the sensor again นำข้อมือออกแล้ววางข้อมือบนเซ็นเซอร์ใหม่ Position your face inside the frame จับภาพให้ใบหน้าอยู่ภายในกรอบ Face enrolled ใบหน้าได้ถูกลงทะเบียนแล้ว Position a human face please กรุณาจับภาพใบหน้าของมนุษย์ Keep away from the camera อย่าอยู่ใกล้กล้อง Get closer to the camera เข้าใกล้กล้องมากขึ้น Do not position multiple faces inside the frame อย่าจับภาพใบหน้าหลายใบอยู่ภายในกรอบเดียวกัน Make sure the camera lens is clean ตรวจสอบให้แน่ใจว่าเลนส์กล้องสะอาด Do not enroll in dark, bright or backlit environments อย่าลงทะเบียนในบริเวณที่มืด, สว่างหรือมีแสงสะท้อน Keep your face uncovered อย่าปิดหน้าไว้ Scan timed out การสแกนหมดเวลาแล้ว Cancel ยกเลิก Camera occupied! ColorAndIcons Accent Color สีรองพื้น Icon Settings การตั้งค่าไอคอน Icon Theme ธีมไอคอน Customize your theme icon ปรับแต่งไอคอนธีมของคุณ Cursor Theme ธีมขัดข้อง Customize your theme cursor ปรับแต่ง cusor ของธีม ComfirmDeleteDialog Are you sure you want to delete this account? คุณแน่ใจว่าต้องการลบบัญชีนี้หรือไม่? Delete account directory ลบโฟลเดอร์บัญชี Cancel ยกเลิก Delete ลบ ComfirmSafePage Go to settings ไปที่การตั้งค่า Cancel ยกเลิก Common Common ทั่วไป Repeat delay ความล่าช้าในการซ้ำ Short สั้น Long ยาว Repeat rate อัตราการซ้ำ Slow ช้า Fast เร็ว Numeric Keypad แป้นพิมพ์เลข test here ทดสอบที่นี่ Caps lock prompt แจ้งเตือนการเปิดใช้งาน Caps Lock Double Click Speed ความเร็วการคลิกทวินามิ Double Click Test ทดสอบการคลิกทวินามิ Left Hand Mode โหมดมือซ้าย Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size ขนาดใหญ่ Small size ขนาดเล็ก Failed to get root access ไม่สามารถได้รับสิทธิ์ root ได้ Please sign in to your Union ID first กรุณาเข้าสู่ระบบด้วย Union ID ก่อน Cannot read your PC information ไม่สามารถอ่านข้อมูลของคอมพิวเตอร์ของคุณได้ No network connection ไม่มีการเชื่อมต่ออินเทอร์เน็ต Certificate loading failed, unable to get root access การโหลดсертификатล้มเหลว ไม่สามารถได้รับสิทธิ์ root ได้ Signature verification failed, unable to get root access การยืนยันลายเซ็นล้มเหลว ไม่สามารถได้รับสิทธิ์ root ได้ Agree and Join User Experience Program ยอมรับและเข้าร่วมโปรแกรมประสบการณ์ผู้ใช้งาน The Disclaimer of Developer Mode การแจ้งเตือนของโหมดพัฒนา Agree and Request Root Access ยอมรับและขอสิทธิ์ root Start setting the new boot animation, please wait for a minute เริ่มตั้งค่าการเปิดระบบใหม่ กรุณารอหนึ่งนาที Setting new boot animation finished การตั้งค่าการเปิดระบบใหม่เสร็จสิ้นแล้ว The settings will be applied after rebooting the system การตั้งค่าจะถูกนำไปใช้หลังจากเริ่มระบบใหม่ Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters รหัสผ่านต้องมีตัวเลขและตัวอักษร Password must be between 8 and 64 characters รหัสผ่านต้องมีอยู่ระหว่าง 8 ถึง 64 ตัวอักษร CreateAccountDialog Create a new account สร้างบัญชีใหม่ Account type ประเภทบัญชี UserName ชื่อผู้ใช้ Required ต้องการ FullName ชื่อจริง Optional ตัวเลือก Cancel ยกเลิก Create account สร้างบัญชี Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. คุณยังไม่ได้ทำการอัปโหลดภาพโปรไฟล์ คลิกหรือลากและวางเพื่อทำการอัปโหลดภาพ The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available พร้อมใช้งาน DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/隱私-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/ประสบการณ์-en Agree and Join User Experience Program ยอมรับและเข้าร่วมโปรแกรม User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting การตั้งค่าวันเวลา Date วันที่ Year ปี Month เดือน Day วัน Time เวลา Cancel ยกเลิก Confirm ยืนยัน Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow พรุ่งนี้ Yesterday เมื่อวาน Today วันนี้ %1 hours earlier than local %1 ชั่วโมงก่อนเวลาท้องถิ่น %1 hours later than local %1 ชั่วโมงหลังเวลาท้องถิ่น Space ช่องว่าง Week สัปดาห์ First day of week วันแรกของสัปดาห์ Short date วันที่สั้น Long date วันที่ยาว Short time เวลาสั้น Long time เวลาที่ยาวนาน Currency symbol สัญลักษณ์เงิน Positive currency เงินบวก Negative currency เงินลบ Decimal symbol จุดทศนิยม Digit grouping symbol เครื่องหมายจัดกลุ่มเลข Digit grouping การจัดกลุ่มเลข Page size ขนาดหน้า Example DatetimeWorker Authentication is required to change NTP server ต้องการยืนยันตัวตนเพื่อเปลี่ยนเซิร์ฟเวอร์ NTP Authentication is required to set the system timezone DccColorDialog Cancel ยกเลิก Save บันทึก DccWindow Control Center provides the options for system settings. ศูนย์ควบคุมมีตัวเลือกสำหรับการตั้งค่าระบบ DeepinIDAccountSecurity Bind WeChat ผูก WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. เมื่อผูก WeChat คุณสามารถเข้าสู่ระบบ %1 ID และบัญชีท้องถิ่นของคุณได้อย่างปลอดภัยและรวดเร็ว Unlinked ไม่ผูก Unbinding ยกเลิกการผูก Link ผูก Are you sure you want to unbind WeChat? คุณแน่ใจว่าต้องการยกเลิกการผูก WeChat หรือไม่? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. หลังจากยกเลิกการผูก WeChat คุณจะไม่สามารถใช้ WeChat ในการสแกนรหัส QR เพื่อเข้าสู่ระบบ %1 ID หรือบัญชีท้องถิ่นของคุณได้ Let me think it over ให้ฉันคิดสักครู่ Local Account Binding การผูกบัญชีท้องถิ่น After binding your local account, you can use the following functions: หลังจากผูกบัญชีท้องถิ่นของคุณ คุณสามารถใช้ฟังก์ชันดังนี้: WeChat Scan Code Login System ระบบการเข้าสู่ระบบผ่านการสแกนรหัส QR ของ WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. ใช้ WeChat ที่ผูกกับ %1 ID ของคุณในการสแกนรหัสเพื่อเข้าสู่ระบบบัญชีท้องถิ่นของคุณ Reset password via %1 ID รีเซ็ตรหัสผ่านผ่าน %1 ID Reset your local password via %1 ID in case you forget it. รีเซ็ตรหัสผ่านท้องถิ่นผ่าน %1 ID ในกรณีที่คุณลืม To use the above features, please go to Control Center - Accounts and turn on the corresponding options. เพื่อใช้ฟีเจอร์ดังกล่าว โปรดไปที่ Center การควบคุม - บัญชี และเปิดใช้งานตัวเลือกที่เกี่ยวข้อง DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync การสังเคราะห์云端 Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. จัดการบัญชี %1 ID ของคุณและสังเคราะห์ข้อมูลส่วนตัวไปยังอุปกรณ์ต่างๆ เข้าสู่ระบบด้วยบัญชี %1 ID เพื่อรับฟีเจอร์และบริการที่ปรับแต่งเฉพาะของเบราว์เซอร์, ร้านแอป และอื่นๆ Sign In to %1 ID เข้าสู่ระบบด้วย %1 ID DeepinIDSyncService Auto Sync การสังเคราะห์อัตโนมัติ Securely store system settings and personal data in the cloud, and keep them in sync across devices เก็บตั้งค่าระบบและข้อมูลส่วนตัวอย่างปลอดภัยในคลาวด์ และทำให้同步到其他设备 System Settings ตั้งค่าระบบ Last sync time: %1 เวลาสุดท้ายที่สังเคราะห์: %1 Clear cloud data ลบข้อมูลในคลาวด์ Are you sure you want to clear your system settings and personal data saved in the cloud? คุณแน่ใจหรือไม่ว่าต้องการลบตั้งค่าระบบและข้อมูลส่วนตัวที่เก็บไว้ในคลาวด์? Once the data is cleared, it cannot be recovered! หากข้อมูลถูกลบออกแล้ว จะไม่สามารถฟื้นคืนได้! Cancel ยกเลิก Clear ลบ DeepinIDUserInfo Synchronization Service บริการสังเคราะห์ Account and Security บัญชีและความปลอดภัย Sign out ออกจากระบบ Go to web settings ไปที่การตั้งค่าเว็บไซต์ The nickname must be 1~32 characters long DeepinWorker encrypt password failed การเข้ารหัสรหัสผ่านล้มเหลว Wrong password, %1 chances left รหัสผ่านไม่ถูกต้อง, เหลือ %1 ครั้ง The login error has reached the limit today. You can reset the password and try again. ข้อผิดพลาดในการเข้าสู่ระบบถึงขีดจำกัดในวันนี้ คุณสามารถรีเซ็ตรหัสผ่านและลองใหม่อีกครั้ง Operation Successful ดำเนินการสำเร็จ The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China จีนแผ่นดินใหญ่ Other regions ภูมิภาคอื่นๆ The feature is not available at present, please activate your system first ฟีเจอร์นี้ไม่พร้อมใช้งานในขณะนี้ กรุณาเปิดใช้งานระบบของคุณก่อน Subject to your local laws and regulations, it is currently unavailable in your region. ตามกฎหมายและข้อบังคับท้องถิ่นของคุณ ฟีเจอร์นี้ยังไม่พร้อมใช้งานในภูมิภาคของคุณ Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' กรุณาเลือกโปรแกรมที่ใช้เป็นค่าเริ่มต้นในการเปิด '%1' add เพิ่ม Open Desktop file เปิดไฟล์เดสก์ท็อป Apps (*.desktop) แอพพลิเคชัน (*.desktop), All files (*) ไฟล์ทั้งหมด (*), DevelopModePage Root Access การเข้าถึง root Request Root Access ขอเข้าถึง root After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. หลังจากเข้าสู่โหมดพัฒนา คุณจะสามารถได้รับสิทธิ์ root แต่มันอาจทำให้ความintegrityของระบบเสียหาย กรุณาใช้งานอย่างระมัดระวัง Allowed อนุญาต Enter เข้าสู่ Online ออนไลน์ Login UOS ID เข้าสู่ระบบ UOS ID Offline ออฟไลน์ Import Certificate นำเข้า сертификат Select file เลือกไฟล์ Your UOS ID has been logged in, click to enter developer mode UOS ID ของคุณได้ทำการเข้าสู่ระบบแล้ว คลิกเพื่อเข้าสู่โหมดพัฒนา Please sign in to your UOS ID first and continue กรุณาเข้าสู่ระบบ UOS ID ก่อนแล้วจึงดำเนินการต่อ 1.Export PC Info 1. Export ข้อมูล PC Export ส่งออก 3.Import Certificate 3.นำเข้า сертификат Development and debugging options ตัวเลือกการพัฒนาและการจัดการข้อผิดพลาด System logging level ระดับการบันทึกข้อมูลระบบ Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. การเปลี่ยนตัวเลือกจะทำให้มีการบันทึกข้อมูลที่ละเอียดขึ้นซึ่งอาจทำให้ประสิทธิภาพของระบบลดลงและ/หรือใช้พื้นที่จัดเก็บข้อมูลเพิ่มขึ้น Off ปิด Debug จัดการข้อผิดพลาด Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. การเปลี่ยนตัวเลือกอาจใช้เวลาถึง 1 นาทีในการประมวลผล หลังจากได้รับคำแนะนำการตั้งค่าที่สำเร็จ กรุณาทำการรีสตาร์ทอุปกรณ์เพื่อให้ผลการตั้งค่ามีผล To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: อนุญาตให้แอพด้านล่างเข้าถึงไฟล์และโฟลเดอร์เหล่านี้: Documents เอกสาร Desktop โต๊ะทำงาน Pictures ภาพถ่าย Videos วิดีโอ Music เพลง Downloads การ descargar folder โฟลเดอร์ FontSizePage Size ขนาด Standard Font ตัวอักษรมาตรฐาน Monospaced Font ตัวอักษรแบบเท่ากัน GeneralPage Power Plans แผนการใช้พลังงาน Power Saving Settings การตั้งค่าการประหยัดพลังงาน Auto power saving on low battery การประหยัดพลังงานอัตโนมัติเมื่อแบตเตอรี่ต่ำ Low battery threshold ระดับแบตเตอรี่ต่ำ Auto power saving on battery การประหยัดพลังงานอัตโนมัติเมื่อใช้แบตเตอรี่ Wakeup Settings การตั้งค่าการตื่นรouse Password is required to wake up the computer ต้องใช้รหัสผ่านเพื่อตื่นรouseคอมพิวเตอร์ Password is required to wake up the monitor ต้องใช้รหัสผ่านเพื่อตื่นรouseหน้าจอแสดงผล Shutdown Settings การตั้งค่าการปิดเครื่อง Scheduled Shutdown การปิดเครื่องตามเวลาที่กำหนด Time เวลา Repeat ซ้ำ Once ครั้งเดียว Every day ทุกวัน Working days วันทำการ Custom Time กำหนดเวลาเอง Decrease screen brightness on power saver ลดความสว่างของหน้าจอเมื่อใช้งานอยู่ในโหมดประหยัดพลังงาน GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ' ... ... InterfaceEffectListview Optimal Performance ประสิทธิภาพสูงสุด Balance สมดุล Best Visuals ภาพลักษณ์ที่ดีที่สุด Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language ภาษา done เสร็จสิ้น edit แก้ไข Other languages ภาษาอื่นๆ add เพิ่ม Region ภูมิภาค Area พื้นที่ Operating system and applications may provide you with local content based on your country and region ระบบปฏิบัติการและแอปพลิเคชันอาจให้เนื้อหาท้องถิ่นตามประเทศและภูมิภาคของคุณ Operating system and applications may set date and time formats based on regional formats ระบบปฏิบัติการและแอปพลิเคชันอาจกำหนดรูปแบบวันเวลาตามรูปแบบภูมิภาค Regional format LangsChooserDialog Add language เพิ่มภาษา Search ค้นหา Cancel ยกเลิก Add เพิ่ม LoginMethod Login method วิธีการเข้าสู่ระบบ Password, wechat, biometric authentication, security key รหัสผ่าน, WeChat, การตรวจสอบทางชีวภาพ, คีย์ความปลอดภัย Password รหัสผ่าน Modify password แก้ไขรหัสผ่าน Validity days วันที่มีผลบังคับใช้ Always ตลอดเวลา Reset password LogoModule Copyright© 2011-%1 Deepin Community ลิขสิทธิ์© 2011-%1 ชุมชน Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD ลิขสิทธิ์© 2019-%1 บริษัทเทคโนโลยี UnionTech MicrophonePage Automatic Noise Suppression การลดเสียงรบกวนอัตโนมัติ Input Volume ระดับเสียงนำเข้า Input Level ระดับนำเข้า Input นำเข้า No input device for sound found ไม่พบอุปกรณ์นำเข้าเสียง Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices อุปกรณ์ของฉัน NativeInfoPage UOS UOS Computer name ชื่อคอมพิวเตอร์ It cannot start or end with dashes ไม่สามารถเริ่มหรือสิ้นสุดด้วยเครื่องหมายลบ OS Name ชื่อระบบปฏิบัติการ Version เวอร์ชัน Edition การพิมพ์ Type ประเภท bit บิต Authorization การอนุญาต System installation time เวลาติดตั้งระบบ Kernel แกนระบบ Graphics Platform แพลตฟอร์มกราฟิก Processor โปรเซสเซอร์ Memory ความจำ 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices อุปกรณ์อื่น ๆ Show Bluetooth devices without names แสดงอุปกรณ์บลูทู ธ ที่ไม่มีชื่อ PasswordLayout Current password รหัสผ่านปัจจุบัน Required ต้องการ Weak week Medium กลาง Strong แข็งแกร่ง Repeat Password กรอกรหัสผ่านอีกครั้ง Password hint คำใบ้รหัสผ่าน Optional ตัวเลือก Password cannot be empty ไม่สามารถทิ้งช่องว่างได้ Passwords do not match รหัสผ่านไม่ตรงกัน The hint is visible to all users. Do not include the password here. คำใบ้จะปรากฏให้ผู้ใช้ทุกคนเห็น กรุณาอย่าใส่รหัสผ่านในที่นี้ New password New password should differ from the current one รหัสผ่านใหม่ต้องไม่ตรงกับรหัสผ่านปัจจุบัน The password cannot be the same as the username. PasswordModifyDialog Modify password แก้ไขรหัสผ่าน Reset password รีเซ็ตรหัสผ่าน Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. ความยาวของรหัสผ่านต้องมีอย่างน้อย 8 ตัวอักษร และรหัสผ่านต้องประกอบด้วยตัวอักษรตัวใหญ่, ตัวเล็ก, ตัวเลข และสัญลักษณ์อย่างน้อย 3 ชนิด รหัสผ่านประเภทนี้มีความปลอดภัยมากขึ้น Resetting the password will clear the data stored in the keyring. การรีเซ็ตรหัสผ่านจะทำให้ข้อมูลที่เก็บไว้ใน keyring หายไป Cancel ยกเลิก Personalization Personalization PersonalizationInterface Light สว่าง Auto อัตโนมัติ Dark มืด Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom กำหนดเอง PluginArea Plugin Area พื้นที่ติดตั้ง Plug-in Select which icons appear in the Dock เลือกไอคอนที่จะแสดงใน Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down ปิดเครื่อง Suspend ยืดหยุ่น Hibernate Hibernate Turn off the monitor ปิดหน้าจอ Show the shutdown Interface แสดงหน้าปิดเครื่อง Do nothing ทำอะไรไม่ได้ PowerPage Screen and Suspend หน้าจอและหยุดทำงาน Turn off the monitor after ปิดหน้าจอหลังจาก Lock screen after ล็อกหน้าจอหลังจาก Computer suspends after คอมพิวเตอร์หยุดทำงานหลังจาก When the lid is closed เมื่อปิดฝาพับ When the power button is pressed เมื่อ��กดปุ่ม电源 PowerPlansListview High Performance สูงสุด Balance Performance สมดุล Aggressively adjust CPU operating frequency based on CPU load condition ปรับความถี่การทำงานของ CPU ตามความหนักของงานอย่างรุนแรง Balanced สมดุล Power Saver ประหยัดพลังงาน Prioritize performance, which will significantly increase power consumption and heat generation ให้ความสำคัญกับประสิทธิภาพ ซึ่งจะเพิ่มการใช้พลังงานและความร้อนอย่างมาก Balancing performance and battery life, automatically adjusted according to usage สมดุลระหว่างประสิทธิภาพและอายุการใช้งานแบตเตอรี่ ซึ่งจะปรับอัตโนมัติตามการใช้งาน Prioritize battery life, which the system will sacrifice some performance to reduce power consumption ให้ความสำคัญกับอายุการใช้งานแบตเตอรี่ ซึ่งระบบจะยอมลดประสิทธิภาพเพื่อลดการใช้พลังงาน PowerWorker Minutes นาที Hour ชั่วโมง Never ไม่เคย Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy นโยบายความเป็นส่วนตัว Copy Link Address PwqualityManager Password cannot be empty ไม่สามารถใส่รหัสผ่านว่างได้ Password must have at least %1 characters รหัสผ่านต้องมีอย่างน้อย %1 ตัวอักษร Password must be no more than %1 characters รหัสผ่านต้องไม่เกิน %1 ตัวอักษร Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) รหัสผ่านสามารถประกอบได้เฉพาะตัวอักษรภาษาอังกฤษ (ต้องมีการระบุพิมพ์ใหญ่/พิมพ์เล็ก), ตัวเลข หรือ ตัวอักษรพิเศษ (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) No more than %1 palindrome characters please ไม่ควรใช้ตัวอักษรกลับกลอกมากกว่า %1 ตัว No more than %1 monotonic characters please ไม่ควรใช้ตัวอักษรซ้ำๆ มากกว่า %1 ตัว No more than %1 repeating characters please ไม่ควรใช้ตัวอักษรซ้ำๆ มากกว่า %1 ตัว Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) รหัสผ่านต้องมีตัวอักษรพิมพ์ใหญ่, พิมพ์เล็ก, ตัวเลข และ ตัวอักษรพิเศษ (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters รหัสผ่านไม่ควรมีตัวอักษรกลับกลอกมากกว่า 4 ตัว Do not use common words and combinations as password ไม่ควรใช้คำหรือคำผสมที่พบบ่อยเป็นรหัสผ่าน Create a strong password please สร้างรหัสผ่านที่แข็งแกร่งสักตัว It does not meet password rules ไม่ได้รับการกำหนดข้อกำหนดของรหัสผ่าน QObject Control Center ศูนย์ควบคุม Activated ได้รับการเปิดใช้งาน View ดู To be activated กำลังจะได้รับการเปิดใช้งาน Activate เปิดใช้งาน Expired หมดอายุ In trial period อยู่ในช่วงทดลองใช้งาน Trial expired ช่วงทดลองใช้งานหมดอายุ dde-control-center dde-control-center Touch Screen Settings การตั้งค่าหน้าจอสัมผัส The settings of touch screen changed การตั้งค่าหน้าจอสัมผัสได้ถูกเปลี่ยนแปลง This system wallpaper is locked. Please contact your admin. ภาพพื้นหลังของระบบถูกล็อก. กรุณาติดต่อผู้ดูแลระบบ %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search ค้นหา Default formats รูปแบบที่กำหนดค่าเริ่มต้น First day of week วันแรกของสัปดาห์ Short date วันที่สั้น Long date วันที่ยาว Short time เวลาสั้น Long time เวลายาว Currency symbol สัญลักษณ์เงิน Digit ตัวเลข Paper size ขนาดกระดาษ Cancel ยกเลิก Save บันทึก Regional format RegionsChooserWindow Search ค้นหา RegisterDialog Set a Password ตั้งรหัสผ่าน 8-64 characters 8-64 ตัวอักษร Repeat the password กรอกรหัสผ่านอีกครั้ง Cancel ยกเลิก Confirm ยืนยัน Passwords don't match รหัสผ่านไม่ตรงกัน ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver หน้าจอสลับภาพ preview การจำลอง Personalized screensaver หน้าจอสลับภาพแบบกำหนดเอง setting การตั้งค่า idle time เวลาที่ไม่ใช้งาน 1 minute 1 นาที 5 minute 5 นาที 10 minute 10 นาที 15 minute 15 นาที 30 minute 30 นาที 1 hour 1 ชั่วโมง never ไม่เคย Password required for recovery ต้องการรหัสผ่านสำหรับการฟื้นฟู Picture slideshow screensaver หน้าจอที่แสดงภาพลื่นที่มีรูปภาพ System screensaver หน้าจอที่แสดงภาพของระบบ SearchableListViewPopup Search ค้นหา No search results ShortcutSettingDialog Add custom shortcut เพิ่มสั้นที่กำหนดเอง Name: ชื่อ: Required จำเป็น Command: คำสั่ง: Shortcut สั้น None ไม่มี Cancel ยกเลิก Add เพิ่ม The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts สั้น System shortcut, custom shortcut สั้นของระบบ, สั้นที่กำหนดเอง Search shortcuts ค้นหาสั้น done เสร็จสิ้น edit แก้ไข Click คลิก Cancel ยกเลิก or หรือ Replace แทนที่ Restore default คืนค่าเริ่มต้น Add custom shortcut เพิ่มสั้นลัพธ์ส่วนตัว please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices อุปกรณ์การส่งออกเสียง Select whether to enable the devices เลือกว่าจะเปิดใช้งานอุปกรณ์หรือไม่ Input Devices อุปกรณ์การรับเข้าเสียง SoundEffectsPage Sound Effects เสียงพิเศษ SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up เริ่มต้น Shut down ปิดเครื่อง Log out ออกจากระบบ Wake up เรียกตื่น Volume +/- ระดับเสียง +/- Notification การแจ้งเตือน Low battery แบตเตอรี่ต่ำ Send icon in Launcher to Desktop ส่งไอคอนใน Launcherto โต๊ะทำงาน Empty Trash 清空垃圾桶 Plug in เชื่อมต่อ Plug out unplug Removable device connected อุปกรณ์เชื่อมต่อได้เชื่อมต่อ Removable device removed อุปกรณ์เชื่อมต่อได้ถูกถอดออก Error ข้อผิดพลาด SpeakerPage Mode โหมด Output Volume ระดับเสียงการส่งออก Volume Boost เพิ่มระดับเสียง If the volume is louder than 100%, it may distort audio and be harmful to output devices หากระดับเสียงสูงกว่า 100% อาจทำให้เสียงเสียรูปและเป็นอันตรายต่ออุปกรณ์การส่งออก Left ซ้าย Right ขวา Output การส่งออก No output device for sound found ไม่พบอุปกรณ์การส่งออกเสียง Left Right Balance การสมดุลซ้ายขวา Merge left and right channels into a single channel รวมช่องซ้ายและขวาเป็นช่องเดียว Whether the audio will be automatically paused when the current audio device is unplugged เมื่ออุปกรณ์เสียงปัจจุบันถูกถอดออก ร้องเพลงจะถูกระงับอัตโนมัติหรือไม่ Mono Audio Auto Pause Output Device SyncInfoListModel Sound เสียง Power พลังงาน Mouse เมาส์ Update อัปเดต Screensaver โปรแกรมคุ้มครองจอ System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers ภาพพื้นหลังเพิ่มเติม TimeAndDate Auto sync time การสังเคราะห์เวลาอัตโนมัติ Ntp server เซิร์ฟเวอร์ NTP System date and time วันที่และเวลาของระบบ Customize ปรับแต่ง Settings การตั้งค่า Server address ที่อยู่เซิร์ฟเวอร์ Required จำเป็น The ntp server address cannot be empty ที่อยู่เซิร์ฟเวอร์ ntp ไม่สามารถว่างได้ Use 24-hour format ใช้รูปแบบ 24 ชั่วโมง system time zone เขตเวลาของระบบ Timezone list รายการเขตเวลา Add TimeRange from จาก to ถึง TimeoutDialog Save the display settings? บันทึกการตั้งค่าการแสดงผล Settings will be reverted in %1s. การตั้งค่าจะถูกกลับไปเป็นค่าเดิมใน %1 วินาที. Revert กลับคืน Save บันทึก TimezoneDialog Add time zone เพิ่มเขตเวลา Determine the time zone based on the current location กำหนดเขตเวลาตามสถานที่ปัจจุบัน Time zone: เขตเวลา: Nearest City: เมืองใกล้ที่สุด: Cancel ยกเลิก Save บันทึก TouchScreen TouchScreen สัมผัสหน้าจอ Set up here when connecting the touch screen ตั้งค่าที่นี่เมื่อเชื่อมต่อสัมผัสหน้าจอ Touchpad Basic Settings การตั้งค่าพื้นฐาน Touchpad พื้นที่สัมผัส Pointer Speed ความเร็วของตัวชี้ Slow ช้า Fast เร็ว Disable touchpad during input ปิดพื้นที่สัมผัสระหว่างการพิมพ์ Tap to Click แตะเพื่อคลิก Natural Scrolling การลากแบบธรรมชาติ Three-finger gestures การสัมผัสด้วยสามนิ้ว Four-finger gestures การสัมผัสด้วยสี่นิ้ว Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program ร่วมโปรแกรมประสบการณ์ผู้ใช้ Copy Link Address VerifyDialog Security Verification การตรวจสอบความปลอดภัย The action is sensitive, please enter the login password first การกระทำนี้เป็นการกระทำที่ไว้วางใจ กรุณากรอกรหัสผ่านเข้าสู่ระบบก่อน 8-64 characters 8-64 ตัวอักษร Forgot Password? ลืมรหัสผ่าน? Cancel ยกเลิก Confirm ยืนยัน Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper ภาพพื้นหลัง My pictures ภาพถ่ายของฉัน System Wallpaper ภาพพื้นหลังของระบบ Solid color wallpaper พื้นหลังสีเดียว Customizable wallpapers พื้นหลังที่ปรับแต่งได้ fill style วิธีการเติม Automatic wallpaper change การเปลี่ยนพื้นหลังอัตโนมัติ never ไม่เคย 30 second 30 วินาที 1 minute 1 นาที 5 minute 5 นาที 10 minute 10 นาที 15 minute 15 นาที 30 minute 30 นาที login เข้าสู่ระบบ wake up ตื่นนอน Live Wallpaper พื้นหลังที่สดใส 1 hour 1 ชั่วโมง System Wallpapers WallpaperSelectView unfold เปิดออก Set lock screen ตั้งพื้นหลังหน้าจอปิด Set desktop ตั้งพื้นหลังโต๊ะทำงาน show all - %1 items Add Picture WindowEffectPage Interface and Effects อินเทอร์เฟซและผลลัพธ์ Window Settings การตั้งค่าหน้าต่าง Window rounded corners มุมกลมของหน้าต่าง None ไม่มี Small เล็ก Large ใหญ่ Enable transparent effects when moving windows เปิดใช้งานผลลัพธ์半透明效果当移动窗口时 Window Minimize Effect ผลลัพธ์การลดขนาดหน้าต่าง Scale ขนาด Magic Lamp โคมไฟมนต์ Opacity ความแสงสว่าง Low ต่ำ High สูง Scroll Bars ปุ่มลากขึ้น-ลง Show on scrolling แสดงเมื่อลากขึ้น-ลง Keep shown แสดงต่อไป Compact Display การแสดงผลแบบกะทัดรัด If enabled, more content is displayed in the window. ถ้าเปิดใช้งาน หน้าต่างจะแสดงเนื้อหาเพิ่มเติม Title Bar Height ความสูงของชื่อหน้าต่าง Only suitable for application window title bars drawn by the window manager. เฉพาะสำหรับชื่อหน้าต่างของแอปพลิเคชันที่หน้าต่างจัดการวาด Extremely small เล็กมาก Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) จีนดั้งเดิม (จีนฮ่องกง) Traditional Chinese (Chinese Taiwan) จีนดั้งเดิม (จีนไต้หวัน) Min Nan Chinese dcc::Locale::regionNames Taiwan China ไต้หวันจีน dccV25::AccountsController Username must be between 3 and 32 characters ชื่อผู้ใช้ต้องมีอยู่ระหว่าง 3 ถึง 32 ตัวอักษร The first character must be a letter or number ตัวอักษรตัวแรกต้องเป็นตัวอักษรหรือตัวเลข Your username should not only have numbers ชื่อผู้ใช้ของคุณไม่ควรเป็นเพียงตัวเลข The username has been used by other user accounts ชื่อผู้ใช้นี้ถูกใช้แล้วโดยบัญชีผู้ใช้อื่น The full name is too long ชื่อจริงยาวเกินไป The full name has been used by other user accounts ชื่อจริงนี้ถูกใช้แล้วโดยบัญชีผู้ใช้อื่น Wrong password รหัสผ่านไม่ถูกต้อง Standard User ผู้ใช้มาตรฐาน Administrator ผู้ดูแลระบบ Customized กำหนดเอง dccV25::AccountsWorker Your host was removed from the domain server successfully เซิร์ฟเวอร์โดเมนของเครื่องคอมพิวเตอร์ของคุณถูกลบออกอย่างสำเร็จ Your host joins the domain server successfully เครื่องคอมพิวเตอร์ของคุณเข้าสู่เซิร์ฟเวอร์โดเมนอย่างสำเร็จ Your host failed to leave the domain server การออกจากเซิร์ฟเวอร์โดเมนของเครื่องคอมพิวเตอร์ของคุณล้มเหลว Your host failed to join the domain server การเข้าสู่เซิร์ฟเวอร์โดเมนของเครื่องคอมพิวเตอร์ของคุณล้มเหลว AD domain settings การตั้งค่าโดเมน AD Password not match รหัสผ่านไม่ตรงกัน dccV25::AvatarTypesModel Dimensional มิติ Flat ราบ dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] คำสั้นที่นี้ขัดแย้งกับ [%1] dccV25::PwqualityManager Password cannot be empty รหัสผ่านไม่สามารถว่างเปล่าได้ Password must have at least %1 characters รหัสผ่านต้องมีความยาวไม่น้อยกว่า %1 ตัว Password must be no more than %1 characters รหัสผ่านต้องมีความยาวไม่เกิน %1 ตัว Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) รหัสผ่านสามารถประกอบด้วยตัวอักษรภาษาอังกฤษ (区分大小写), ตัวเลข หรือ 符号 (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please ไม่ควรใช้ตัวอักษรสะกดกลับมากกว่า %1 ตัว No more than %1 monotonic characters please ไม่ควรใช้ตัวอักษรซ้ำติดกันมากกว่า %1 ตัว No more than %1 repeating characters please ไม่ควรใช้ตัวอักษรซ้ำมากกว่า %1 ตัว Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) รหัสผ่านต้องมีตัวอักษรใหญ่, ตัวอักษรเล็ก, ตัวเลข และ ตัวอักษรพิเศษ (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) Password must not contain more than 4 palindrome characters รหัสผ่านไม่ควรมีตัวอักษรสะกดกลับมากกว่า 4 ตัว Do not use common words and combinations as password ไม่ควรใช้คำว่าทั่วไปหรือการผสมผสานเป็นรหัสผ่าน Create a strong password please โปรดสร้างรหัสผ่านที่แข็งแกร่ง It does not meet password rules ไม่เป็นไปตามข้อกำหนดของรหัสผ่าน At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System ระบบ Window หน้าต่าง Workspace พื้นที่ทำงาน AssistiveTools เครื่องมือช่วยเหลือ Custom กำหนดเอง None ไม่มี ================================================ FILE: translations/dde-control-center_tr.ts ================================================ AccountSettings edit düzenle Add new user Yeni kullanıcı ekle Set fullname Tam adı ayarla Login settings Giriş ayarları Login without password Oturum Parola Kullanmadan Açılsın Delete current account Geçerli hesabı sil Group setting Grup ayarları Account groups Hesap grupları done tamamla Group name Grup adı Add group Grup ekle Auto login Otomatik giriş Account Information Hesap Bilgileri Account name, account fullname, account type Hesap adı, hesabın tam adı, hesap türü Account name Hesap adı Account fullname Hesap tam adı Account type Hesap Türü The full name is too long Tam ad çok uzun Group names should be no more than 32 characters Grup adı 32 karakterden fazla olmamalıdır Group names cannot only have numbers Grup adları sadece numara olamaz Use letters,numbers,underscores and dashes only, and must start with a letter Yalnızca harf, sayı, alt çizgi ve tire kullanın ve bir harfle başlamalısınız The group name has been used Bu grup adı kullanıldı quick login, Auto login, login without password hızlı giriş, otomatik giriş, şifresiz giriş Undo Geri Al Redo Yinele Cut Kes Copy Kopyala Paste Yapıştır Select All Tümünü Seç Quick login Hızlı giriş Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face Kayıt Yüzü I have read and agree to the Okudum ve onaylıyorum Disclaimer Feragat Next Sonraki Face enrolled Yüz kayıtlı Failed to enroll your face Yüzünüz kaydedilemedi Done Tamamla Cancel İptal Retry Enroll Tekrar Kaydolmayı Dene Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. Yüz tanıma canlılık tespitini desteklemez ve doğrulama yöntemi risk taşıyabilir. Başarılı bir giriş sağlamak için: 1. Yüz hatlarınızı açıkça görünür tutun ve bunları kapatmayın (şapka, güneş gözlüğü, maske vb.). 2. Yeterli aydınlatma sağlayın ve doğrudan güneş ışığına maruz kalmaktan kaçının. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. ""Biyometrik kimlik doğrulama", UnionTech Software Technology Co., Ltd. tarafından sağlanan kullanıcı kimliği doğrulama işlevidir. "Biyometrik kimlik doğrulama" yoluyla, toplanan biyometrik veriler cihazda saklanan verilerle karşılaştırılacak ve karşılaştırma sonucuna göre kullanıcı kimliği doğrulanacaktır. UnionTech Software Technology Co., Ltd.'nin yerel cihazınızda saklanacak olan biyometrik bilgilerinizi toplamayacağını veya bunlara erişmeyeceğini lütfen unutmayın. Lütfen yalnızca kişisel cihazınızda biyometrik kimlik doğrulamayı etkinleştirin ve ilgili işlemler için kendi biyometrik bilgilerinizi kullanın. Ayrıca, söz konusu cihazdaki diğer kişilerin biyometrik bilgilerini derhal devre dışı bırakın veya silin; aksi takdirde bundan kaynaklanacak risk size ait olacaktır. UnionTech Software Technology Co., Ltd., biyometrik kimlik doğrulamanın güvenliğini, doğruluğunu ve kararlılığını araştırmaya ve geliştirmeye kendini adamıştır. Ancak, çevresel, ekipman, teknik ve diğer faktörler ile risk kontrolü nedeniyle, biyometrik kimlik doğrulamayı geçici olarak geçeceğinizin garantisi yoktur. Bu nedenle, lütfen biyometrik kimlik doğrulamayı UOS'ye giriş yapmanın tek yolu olarak görmeyin. Biyometrik kimlik doğrulamayı kullanırken herhangi bir sorunuz veya öneriniz varsa, UOS'deki "Hizmet ve Destek" bölümünden geri bildirimde bulunabilirsiniz. AddFingerDialog Cancel İptal Done Tamamlandı Enroll Finger Parmak izi Kaydı Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Parmak izi sensörüne girilecek parmağı yerleştirin ve aşağıdan yukarıya doğru hareket ettirin. İşlemi tamamladıktan sonra lütfen parmağınızı kaldırın. I have read and agree to the Okudum ve onaylıyorum Disclaimer Feragat Next Sonraki Retry Enroll Tekrar Kaydolmayı Dene "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. "Biyometrik kimlik doğrulama", UnionTech Software Technology Co., Ltd. tarafından sağlanan kullanıcı kimliği kimlik doğrulaması için bir işlevdir. "Biyometrik kimlik doğrulama" yoluyla, toplanan biyometrik veriler cihazda depolanan verilerle karşılaştırılacak ve kullanıcı kimliği, karşılaştırma sonucu. UnionTech Software Technology Co., Ltd 'in yerel cihazınızda saklanacak olan biyometrik bilgilerinizi toplamayacağını veya bunlara erişmeyeceğini lütfen unutmayın. Lütfen yalnızca kişisel cihazınızda biyometrik doğrulamayı etkinleştirin ve ilgili işlemler için kendi biyometrik bilgilerinizi kullanın ve diğer kişilerin o cihazdaki biyometrik bilgilerini derhal devre dışı bırakın veya silin, aksi takdirde bundan kaynaklanan risk size aittir. UnionTech Software Technology Co., Ltd, biyometrik kimlik doğrulamanın güvenliğini, doğruluğunu ve kararlılığını araştırmaya ve geliştirmeye kendini adamıştır. Ancak çevresel, ekipman, teknik ve diğer faktörler ve risk kontrolü nedeniyle biyometrik doğrulamayı geçici olarak geçeceğinizin garantisi yoktur. Bu nedenle, lütfen UnionTech UOS'de oturum açmanın tek yolu olarak biyometrik doğrulamayı kabul etmeyin. Biyometrik kimlik doğrulamayı kullanırken herhangi bir sorunuz veya öneriniz varsa, UnionTech UOS'deki "Servis ve Destek" aracılığıyla geri bildirimde bulunabilirsiniz. AddIrisDialog Enroll Iris İris kaydet I have read and agree to the Okudum ve onaylıyorum Disclaimer Feragat Next Sonraki Done Tamamlandı Cancel Vazgeç Retry Enroll Tekrar Kaydolmayı Dene Iris enrolled İris kaydoldu Failed to enroll your iris İris kaydedilemedi "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. ""Biyometrik kimlik doğrulama", UnionTech Software Technology Co., Ltd. tarafından sağlanan kullanıcı kimliği doğrulama işlevidir. "Biyometrik kimlik doğrulama" yoluyla, toplanan biyometrik veriler cihazda saklanan verilerle karşılaştırılacak ve karşılaştırma sonucuna göre kullanıcı kimliği doğrulanacaktır. UnionTech Software Technology Co., Ltd.'nin yerel cihazınızda saklanacak olan biyometrik bilgilerinizi toplamayacağını veya bunlara erişmeyeceğini lütfen unutmayın. Lütfen yalnızca kişisel cihazınızda biyometrik kimlik doğrulamayı etkinleştirin ve ilgili işlemler için kendi biyometrik bilgilerinizi kullanın. Ayrıca, söz konusu cihazdaki diğer kişilerin biyometrik bilgilerini derhal devre dışı bırakın veya silin; aksi takdirde bundan kaynaklanacak risk size ait olacaktır. UnionTech Software Technology Co., Ltd., biyometrik kimlik doğrulamanın güvenliğini, doğruluğunu ve kararlılığını araştırmaya ve geliştirmeye kendini adamıştır. Ancak, çevresel, ekipman, teknik ve diğer faktörler ile risk kontrolü nedeniyle, biyometrik kimlik doğrulamayı geçici olarak geçeceğinizin garantisi yoktur. Bu nedenle, lütfen biyometrik kimlik doğrulamayı UOS'ye giriş yapmanın tek yolu olarak görmeyin. Biyometrik kimlik doğrulamayı kullanırken herhangi bir sorunuz veya öneriniz varsa, UOS'deki "Hizmet ve Destek" bölümünden geri bildirimde bulunabilirsiniz. Please keep an eye on the device and ensure that both eyes are within the collection area Lütfen cihaza bakın ve her iki gözünüzün de kayıt alanı içerisinde olduğundan emin olun Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first "Otomatik Giriş" yalnızca tek hesap için etkinleştirilebilir, lütfen önce "%1" hesabı için devre dışı bırakın Ok Tamam AvatarSettingsDialog Images Görseller Human İnsan Animal Hayvan Scenery Manzara Illustration İllüstrasyon Emoji İmoji custom özel Cartoon style Karikatür tarzı Dimensional style Boyutsal stil Flat style Düz stil Cancel İptal Save Kaydet BatteryPage Screen and Suspend Ekran ve Askıya Alma Turn off the monitor after Monitörü kapattıktan sonra Lock screen after Sonrasında ekranı kilitle Computer suspends after Bilgisayar askıya alındıktan sonra When the lid is closed Kapak kapatıldığında When the power button is pressed Güç düğmesine basıldığında Low Battery Düşük Batarya Low battery notification Düşük pil bildirimi Auto suspend Otomatik askıya al Auto Hibernate Otomatik Uyut Low battery threshold Düşük pil eşiği Battery Management Batarya Yönetimi Display remaining using and charging time Kalan kullanım ve şarj süresini göster Maximum capacity Azami kapasite Low battery level Düşük pil seviyesi Disable Devre Dışı BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth kapalı ve ad "%1" olarak görüntüleniyor Bluetooth is turned on, and the name is displayed as "%1" Bluetooth açık ve ad "%1" olarak görüntüleniyor BlueToothDeviceListView Disconnect Bağlantıyı kes Connect Bağlan Send Files Dosyaları Gönder Rename Yeniden adlandır Remove Device Cihazı Kaldır Select file Dosya Seçin BluetoothCtl Edit Düzenle Allow other Bluetooth devices to find this device Diğer Bluetooth cihazlarının bu cihazı bulmasına izin ver To use the Bluetooth function, please turn off Bluetooth işlevini kullanmak için lütfen kapatın Airplane Mode Uçak Kipi Bluetooth name cannot exceed 64 characters Bluetooth adı 64 karakteri aşamaz BluetoothDeviceModel Connected Bağlandı Not connected Bağlı değil BootPage Startup Settings Başlangıç ​​Ayarları You can click the menu to change the default startup items, or drag the image to the window to change the background image. Varsayılan başlangıç ​​öğelerini değiştirmek için menüye tıklayabilir veya arka plan resmini değiştirmek için resmi pencereye sürükleyebilirsiniz. grub start delay grub başlatma gecikmesi theme tema After turning on the theme, you can see the theme background when you turn on the computer Temayı açtıktan sonra bilgisayarı açtığınızda tema arka planını görebilirsiniz Boot menu verification Önyükleme menüsü doğrulaması After opening, entering the menu editing requires a password. Açıldıktan sonra menü düzenleme kısmına girmek için şifre gerekmektedir. Change Password Parolayı Değiştir Change boot menu verification password Önyükleme menüsü doğrulama parolasını değiştir Set the boot menu authentication password Önyükleme menüsü kimlik doğrulama parolasını ayarlayın User Name : Kullanıcı Adı : root root New Password : Yeni Parola: Required Gerekli Password cannot be empty Parola boş olamaz Passwords do not match Parolalar eşleşmiyor Repeat password: Parolayı tekrarla: Cancel İptal Sure Elbette Start animation Başlangıç animasyonu Adjust the size of the logo animation on the system startup interface Sistem başlatma arayüzündeki logo animasyonunun boyutunu ayarlayın Camera Allow below apps to access your camera: Aşağıdaki uygulamaların kameranıza erişmesine izin verin: CharaMangerModel Fingerprint1 Parmakizi1 Fingerprint2 Parmakizi2 Fingerprint3 Parmakizi3 Fingerprint4 Parmakizi4 Fingerprint5 Parmakizi5 Fingerprint6 Parmakizi6 Fingerprint7 Parmakizi7 Fingerprint8 Parmakizi8 Fingerprint9 Parmakizi9 Fingerprint10 Parmakizi10 Scan failed Tarama başarısız The fingerprint already exists Parmak izi zaten var Please scan other fingers Lütfen diğer parmaklarınızı tarayın Unknown error Bilinmeyen hata Scan suspended Tarama askıya alındı Cannot recognize Tanınamıyor Moved too fast Çok hızlı taşındı Finger moved too fast, please do not lift until prompted Parmak çok hızlı hareket etti, lütfen istenene kadar kaldırmayın Unclear fingerprint Net olmayan parmak izi Clean your finger or adjust the finger position, and try again Parmağınızı temizleyin veya parmak konumunu ayarlayın ve tekrar deneyin Already scanned Zaten tarandı Adjust the finger position to scan your fingerprint fully Parmak izinizi tamamen taramak için parmak konumunu ayarlayın Finger moved too fast. Please do not lift until prompted Parmak çok hızlı hareket etti. Lütfen istenene kadar kaldırmayın Lift your finger and place it on the sensor again Parmağınızı kaldırın ve yeniden algılayıcıya koyun Position your face inside the frame Yüzünüzü çerçevenin içine yerleştirin Face enrolled Yüz kayıtlı Position a human face please Bir insan yüzünü konumlandırın lütfen Keep away from the camera Kameradan uzak tutun Get closer to the camera Kameraya daha yakın ol Do not position multiple faces inside the frame Çerçevenin içine birden fazla yüz yerleştirmeyin Make sure the camera lens is clean Kamera merceğinin temiz olduğundan emin olun Do not enroll in dark, bright or backlit environments Karanlık, aydınlık veya arkadan aydınlatmalı ortamlara kaydolmayın Keep your face uncovered Yüzünü açık tut Scan timed out Tarama zaman aşımına uğradı Cancel İptal Camera occupied! Kamera meşgul! ColorAndIcons Accent Color Vurgu Rengi Icon Settings Simge Ayarları Icon Theme Simge Teması Customize your theme icon Tema simgenizi özelleştirin Cursor Theme İmleç Teması Customize your theme cursor Tema imlecinizi özelleştirin ComfirmDeleteDialog Are you sure you want to delete this account? Bu hesabı silmek istediğinize emin misiniz? Delete account directory Hesap dizinini sil Cancel İptal Delete Sil ComfirmSafePage Go to settings Ayarlara git Cancel İptal Common Common Ortak Repeat delay Yineleme gecikmesi Short Kısa Long Uzun Repeat rate Yineleme hızı Slow Yavaş Fast Hızlı Numeric Keypad Sayısal Klavye test here burada dene Caps lock prompt Caps lock istemi Double Click Speed Çift Tıklama Hızı Double Click Test Çift Tıklama Denemesi Left Hand Mode Solak Kip Enable Keyboard Klavyeyi Etkinleştir General Genel Scrolling Speed Kaydırma Hızı CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Büyük boy Small size Küçük boy Failed to get root access Kök erişimi alınamadı Please sign in to your Union ID first Lütfen önce Union ID'nizde oturum açın Cannot read your PC information PC bilgileriniz okunamıyor No network connection Ağ bağlantısı yok Certificate loading failed, unable to get root access Sertifika yüklenemedi, kök erişimine erişilemedi Signature verification failed, unable to get root access İmza doğrulaması başarısız oldu, kök erişimine erişilemedi Agree and Join User Experience Program Kabul Et ve Kullanıcı Deneyimi Programına Katıl The Disclaimer of Developer Mode Geliştirici Kipi Sorumluluk Reddi Agree and Request Root Access Kök Erişimi Kabul Et ve İste Start setting the new boot animation, please wait for a minute Yeni önyükleme animasyonunu ayarlamaya başlayın, lütfen bir dakika bekleyin Setting new boot animation finished Yeni önyükleme animasyonu ayarlama işlemi tamamlandı The settings will be applied after rebooting the system Sistemi yeniden başlattıktan sonra ayarlar uygulanacak Restart now Şimdi yeniden başlat Dismiss Yok say Restart device to finish applying Solid System Read-Only Protection settings Katı Sistem Salt Okunur Koruması ayarlarının uygulanmasını tamamlamak için cihazı yeniden başlatın ConfirmManager Password must contain numbers and letters Parola rakamlar ve harfler içermelidir Password must be between 8 and 64 characters Parola 8 ile 64 karakter arasında olmalıdır CreateAccountDialog Create a new account Yeni hesap Oluştur Account type Hesap Türü UserName Kullanıcı Adı Required Gerekli FullName Tam Ad Optional İsteğe bağlı Cancel İptal Create account Hesap oluştur Username cannot exceed 32 characters Kullanıcı adı 32 karakteri aşamaz Username can only contain letters, numbers, - and _ Kullanıcı adı yalnızca harf, rakam, - ve _ içerebilir Full name cannot exceed 32 characters Tam adınız 32 karakteri geçemez Full name cannot contain colons Tam adınız iki nokta üst üste içeremez CustomAvatarCropper small küçük big büyük CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Henüz bir avatar yüklemediniz.Bir resim yüklemek için tıklayın veya sürükleyin ve bırakın. The uploaded file type is incorrect, please upload it again Yüklenen dosya türü yanlış, lütfen tekrar yükleyin DCC_NAMESPACE::SystemInfoModel available kullanılabilir DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Kabul Et ve Kullanıcı Deneyimi Programına Katıl <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>Kişisel bilgilerinizin sizin için ne kadar önemli olduğunun bilincindeyiz. Bu nedenle, bilgilerinizi nasıl topladığımızı, kullandığımızı, paylaştığımızı, aktardığımızı, kamuya açıkladığımızı ve sakladığımızı kapsayan bir Gizlilik Politikası hazırladık. </p><p>En son gizlilik politikamızı görüntülemek için <a href="%1">buraya tıklayabilir</a> ve/veya <a href="%1">%1</a> adresini ziyaret ederek çevrimiçi olarak görüntüleyebilirsiniz.. Lütfen müşteri gizliliğine ilişkin uygulamalarımızı dikkatlice okuyun ve tam olarak anlayın. Herhangi bir sorunuz varsa lütfen bizimle şu adresten iletişime geçin: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Tarih ve saat ayarı Date Tarih Year Yıl Month Ay Day Gün Time Zaman Cancel İptal Confirm Onayla Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yarın Yesterday Dün Today Bugün %1 hours earlier than local Yerelden %1 saat önce %1 hours later than local Yerelden %1 saat sonra Space Boşluk Week Hafta First day of week Haftanın ilk günü Short date Kısa tarih Long date Uzun tarih Short time Kısa zaman Long time Uzun zaman Currency symbol Para birimi sembolü Positive currency Pozitif para birimi Negative currency Negatif para birimi Decimal symbol Ondalık sembol Digit grouping symbol Basamak gruplandırma sembolü Digit grouping Rakam gruplama Page size Sayfa boyutu Example Örnek DatetimeWorker Authentication is required to change NTP server NTP sunucusunu değiştirmek için kimlik doğrulaması gerekli Authentication is required to set the system timezone Sistem saat dilimini ayarlamak için kimlik doğrulaması gerekli DccColorDialog Cancel İptal Save Kaydet DccWindow Control Center provides the options for system settings. Kontrol Merkezi, sistem ayarları için seçenekler sunar. DeepinIDAccountSecurity Bind WeChat WeChat Bağla By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. WeChat'e bağlanarak %1 ID'nize ve yerel hesaplarınıza güvenli ve hızlı bir şekilde giriş yapabilirsiniz. Unlinked Bağlantı kaldırıldı Unbinding Bağlantı kaldırma Link Bağla Are you sure you want to unbind WeChat? WeChat'i kaldırmak istediğinizden emin misiniz? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. WeChat'i bağlantıdan çıkardıktan sonra, WeChat'i kullanarak QR kodunu tarayarak %1 ID veya yerel hesabınıza giriş yapamayacaksınız. Let me think it over Bir düşüneyim Local Account Binding Yerel Hesap Bağla After binding your local account, you can use the following functions: Yerel hesabınızı bağladıktan sonra aşağıdaki işlevleri kullanabilirsiniz: WeChat Scan Code Login System WeChat Tarama Kodu Giriş Sistemi Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Yerel hesabınıza giriş yapmak için %1 kimliğinize bağlı olan WeChat'i kullanarak kodu tarayın. Reset password via %1 ID %1 ID ile şifreyi sıfırla Reset your local password via %1 ID in case you forget it. Unutmanız durumunda yerel şifrenizi %1 ID üzerinden sıfırlayın. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Yukarıdaki özellikleri kullanmak için lütfen Kontrol Merkezi - Hesaplar bölümüne gidin ve ilgili seçenekleri açın. DeepinIDInterface deepin Deepin UOS UOS DeepinIDLogin Cloud Sync Bulut Eşitleyici Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. %1 ID'nizi yönetin ve kişisel verilerinizi cihazlar arasında senkronize edin. %1 ID'de oturum açarak Tarayıcı, Uygulama Mağazası ve daha fazlasının kişiselleştirilmiş özelliklerini ve hizmetlerini edinin. Sign In to %1 ID %1 ID'ye Giriş Yap DeepinIDSyncService Auto Sync Otomatik Eşitle Securely store system settings and personal data in the cloud, and keep them in sync across devices Sistem ayarlarını ve kişisel verileri bulutta güvenli bir şekilde saklayın ve bunları cihazlar arasında senkronize halde tutun. System Settings Sistem Ayarları Last sync time: %1 Son senkronizasyon zamanı: %1 Clear cloud data Bulut verilerini temizle Are you sure you want to clear your system settings and personal data saved in the cloud? Sistem ayarlarınızı ve bulutta kayıtlı kişisel verilerinizi temizlemek istediğinizden emin misiniz? Once the data is cleared, it cannot be recovered! Veriler temizlendikten sonra kurtarılamaz! Cancel İptal Clear Temizle DeepinIDUserInfo Synchronization Service Eşitleme Servisi Account and Security Hesap ve Güvenlik Sign out Oturumu kapat Go to web settings Web ayarlarına git The nickname must be 1~32 characters long Takma adın uzunluğu 1 ila 32 karakter arasında olmalıdır DeepinWorker encrypt password failed Şifreleme şifresi başarısız oldu Wrong password, %1 chances left Yanlış şifre, %1 şans kaldı The login error has reached the limit today. You can reset the password and try again. Giriş hatası günlük sınırına ulaştı. Parolayı sıfırlayabilir ve tekrar deneyebilirsiniz. Operation Successful İşlem Başarılı The nickname can be modified only once a day Takma ad günde yalnızca bir kez değiştirilebilir Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Çin Toprakları Other regions Diğer bölgeler The feature is not available at present, please activate your system first Özellik şu anda kullanılamıyor, lütfen önce sisteminizi etkinleştirin Subject to your local laws and regulations, it is currently unavailable in your region. Yerel yasa ve yönetmeliklerinize bağlı olarak, şu anda bölgenizde kullanılamamaktadır. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' Lütfen '%1'i açmak için varsayılan programı seçin add ekle Open Desktop file Masaüstü Dosyası Aç Apps (*.desktop) Uygulamalar (*.masaüstü) All files (*) Tüm dosyalar (*) DevelopModePage Root Access Kök Erişimi Request Root Access Kök Erişimi İsteği After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Geliştirici kipine girdikten sonra kök izinleri alabilirsiniz, ancak sistem bütünlüğüne de zarar verebilir, bu nedenle lütfen dikkatle kullanın. Allowed İzin verilmiş Enter Giriş Online Çevrimiçi Login UOS ID Giriş UOS ID Offline Çevrimdışı Import Certificate Sertifikayı İçe Aktar Select file Dosya Seçin Your UOS ID has been logged in, click to enter developer mode UOS kimliğiniz oturum açtı, geliştirici moduna girmek için tıklayın Please sign in to your UOS ID first and continue Lütfen önce UOS Kimliğinizle oturum açın ve devam edin 1.Export PC Info 1.PC Bilgisini Dışa Aktar Export Dışarı aktar 3.Import Certificate 3.Sertifikayı İçe Aktar Development and debugging options Geliştirme ve hata ayıklama seçenekleri System logging level Sistem günlük kaydı düzeyi Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Seçenekleri değiştirmek, sistem performansını düşürebilecek ve/veya daha fazla depolama alanı kaplayabilecek daha ayrıntılı günlük kaydıyla sonuçlanır. Off Kapalı Debug Ayıkla Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Seçeneği değiştirme işlemi bir dakika kadar sürebilir; başarılı ayar bildirimini aldıktan sonra etkili olması için lütfen cihazı yeniden başlatın. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. İmzalanmamış uygulamaları yüklemek ve çalıştırmak için lütfen <a style='text-decoration: none;' href='Security Center'>Güvenlik Merkezine</a> giderek ayarları değiştirin. To install and run unsigned apps, please go to Security Center to change the settings. İmzalanmamış uygulamaları yüklemek ve çalıştırmak için lütfen Güvenlik Merkezi'ne giderek ayarları değiştirin. You have entered developer mode Geliştirici moduna girdiniz OK Tamam 2.please go to %1 to Download offline certificate. 2.Lütfen çevrimdışı sertifikayı indirmek için %1 adresine gidin. The feature is not available at present, please activate your system first. Özellik şu anda kullanılamıyor, lütfen önce sisteminizi etkinleştirin. Solid System Read-Only Protection Katı Sistem Salt Okunur Koruması Disabling protection unlocks system directories,This action carries a high risk of system damage. Korumayı devre dışı bırakmak sistem dizinlerinin kilidini açar, bu eylem sisteme zarar verme riskini artırır. Enable protection to lock system directories and ensure optimal stability. Sistem dizinlerini kilitlemek ve optimum kararlılığı sağlamak için korumayı etkinleştirin. Device Bluetooth and Devices DisclaimerControl Disclaimer Feragat Cancel İptal et Agree Kabul et Display Display Ekran Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Aşağıdaki uygulamaların bu dosyalara ve klasörlere erişmesine izin verin: Documents Belgeler Desktop Masaüstü Pictures Resimler Videos Videolar Music Müzik Downloads İndirilenler folder Klasör FontSizePage Size Boyut Standard Font Standart Yazı Tipi Monospaced Font Sabit Aralıklı Yazı Tipi GeneralPage Power Plans Güç Planları Power Saving Settings Güç Tasarrufu Ayarları Auto power saving on low battery Düşük pilde otomatik güç tasarrufu Low battery threshold Düşük pil eşiği Auto power saving on battery Pilden otomatik güç tasarrufu Wakeup Settings Uyandırma Ayarları Password is required to wake up the computer Bilgisayarı uyandırmak için parola gerekli Password is required to wake up the monitor Ekranı uyandırmak için parola gerekli Shutdown Settings Kapatma Ayarları Scheduled Shutdown Planlanmış Kapatma Time Zaman Repeat Tekrar Once Bir kez Every day Her gün Working days İş günleri Custom Time Özel Zaman Decrease screen brightness on power saver Güç Tasarrufu'nda ekran parlaklığını azalt GestureModel Three-finger up Üç parmak yukarı Three-finger down Üç parmak aşağı Three-finger left Üç parmak sola Three-finger right Üç parmak sağa Three-finger tap Üç parmakla dokun Four-finger up Dört parmak yukarı Four-finger down Dört parmak aşağı Four-finger left Dört parmak sola Four-finger right Dört parmak sağa Four-finger tap Dört parmakla dokun HomePage , , ... ... InterfaceEffectListview Optimal Performance Optimal Performans Balance Dengeli Best Visuals En İyi Görseller Disable all interface and window effects for efficient system performance. Verimli sistem performansı için tüm arayüz ve pencere efektlerini devre dışı bırakın. Limit some window effects for excellent visuals while maintaining smooth system performance. Sorunsuz sistem performansını korurken mükemmel görseller için bazı pencere efektlerini sınırlayın. Enable all interface and window effects for the best visual experience. En iyi görsel deneyim için tüm arayüz ve pencere efektlerini etkinleştirin. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language Dil done tamamla edit Düzenle Other languages Diğer diller add ekle Region Bölge Area Alan Operating system and applications may provide you with local content based on your country and region İşletim sistemi ve uygulamalar, ülkenize ve bölgenize göre size yerel içerik sağlayabilir Operating system and applications may set date and time formats based on regional formats İşletim sistemi ve uygulamalar, bölgesel biçimlere göre tarih ve saat biçimlerini ayarlayabilir Regional format Bölgesel format LangsChooserDialog Add language Dil Ekle Search Ara Cancel İptal Add Ekle LoginMethod Login method Giriş yöntemi Password, wechat, biometric authentication, security key Şifre, wechat, biyometrik kimlik doğrulama, güvenlik anahtarı Password Parola Modify password Parolayı değiştir Validity days Geçerlilik günü Always Her zaman Reset password Parolayı sıfırla LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Deepin Topluluğu Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Otomatik Gürültü Bastırma Input Volume Ses Girişi Input Level Giriş Seviyesi Input Giriş No input device for sound found Ses için giriş aygıtı bulunamadı Input Device Giriş Cihazı Mouse Mouse and Touchpad Fare ve Dokunmatik yüzey Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices Aygıtlarım NativeInfoPage UOS UOS Computer name Bilgisayar Adı It cannot start or end with dashes Kısa çizgi ile başlayamaz veya bitemez OS Name İS Adı Version Sürüm Edition Yayın Type Tür bit bit Authorization İzin System installation time Sistem Kurulum Tarihi Kernel Çekirdek Graphics Platform Grafik platformu Processor İşlemci Memory Bellek 1~63 characters please 1~63 karakterler lütfen Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Diğer Cihazlar Show Bluetooth devices without names Bluetooth cihazlarını isimsiz göster PasswordLayout Current password Mevcut parola Required Gerekli Weak Zayıf Medium Orta Strong Güçlü Repeat Password Parolayı Tekrarla Password hint Parola İpucu Optional İsteğe bağlı Password cannot be empty Parola boş olamaz Passwords do not match Parolalar eşleşmiyor The hint is visible to all users. Do not include the password here. İpucu tüm kullanıcılar tarafından görülebilir. Parolayı buraya dahil etmeyin. New password Yeni parola New password should differ from the current one Yeni parola mevcut paroladan farklı olmalıdır The password cannot be the same as the username. Parola kullanıcı adınızla aynı olamaz. PasswordModifyDialog Modify password Parolayı değiştir Reset password Parolayı sıfırla Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Şifre uzunluğu en az 8 karakter olmalı ve şifre en az aşağıdaki 3'ün bir kombinasyonunu içermelidir: büyük harfler, küçük harfler, sayılar ve semboller. Bu tür şifreler daha güvenlidir. Resetting the password will clear the data stored in the keyring. Parolanın sıfırlanması, anahtarlıkta depolanan verileri siler. Cancel İptal Personalization Personalization Kişiselleştirme PersonalizationInterface Light Açık Auto Otomatik Dark Koyu Picker service is not available Toplayıcı hizmet mevcut değil Invalid color format: %1 Geçersiz renk biçimi: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Özel PluginArea Plugin Area Eklenti Alanı Select which icons appear in the Dock Rıhtım'da hangi simgelerin görüneceğini seçin Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Kapat Suspend Askıya al Hibernate Uyut Turn off the monitor Monitörü kapat Show the shutdown Interface Kapatma arayüzünü göster Do nothing Hiçbir şey yapma PowerPage Screen and Suspend Ekran ve Askıya Alma Turn off the monitor after Monitörü kapattıktan sonra Lock screen after Sonrasında ekranı kilitle Computer suspends after Bilgisayar askıya alındıktan sonra When the lid is closed Kapak kapatıldığında When the power button is pressed Güç düğmesine basıldığında PowerPlansListview High Performance Yüksek Performans Balance Performance Dengeli Performans Aggressively adjust CPU operating frequency based on CPU load condition CPU yük durumuna göre CPU çalışma frekansını agresif bir şekilde ayarlayın Balanced Dengeli Power Saver Güç Tasarrufu Prioritize performance, which will significantly increase power consumption and heat generation Güç tüketimini ve ısı üretimini önemli ölçüde artıracak olan performansa öncelik verin Balancing performance and battery life, automatically adjusted according to usage Performans ve pil ömrünü dengeleyerek kullanıma göre otomatik olarak ayarlanır Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Sistemin güç tüketimini azaltmak için bazı performanslardan ödün vereceği pil ömrüne öncelik verin PowerWorker Minutes Dakika Hour Saat Never Asla Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Gizlilik Politikası Copy Link Address Bağlantı Adresini Kopyala PwqualityManager Password cannot be empty Parola boş olamaz Password must have at least %1 characters Parola en az %1 karakter olmalıdır Password must be no more than %1 characters Parola %1 karakterden fazla olmamalıdır Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Parola yalnızca İngilizce harfler (büyük/küçük harfe duyarlı), sayılar veya özel simgeler içerebilir (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please En fazla %1 palindrom karakter lütfen No more than %1 monotonic characters please %1'den fazla monoton karakter yok lütfen No more than %1 repeating characters please Lütfen %1'den fazla yinelenen karakter yok Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Parola büyük harfler, küçük harfler, sayılar ve semboller içermeli (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Parola 4'ten fazla tersten okunduğunda aynı olan karakter içermemelidir Do not use common words and combinations as password Parola olarak bilinen kelime ve kombinasyonlarını kullanmayın Create a strong password please Lütfen güçlü bir parola oluşturun It does not meet password rules Parola kurallarına uymuyor QObject Control Center Kontrol Merkezi Activated Etkin View Görünüm To be activated Etkinleştirilecek Activate Etkinleştir Expired Süresi doldu In trial period Deneme süresinde Trial expired Deneme süresi doldu dde-control-center dde-control-center Touch Screen Settings Dokunmatik Ekran Ayarları The settings of touch screen changed Dokunmatik ekranın ayarları değişti This system wallpaper is locked. Please contact your admin. Bu sistem duvar kağıdı kilitli.Lütfen yöneticinizle iletişime geçin. %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search Ara Default formats Varsayılan formatlar First day of week Haftanın ilk günü Short date Kısa tarih Long date Uzun tarih Short time Kısa zaman Long time Uzun zaman Currency symbol Para birimi sembolü Digit Rakam Paper size Kağıt boyutu Cancel İptal Save Kaydet Regional format Bölgesel format RegionsChooserWindow Search Ara RegisterDialog Set a Password Parolayı Ayarla 8-64 characters 8-64 karakterler Repeat the password Parolayı tekrarla Cancel İptal Confirm Onayla Passwords don't match Parolalar eşleşmiyor ScheduledShutdownDialog Customize repetition time Yeniden Görüşme Sıklığını Özelleştir Cancel İptal et Save Kaydet ScreenSaverPage Screensaver Ekran koruyucu preview önizleme Personalized screensaver Kişiselleştirilmiş ekran koruyucu setting ayar idle time boştaki zaman 1 minute 1 dakika 5 minute 5 dakika 10 minute 10 dakika 15 minute 15 dakika 30 minute 30 dakika 1 hour 1 saat never asla Password required for recovery Kurtarma için şifre gerekli Picture slideshow screensaver Resim slayt gösterisi ekran koruyucu System screensaver Sistem ekran koruyucu SearchableListViewPopup Search Ara No search results Hiçbir arama sonucu bulunamadı ShortcutSettingDialog Add custom shortcut Özel kısayol ekle Name: Ad: Required Gerekli Command: Komut: Shortcut Kısayol None Hiçbiri Cancel İptal Add Ekle The shortcut name is already in use. Choose a different name. Kısayol adı zaten kullanımda. Farklı bir ad seçin. Change custom shortcut Özel kısayolu değiştir please enter a shortcut key lütfen bir kısayol tuşu girin Save Kaydet click Save to make this shortcut key effective Bu kısayol tuşunu etkili hale getirmek için Kaydet'e tıklayın click Add to make this shortcut key effective Bu kısayol tuşunu etkili hale getirmek için Ekle'ye tıklayın Shortcuts Shortcuts Kısayollar System shortcut, custom shortcut Sistem kısayolu, özel kısayol Search shortcuts Arama kısayolları done tamamla edit düzenle Click Tıkla Cancel İptal or ya da Replace Değiştir Restore default Varsayılana geri yükle Add custom shortcut Özel kısayol ekle please enter a new shortcut key lütfen yeni bir kısayol tuşu girin Sound Sound Ses Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Çıkış Cihazları Select whether to enable the devices Cihazların etkinleştirilip etkinleştirilmeyeceğini seçin Input Devices Giriş Cihazları SoundEffectsPage Sound Effects Ses Etkileri SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Önyükleme Shut down Kapat Log out Oturumu kapat Wake up Uyan Volume +/- Ses +/- Notification Bildirim Low battery Düşük pil Send icon in Launcher to Desktop Başlatıcı'dan Masaüstüne simge gönder Empty Trash Çöpü Boşalt Plug in Fişe tak Plug out Fişten çıkar Removable device connected Çıkarılabilir aygıt bağlandı Removable device removed Çıkarılabilir aygıt kaldırıldı Error Hata SpeakerPage Mode Kip Output Volume Ses Çıkışı Volume Boost Ses Artışı If the volume is louder than 100%, it may distort audio and be harmful to output devices Ses seviyesi %100'den fazlaysa, ses bozulabilir ve çıkış aygıtlarına zarar verebilir. Left Sol Right Sağ Output Çıkış No output device for sound found Ses için çıkış aygıtı bulunamadı Left Right Balance Sol Sağ Dengesi Merge left and right channels into a single channel Sol ve sağ kanalları tek bir kanalda birleştirin Whether the audio will be automatically paused when the current audio device is unplugged Mevcut ses aygıtı çıkarıldığında sesin otomatik olarak duraklatılıp duraklatılmayacağı Mono Audio Mono Ses Auto Pause Otomatik Duraklatma Output Device Çıkış Cihazı SyncInfoListModel Sound Ses Power Güç Mouse Fare Update Güncelle Screensaver Ekran koruyucu System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers Daha Fazla Duvar Kağıdı TimeAndDate Auto sync time Otomatik senkronizasyon zamanı Ntp server Ntp sunucu System date and time Sistem tarihi ve saati Customize Özelleştir Settings Ayarlar Server address Sunucu adresi Required Gerekli The ntp server address cannot be empty ntp sunucu adresi boş olamaz Use 24-hour format 24 saatlik formatı kullan system time zone sistem saat dilimi Timezone list Saat dilimi listesi Add Ekle TimeRange from buradan to buraya TimeoutDialog Save the display settings? Görüntü ayarları kaydedilsin mi? Settings will be reverted in %1s. Ayarlar %1s içinde geri döndürülecek. Revert Eski haline döndür Save Kaydet TimezoneDialog Add time zone Saat dilimi ekle Determine the time zone based on the current location Mevcut konuma göre saat dilimini belirleyin Time zone: Zaman dilimi: Nearest City: En Yakın Şehir: Cancel İptal Save Kaydet TouchScreen TouchScreen Dokunmatik ekran Set up here when connecting the touch screen Dokunmatik ekranı bağlarken burayı ayarlayın Touchpad Basic Settings Temel Ayarlar Touchpad Dokunmatik Yüzey Pointer Speed İşaretçi Hızı Slow Yavaş Fast Hızlı Disable touchpad during input Giriş sırasında dokunmatik yüzeyi devre dışı bırak Tap to Click Tıklamak için Dokun Natural Scrolling Doğal Kaydırma Three-finger gestures Üç Parmak hareketi Four-finger gestures Dört Parmak hareketi Gestures Hareket Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Kullanıcı Deneyimi Programına Katıl Copy Link Address Bağlantı Adresini Kopyala VerifyDialog Security Verification Güvenlik Doğrulama The action is sensitive, please enter the login password first İşlem hassastır, lütfen önce oturum açma şifresini girin 8-64 characters 8-64 karakterler Forgot Password? Parolanızı mı unuttunuz? Cancel İptal Confirm Onayla Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper duvar Kâğıdı My pictures Resimlerim System Wallpaper Sistem Duvar Kağıdı Solid color wallpaper Düz renk duvar kağıdı Customizable wallpapers Özelleştirilebilir duvar kağıtları fill style dolgu stili Automatic wallpaper change Otomatik duvar kağıdı değişimi never asla 30 second 30 Saniye 1 minute 1 dakika 5 minute 5 dakika 10 minute 10 dakika 15 minute 15 dakika 30 minute 30 dakika login oturum aç wake up uyan Live Wallpaper Canlı Duvar Kağıdı 1 hour 1 saat System Wallpapers Sistem Duvar Kağıtları WallpaperSelectView unfold açılmak Set lock screen Kilit ekranı ayarla Set desktop Masaüstü ayarla show all - %1 items tümünü göster - %1 öğe Add Picture WindowEffectPage Interface and Effects Arayüz ve Efektler Window Settings Pencere Ayarları Window rounded corners Pencere yuvarlatılmış köşeler None Hiçbiri Small Küçük Large Büyük Enable transparent effects when moving windows Pencereleri taşırken şeffaflık efektlerini etkinleştirin Window Minimize Effect Pencere Küçültme Efekti Scale Ölçek Magic Lamp Sihirli Işık Opacity Saydamlık Low Düşük High Yüksek Scroll Bars Kaydırma Çubukları Show on scrolling Kaydırmayı göster Keep shown Gösterilmeyi sürdür Compact Display Kompakt Ekran If enabled, more content is displayed in the window. Etkinse, pencerede daha fazla içerik görüntülenir. Title Bar Height Başlık Çubuğu Yüksekliği Only suitable for application window title bars drawn by the window manager. Sadece pencere yöneticisi tarafından çizilen uygulama penceresi başlık çubukları için uygundur. Extremely small Son derece küçük Medium describe size of window rounded corners Orta Medium describe height of window title bar Orta dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Geleneksel Çince (Çince Hong Kong) Traditional Chinese (Chinese Taiwan) Geleneksel Çince (Çince Tayvan) Min Nan Chinese Min Nan Çincesi dcc::Locale::regionNames Taiwan China Tayvan Çin dccV25::AccountsController Username must be between 3 and 32 characters Kullanıcı adı 3 ile 32 karakter arasında olmalıdır The first character must be a letter or number İlk karakter bir harf veya sayı olmalıdır Your username should not only have numbers Kullanıcı adınız sadece rakam içermemelidir The username has been used by other user accounts Kullanıcı adı diğer kullanıcı hesapları tarafından kullanılmış The full name is too long Tam isim çok uzun The full name has been used by other user accounts Tam ad diğer kullanıcı hesapları tarafından kullanılmış Wrong password Yanlış parola Standard User Standart Kullanıcı Administrator Yönetici Customized Özelleştirilmiş dccV25::AccountsWorker Your host was removed from the domain server successfully Ana makineniz etki alanı sunucusundan başarıyla kaldırıldı Your host joins the domain server successfully Ana makineniz etki alanı sunucusuna başarıyla katıldı Your host failed to leave the domain server Ana makineniz etki alanı sunucusundan ayrılamadı Your host failed to join the domain server Ana makineniz etki alanı sunucusuna katılamadı AD domain settings Aktif Dizin etki alanı ayarları Password not match Parola eşleşmiyor dccV25::AvatarTypesModel Dimensional Boyutsal Flat Düz dccV25::FaceAuthController Faceprint Yüz izi Face Yüz Use your face to unlock the device and make settings later Cihazın kilidini açmak ve ayarları daha sonra yapmak için yüzünüzü kullanın dccV25::FingerprintAuthController Fingerprint Parmak İzi Place your finger Parmağınızı yerleştirin Place your finger firmly on the sensor until you're asked to lift it Kaldırmanız istenene kadar parmağınızı sensöre sıkıca yerleştirin Lift your finger Parmağınızı kaldırın Lift your finger and place it on the sensor again Parmağınızı kaldırın ve yeniden algılayıcıya koyun Lift your finger and do that again Parmağınızı kaldırın ve tekrar yapın Scan Suspended Tarama Askıya Alındı Scan the edges of your fingerprint Parmak izinizin kenarlarını tarayın Place the edges of your fingerprint on the sensor Parmak izinizin kenarlarını sensöre yerleştirin Adjust the position to scan the edges of your fingerprint Parmak izinizin kenarlarını taramak için konumu ayarlayın Fingerprint added Parmak izi eklendi dccV25::IrisAuthController Iris İris Use your iris to unlock the device and make settings later Cihazın kilidini açmak ve daha sonra ayarları yapmak için irisinizi kullanın dccV25::KeyboardController This shortcut conflicts with [%1] Bu kısayol [%1] ile çakışıyor dccV25::PwqualityManager Password cannot be empty Parola boş olamaz Password must have at least %1 characters Parola en az %1 karakter olmalıdır Password must be no more than %1 characters Parola %1 karakterden fazla olmamalıdır Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Parola yalnızca İngilizce harfler (büyük/küçük harfe duyarlı), sayılar veya özel simgeler içerebilir (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please En fazla %1 palindrom karakter lütfen No more than %1 monotonic characters please %1'den fazla monoton karakter yok lütfen No more than %1 repeating characters please Lütfen %1'den fazla yinelenen karakter yok Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Parola büyük harfler, küçük harfler, sayılar ve semboller içermeli (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Parola 4'ten fazla tersten okunduğunda aynı olan karakter içermemelidir Do not use common words and combinations as password Parola olarak bilinen kelime ve kombinasyonlarını kullanmayın Create a strong password please Lütfen güçlü bir parola oluşturun It does not meet password rules Parola kurallarına uymuyor At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. Küçük harf, büyük harf, rakam ve sembollerden en az %1 tanesini içermeli ve şifre kullanıcı adı ile aynı olmamalıdır. dccV25::ShortcutModel System Sistem Window Pencere Workspace Çalışma Alanı AssistiveTools YardımcıAraçlar Custom Özel None Hiçbiri ================================================ FILE: translations/dde-control-center_tzm.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Before using face recognition, please note that: 1. Your device may be unlocked by people or objects that look or appear similar to you. 2. Face recognition is less secure than digital passwords and mixed passwords. 3. The success rate of unlocking your device through face recognition will be reduced in a low-light, high-light, back-light, large angle scenario and other scenarios. 4. Please do not give your device to others randomly, so as to avoid malicious use of face recognition. 5. In addition to the above scenarios, you should pay attention to other situations that may affect the normal use of face recognition. In order to better use of face recognition, please pay attention to the following matters when inputting the facial data: 1. Please stay in a well-lit setting, avoid direct sunlight and other people appearing in the recorded screen. 2. Please pay attention to the facial state when inputting data, and do not let your hats, hair, sunglasses, masks, heavy makeup and other factors to cover your facial features. 3. Please avoid tilting or lowering your head, closing your eyes or showing only one side of your face, and make sure your front face appears clearly and completely in the prompt box. Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Izdy Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Sser Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (<a href="%1"> %1</a>).</p> <p>Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit <a href="%1"> %1</a>.</p> Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. DisclaimerControl Disclaimer Cancel Agree FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device MousePage Mouse Pointer Speed Slow Fast Pointer Size Short Long Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel PersonalizationInterface Light Auto Dark PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts Custom done edit Click Cancel or Replace Restore default Add custom shortcut please enter a shortcut key SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundModel Boot up Shut down Ssexsi Log out Wake up Volume +/- Notification Tineɣmisin Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar Accounts Account Account manager AccountsMain Other accounts Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... BlueTooth Bluetooth settings, devices Bluetooth CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options Datetime Time and date Time and date, time zone settings Language and region System language, regional formats dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None Deepinid deepin ID UOS ID Cloud services Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal Device Device Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound Personalization Personalization PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders Sound Sound Output, input, sound effects, devices SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model ================================================ FILE: translations/dde-control-center_ug.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel بىكار قىلىش Done تامام Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected ئۇلاندى Not connected ئۇلانمىدى BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 بارماق ئىزى1 Fingerprint2 بارماق ئىزى2 Fingerprint3 بارماق ئىزى3 Fingerprint4 بارماق ئىزى4 Fingerprint5 بارماق ئىزى5 Fingerprint6 بارماق ئىزى6 Fingerprint7 بارماق ئىزى7 Fingerprint8 بارماق ئىزى8 Fingerprint9 بارماق ئىزى9 Fingerprint10 بارماق ئىزى10 Scan failed بارماق ئىزى تىزىملانمىدى The fingerprint already exists بۇ بارماق ئىزى تىزىملىنىپ بولغان Please scan other fingers باشقا بارمىقىڭىزنى سىناپ بېقىڭ Unknown error نامەلۇم خاتالىق Scan suspended بارماق ئىزىنى تىزىملىتىش ئۈزۈلۈپ قالدى Cannot recognize تونىيالمىدى Moved too fast تېگىشىش ۋاقتى قىسقا Finger moved too fast, please do not lift until prompted تېگىشىش ۋاقتى قىسقا بولۇپ قالدى، دەلىللىگەندە بارمىقىڭىزنى مىدىرلاتماڭ Unclear fingerprint سۈرەت سۇس Clean your finger or adjust the finger position, and try again قولىڭىزنى تازىلاڭ ياكى تېگىشىش ئورنىنى تەڭشەڭ، ئاندىن بارمىقىڭىزنى قايتا قويۇپ سىناپ بېقىڭ Already scanned سۈرەت قايتىلىنىپ قالغان Adjust the finger position to scan your fingerprint fully بارمىقىڭىز تەڭگەن رايوننى تەڭشەپ تېخىمۇ كۆپ بارماق ئىزى تىزىملىتىڭ Finger moved too fast. Please do not lift until prompted بارماق ئىزى ئېلىنىۋاتقاندا بارمىقىڭىزنى ئېلىش ئەسكەرتىشى چىقمىغۇچە بارمىقىڭىزنى مىدىرلاتماڭ Lift your finger and place it on the sensor again بارمىقىڭىزنى ئېلىپ قايتا بېسىڭ Position your face inside the frame يۈز قىسمىڭىزنىڭ پەرقلەندۈرۈش دائىرىسى ئىچىدە بولۇشىغا كاپالەتلىك قىلىڭ Face enrolled چىراي تونۇش كىرگۈزۈش مۇۋەپپەقىيەتلىك بولدى Position a human face please راست ئادەم چىرايىنى ئىشلىتىڭ Keep away from the camera كامېرا كۆزىگە توغۇرلىنىڭ،بەك يېقىن ياكى يېراق تۇرۋالماڭ Get closer to the camera كامېراغا يېقىنلىشىڭ Do not position multiple faces inside the frame كۆپ ئادەم بولسا بولمايدۇ Make sure the camera lens is clean كامېرا كۆزىنىڭ پاكىزلىقىغا كاپالەتلىك قىلىڭ Do not enroll in dark, bright or backlit environments قاراڭغۇ نۇر، كۈچلۈك نۇر، تەتۈر نۇر مۇھىتىدا مەشغۇلات قىلىشتىن ساقلىنىڭ Keep your face uncovered يۇزىڭىز ئۆلچەملىك چىقىمىدى Scan timed out كىرگۈزۈش ۋاقتى ئېشىپ كەتتى Cancel بىكار قىلىش Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-uy https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-uy Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server ۋاقىت مۇلازىمېتىرىنى ئۆزگەرتىش دەلىللەشنى تەلەپ قىلىدۇ Authentication is required to set the system timezone سىستېما ۋاقىت رايونىنى بەلگىلەش ئۈچۈن دەلىللەش تەلەپ قىلىنىدۇ DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright © 2011-%1 Deepin مەھەللىسى Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright © 2019-%1 توڭشىن يۇمشاق دېتال تېخنىكا چەكلىك شىركىتى MicrophonePage Automatic Noise Suppression شاۋقۇننى ئاپتوماتىك پەسەيتىش Input Volume مىكروفون ئاۋاز مىقدارى Input Level قايتما ئاۋاز Input No input device for sound found Input Device كىرگۈزۈش ئۈسكۈنىلىرى Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom بەلگىلەش PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty پارول قۇرۇق قالسا بولمايدۇ Password must have at least %1 characters پارول %1 ھەرپتىن كەم بولماسلىقى كېرەك Password must be no more than %1 characters پارول %1 ھەرپتىن ئېشىپ كەتمەسلىكى كېرەك Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) پارولدا پەقەت ئىنگلىزچە ھەرپلەر (چوڭ-كىچىك) ، سان ياكى ئالاھىدە بەلگىلەر بار (~! @ # $% ^ & * () [] {} \ | /?,. <>) No more than %1 palindrome characters please جاۋاب خەتنىڭ ئۇزۇنلۇقى %1 ھەرپتىن ئېشىپ كەتمىسۇن No more than %1 monotonic characters please قايتىلانغان بەلگە %1 تىن ئېشىپ كەتمىسۇن No more than %1 repeating characters please قايتىلانغان ھەرپ %1 تىن ئېشىپ كەتمىسۇن Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) پارول چوڭ ھەرپ،كىچىك ھەرپ، سانلار ۋە بەلگىلەردىن ئىبارەت ئۈچ تۈرنى ئۆز ئىچىگە ئېلىشى كېرەك(~!@#$%^&*()[]{}\|/?,.<>) Password must not contain more than 4 palindrome characters پارولدا ئۇدا 4 تىن ئارتۇق قايتىلانما ھەرپ-بەلگە بولسا بولمايدۇ Do not use common words and combinations as password پارولدا دائىم ئۇچرايدىغان ئاددىي سۆز ۋە سۆز بىرىكمىلىرى بولسا بولمايدۇ Create a strong password please پارول بەك ئاددىي، مۇرەككەپرەك بېكىتىڭ It does not meet password rules پارول بىخەتەرلىك تەلىپىگە ئۇيغۇن كەلمەيدۇ QObject Control Center كونترول مەركىزى Activated ئاكتىپلاندى View كۆرۈش To be activated ئاكتىپلانمىغان Activate ئاكتىپلاش Expired ۋاقتى ئۆتتى In trial period سىناق ۋاقتى Trial expired سىناق ۋاقتى ئۆتتى dde-control-center Touch Screen Settings چەكمە ئېكران تەڭشىكى The settings of touch screen changed چەكمە ئېكران تەڭشىكى ئۆزگەردى This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects سىستېما ئاۋاز ئۈنۈمى SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up ئېچىش Shut down تاقاش Log out چېكىنىش Wake up ئويغىتىش Volume +/- ئاۋازنى تەڭشەش Notification ئۇقتۇرۇش Low battery توك ئاز قالدى Send icon in Launcher to Desktop سىنبەلگىنى قوزغاتقۇچتىن ئۈستەليۈزىگە يوللاش Empty Trash ئەخلەت ساندۇقىنى تازىلاش Plug in توك ئۇلاندى Plug out توك ئۈزۈلدى Removable device connected كۆچمە ئۈسكۈنە ئۇلاندى Removable device removed كۆچمە ئۈسكۈنە ئۈزۈلدى Error خاتالىق ئۇچۇرى SpeakerPage Mode ھالىتى Output Volume ياڭراتقۇ ئاۋاز مىقدارى Volume Boost ئاۋازنى كۈچەيتىش If the volume is louder than 100%, it may distort audio and be harmful to output devices ئاۋاز %100 دىن يۇقىرى بولغاندا ئەينەن چىقماسلىقى ھەمدە ياڭراتقۇغا زىيان يەتكۈزۈشى مۇمكىن Left سول تەرەپ Right ئوڭ تەرەپ Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device چىقىرىش ئۈسكۈنىلىرى SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? كۆرسىتىش تەڭشىكىنى ساقلامسىز؟ Settings will be reverted in %1s. ھېچقانداق مەشغۇلات قىلمىسڭىز %1 سىكۇنتتىن كېيىن ئەسلىگە قايتىدۇ. Revert ئەسلىگە قايتۇرۇش Save ساقلاش TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) مۇرەككەپ خەنزۇچە (خەنزۇچە شياڭگاڭ) Traditional Chinese (Chinese Taiwan) مۇرەككەپ خەنزۇچە (خەنزۇچە تەيۋەن) Min Nan Chinese dcc::Locale::regionNames Taiwan China تەيۋەن جۇڭگو dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] بۇ تېزلەتمە [%1] بىلەن توقۇنۇشىدۇ dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System سىستېما Window كۆزنەك Workspace خىزمەت رايونى AssistiveTools ياردەم قورالى Custom ئىختىيارى None يوق ================================================ FILE: translations/dde-control-center_uk.ts ================================================ AccountSettings edit Змінити Add new user Додати нового користувача Set fullname Встановити повну назву Login settings Параметри входу Login without password Вхід без пароля Delete current account Вилучити поточний обліковий запис Group setting Параметри груп Account groups Групи облікового запису done виконано Group name Назва групи Add group Додати групу Auto login Автоматичний вхід Account Information Дані щодо облікового запису Account name, account fullname, account type Назва облікового запису, повна назва облікового запису, тип облікового запису Account name Назва облікового запису Account fullname Повна назва облікового запису Account type Тип облікового запису The full name is too long Ім'я повністю є надто довгим Group names should be no more than 32 characters Кількість символів у назві групи не повинна перевищувати 32 Group names cannot only have numbers Назва групи не може складатися лише з цифр Use letters,numbers,underscores and dashes only, and must start with a letter Можна використовувати лише літери, цифри, підкреслювання та дефіси, має починатися з літери The group name has been used Назву групи вже використано quick login, Auto login, login without password швидкий вхід, автоматичний вхід, вхід без пароля Undo Скасувати Redo Повторити Cut Вирізати Copy Скопіювати Paste Вставити Select All Позначити усе Quick login Швидкий вхід Accounts Account Обліковий запис Account manager Керування обліковими записами AccountsMain Other accounts Інші облікові записи AddFaceinfoDialog Enroll Face Реєстрація обличчя I have read and agree to the Прочитано, погоджуюся з Disclaimer Попередження Next Далі Face enrolled Обличчя зареєстровано Failed to enroll your face Не вдалося зареєструвати ваше обличчя Done Виконано Cancel Скасувати Retry Enroll Повторити реєстрацію Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. У системі розпізнавання за обличчям не передбачено виявлення того, чи людина жива, а спосіб перевірки є ризикованим. Для забезпечення успішності: 1. Зробіть так, щоб особливості вашого обличчя були чітко помітні і не прикривайте їх (капелюхи, окуляри, маски тощо). 2. Забезпечте належну освітленість і уникайте прямого сонячного світла. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. «Біометричне розпізнавання» — функціональна можливість розпізнавання користувачів, яка надається UnionTech Software Technology Co, Ltd. Під час «біометричного розпізнавання» зібрані біометричні дані буде порівняно із даними, які зберігаються на пристрої. Ідентичність користувача буде встановлено на основі результатів порівняння. Будь ласка, зауважте, що UnionTech Software не збиратиме і не оброблятиме ваших біометричних даних, які зберігатимуться лише на вашому локальному пристрої. Будь ласка, вмикайте біометричне розпізнавання лише на вашому особистому пристрої і використовуйте ваші власні біометричні дані лише для відповідних операцій. Негайно вимикайте або вилучайте біометричні дані інших осіб на відповідному пристрої. Відповідальність за наслідки недотримання цих вимог покладається на вас. UnionTech Software Technology Co, Ltd працює над вивченням і удосконаленням можливостей із захисту, точності і стабільності біометричного розпізнавання. Втім, через вплив факторів середовища, обладнання, технічних проблем та засобів керування ризиками немає гарантії безумовного проходження вами біометричного розпізнавання. Через це, не слід покладатися повністю на біометричне розпізнавання при вході до UOS. Якщо у вас є якісь питання та пропозиції щодо використання біометричного розпізнавання, ви можете надати ваш відгук за допомогою «Обслуговування і підтримки» у UOS. AddFingerDialog Cancel Скасувати Done Виконано Enroll Finger Реєстрація відбитка Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Розташуйте палець, відбиток якого слід зареєструвати на сенсорі і проведіть ним знизу вгору. Після завершення дії, підніміть палець із сенсора. I have read and agree to the Прочитано, погоджуюся з Disclaimer Попередження Next Далі Retry Enroll Повторити реєстрацію "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. «Біометричне розпізнавання» — функціональна можливість розпізнавання користувачів, яка надається UnionTech Software Technology Co, Ltd. Під час «біометричного розпізнавання» зібрані біометричні дані буде порівняно із даними, які зберігаються на пристрої. Ідентичність користувача буде встановлено на основі результатів порівняння. Будь ласка, зауважте, що UnionTech Software не збиратиме і не оброблятиме ваших біометричних даних, які зберігатимуться лише на вашому локальному пристрої. Будь ласка, вмикайте біометричне розпізнавання лише на вашому особистому пристрої і використовуйте ваші власні біометричні дані лише для відповідних операцій. Негайно вимикайте або вилучайте біометричні дані інших осіб на відповідному пристрої. Відповідальність за наслідки недотримання цих вимог покладається на вас. UnionTech Software Technology Co, Ltd працює над вивченням і удосконаленням можливостей із захисту, точності і стабільності біометричного розпізнавання. Втім, через вплив факторів середовища, обладнання, технічних проблем та засобів керування ризиками немає гарантії безумовного проходження вами біометричного розпізнавання. Через це, не слід покладатися повністю на біометричне розпізнавання при вході до UOS. Якщо у вас є якісь питання та пропозиції щодо використання біометричного розпізнавання, ви можете надати ваш відгук за допомогою «Обслуговування і підтримки» у UOS. AddIrisDialog Enroll Iris Реєстрація райдужки I have read and agree to the Прочитано, погоджуюся з Disclaimer Відмова від відповідальності Next Далі Done Готово Cancel Скасувати Retry Enroll Повторити реєстрацію Iris enrolled Райдужку зареєстровано Failed to enroll your iris Не вдалося зареєструвати вашу райдужку "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. «Біометричне розпізнавання» — функціональна можливість розпізнавання користувачів, яка надається UnionTech Software Technology Co, Ltd. Під час «біометричного розпізнавання» зібрані біометричні дані буде порівняно із даними, які зберігаються на пристрої. Ідентичність користувача буде встановлено на основі результатів порівняння. Будь ласка, зауважте, що UnionTech Software не збиратиме і не оброблятиме ваших біометричних даних, які зберігатимуться лише на вашому локальному пристрої. Будь ласка, вмикайте біометричне розпізнавання лише на вашому особистому пристрої і використовуйте ваші власні біометричні дані лише для відповідних операцій. Негайно вимикайте або вилучайте біометричні дані інших осіб на відповідному пристрої. Відповідальність за наслідки недотримання цих вимог покладається на вас. UnionTech Software Technology Co, Ltd працює над вивченням і удосконаленням можливостей із захисту, точності і стабільності біометричного розпізнавання. Втім, через вплив факторів середовища, обладнання, технічних проблем та засобів керування ризиками немає гарантії безумовного проходження вами біометричного розпізнавання. Через це, не слід покладатися повністю на біометричне розпізнавання при вході до UOS. Якщо у вас є якісь питання та пропозиції щодо використання біометричного розпізнавання, ви можете надати ваш відгук за допомогою «Обслуговування і підтримки» у UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Будь ласка, утримуйте погляд на пристрої і переконайтеся, що обидва ока перебувають у зоні видимості Authentication Biometric Authentication Біометричне розпізнавання AuthenticationMain Biometric Authentication Біометричне розпізнавання Face Обличчя Up to 5 facial data can be entered Можна реєструвати до 5 записів облич Fingerprint Відбиток пальця Identifying user identity through scanning fingerprints Розпізнавання користувача за сканованими відбитками пальців Iris Райдужка Identity recognition through iris scanning Розпізнавання користувача за скануванням райдужки Use letters, numbers and underscores only, and no more than 15 characters Можна використовувати лише латинські літери, цифри та символи підкреслювання. Довжина назви не повинна перевищувати 15 символів. Use letters, numbers and underscores only Можна використовувати лише латинські літери, цифри та символи підкреслювання No more than 15 characters Не більше 15 символів This name already exists Запис і з такою назвою вже існує Add a new %1 ... Додати новий %1… The name cannot be empty Назва не може бути порожньою AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first «Автоматичний вхід» можна увімкнути лише для одного облікового запису. Будь ласка, спочатку вимкніть його для облікового запису «%1» Ok Гаразд AvatarSettingsDialog Images Зображення Human Людина Animal Тварини Scenery Пейзажі Illustration Ілюстрація Emoji Емодзі custom Нетиповий Cartoon style Стиль мультфільмів Dimensional style Просторовий стиль Flat style Плоский стиль Cancel Скасувати Save Зберегти BatteryPage Screen and Suspend Екран та призупинення Turn off the monitor after Вимкнути монітор після Lock screen after Блокування екрану після Computer suspends after Призупинити комп'ютер після When the lid is closed Якщо закрито кришку When the power button is pressed Якщо натиснуто кнопку живлення Low Battery Низький заряд Low battery notification Сповіщення щодо низького заряду Auto suspend Автопризупинення Auto Hibernate Автоприсипляння Low battery threshold Рівень низького заряду Battery Management Керування акумулятором Display remaining using and charging time Показувати залишок часу користування і заряджання Maximum capacity Максимальна місткість Low battery level Низький рівень заряду Disable Вимкнути BlueTooth Bluetooth settings, devices Параметри Bluetooth, пристрої Bluetooth Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth вимкнено, і показана назва — «%1» Bluetooth is turned on, and the name is displayed as "%1" Bluetooth увімкнено, і показана назва — «%1» BlueToothDeviceListView Disconnect Відʼєднатися Connect З'єднатися Send Files Надіслати файли Rename Перейменувати Remove Device Вилучити пристрій Select file Виберіть файл BluetoothCtl Edit Змінити Allow other Bluetooth devices to find this device Дозволити іншим пристроям Bluetooth знаходити цей пристрій To use the Bluetooth function, please turn off Щоб скористатися Bluetooth, будь ласка, вимкніть Airplane Mode Режим польоту Bluetooth name cannot exceed 64 characters Довжина назви Bluetooth не може перевищувати 64 символів BluetoothDeviceModel Connected Підключено Not connected Не підключено BootPage Startup Settings Параметри запуску You can click the menu to change the default startup items, or drag the image to the window to change the background image. Ви можете натиснути пункт меню для зміни типових пунктів запуску або перетягнути зображення до вікна, щоб змінити фонове зображення. grub start delay затримка запуску GRUB theme тема After turning on the theme, you can see the theme background when you turn on the computer Після вмикання теми ви зможете побачити фонове зображення теми при вмиканні комп'ютера Boot menu verification Перевірка меню завантаження After opening, entering the menu editing requires a password. Після відкриття для входу до меню редагування доведеться ввести пароль Change Password Змінити пароль Change boot menu verification password Змінити пароль перевірки меню завантаження Set the boot menu authentication password Встановити пароль розпізнавання меню завантаження User Name : Ім'я користувача: root root New Password : Новий пароль: Required Обов'язкове Password cannot be empty Пароль не може бути порожнім Passwords do not match Паролі не збігаються Repeat password: Повторіть пароль: Cancel Скасувати Sure Добре Start animation Почати анімацію Adjust the size of the logo animation on the system startup interface Скоригувати розмір анімації логотипа в інтерфейсі запуску системи Camera Allow below apps to access your camera: Дозволити наведеним нижче програмам доступ до камери: CharaMangerModel Fingerprint1 Відбиток1 Fingerprint2 Відбиток2 Fingerprint3 Відбиток3 Fingerprint4 Відбиток4 Fingerprint5 Відбиток5 Fingerprint6 Відбиток6 Fingerprint7 Відбиток7 Fingerprint8 Відбиток8 Fingerprint9 Відбиток9 Fingerprint10 Відбиток10 Scan failed Помилка сканування The fingerprint already exists Відбиток вже існує Please scan other fingers Будь ласка, виконайте сканування інших пальців Unknown error Невідома помилка Scan suspended Сканування призупинено Cannot recognize Не вдалося розпізнати Moved too fast Надто швидкий рух Finger moved too fast, please do not lift until prompted Палець прибрано надто швидко. Будь ласка, не знімайте палець, доки програма вас про це не попросить. Unclear fingerprint Брудний палець Clean your finger or adjust the finger position, and try again Витріть палець або скоригуйте його позицію. Потім повторіть спробу. Already scanned Вже скановано Adjust the finger position to scan your fingerprint fully Скоригуйте позицію пальця, щоб програма могла засканувати відбиток повністю. Finger moved too fast. Please do not lift until prompted Надто швидкий рух пальцем. Будь ласка, не прибирайте палець, доки вас про це не попросять. Lift your finger and place it on the sensor again Прийміть ваш палець, а потім знову торкніться ним сенсора Position your face inside the frame Розташуйте ваше обличчя всередині рамки Face enrolled Обличчя зареєстровано Position a human face please Людське обличчя, будь ласка Keep away from the camera Тримайтеся подалі від камери Get closer to the camera Тримайтеся ближче до камери Do not position multiple faces inside the frame Будь ласка, лише одне обличчя у рамці Make sure the camera lens is clean Переконайтеся, що об'єктив камери не забруднено Do not enroll in dark, bright or backlit environments Не виконуйте реєстрацію у надто темних або світлих середовищах або із підсвічуванням ззаду Keep your face uncovered Не прикривайте обличчя Scan timed out Перевищено граничний час сканування Cancel Скасувати Camera occupied! Камеру зайнято! ColorAndIcons Accent Color Колір акценту Icon Settings Параметри піктограм Icon Theme Тема піктограм Customize your theme icon Налаштувати вашу тему піктограм Cursor Theme Тема вказівника Customize your theme cursor Налаштувати вашу тему вказівника ComfirmDeleteDialog Are you sure you want to delete this account? Ви справді хочете вилучити цей обліковий запис? Delete account directory Вилучити каталог облікового запису Cancel Скасувати Delete Вилучити ComfirmSafePage Go to settings Перейти до параметрів Cancel Скасувати Common Common Загальні Repeat delay Затримка повторення Short Коротка Long Довга Repeat rate Частота повторення Slow Повільна Fast Швидка Numeric Keypad Цифрова клавіатура test here Тест тут Caps lock prompt Підказка Caps Lock Double Click Speed Швидкість подвійного клацання Double Click Test Перевірка подвійного клацання Left Hand Mode Режим шульги Enable Keyboard Увімкнути клавіатуру General Загальне Scrolling Speed Швидкість гортання CommonInfoMain Boot Menu Меню завантаження Manage your boot menu Керування меню завантаження Developer root permission management Керування правами доступу root для розробника Developer Options Параметри для розробників Developer debugging options Діагностичні параметри для розробників CommonInfoWork Large size Великий розмір Small size Малий розмір Failed to get root access Не вдалося отримати доступ root Please sign in to your Union ID first Будь ласка, спершу увійдіть до вашого ідентифікатора Union Cannot read your PC information Не вдалося прочитати дані щодо вашого ПК No network connection Немає з'єднання з мережею Certificate loading failed, unable to get root access Не вдалося завантажити сертифікат — не вдалося отримати адміністративний доступ (root) Signature verification failed, unable to get root access Не вдалося перевірити підпис — не вдалося отримати адміністративний доступ (root) Agree and Join User Experience Program Погодитися та приєднатися до програми досвіду користувачів The Disclaimer of Developer Mode Попередження щодо режиму розробника Agree and Request Root Access Погодитися і отримати доступ root Start setting the new boot animation, please wait for a minute Починаємо встановлення нової анімації завантаження, будь ласка, зачекайте Setting new boot animation finished Встановлення нової анімації завантаження завершено The settings will be applied after rebooting the system Параметри буде застосовано після перезавантаження системи Restart now Перезавантажити зараз Dismiss Відкинути Restart device to finish applying Solid System Read-Only Protection settings Перезапустіть пристрій, щоб завершити застосування параметрів надійного захисту системи лише для читання ConfirmManager Password must contain numbers and letters Пароль має містити цифри і літери Password must be between 8 and 64 characters Довжина пароля має бути від 8 до 64 символів CreateAccountDialog Create a new account Створити _рахунок Account type Тип облікового запису UserName Користувач Required Обов'язкове FullName Ім'я повністю Optional Необов'язкове Cancel Скасувати Create account створення рахунку Username cannot exceed 32 characters Довжина назви запису користувача не може перевищувати 32 символи Username can only contain letters, numbers, - and _ Ім'я користувача може містити лише літери, цифри та символи - і _ Full name cannot exceed 32 characters Довжина імені повністю не може перевищувати 32 символи Full name cannot contain colons Ім'я повністю не може містити символів двокрапки CustomAvatarCropper small малий big великий CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Вами ще не вивантажено аватар. Для вивантаження зображення перетягніть і скиньте його сюди. The uploaded file type is incorrect, please upload it again Тип вивантаженого файла є неправильним. Будь ласка, повторіть спробу вивантаження DCC_NAMESPACE::SystemInfoModel available Доступно DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program Погодитися та приєднатися до програми досвіду користувачів <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>Ми поважаємо ваші права на конфіденційність ваших особистих даних. Тому нами розроблено правила конфіденційності, які обмежують збирання, використання, оприлюднення, передавання, розкриття для громадськості та зберігання нами відомостей щодо вас.</p><p>Можете натиснути <a href="%1">тут</a>, щоб переглянути найсвіжішу версію правил конфіденційності і/або переглянути ці дані у мережі, відвідавши <a href="%1">%1</a>. Будь ласка, уважно прочитайте та переконайтеся, що вам повністю зрозумілий наш підхід до конфіденційності даних користувачів. Якщо у вас виникнуть якісь питання, будь ласка, зв'яжіться із нами за адресою %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Участь у програмі відгуків користувачів означає, що ви надаєте нам доступ до збирання і використання відомостей щодо вашого пристрою, системи та використаних програм. Якщо ви не хочете, щоб ми збирали і використовували ці дані, не беріть участь у програмі відгуків. Щоб дізнатися більше, будь ласка, ознайомтеся із Правилами конфіденційності Deepin (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">Участь у програмі відгуків користувачів означає, що ви надаєте нам доступ до збирання і використання відомостей щодо вашого пристрою, системи та використаних програм. Якщо ви не хочете, щоб ми збирали і використовували ці дані, не беріть участь у програмі відгуків. Щоб дізнатися більше про програму відгуків користувачів, будь ласка, відвідайте </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Параметри дати і часу Date Дата Year Рік Month Місяць Day День Time Час Cancel Скасувати Confirm Підтвердити Datetime Time and date Час і дата Time and date, time zone settings Час і дата, параметри часового поясу DatetimeMain Language and region Мова і регіон System language, regional formats Мова системи, формат регіону DatetimeModel Tomorrow Завтра Yesterday Вчора Today Сьогодні %1 hours earlier than local На %1 годин відстає від місцевого %1 hours later than local На %1 годин випереджає місцевий Space Пробіл Week Тиждень First day of week Перший день тижня: Short date Скорочена дата Long date Дата повністю Short time Час скорочено Long time Час повністю Currency symbol Знак грошової одиниці Positive currency Додатна сума валюти Negative currency Від'ємна сума валюти Decimal symbol Десятковий знак Digit grouping symbol Символ групування цифр Digit grouping Групування цифр Page size Розмір сторінки Example Приклад DatetimeWorker Authentication is required to change NTP server Для зміни NTP-сервера потрібна автентифікація Authentication is required to set the system timezone Аутентифікація потрібна для встановлення системного часового поясу. DccColorDialog Cancel Скасувати Save Зберегти DccWindow Control Center provides the options for system settings. Центр керування надає параметри для системних налаштувань. DeepinIDAccountSecurity Bind WeChat Пов'язати з WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Шляхом прив'язування WeChat ви зможете безпечно і швидко входити до вашого ідентифікатора %1 і локальних облікових записів. Unlinked ВІД’ЄДНАНО Unbinding Відв'язування Link Посилання Are you sure you want to unbind WeChat? Ви справді хочете відв'язати ваш WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Після відв'язування WeChat ви не зможете скористатися WeChat для сканування QR-коду для входу до ідентифікатора %1 або локального облікового запису. Let me think it over Дайте подумати Local Account Binding Прив'язка локального облікового запису After binding your local account, you can use the following functions: Після прив'язки вашого локального облікового запису ви зможете скористатися такими функціями: WeChat Scan Code Login System Система входу за сканованими кодами WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Скористатися WeChat, який прив'язано до вашого ідентифікатора %1 ID, для сканування коду для входу до вашого локального облікового запису. Reset password via %1 ID Скидання пароля за ідентифікатором %1 Reset your local password via %1 ID in case you forget it. Скинути ваш локальний пароль, якщо ви його забули, за допомогою ідентифікатора %1. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Щоб скористатися вказаними вище можливостями, будь ласка, перейдіть на сторінку «Центр керування -> Облікові записи» і увімкніть відповідні пункти. DeepinIDInterface deepin Deepin UOS UOS DeepinIDLogin Cloud Sync Синхронізація із «хмарою» Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Керуйте вашим ідентифікатором %1 і синхронізуйте ваші особисті дані між пристроями. Увійдіть до облікового запису UOS, щоб отримати персоналізовані можливості та служби переглядача інтернету, крамниці програм, підтримки та інші послуги. Sign In to %1 ID Увійти до облікового запису %1 DeepinIDSyncService Auto Sync Авто-синхронізація Securely store system settings and personal data in the cloud, and keep them in sync across devices Безпечно збережіть параметри системи і особисті дані у «хмарі» і підтримуйте синхронізацію цих даних між пристроями. System Settings Системні параметри Last sync time: %1 Остання синхронізація: %1 Clear cloud data Вилучити дані «хмари» Are you sure you want to clear your system settings and personal data saved in the cloud? Ви справді хочете вилучити ваші системні параметри і особисті дані, які збережено у «хмарі»? Once the data is cleared, it cannot be recovered! Щойно дані буде вилучено, їх вже не можна буде відновити! Cancel Скасувати Clear Очистити DeepinIDUserInfo Synchronization Service Служба синхронізації Account and Security Обліковий запис і безпека Sign out Вийти Go to web settings Перейти до параметрів мережі The nickname must be 1~32 characters long У псевдонімі має бути від 1 до 32 символів DeepinWorker encrypt password failed не вдалося скористатися паролем шифрування Wrong password, %1 chances left Помилковий пароль, лишилося %1 спроб The login error has reached the limit today. You can reset the password and try again. На сьогодні перевищено обмеження на невдалі спроби увійти. Ви можете скинути пароль і повторити спробу. Operation Successful Дію успішно виконано The nickname can be modified only once a day Псевдонім можна міняти не частіше, ніж раз на день Deepinid deepin ID Ідентифікатор Deepin UOS ID Ідентифікатор UOS Cloud services «Хмарні» служби DeepinidModel Mainland China Материковий Китай Other regions Інші регіони The feature is not available at present, please activate your system first Цю можливість у поточній версії ще не реалізовано. Будь ласка, спочатку активуйте вашу систему. Subject to your local laws and regulations, it is currently unavailable in your region. Через вимоги місцевого законодавства у вашому регіоні доступу до цих даних немає. Defaultapp Default App Типова програма Set the default application for opening various types of files Встановлення типових програм для відкриття файлів різних типів DefaultappMain Webpage Вебсторінка Mail Пошта Text Текст Music Музика Video Відео Picture Зображення Terminal Термінал DetailItem Please choose the default program to open '%1' Будь ласка, виберіть типову програму для відкриття «%1» add &Додати Open Desktop file Відкрити файл робочого столу Apps (*.desktop) програми (*.desktop) All files (*) усі файли (*) DevelopModePage Root Access Доступ root Request Root Access Попросити про доступ до root After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Після переходу у режим розробника ви зможете отримувати права доступу root, але це може призвести до порушення цілісності вашої системи, тому, будь ласка, будьте обережні. Allowed дозволено Enter Увійти Online У мережі Login UOS ID Увійти до ідентифікатора UOS Offline Поза мережею Import Certificate Імпортувати сертифікат Select file Виберіть файл Your UOS ID has been logged in, click to enter developer mode Ви увійшли до вашого ідентифікатора UOS, натисніть, щоб перейти у режим розробника Please sign in to your UOS ID first and continue Будь ласка, спершу увійдіть до вашого UOS ID і продовжіть роботу 1.Export PC Info Експортувати дані ПК Export Експортувати 3.Import Certificate Імпортувати сертифікат Development and debugging options Параметри для розробки і діагностики System logging level Рівень журналювання у системі Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Зміна параметрів може призвести до докладнішого ведення журналу, що може призвести до зниження швидкодії системи або виникнення потреби у збільшення місця для зберігання даних журналу. Off Вимкнено Debug Діагностика Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Зміна параметра може тривати до хвилини з моменту отримання успішного запиту на встановлення, будь ласка, перезавантажте пристрій, щоб зміни набули чинності. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. Для встановлення і запуску непідписаних програм, будь ласка, відкрийте <a style='text-decoration: none;' href='Security Center'>Центр безпеки</a> для внесення змін до параметрів. To install and run unsigned apps, please go to Security Center to change the settings. Для встановлення і запуску непідписаних програм, будь ласка, відкрийте «Центр безпеки» для внесення змін до параметрів. You have entered developer mode Ви увійшли до режиму розробника OK Гаразд 2.please go to %1 to Download offline certificate. 2. Будь ласка, перейдіть до %1, щоб отримати автономний сертифікат. The feature is not available at present, please activate your system first. Цю можливість у поточній версії ще не реалізовано. Будь ласка, спочатку активуйте вашу систему. Solid System Read-Only Protection Надійний захист системи лише для читання Disabling protection unlocks system directories,This action carries a high risk of system damage. Вимикання захисту розблоковує каталоги системи. Ця дія загрожує наступним пошкодженням системи. Enable protection to lock system directories and ensure optimal stability. Увімкнути захист для блокування каталогів системи і забезпечення оптимальної стабільності. Device Bluetooth and Devices Bluetooth і пристрої DisclaimerControl Disclaimer Попередження Cancel Скасувати Agree Погоджуюсь Display Display Дисплей Brightness,resolution,scaling Яскравість,роздільність,масштабування DisplayMain 100% 100% 125% 125% 150% 150% 175% 175% 200% 200% 225% 225% 250% 250% 275% 275% 300% 300% Duplicate Дублікат Extend Розширити Default Типово Fit Підібрати Stretch Розтягнути Center Центрувати Only on %1 Лише на %1 Multiple Displays Settings Параметри для декількох дисплеїв Identify Ідентифікувати Screen rearrangement will take effect in %1s after changes Перевпорядковування екранів буде виконано за %1с після внесення змін Mode Режим Main Screen Головний екран Display And Layout Дисплей і компонування Brightness Яскравість Resolution Роздільність Resize Desktop Змінити розміри стільниці Refresh Rate Частота оновлення Rotation Обертання Standard Стандартне 90° 90° 180° 180° 270° 270° The monitor only supports 100% display scaling Параметрами монітора передбачено лише масштабування у 100% Eye Comfort Комфорт для очей Enable eye comfort Увімкнути комфорт для очей Adjust screen display to warmer colors, reducing screen blue light Зробити кольори теплішими, зменшуючи вплив синього компонента світла Time Час All day Увесь день Sunset to Sunrise Від сутінок до світанку Custom Time Нетиповий час from від to до Color Temperature Температура кольорів %1x%2 (Recommended) %1x%2 (рекомендовано) %1x%2 %1x%2 %1Hz (Recommended) %1Гц (рекомендовано) %1Hz %1Гц Scaling Масштабування Dock Desktop and taskbar Стільниця і панель задач Desktop organization, taskbar mode, plugin area settings Упорядковування стільниці, режим панелі задач, параметри області додатків DockMain Dock Бічна панель Mode Режим Classic Mode Класичний режим Centered Mode Центрований режим Dock size Розмір панелі Small Малий Large Великий Position on the screen Розташування на екрані Top Вгорі Bottom Внизу Left Ліворуч Right Праворуч Status Стан Keep shown Показувати постійно Keep hidden Приховувати постійно Smart hide Розумне приховування Multiple Displays Декілька дисплеїв Set the position of the taskbar on the screen Встановити розташування панелі задач на екрані Only on main Лише на головному On screen where the cursor is На екрані, де перебуває вказівник Plugin Area Область додатків Select which icons appear in the Dock Виберіть, які піктограми буде показано на бічній панелі Lock the Dock Заблокувати панель Combine application icons Поєднувати піктограми програм FileAndFolder Allow below apps to access these files and folders: Дозволити вказаним нижче програмам доступ до цих файлів і тек: Documents Документи Desktop %1 (стільниця) Pictures Зображення Videos Відео Music Музика Downloads Отримання folder Тека FontSizePage Size Розмір Standard Font Стандартний шрифт Monospaced Font Моноширинний шрифт GeneralPage Power Plans Плани живлення Power Saving Settings Параметри заощадження енергії Auto power saving on low battery Автоматичне заощадження енергії при низькому заряді Low battery threshold Рівень низького заряду Auto power saving on battery Автоматичне заощадження енергії на акумуляторі Wakeup Settings Параметри пробудження Password is required to wake up the computer Щоб увімкнути комп'ютер, необхідно ввести пароль Password is required to wake up the monitor Щоб увімкнути монітор, необхідно ввести пароль Shutdown Settings Параметри вимикання Scheduled Shutdown Заплановане вимикання Time Час Repeat Повторення Once Один раз Every day Щодня Working days Робочі дні Custom Time Нетиповий час Decrease screen brightness on power saver Зменшувати яскравість екран при заощадженні живлення GestureModel Three-finger up Трьома пальцями вгору Three-finger down Трьома пальцями вниз Three-finger left Трьома пальцями ліворуч Three-finger right Трьома пальцями праворуч Three-finger tap Торкання трьома пальцями Four-finger up Чотирма пальцями вгору Four-finger down Чотирма пальцями вниз Four-finger left Чотирма пальцями ліворуч Four-finger right Чотирма пальцями праворуч Four-finger tap Торкання чотирма пальцями HomePage , , ... ... InterfaceEffectListview Optimal Performance Оптимальна швидкодія Balance Баланс Best Visuals Найкращі візуальні ефекти Disable all interface and window effects for efficient system performance. Вимкнути усі ефекти інтерфейсу і вікон для пришвидшення системи. Limit some window effects for excellent visuals while maintaining smooth system performance. Обмежити деякі ефекти вікон для забезпечення ідеальних візуальних ефектів, але з підтримкою належної швидкодії системи. Enable all interface and window effects for the best visual experience. Увімкнути усі ефекти інтерфейсу та вікон для удосконалення візуальної складової. Keyboard Keyboard Клавіатура General Settings, input method, shortcuts Загальні параметри, спосіб введення, скорочення KeyboardMain Common Загальні LangAndFormat Language Мова done виконано edit Змінити Other languages Інші мови add Додати Region Область Area Площа Operating system and applications may provide you with local content based on your country and region Операційна система та програми можуть надавати вам локалізовані дані на основі вказаних країни і регіону Operating system and applications may set date and time formats based on regional formats Операційна система та програми можуть встановлювати формати дати і часу на основі регіональних форматів Regional format Регіональний формат LangsChooserDialog Add language Додати мову Search Пошук Cancel Скасувати Add &Додати LoginMethod Login method Спосіб входу Password, wechat, biometric authentication, security key Пароль, wechat, біометричне розпізнавання, ключ захисту Password Пароль Modify password Редагувати пароль Validity days Дні чинності Always Завжди Reset password Скинути пароль LogoModule Copyright© 2011-%1 Deepin Community © Спільнота Deepin, 2011-%1 Copyright© 2019-%1 UnionTech Software Technology Co., LTD © UnionTech Software Technology Co., LTD, 2019-%1 MicrophonePage Automatic Noise Suppression Автоматичне придушення шуму Input Volume Вхідна гучність Input Level Рівень введення Input Вхід No input device for sound found Не знайдено пристрою введення для звуку Input Device Пристрій введення Mouse Mouse and Touchpad Миша та сенсорна панель Common、Mouse、Touchpad Загальне, миша, сенсорна панель MouseMain Common Загальні Mouse Миша Touchpad Сенсорна панель MousePage Mouse Миша Pointer Speed Швидкість вказівника Slow Повільна Fast Швидка Pointer Size Розмір вказівника Mouse Acceleration Прискорення миші Disable touchpad when a mouse is connected Вимикати сенсорну панель, якщо з'єднано мишу Natural Scrolling Природне гортання Small Малий Medium Середній Large Великий X-Large Надвеликий Some apps require logout or system restart to take effect Для деяких програм доведеться вийти з системи або перезапустити її, щоб це набуло чинності MyDevice My Devices Мої пристрої NativeInfoPage UOS UOS Computer name Ім'я комп'ютера It cannot start or end with dashes Не може починатися і завершуватися дефісом OS Name Назва ОС Version Версія Edition Видання Type Тип bit біт Authorization Уповноваження System installation time Час встановлення системи Kernel Ядро Graphics Platform Графічна платформа: Processor Процесор Memory Пам'ять 1~63 characters please Будь ласка, від 1 до 63 символів Notification DND mode, app notifications Режим «Не турбувати», сповіщення програм Notification Сповіщення NotificationMain Do Not Disturb Settings Параметри режиму «Не турбувати» App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Сповіщення програм не буде показано на стільниці, а звуковий супровід буде вимкнено, але ви зможете бачити повідомлення у центрі сповіщень. Enable Do Not Disturb Увімкнути «Не турбувати» When the screen is locked Якщо екран заблоковано Number of notifications shown on the desktop Кількість сповіщень, які буде показано на стільниці App Notifications Сповіщення програм Allow Notifications Дозволити сповіщення Display notification on desktop or show unread messages in the notification center Показ сповіщення на стільниці або показ кількості непрочитаних повідомлень у центрі сповіщень Desktop Стільниця Lock Screen Блокування екрана Notification Center Центр сповіщень Show message preview Показати попередній перегляд повідомлення Play a sound Відтворити звук OtherDevice Other Devices Інші пристрої Show Bluetooth devices without names Показати пристрої Bluetooth без назв PasswordLayout Current password Поточний пароль Required Вимагається Weak Слабке Medium Середній Strong Сильне Repeat Password Повторіть пароль Password hint Підказка пароля Optional Необов'язково Password cannot be empty Пароль не може бути порожнім Passwords do not match Паролі не збігаються The hint is visible to all users. Do not include the password here. Підказку буде показано усім користувачам. Не включайте до неї пароля. New password Новий пароль New password should differ from the current one Новий пароль повинен відрізнятися від попереднього The password cannot be the same as the username. Пароль не повинен збігатися з іменем користувача. PasswordModifyDialog Modify password Редагувати пароль Reset password Скинути пароль Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Пароль має складатися з принаймні 8 символів і поєднувати у собі принаймні три з таких елементів: літери верхнього регістру, літери нижнього регістру, цифри та символи пунктуації. Паролі такого типу є безпечнішими. Resetting the password will clear the data stored in the keyring. Скидання пароля призведе до вилучення даних, які зберігаються у сховищі ключів. Cancel Скасувати Personalization Personalization Персоналізація PersonalizationInterface Light Світла Auto Авто Dark Темна Picker service is not available Служба піпетки недоступна Invalid color format: %1 Некоректний формат кольору: %1 PersonalizationMain Theme Тема Appearance Вигляд Window effect Ефект вікон Personalize your wallpaper and screensaver Персоналізація фонового зображення і зберігача екрана Screensaver Зберігач екрана Colors and icons Кольори і піктограми Adjust accent color and theme icons Скоригувати кольори акценту та піктограми теми Font and font size Шрифт і розмір шрифту Change system font and size Змінити загальносистемний шрифт і його розмір Wallpaper Зображення тла Select light, dark or automatic theme appearance Виберіть світлий, темний або автоматичний режим вигляду теми Interface and effects, rounded corners Інтерфейс і ефекти, заокруглені краї PersonalizationWorker Custom Користувацький PluginArea Plugin Area Область додатків Select which icons appear in the Dock Виберіть, які піктограми буде показано на бічній панелі Power Power saving settings, screen and suspend Параметри заощадження енергії, екрана та призупинення роботи Power Живлення PowerMain General Загальне Power plans, power saving settings, wakeup settings, shutdown settings Плани живлення, параметри заощадження енергії, параметри пробудження, параметри вимикання Plugged In На живленні Screen and suspend Екран та призупинення On Battery Живлення від акумулятора screen and suspend, low battery, battery management екран і призупинення, низький рівень заряду акумулятора, керування акумулятором PowerOperatorModel Shut down Вимкнути Suspend Призупинити Hibernate Приспати Turn off the monitor Вимкнути монітор Show the shutdown Interface Показувати інтерфейс завершення роботи Do nothing Нічого не робити PowerPage Screen and Suspend Екран та призупинення Turn off the monitor after Вимкнути монітор після Lock screen after Блокування екрану після Computer suspends after Призупинити комп'ютер після When the lid is closed Якщо закрито кришку When the power button is pressed Якщо натиснуто кнопку живлення PowerPlansListview High Performance Висока продуктивність Balance Performance Збалансована швидкодія Aggressively adjust CPU operating frequency based on CPU load condition Агресивно коригувати частоту роботи процесора на основі умов навантаження на процесор Balanced Збалансований Power Saver Заощадження Prioritize performance, which will significantly increase power consumption and heat generation Перевага швидкодії, що значно збільшить споживання енергії та вивільнення тепла Balancing performance and battery life, automatically adjusted according to usage Баланс між швидкодією та часом роботи від акумулятора, автоматичне коригування, залежно від режиму користування Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Перевага часу роботи від акумулятора, певне уповільнення системи для зниження споживання енергії PowerWorker Minutes Хвилини Hour Година Never Ніколи Privacy Privacy and Security Конфіденційність та безпека Camera, folder permissions Камера, доступ до тек PrivacyMain Camera Камера Choose whether the application has access to the camera Виберіть, чи матиме програма доступ до камери Files and Folders Файли і теки Choose whether the application has access to files and folders Виберіть, чи матиме програма доступ до файлів і тек PrivacyPolicyPage Privacy Policy Правила конфіденційності Copy Link Address Копіювати адресу посилання PwqualityManager Password cannot be empty Пароль не може бути порожнім Password must have at least %1 characters Пароль має складатися із принаймні %1 символів Password must be no more than %1 characters Пароль має складатися з не більше, ніж %1 символів Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Пароль може складатися лише з літер латиниці (із врахуванням регістру), цифр та спеціальних символів (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Не більше %1 символів у паліндромі, будь ласка No more than %1 monotonic characters please Не більше %1 послідовних символів, будь ласка No more than %1 repeating characters please Не більше %1 повторюваних символів, будь ласка Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Пароль має складатися із великих і малих латинських літер, цифр і символів (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters У паролі не повинно бути паліндромів, що складаються з понад 4 символів Do not use common words and combinations as password Не використовуйте поширені слова або їхні комбінації як пароль Create a strong password please Будь ласка, створіть складний пароль It does not meet password rules Не відповідає правилам створення паролів QObject Control Center Центр керування Activated Активовано View Переглянути To be activated Ще не активовано Activate Активувати Expired Вичерпано строк дії In trial period Тестовий період Trial expired Тестовий період завершено dde-control-center dde-control-center Touch Screen Settings Параметри сенсорного екрана The settings of touch screen changed Параметри сенсорного екрана змінено This system wallpaper is locked. Please contact your admin. Фонове зображення у цій системі заблоковано від змін. Будь ласка, зв'яжіться з адміністратором вашої системи. %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search Пошук Default formats Типові формати First day of week Перший день тижня: Short date Скорочена дата Long date Дата повністю Short time Час скорочено Long time Час повністю Currency symbol Знак грошової одиниці Digit Цифра Paper size Розмір паперу Cancel Скасувати Save Зберегти Regional format Регіональний формат RegionsChooserWindow Search Пошук RegisterDialog Set a Password Вказати пароль 8-64 characters Символи Repeat the password Повторіть пароль Cancel Скасувати Confirm Підтвердити Passwords don't match Паролі не збігаються ScheduledShutdownDialog Customize repetition time Нетиповий час повторення Cancel Скасувати Save Зберегти ScreenSaverPage Screensaver Збереження екрана preview Перегляд Personalized screensaver Персоналізований зберігач екрана setting встановлення idle time Хвилин бездіяльності 1 minute 1 хвилина 5 minute 5 хвилин 10 minute хвилина 15 minute хвилина 30 minute хвилина 1 hour 1 година never ніколи Password required for recovery Для відновлення слід вказати пароль Picture slideshow screensaver Зберігач екрана з показу слайдів System screensaver Загальносистемний зберігач екрана SearchableListViewPopup Search Пошук No search results Нічого не знайдено ShortcutSettingDialog Add custom shortcut Додати нетипове скорочення Name: Назва: Required Вимагається Command: Команда: Shortcut Скорочення None Немає Cancel Скасувати Add &Додати The shortcut name is already in use. Choose a different name. Назву скорочення вже використано. Виберіть іншу назву. Change custom shortcut Змінити нетипове скорочення please enter a shortcut key будь ласка, натисніть клавіші скорочення Save Зберегти click Save to make this shortcut key effective натисніть «Зберегти», щоб задіяти цю комбінацію клавіш click Add to make this shortcut key effective натисніть «Додати», щоб задіяти цю комбінацію клавіш Shortcuts Shortcuts Скорочення System shortcut, custom shortcut Загальносистемні скорочення, нетипові скорочення Search shortcuts Скорочення пошуку done виконано edit Змінити Click Клацання Cancel Скасувати or або Replace Замінити Restore default Відновити &типове Add custom shortcut Додати нетипове скорочення please enter a new shortcut key будь ласка, введіть нове скорочення Sound Sound Звук Output, input, sound effects, devices Виведення, введення, звукові ефекти, пристрої SoundDevicemanagesPage Output Devices Пристрої відтворення Select whether to enable the devices Виберіть, чи слід вмикати пристрої Input Devices Пристрої вводу SoundEffectsPage Sound Effects Звукові ефекти SoundMain Settings Параметри Sound Effects Звукові ефекти Enable/disable sound effects Вмикає або вимикає звукові ефекти. Enable/disable audio devices Увімкнути/Вимкнути звукові пристрої Devices Management Керування пристроями SoundModel Boot up Завантаження Shut down Вимкнути Log out Вийти Wake up Пробудження Volume +/- Гучність +/- Notification Сповіщення Low battery Низький заряд Send icon in Launcher to Desktop Надіслати піктограму у засобі запуску на стільницю Empty Trash Спорожнити смітник Plug in З'єднання Plug out Від'єднання Removable device connected З'єднано портативний пристрій Removable device removed Вилучено портативний пристрій Error Помилка SpeakerPage Mode Режим Output Volume Вихідна гучність Volume Boost Підсилення гучності If the volume is louder than 100%, it may distort audio and be harmful to output devices Значення гучності, які перевищують 100%, можуть призвести до викривлення звуку та пошкодження пристроїв виведення звуку Left Ліворуч Right Праворуч Output Вивід No output device for sound found Не знайдено пристрою для відтворення звуку Left Right Balance Баланс ліво/право Merge left and right channels into a single channel Об'єднати лівий і правий канали в єдиний канал Whether the audio will be automatically paused when the current audio device is unplugged Визначає, чи буде відтворення звуку автоматично призупинено, якщо поточний звуковий пристрій від'єднано від комп'ютера Mono Audio Монозвук Auto Pause Автопауза Output Device Пристрій виведення SyncInfoListModel Sound Звук Power Живлення Mouse Миша Update Оновлення Screensaver Зберігач екрана System Common settings Загальні параметри System Система SystemInfo Auxiliary Information Допоміжні відомості SystemInfoMain About This PC Про цей ПК System version, device information Версія системи, відомості щодо пристроїв View the notice of open source software Переглянути зауваження щодо вільного програмного забезпечення User Experience Program Програма взаємодії з користувачем Join the user experience program to help improve the product Долучайтеся до програми вражень користувачів, щоб допомогти у поліпшення продукту End User License Agreement Ліцензійна угода із кінцевим користувачем View the end user license agreement Переглянути ліцензійну угоду з кінцевим користувачем Privacy Policy Правила конфіденційності View information about privacy policy Переглянути відомості щодо правил конфіденційності Open Source Software Notice Зауваження щодо програмного забезпечення з відкритим кодом ThemeSelectView More Wallpapers Інші зображення тла… TimeAndDate Auto sync time Час автосинхронізації Ntp server Сервер NTP System date and time Системні дата та час Customize Налаштувати Settings Параметри Server address Адреса сервера Required Вимагається The ntp server address cannot be empty Адреса сервера NTP не може бути порожньою Use 24-hour format Використовувати 24-годинний формат system time zone Часовий пояс системи Timezone list Список часових поясів Add Додати TimeRange from від to до TimeoutDialog Save the display settings? Зберегти налаштування дисплея? Settings will be reverted in %1s. Система повернеться до початкових налаштувань за %1 с. Revert Повернути Save Зберегти TimezoneDialog Add time zone Додати часовий пояс… Determine the time zone based on the current location Визначити часовий пояс на основі даних про поточне місце перебування Time zone: Часовий пояс: Nearest City: Найближче місто: Cancel Скасувати Save Зберегти TouchScreen TouchScreen Сенсорний екран Set up here when connecting the touch screen Налаштуйте умови з'єднання з сенсорним екраном Touchpad Basic Settings Основні параметри Touchpad Сенсорна панель Pointer Speed Покажчик швидкості Slow Повільно Fast Швидко Disable touchpad during input Вимикати сенсорну панель при введенні Tap to Click Натиск для клацання Natural Scrolling Природне гортання Three-finger gestures Жести трьома пальцями Four-finger gestures Жести чотирма пальцями Gestures Жести Touchscreen Touchscreen Сенсорний екран Configuring Touchscreen Налаштовування сенсорної панелі TouchscreenMain Common Загальні UserExperienceProgramPage Join User Experience Program Долучитися до програми удосконалення взаємодії Copy Link Address Копіювати адресу посилання VerifyDialog Security Verification Перевірка захисту The action is sensitive, please enter the login password first Дія є критичною, будь ласка, спочатку введіть пароль до облікового запису 8-64 characters Символи Forgot Password? Забули пароль? Cancel Скасувати Confirm Підтвердити Wacom wacom Wacom Configuring wacom Налаштовування wacom WacomMain wacom Wacom Pen Mode Режим пера Mouse Mode Режим миші Pressure Sensitivity Чутливість до натиску Light Легкий Heavy Важкий Model Модель WallpaperPage wallpaper шпалери My pictures Ваші зображення System Wallpaper Загальносистемне фонове зображення Solid color wallpaper Фонове залиття кольором Customizable wallpapers Власні фонові зображення fill style Стиль заповнення Automatic wallpaper change Автоматична зміна фонового зображення never ніколи 30 second секунда 1 minute 1 хвилина 5 minute хвилина 10 minute хвилина 15 minute хвилина 30 minute хвилина login login wake up Розбудити Live Wallpaper інтерактивне фонове зображення 1 hour 1 година System Wallpapers Загальносистемні фонові зображення WallpaperSelectView unfold розгорнути Set lock screen Встановити екран блокування Set desktop Встановити стільницю show all - %1 items показ усіх - %1 записи Add Picture Додати зображення WindowEffectPage Interface and Effects Інтерфейс і ефекти Window Settings Параметри вікон Window rounded corners Заокруглені кути вікон None Немає Small Малий Large Великий Enable transparent effects when moving windows Увімкнути ефекти прозорості при пересуванні вікон Window Minimize Effect Ефект мінімізації вікон Scale Масштаб Magic Lamp Чарівна лампа Opacity Непрозорість Low Низький High Високий Scroll Bars Смужки гортання Show on scrolling Показувати при гортанні Keep shown Показувати постійно Compact Display Компактний показ If enabled, more content is displayed in the window. Якщо увімкнено, у вікні буде показано більше даних. Title Bar Height Висота смужки заголовка Only suitable for application window title bars drawn by the window manager. Стосується лише смужок заголовка вікон програм, які намальовано засобом керування вікнами. Extremely small Надзвичайно мала Medium describe size of window rounded corners Середній Medium describe height of window title bar Середня dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Традиційна китайська (Гонконг) Traditional Chinese (Chinese Taiwan) Традиційна китайська (Тайвань) Min Nan Chinese Китайська (мінь-нан) dcc::Locale::regionNames Taiwan China Тайвань dccV25::AccountsController Username must be between 3 and 32 characters Ім'я користувача має містити 3-32 символи The first character must be a letter or number Перший символ має бути літерою або цифрою Your username should not only have numbers Ім'я користувача не може складатися лише з цифр The username has been used by other user accounts Це ім'я користувача було використано в інших облікових записах користувачів The full name is too long Ім'я повністю є надто довгим The full name has been used by other user accounts Це ім'я повністю було використано в інших облікових записах користувачів Wrong password Неправильний пароль Standard User Стандартний користувач Administrator Адміністратор Customized Змінено dccV25::AccountsWorker Your host was removed from the domain server successfully Ваш вузол успішно вилучено з сервера домену Your host joins the domain server successfully Ваш вузол успішно долучено до сервера домену Your host failed to leave the domain server Не вдалося залишити сервер домену Your host failed to join the domain server Не вдалося долучитися до сервера домену AD domain settings Налаштування домену AD Password not match Пароль є невідповідним dccV25::AvatarTypesModel Dimensional Просторовий Flat Нейтральний dccV25::FaceAuthController Faceprint Ідентифікатор обличчя Face Обличчя Use your face to unlock the device and make settings later Скористайтеся вашим обличчям для розблокування пристрою і змініть параметри пізніше dccV25::FingerprintAuthController Fingerprint Відбиток пальця Place your finger Притисніть палець Place your finger firmly on the sensor until you're asked to lift it Щільно притисніть палець до сканера, доки програма не попросить його прибрати Lift your finger Прийміть ваш палець Lift your finger and place it on the sensor again Прийміть ваш палець, а потім знову торкніться ним сенсора Lift your finger and do that again Прийміть ваш палець і повторіть спробу Scan Suspended Сканування призупинено Scan the edges of your fingerprint Сканування країв вашого відбитка Place the edges of your fingerprint on the sensor Розташуйте палець у центрі сканера Adjust the position to scan the edges of your fingerprint Скоригуйте позицію для сканування країв вашого відбитка Fingerprint added Відбиток пальця додано dccV25::IrisAuthController Iris Райдужка Use your iris to unlock the device and make settings later Скористайтеся вашою райдужкою для розблокування пристрою і змініть параметри пізніше dccV25::KeyboardController This shortcut conflicts with [%1] Це клавіатурне скорочення конфліктує із [%1] dccV25::PwqualityManager Password cannot be empty Пароль не може бути порожнім Password must have at least %1 characters Пароль має складатися із принаймні %1 символів Password must be no more than %1 characters Пароль має складатися з не більше, ніж %1 символів Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Пароль може складатися лише з літер латиниці (із врахуванням регістру), цифр та спеціальних символів (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please Не більше %1 символів у паліндромі, будь ласка No more than %1 monotonic characters please Не більше %1 послідовних символів, будь ласка No more than %1 repeating characters please Не більше %1 повторюваних символів, будь ласка Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Пароль має складатися із великих і малих латинських літер, цифр і символів (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters У паролі не повинно бути паліндромів, що складаються з понад 4 символів Do not use common words and combinations as password Не використовуйте поширені слова або їхні комбінації як пароль Create a strong password please Будь ласка, створіть складний пароль It does not meet password rules Не відповідає правилам створення паролів At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. Має бути включено принаймні %1 типів малих літер, великі літери, цифри та символи, а сам пароль не повинен збігатися із назвою облікового запису користувача. dccV25::ShortcutModel System Система Window Вікно Workspace Робочий простір AssistiveTools Допоміжні інструменти Custom Нетиповий None Немає ================================================ FILE: translations/dde-control-center_ur.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Cancel Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Done Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Delete ComfirmSafePage Go to settings Cancel Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom اپنی مرضی کا PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down شٹڈاون Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None کوئی نہیں Cancel Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down شٹڈاون Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System سسٹم SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None کوئی نہیں Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) روایتی چینی (چینی ہانگ کانگ) Traditional Chinese (Chinese Taiwan) روایتی چینی (چینی تائیوان) Min Nan Chinese dcc::Locale::regionNames Taiwan China تائیوان چین dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] یہ شارٹ کٹ [%1] سے ٹکراتا ہے dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System سسٹم Window ونڈو Workspace ورک اسپیس AssistiveTools معاونت کے ٹولز Custom اپنی مرضی کا None کوئی نہیں ================================================ FILE: translations/dde-control-center_uz.ts ================================================ AccountSettings edit Add new user Set fullname Login settings Login without password Delete current account Group setting Account groups done Group name Add group Auto login Account Information Account name, account fullname, account type Account name Account fullname Account type The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face I have read and agree to the Disclaimer Next Face enrolled Failed to enroll your face Done Bajarildi Cancel Bekor qilish Retry Enroll Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Bekor qilish Done Bajarildi Enroll Finger Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. I have read and agree to the Disclaimer Next Retry Enroll "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Bajarildi Cancel Bekor qilish Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Ok AvatarSettingsDialog Images Human Animal Scenery Illustration Emoji custom Cartoon style Dimensional style Flat style Cancel Bekor qilish Save BatteryPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed Low Battery Low battery notification Auto suspend Auto Hibernate Low battery threshold Battery Management Display remaining using and charging time Maximum capacity Low battery level Disable BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth is turned on, and the name is displayed as "%1" BlueToothDeviceListView Disconnect Connect Send Files Rename Remove Device Select file BluetoothCtl Edit Allow other Bluetooth devices to find this device To use the Bluetooth function, please turn off Airplane Mode Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Not connected BootPage Startup Settings You can click the menu to change the default startup items, or drag the image to the window to change the background image. grub start delay theme After turning on the theme, you can see the theme background when you turn on the computer Boot menu verification After opening, entering the menu editing requires a password. Change Password Change boot menu verification password Set the boot menu authentication password User Name : root New Password : Required Password cannot be empty Passwords do not match Repeat password: Cancel Bekor qilish Sure Start animation Adjust the size of the logo animation on the system startup interface Camera Allow below apps to access your camera: CharaMangerModel Fingerprint1 Fingerprint2 Fingerprint3 Fingerprint4 Fingerprint5 Fingerprint6 Fingerprint7 Fingerprint8 Fingerprint9 Fingerprint10 Scan failed The fingerprint already exists Please scan other fingers Unknown error Scan suspended Cannot recognize Moved too fast Finger moved too fast, please do not lift until prompted Unclear fingerprint Clean your finger or adjust the finger position, and try again Already scanned Adjust the finger position to scan your fingerprint fully Finger moved too fast. Please do not lift until prompted Lift your finger and place it on the sensor again Position your face inside the frame Face enrolled Position a human face please Keep away from the camera Get closer to the camera Do not position multiple faces inside the frame Make sure the camera lens is clean Do not enroll in dark, bright or backlit environments Keep your face uncovered Scan timed out Cancel Bekor qilish Camera occupied! ColorAndIcons Accent Color Icon Settings Icon Theme Customize your theme icon Cursor Theme Customize your theme cursor ComfirmDeleteDialog Are you sure you want to delete this account? Delete account directory Cancel Bekor qilish Delete ComfirmSafePage Go to settings Cancel Bekor qilish Common Common Repeat delay Short Long Repeat rate Slow Fast Numeric Keypad test here Caps lock prompt Double Click Speed Double Click Test Left Hand Mode Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Small size Failed to get root access Please sign in to your Union ID first Cannot read your PC information No network connection Certificate loading failed, unable to get root access Signature verification failed, unable to get root access Agree and Join User Experience Program The Disclaimer of Developer Mode Agree and Request Root Access Start setting the new boot animation, please wait for a minute Setting new boot animation finished The settings will be applied after rebooting the system Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Password must be between 8 and 64 characters CreateAccountDialog Create a new account Account type UserName Required FullName Optional Cancel Bekor qilish Create account Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/experience-en Agree and Join User Experience Program <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Date Year Month Day Time Cancel Bekor qilish Confirm Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Yesterday Today %1 hours earlier than local %1 hours later than local Space Week First day of week Short date Long date Short time Long time Currency symbol Positive currency Negative currency Decimal symbol Digit grouping symbol Digit grouping Page size Example DatetimeWorker Authentication is required to change NTP server Authentication is required to set the system timezone DccColorDialog Cancel Bekor qilish Save DccWindow Control Center provides the options for system settings. DeepinIDAccountSecurity Bind WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Unlinked Unbinding Link Are you sure you want to unbind WeChat? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Let me think it over Local Account Binding After binding your local account, you can use the following functions: WeChat Scan Code Login System Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Reset password via %1 ID Reset your local password via %1 ID in case you forget it. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. DeepinIDInterface deepin UOS DeepinIDLogin Cloud Sync Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Sign In to %1 ID DeepinIDSyncService Auto Sync Securely store system settings and personal data in the cloud, and keep them in sync across devices System Settings Last sync time: %1 Clear cloud data Are you sure you want to clear your system settings and personal data saved in the cloud? Once the data is cleared, it cannot be recovered! Cancel Bekor qilish Clear DeepinIDUserInfo Synchronization Service Account and Security Sign out Go to web settings The nickname must be 1~32 characters long DeepinWorker encrypt password failed Wrong password, %1 chances left The login error has reached the limit today. You can reset the password and try again. Operation Successful The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Other regions The feature is not available at present, please activate your system first Subject to your local laws and regulations, it is currently unavailable in your region. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' add Open Desktop file Apps (*.desktop) All files (*) DevelopModePage Root Access Request Root Access After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Allowed Enter Online Login UOS ID Offline Import Certificate Select file Your UOS ID has been logged in, click to enter developer mode Please sign in to your UOS ID first and continue 1.Export PC Info Export 3.Import Certificate Development and debugging options System logging level Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Off Debug Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Bekor qilish Agree Display Display Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Documents Desktop Pictures Videos Music Downloads folder FontSizePage Size Standard Font Monospaced Font GeneralPage Power Plans Power Saving Settings Auto power saving on low battery Low battery threshold Auto power saving on battery Wakeup Settings Password is required to wake up the computer Password is required to wake up the monitor Shutdown Settings Scheduled Shutdown Time Repeat Once Every day Working days Custom Time Decrease screen brightness on power saver GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Cancel Bekor qilish Add LoginMethod Login method Password, wechat, biometric authentication, security key Password Modify password Validity days Always Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2019-%1 UnionTech Software Technology Co., LTD MicrophonePage Automatic Noise Suppression Input Volume Input Level Input No input device for sound found Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices NativeInfoPage UOS Computer name It cannot start or end with dashes OS Name Version Edition Type bit Authorization System installation time Kernel Graphics Platform Processor Memory 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Show Bluetooth devices without names PasswordLayout Current password Required Weak Medium Strong Repeat Password Password hint Optional Password cannot be empty Passwords do not match The hint is visible to all users. Do not include the password here. New password New password should differ from the current one The password cannot be the same as the username. PasswordModifyDialog Modify password Reset password Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Resetting the password will clear the data stored in the keyring. Cancel Bekor qilish Personalization Personalization PersonalizationInterface Light Auto Dark Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom PluginArea Plugin Area Select which icons appear in the Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Suspend Hibernate Turn off the monitor Show the shutdown Interface Do nothing PowerPage Screen and Suspend Turn off the monitor after Lock screen after Computer suspends after When the lid is closed When the power button is pressed PowerPlansListview High Performance Balance Performance Aggressively adjust CPU operating frequency based on CPU load condition Balanced Power Saver Prioritize performance, which will significantly increase power consumption and heat generation Balancing performance and battery life, automatically adjusted according to usage Prioritize battery life, which the system will sacrifice some performance to reduce power consumption PowerWorker Minutes Hour Never Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Copy Link Address PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules QObject Control Center Activated View To be activated Activate Expired In trial period Trial expired dde-control-center Touch Screen Settings The settings of touch screen changed This system wallpaper is locked. Please contact your admin. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Default formats First day of week Short date Long date Short time Long time Currency symbol Digit Paper size Cancel Bekor qilish Save Regional format RegionsChooserWindow Search RegisterDialog Set a Password 8-64 characters Repeat the password Cancel Bekor qilish Confirm Passwords don't match ScheduledShutdownDialog Customize repetition time Cancel Bekor qilish Save ScreenSaverPage Screensaver preview Personalized screensaver setting idle time 1 minute 5 minute 10 minute 15 minute 30 minute 1 hour never Password required for recovery Picture slideshow screensaver System screensaver SearchableListViewPopup Search No search results ShortcutSettingDialog Add custom shortcut Name: Required Command: Shortcut None Cancel Bekor qilish Add The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts System shortcut, custom shortcut Search shortcuts done edit Click Cancel Bekor qilish or Replace Restore default Add custom shortcut please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Select whether to enable the devices Input Devices SoundEffectsPage Sound Effects SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Shut down Log out Wake up Volume +/- Notification Low battery Send icon in Launcher to Desktop Empty Trash Plug in Plug out Removable device connected Removable device removed Error SpeakerPage Mode Output Volume Volume Boost If the volume is louder than 100%, it may distort audio and be harmful to output devices Left Right Output No output device for sound found Left Right Balance Merge left and right channels into a single channel Whether the audio will be automatically paused when the current audio device is unplugged Mono Audio Auto Pause Output Device SyncInfoListModel Sound Power Mouse Update Screensaver System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers TimeAndDate Auto sync time Ntp server System date and time Customize Settings Server address Required The ntp server address cannot be empty Use 24-hour format system time zone Timezone list Add TimeRange from to TimeoutDialog Save the display settings? Settings will be reverted in %1s. Revert Save TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel Bekor qilish Save TouchScreen TouchScreen Set up here when connecting the touch screen Touchpad Basic Settings Touchpad Pointer Speed Slow Fast Disable touchpad during input Tap to Click Natural Scrolling Three-finger gestures Four-finger gestures Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Copy Link Address VerifyDialog Security Verification The action is sensitive, please enter the login password first 8-64 characters Forgot Password? Cancel Bekor qilish Confirm Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper My pictures System Wallpaper Solid color wallpaper Customizable wallpapers fill style Automatic wallpaper change never 30 second 1 minute 5 minute 10 minute 15 minute 30 minute login wake up Live Wallpaper 1 hour System Wallpapers WallpaperSelectView unfold Set lock screen Set desktop show all - %1 items Add Picture WindowEffectPage Interface and Effects Window Settings Window rounded corners None Small Large Enable transparent effects when moving windows Window Minimize Effect Scale Magic Lamp Opacity Low High Scroll Bars Show on scrolling Keep shown Compact Display If enabled, more content is displayed in the window. Title Bar Height Only suitable for application window title bars drawn by the window manager. Extremely small Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Traditional Chinese (Chinese Taiwan) Min Nan Chinese dcc::Locale::regionNames Taiwan China dccV25::AccountsController Username must be between 3 and 32 characters The first character must be a letter or number Your username should not only have numbers The username has been used by other user accounts The full name is too long The full name has been used by other user accounts Wrong password Standard User Administrator Customized dccV25::AccountsWorker Your host was removed from the domain server successfully Your host joins the domain server successfully Your host failed to leave the domain server Your host failed to join the domain server AD domain settings Password not match dccV25::AvatarTypesModel Dimensional Flat dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] dccV25::PwqualityManager Password cannot be empty Password must have at least %1 characters Password must be no more than %1 characters Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) No more than %1 palindrome characters please No more than %1 monotonic characters please No more than %1 repeating characters please Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Do not use common words and combinations as password Create a strong password please It does not meet password rules At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Window Workspace AssistiveTools Custom None ================================================ FILE: translations/dde-control-center_vi.ts ================================================ AccountSettings edit sửa Add new user Thêm người dùng mới Set fullname Đặt tên đầy đủ Login settings Cài đặt đăng nhập Login without password Đăng nhập không cần mật khẩu Delete current account Xóa tài khoản hiện tại Group setting Cài đặt nhóm Account groups Nhóm tài khoản done hoàn tất Group name Tên nhóm Add group Thêm nhóm Auto login Đăng nhập tự động Account Information Thông tin tài khoản Account name, account fullname, account type Tên tài khoản, tên đầy đủ tài khoản, loại tài khoản Account name Tên tài khoản Account fullname Tên đầy đủ tài khoản Account type Loại tài khoản The full name is too long Group names should be no more than 32 characters Group names cannot only have numbers Use letters,numbers,underscores and dashes only, and must start with a letter The group name has been used quick login, Auto login, login without password Undo Redo Cut Copy Paste Select All Quick login Accounts Account Account manager AccountsMain Other accounts AddFaceinfoDialog Enroll Face Đăng ký khuôn mặt I have read and agree to the Tôi đã đọc và chấp nhận Disclaimer Chuẩn bảo Next Tiếp theo Face enrolled Khuôn mặt đã đăng ký Failed to enroll your face Không thể đăng ký khuôn mặt của bạn Done Hoàn tất Cancel Hủy bỏ Retry Enroll Thử lại Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. AddFingerDialog Cancel Hủy bỏ Done Hoàn tất Enroll Finger Đăng ký ngón tay Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. Đặt ngón tay cần đăng ký vào cảm biến vân tay và di chuyển từ dưới lên trên. Sau khi hoàn thành hành động, vui lòng nâng ngón tay lên. I have read and agree to the Tôi đã đọc và đồng ý với Disclaimer Chuẩn ngữ Next Tiếp theo Retry Enroll Thử lại "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Biometric authentication là một chức năng xác thực danh tính người dùng cung cấp bởi UnionTech Software Technology Co., Ltd. Qua biometric authentication, dữ liệu sinh trắc học thu thập sẽ được so sánh với dữ liệu lưu trữ trong thiết bị, và danh tính người dùng sẽ được xác thực dựa trên kết quả so sánh. Vui lòng chú ý rằng UnionTech Software Technology Co., Ltd. sẽ không thu thập hoặc truy cập thông tin sinh trắc học của bạn, dữ liệu này sẽ được lưu trữ trên thiết bị của bạn. Vui lòng chỉ kích hoạt biometric authentication trên thiết bị cá nhân của bạn và sử dụng thông tin sinh trắc học của riêng bạn cho các hoạt động liên quan, và nhanh chóng vô hiệu hóa hoặc xóa thông tin sinh trắc học của người khác trên thiết bị đó, nếu không bạn sẽ phải chịu rủi ro do đó. UnionTech Software Technology Co., Ltd. cam kết nghiên cứu và cải thiện an toàn, chính xác và ổn định của biometric authentication. Tuy nhiên, do các yếu tố môi trường, thiết bị, kỹ thuật và các yếu tố khác và kiểm soát rủi ro, không có đảm bảo bạn sẽ thông qua kiểm tra sinh trắc học tạm thời. Vì vậy, vui lòng không coi biometric authentication là cách duy nhất để đăng nhập vào UOS. Nếu bạn có bất kỳ câu hỏi hoặc ý kiến ​​khi sử dụng biometric authentication, bạn có thể cung cấp phản hồi thông qua 'Service and Support' trong UOS. AddIrisDialog Enroll Iris I have read and agree to the Disclaimer Next Done Cancel Retry Enroll Iris enrolled Failed to enroll your iris "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. Please keep an eye on the device and ensure that both eyes are within the collection area Authentication Biometric Authentication AuthenticationMain Biometric Authentication Face Up to 5 facial data can be entered Fingerprint Identifying user identity through scanning fingerprints Iris Identity recognition through iris scanning Use letters, numbers and underscores only, and no more than 15 characters Use letters, numbers and underscores only No more than 15 characters This name already exists Add a new %1 ... The name cannot be empty AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first Auto Login có thể được kích hoạt cho chỉ một tài khoản, vui lòng vô hiệu hóa nó trước cho tài khoản '%1' Ok Được AvatarSettingsDialog Images Hình ảnh Human Người Animal Động vật Scenery Phong cảnh Illustration Hình vẽ Emoji Biểu tượng cảm xúc custom Tùy chỉnh Cartoon style Stylize卡通 Dimensional style Stylize三维 Flat style Stylize扁平 Cancel Hủy Save Lưu BatteryPage Screen and Suspend Màn hình và tạm dừng Turn off the monitor after Tắt màn hình sau khi Lock screen after Khóa màn hình sau khi Computer suspends after Tạm dừng máy tính sau khi When the lid is closed Khi nắp bị đóng When the power button is pressed Khi nút nguồn được nhấn Low Battery Pin thấp Low battery notification Thông báo pin thấp Auto suspend Tạm dừng tự động Auto Hibernate Hibernate tự động Low battery threshold Hạn mức pin thấp Battery Management Quản lý pin Display remaining using and charging time Hiển thị thời gian sử dụng và sạc còn lại Maximum capacity Dung lượng tối đa Low battery level Mức pin thấp Disable Tắt BlueTooth Bluetooth settings, devices Bluetooth BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" Bluetooth đã tắt, tên hiển thị là "%1" Bluetooth is turned on, and the name is displayed as "%1" Bluetooth đã bật, tên hiển thị là "%1" BlueToothDeviceListView Disconnect Ngắt kết nối Connect Kết nối Send Files Gửi tệp Rename Đặt lại tên Remove Device Xóa thiết bị Select file Chọn tệp BluetoothCtl Edit Sửa Allow other Bluetooth devices to find this device Cho phép các thiết bị Bluetooth khác tìm thấy thiết bị này To use the Bluetooth function, please turn off Để sử dụng chức năng Bluetooth, vui lòng tắt Airplane Mode Đồng Hành Bluetooth name cannot exceed 64 characters BluetoothDeviceModel Connected Kết nối Not connected Không kết nối BootPage Startup Settings Cài đặt khởi động You can click the menu to change the default startup items, or drag the image to the window to change the background image. Bạn có thể nhấp vào menu để thay đổi các mục khởi động mặc định, hoặc kéo hình ảnh vào cửa sổ để thay đổi hình nền grub start delay Lệch thời gian khởi động grub theme phong cách After turning on the theme, you can see the theme background when you turn on the computer Sau khi bật phong cách, bạn có thể thấy nền phong cách khi khởi động máy tính Boot menu verification Xác minh menu khởi động After opening, entering the menu editing requires a password. Sau khi mở, việc nhập vào menu chỉnh sửa yêu cầu mật khẩu. Change Password Thay đổi mật khẩu Change boot menu verification password Thay đổi mật khẩu xác minh menu khởi động Set the boot menu authentication password Đặt mật khẩu xác minh menu khởi động User Name : Tên người dùng : root root New Password : Mật khẩu mới : Required Bắt buộc Password cannot be empty Mật khẩu không được để trống Passwords do not match Mật khẩu không khớp Repeat password: Nhập lại mật khẩu: Cancel Hủy Sure Đảm bảo Start animation Bắt đầu hoạt ảnh Adjust the size of the logo animation on the system startup interface JUSTIFY: Điều chỉnh kích thước hoạt ảnh logo trên giao diện khởi động hệ thống Camera Allow below apps to access your camera: Cho phép các ứng dụng sau truy cập vào camera: CharaMangerModel Fingerprint1 Vân tay 1 Fingerprint2 Vân tay 2 Fingerprint3 Vân tay 3 Fingerprint4 Vân tay 4 Fingerprint5 Vân tay 5 Fingerprint6 Vân tay 6 Fingerprint7 Vân tay 7 Fingerprint8 Vân tay 8 Fingerprint9 Vân tay 9 Fingerprint10 Vân tay 10 Scan failed Quét thất bại The fingerprint already exists Vân tay đã tồn tại Please scan other fingers Vui lòng quét các ngón tay khác Unknown error Lỗi không rõ Scan suspended Quét tạm dừng Cannot recognize Không thể nhận dạng Moved too fast Di chuyển quá nhanh Finger moved too fast, please do not lift until prompted Đã di chuyển ngón tay quá nhanh, vui lòng không nhấc lên cho đến khi được yêu cầu Unclear fingerprint Đấn vân tay không rõ ràng Clean your finger or adjust the finger position, and try again Rửa sạch ngón tay hoặc điều chỉnh vị trí ngón tay và thử lại Already scanned Đã quét Adjust the finger position to scan your fingerprint fully Điều chỉnh vị trí ngón tay để quét vân tay đầy đủ Finger moved too fast. Please do not lift until prompted Đã di chuyển ngón tay quá nhanh, vui lòng không nhấc lên cho đến khi được yêu cầu Lift your finger and place it on the sensor again Nhấc ngón tay lên và đặt lại lên cảm biến Position your face inside the frame Đặt khuôn mặt vào khung Face enrolled Đã đăng ký khuôn mặt Position a human face please Vui lòng đặt khuôn mặt của con người Keep away from the camera Tránh xa camera Get closer to the camera Đi gần hơn đến camera Do not position multiple faces inside the frame Không đặt nhiều khuôn mặt vào khung Make sure the camera lens is clean Đảm bảo ống kính camera sạch sẽ Do not enroll in dark, bright or backlit environments Không đăng ký trong môi trường tối, sáng hoặc có ánh sáng sau Keep your face uncovered Giữ mặt không bị che đậy Scan timed out Thời gian quét đã hết Cancel Huỷ bỏ Camera occupied! ColorAndIcons Accent Color Màu sắc nhấn mạnh Icon Settings Cài đặt biểu tượng Icon Theme Chủ đề biểu tượng Customize your theme icon Thay đổi biểu tượng chủ đề của bạn Cursor Theme Chủ đề con trỏ Customize your theme cursor Thay đổi con trỏ chủ đề của bạn ComfirmDeleteDialog Are you sure you want to delete this account? Bạn có chắc chắn muốn xóa tài khoản này không? Delete account directory Xóa thư mục tài khoản Cancel Hủy bỏ Delete Xóa ComfirmSafePage Go to settings Đi đến cài đặt Cancel Hủy bỏ Common Common Chung Repeat delay Lagi thời gian lặp lại Short Đắn Long Dài Repeat rate Tần suất lặp lại Slow Thấp Fast Nhanh Numeric Keypad Keypad số test here test ở đây Caps lock prompt Thông báo Caps Lock Double Click Speed Tốc độ nhấp đôi Double Click Test Kiểm tra nhấp đôi Left Hand Mode Chế độ tay trái Enable Keyboard General Scrolling Speed CommonInfoMain Boot Menu Manage your boot menu Developer root permission management Developer Options Developer debugging options CommonInfoWork Large size Kích thước lớn Small size Kích thước nhỏ Failed to get root access Không thể lấy quyền truy cập gốc Please sign in to your Union ID first Vui lòng đăng nhập bằng ID Liên minh trước Cannot read your PC information Không thể đọc thông tin máy tính của bạn No network connection Không có kết nối mạng Certificate loading failed, unable to get root access Không thể tảisertificat, không thể lấy quyền truy cập gốc Signature verification failed, unable to get root access Kiểm tra chữ ký thất bại, không thể lấy quyền truy cập gốc Agree and Join User Experience Program Đồng ý và tham gia chương trìnhExperience Người dùng The Disclaimer of Developer Mode Chuẩn bị của chế độ Phát triển Agree and Request Root Access Đồng ý và yêu cầu quyền truy cập gốc Start setting the new boot animation, please wait for a minute Bắt đầu thiết lập hình động khởi động mới, xin chờ một phút Setting new boot animation finished Đã hoàn thành thiết lập hình động khởi động mới The settings will be applied after rebooting the system Cài đặt sẽ được áp dụng sau khi khởi động lại hệ thống Restart now Dismiss Restart device to finish applying Solid System Read-Only Protection settings ConfirmManager Password must contain numbers and letters Mật khẩu phải chứa chữ số và chữ cái Password must be between 8 and 64 characters Mật khẩu phải từ 8 đến 64 ký tự CreateAccountDialog Create a new account Tạo một tài khoản mới Account type Loại tài khoản UserName Tên người dùng Required Yêu cầu FullName Tên đầy đủ Optional Tùy chọn Cancel Hủy bỏ Create account Tạo tài khoản Username cannot exceed 32 characters Username can only contain letters, numbers, - and _ Full name cannot exceed 32 characters Full name cannot contain colons CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. Bạn chưa tải ảnh đại diện lên. Nhấp hoặc kéo thả để tải ảnh The uploaded file type is incorrect, please upload it again DCC_NAMESPACE::SystemInfoModel available dоступно DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/en/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-vn https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-vn Agree and Join User Experience Program Đồng ý và tham gia chương trình Kinh nghiệm Người dùng <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting Cài đặt ngày và thời gian Date Ngày Year Năm Month Tháng Day Ngày Time Thời gian Cancel Hủy bỏ Confirm Xác nhận Datetime Time and date Time and date, time zone settings DatetimeMain Language and region System language, regional formats DatetimeModel Tomorrow Ngày mai Yesterday Hôm qua Today Hôm nay %1 hours earlier than local %1 giờ trước giờ địa phương %1 hours later than local %1 giờ sau giờ địa phương Space Khoảng trống Week Tuần First day of week Ngày đầu tuần Short date Ngày ngắn Long date Ngày dài Short time Thời gian ngắn Long time Thời gian dài Currency symbol Biểu tượng tiền tệ Positive currency Tiền tệ dương Negative currency Tiền tệ âm Decimal symbol Ký hiệu thập phân Digit grouping symbol Ký hiệu nhóm chữ số Digit grouping Nhóm chữ số Page size Kích thước trang Example DatetimeWorker Authentication is required to change NTP server Cần xác thực để thay đổi máy chủ NTP Authentication is required to set the system timezone Cần có xác thực để đặt múi giờ hệ thống DccColorDialog Cancel Huỷ bỏ Save Lưu DccWindow Control Center provides the options for system settings. Trung tâm Điều khiển cung cấp các tùy chọn cho cài đặt hệ thống. DeepinIDAccountSecurity Bind WeChat Kết nối WeChat By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. Khi kết nối WeChat, bạn có thể đăng nhập an toàn và nhanh chóng vào tài khoản %1 ID và tài khoản địa phương của mình. Unlinked Không liên kết Unbinding Hủy liên kết Link Liên kết Are you sure you want to unbind WeChat? Bạn có chắc chắn muốn hủy liên kết WeChat không? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. Sau khi hủy liên kết WeChat, bạn sẽ không thể sử dụng WeChat để quét mã QR để đăng nhập vào tài khoản %1 ID hoặc tài khoản địa phương. Let me think it over Hãy để tôi suy nghĩ kỹ Local Account Binding Liên kết tài khoản địa phương After binding your local account, you can use the following functions: Sau khi liên kết tài khoản địa phương của bạn, bạn có thể sử dụng các chức năng sau: WeChat Scan Code Login System Hệ thống đăng nhập bằng mã QR WeChat Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. Dùng WeChat, đã liên kết với tài khoản %1 ID, để quét mã QR để đăng nhập vào tài khoản địa phương của bạn. Reset password via %1 ID Khôi phục mật khẩu thông qua tài khoản %1 ID Reset your local password via %1 ID in case you forget it. Đặt lại mật khẩu địa phương thông qua %1 ID nếu bạn quên nó. To use the above features, please go to Control Center - Accounts and turn on the corresponding options. Để sử dụng các tính năng trên, xin vui lòng vào Trung tâm Điều khiển - Tài khoản và bật các tùy chọn tương ứng. DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync Sincronh hóa đám mây Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. Quản lý tài khoản %1 ID và đồng bộ hóa dữ liệu cá nhân trên các thiết bị. Đăng nhập bằng tài khoản %1 ID để sử dụng các tính năng và dịch vụ tùy chỉnh của trình duyệt, cửa hàng ứng dụng, và nhiều hơn nữa. Sign In to %1 ID Đăng nhập vào tài khoản %1 ID DeepinIDSyncService Auto Sync Sincronh hóa tự động Securely store system settings and personal data in the cloud, and keep them in sync across devices Lưu cài đặt hệ thống và dữ liệu cá nhân an toàn trong đám mây và đồng bộ hóa chúng trên các thiết bị System Settings Cài đặt hệ thống Last sync time: %1 Thời gian đồng bộ hóa cuối cùng: %1 Clear cloud data Xóa dữ liệu đám mây Are you sure you want to clear your system settings and personal data saved in the cloud? Bạn có chắc chắn muốn xóa cài đặt hệ thống và dữ liệu cá nhân đã lưu trong đám mây? Once the data is cleared, it cannot be recovered! Sau khi xóa dữ liệu, nó không thể khôi phục! Cancel Hủy bỏ Clear Xóa DeepinIDUserInfo Synchronization Service Dịch vụ đồng bộ hóa Account and Security Tài khoản và Bảo mật Sign out Đăng xuất Go to web settings Truy cập cài đặt web The nickname must be 1~32 characters long DeepinWorker encrypt password failed Lỗi mã hóa mật khẩu Wrong password, %1 chances left Mật khẩu sai, còn %1 lần thử The login error has reached the limit today. You can reset the password and try again. Sai mật khẩu đã đạt giới hạn trong ngày hôm nay. Bạn có thể đặt lại mật khẩu và thử lại. Operation Successful Thao tác thành công The nickname can be modified only once a day Deepinid deepin ID UOS ID Cloud services DeepinidModel Mainland China Trung Quốc Mainland Other regions Các khu vực khác The feature is not available at present, please activate your system first Tính năng này hiện không khả dụng, xin vui lòng kích hoạt hệ thống trước Subject to your local laws and regulations, it is currently unavailable in your region. Theo luật và quy định địa phương của bạn, tính năng này hiện không khả dụng tại khu vực của bạn. Defaultapp Default App Set the default application for opening various types of files DefaultappMain Webpage Mail Text Music Video Picture Terminal DetailItem Please choose the default program to open '%1' Vui lòng chọn ứng dụng mặc định để mở '%1', add Thêm Open Desktop file Mở file bàn làm việc Apps (*.desktop) Ứng dụng (*.desktop All files (*) Tất cả các file (* DevelopModePage Root Access Truy cập gốc Request Root Access Yêu cầu truy cập gốc After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. Sau khi vào chế độ phát triển, bạn có thể nhận được quyền truy cập gốc, nhưng điều này cũng có thể gây hại đến sự toàn vẹn của hệ thống, vì vậy xin vui lòng sử dụng cẩn thận. Allowed Cho phép Enter Nhập Online Trực tuyến Login UOS ID Đăng nhập ID UOS Offline T quizáo ngoại tuyến Import Certificate Nhập chứng chỉ Select file Chọn file Your UOS ID has been logged in, click to enter developer mode ID UOS của bạn đã được đăng nhập, nhấp để vào chế độ phát triển Please sign in to your UOS ID first and continue Xin vui lòng đăng nhập vào ID UOS của bạn trước và tiếp tục 1.Export PC Info 1.Xuất thông tin PC Export Xuất 3.Import Certificate 3.Nhập chứng chỉ Development and debugging options Công cụ phát triển và gỡ lỗi System logging level Mức ghi log hệ thống Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. Thay đổi tùy chọn sẽ dẫn đến ghi log chi tiết hơn, có thể làm giảm hiệu suất hệ thống và/hoặc sử dụng thêm không gian lưu trữ. Off Tắt Debug Kiểm tra lỗi Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. Thay đổi tùy chọn có thể mất tới một phút để xử lý, sau khi nhận được thông báo thiết lập thành công, vui lòng khởi động lại thiết bị để có hiệu lực. To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. To install and run unsigned apps, please go to Security Center to change the settings. You have entered developer mode OK 2.please go to %1 to Download offline certificate. The feature is not available at present, please activate your system first. Solid System Read-Only Protection Disabling protection unlocks system directories,This action carries a high risk of system damage. Enable protection to lock system directories and ensure optimal stability. Device Bluetooth and Devices DisclaimerControl Disclaimer Cancel Agree Display Display Hiển thị Brightness,resolution,scaling DisplayMain 100% 125% 150% 175% 200% 225% 250% 275% 300% Duplicate Extend Default Fit Stretch Center Only on %1 Multiple Displays Settings Identify Screen rearrangement will take effect in %1s after changes Mode Main Screen Display And Layout Brightness Resolution Resize Desktop Refresh Rate Rotation Standard 90° 180° 270° The monitor only supports 100% display scaling Eye Comfort Enable eye comfort Adjust screen display to warmer colors, reducing screen blue light Time All day Sunset to Sunrise Custom Time from to Color Temperature %1x%2 (Recommended) %1x%2 %1Hz (Recommended) %1Hz Scaling Dock Desktop and taskbar Desktop organization, taskbar mode, plugin area settings DockMain Dock Mode Classic Mode Centered Mode Dock size Small Large Position on the screen Top Bottom Left Right Status Keep shown Keep hidden Smart hide Multiple Displays Set the position of the taskbar on the screen Only on main On screen where the cursor is Plugin Area Select which icons appear in the Dock Lock the Dock Combine application icons FileAndFolder Allow below apps to access these files and folders: Cho phép các ứng dụng dưới đây truy cập vào các tệp và thư mục này: Documents Tài liệu Desktop Bàn làm việc Pictures Hình ảnh Videos Phim ảnh Music Nhạc Downloads Tải về folder thư mục FontSizePage Size Kích thước Standard Font Phông chữ tiêu chuẩn Monospaced Font Phông chữ cố định rộng GeneralPage Power Plans Đề xuất năng lượng Power Saving Settings Cài đặt tiết kiệm năng lượng Auto power saving on low battery Tự động tiết kiệm năng lượng khi pin thấp Low battery threshold Hạn mức pin thấp Auto power saving on battery Tự động tiết kiệm năng lượng khi sạc pin Wakeup Settings Cài đặt thức tỉnh Password is required to wake up the computer Yêu cầu mật khẩu để thức tỉnh máy tính Password is required to wake up the monitor Yêu cầu mật khẩu để thức tỉnh màn hình Shutdown Settings Cài đặt tắt máy Scheduled Shutdown Tắt máy theo lịch trình Time Thời gian Repeat Lặp lại Once Một lần Every day Hằng ngày Working days Các ngày làm việc Custom Time Thời gian tùy chỉnh Decrease screen brightness on power saver Giảm độ sáng màn hình khi tiết kiệm năng lượng GestureModel Three-finger up Three-finger down Three-finger left Three-finger right Three-finger tap Four-finger up Four-finger down Four-finger left Four-finger right Four-finger tap HomePage , ... InterfaceEffectListview Optimal Performance Balance Best Visuals Disable all interface and window effects for efficient system performance. Limit some window effects for excellent visuals while maintaining smooth system performance. Enable all interface and window effects for the best visual experience. Keyboard Keyboard General Settings, input method, shortcuts KeyboardMain Common LangAndFormat Language done edit Other languages add Region Area Operating system and applications may provide you with local content based on your country and region Operating system and applications may set date and time formats based on regional formats Regional format LangsChooserDialog Add language Search Tìm kiếm Cancel Hủy bỏ Add Thêm LoginMethod Login method Phương thức đăng nhập Password, wechat, biometric authentication, security key Mật khẩu, WeChat, xác thực sinh trắc học, khóa bảo mật Password Mật khẩu Modify password Thay đổi mật khẩu Validity days Thời gian có hiệu lực (ngày) Always Luôn luôn Reset password LogoModule Copyright© 2011-%1 Deepin Community Copyright© 2011-%1 Cộng đồng Deepin Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright© 2019-%1 Công ty Công nghệ UnionTech Software MicrophonePage Automatic Noise Suppression Giảm tiếng ồn tự động Input Volume Tần số đầu vào Input Level Mức đầu vào Input Đầu vào No input device for sound found Không tìm thấy thiết bị đầu vào âm thanh Input Device Mouse Mouse and Touchpad Common、Mouse、Touchpad MouseMain Common Mouse Touchpad MousePage Mouse Pointer Speed Slow Fast Pointer Size Mouse Acceleration Disable touchpad when a mouse is connected Natural Scrolling Small Medium Large X-Large Some apps require logout or system restart to take effect MyDevice My Devices Các thiết bị của tôi NativeInfoPage UOS UOS Computer name Tên máy tính It cannot start or end with dashes Không thể bắt đầu hoặc kết thúc bằng dấu gạch ngang OS Name Tên hệ điều hành Version Phiên bản Edition Phiên bản Type Loại bit bit Authorization Phê duyệt System installation time Thời gian cài đặt hệ thống Kernel Kernel Graphics Platform Hình ảnh nền tảng Processor CPU Memory Bộ nhớ 1~63 characters please Notification DND mode, app notifications Notification NotificationMain Do Not Disturb Settings App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. Enable Do Not Disturb When the screen is locked Number of notifications shown on the desktop App Notifications Allow Notifications Display notification on desktop or show unread messages in the notification center Desktop Lock Screen Notification Center Show message preview Play a sound OtherDevice Other Devices Các thiết bị khác Show Bluetooth devices without names Hiển thị các thiết bị Bluetooth không có tên PasswordLayout Current password Mật khẩu hiện tại Required Yêu cầu Weak Mất弱 Medium Trung bình中 Strong Strong强 Repeat Password Nhập lại mật khẩu Password hint Lời nhắc mật khẩu Optional Tùy chọn Password cannot be empty Mật khẩu không thể để trống Passwords do not match Mật khẩu không khớp The hint is visible to all users. Do not include the password here. Lời nhắc sẽ hiển thị cho tất cả người dùng. Không bao gồm mật khẩu ở đây. New password New password should differ from the current one Mật khẩu mới phải khác mật khẩu hiện tại The password cannot be the same as the username. PasswordModifyDialog Modify password Thay đổi mật khẩu Reset password Khôi phục mật khẩu Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. Độ dài mật khẩu phải ít nhất 8 ký tự, và mật khẩu phải chứa sự kết hợp của ít nhất 3 trong số các ký tự sau: chữ hoa, chữ thường, số và ký tự đặc biệt. Mật khẩu kiểu này an toàn hơn Resetting the password will clear the data stored in the keyring. Khôi phục mật khẩu sẽ xóa dữ liệu được lưu trong keyring. Cancel Hủy bỏ Personalization Personalization Cá nhân hóa PersonalizationInterface Light Sáng Auto Tự động Dark Đen Picker service is not available Invalid color format: %1 PersonalizationMain Theme Appearance Window effect Personalize your wallpaper and screensaver Screensaver Colors and icons Adjust accent color and theme icons Font and font size Change system font and size Wallpaper Select light, dark or automatic theme appearance Interface and effects, rounded corners PersonalizationWorker Custom Tùy chỉnh PluginArea Plugin Area Khu vực Plugin Select which icons appear in the Dock Chọn biểu tượng nào xuất hiện trong Dock Power Power saving settings, screen and suspend Power PowerMain General Power plans, power saving settings, wakeup settings, shutdown settings Plugged In Screen and suspend On Battery screen and suspend, low battery, battery management PowerOperatorModel Shut down Tắt máy Suspend Sau Hibernate Hibernation Turn off the monitor Tắt màn hình Show the shutdown Interface Hiển thị giao diện tắt máy Do nothing Không làm gì PowerPage Screen and Suspend Màn hình và tạm ngừng Turn off the monitor after Tắt màn hình sau Lock screen after Khóa màn hình sau Computer suspends after Máy tính tạm ngừng sau When the lid is closed Khi nắp bị đóng When the power button is pressed Khi nút nguồn được nhấn PowerPlansListview High Performance Hiệu năng cao Balance Performance Hiệu năng cân bằng Aggressively adjust CPU operating frequency based on CPU load condition Điều chỉnh tần số hoạt động của CPU dựa trên tải CPU một cách quyết liệt Balanced Cân bằng Power Saver Tiết kiệm năng lượng Prioritize performance, which will significantly increase power consumption and heat generation Tối ưu hóa hiệu năng, điều này sẽ làm tăng đáng kể tiêu thụ năng lượng và nhiệt Balancing performance and battery life, automatically adjusted according to usage Tối ưu hóa hiệu năng và thời gian sử dụng pin, điều chỉnh tự động dựa trên sử dụng Prioritize battery life, which the system will sacrifice some performance to reduce power consumption Tối ưu hóa thời gian sử dụng pin, hệ thống sẽ hy sinh một số hiệu năng để giảm tiêu thụ năng lượng PowerWorker Minutes Phút Hour Giờ Never Không bao giờ Privacy Privacy and Security Camera, folder permissions PrivacyMain Camera Choose whether the application has access to the camera Files and Folders Choose whether the application has access to files and folders PrivacyPolicyPage Privacy Policy Chính sách bảo mật Copy Link Address PwqualityManager Password cannot be empty Mật khẩu không được để trống Password must have at least %1 characters Mật khẩu phải có ít nhất %1 ký tự Password must be no more than %1 characters Mật khẩu không được nhiều hơn %1 ký tự Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Mật khẩu chỉ được chứa các chữ cái tiếng Anh (sensitivedo chữ hoa/thường), số hoặc ký tự đặc biệt (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) No more than %1 palindrome characters please Không sử dụng nhiều hơn %1 ký tự đối xứng No more than %1 monotonic characters please Không sử dụng nhiều hơn %1 ký tự đồng điệu No more than %1 repeating characters please Không sử dụng nhiều hơn %1 ký tự lặp Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Mật khẩu phải chứa chữ cái hoa, chữ cái thường, số và ký tự (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/) Password must not contain more than 4 palindrome characters Mật khẩu không được chứa nhiều hơn 4 ký tự đối xứng Do not use common words and combinations as password Không sử dụng từ vựng thông thường và các kết hợp làm mật khẩu Create a strong password please Tạo một mật khẩu mạnh mẽ It does not meet password rules Không tuân theo quy tắc mật khẩu QObject Control Center Trung tâm kiểm soát Activated Đã kích hoạt View Xem To be activated Đang được kích hoạt Activate Kích hoạt Expired Hết hạn In trial period Trong thời gian thử nghiệm Trial expired Thời gian thử nghiệm đã hết hạn dde-control-center dde-control-center Touch Screen Settings Cài đặt màn hình cảm ứng The settings of touch screen changed Cài đặt màn hình cảm ứng đã thay đổi This system wallpaper is locked. Please contact your admin. Bìa nền hệ thống này đã bị khóa. Vui lòng liên hệ với quản trị viên của bạn. %1 (%2) Language and region name, e.g. Chinese (China) RegionFormatDialog Search Tìm kiếm Default formats Định dạng mặc định First day of week Ngày đầu tiên trong tuần Short date Hình thức ngày ngắn Long date Hình thức ngày dài Short time Hình thức giờ ngắn Long time Hình thức giờ dài Currency symbol Biểu tượng tiền tệ Digit Chữ số Paper size Kích thước giấy Cancel Hủy bỏ Save Lưu Regional format RegionsChooserWindow Search Tìm kiếm RegisterDialog Set a Password Đặt mật khẩu 8-64 characters 8-64 ký tự Repeat the password Nhập lại mật khẩu Cancel Hủy bỏ Confirm Xác nhận Passwords don't match Mật khẩu không khớp ScheduledShutdownDialog Customize repetition time Cancel Save ScreenSaverPage Screensaver Trình bảo vệ màn hình preview xem trước Personalized screensaver Trình bảo vệ màn hình cá nhân setting cài đặt idle time thời gian không hoạt động 1 minute 1 phút 5 minute 5 phút 10 minute 10 phút 15 minute 15 phút 30 minute 30 phút 1 hour 1 giờ never không bao giờ Password required for recovery Yêu cầu mật khẩu để khôi phục Picture slideshow screensaver Wallpaper trượt ảnh System screensaver Wallpaper bảo vệ hệ thống SearchableListViewPopup Search Tìm kiếm No search results ShortcutSettingDialog Add custom shortcut Thêm phím tắt tùy chỉnh Name: Tên: Required Yêu cầu Command: Lệnh: Shortcut Phím tắt None Không có Cancel Hủy bỏ Add Thêm The shortcut name is already in use. Choose a different name. Change custom shortcut please enter a shortcut key Save click Save to make this shortcut key effective click Add to make this shortcut key effective Shortcuts Shortcuts Phím tắt System shortcut, custom shortcut Phím tắt hệ thống, phím tắt tùy chỉnh Search shortcuts Tìm kiếm phím tắt done Hoàn thành edit Sửa Click Nhấn Cancel Huỷ or hoặc Replace Thay thế Restore default Khôi phục mặc định Add custom shortcut Thêm phím tắt tùy chỉnh please enter a new shortcut key Sound Sound Output, input, sound effects, devices SoundDevicemanagesPage Output Devices Thiết bị đầu ra Select whether to enable the devices Chọn để kích hoạt các thiết bị Input Devices Thiết bị đầu vào SoundEffectsPage Sound Effects EFFECT ÂM THANH SoundMain Settings Sound Effects Enable/disable sound effects Enable/disable audio devices Devices Management SoundModel Boot up Khởi động Shut down Tắt máy Log out Đăng xuất Wake up Thức dậy Volume +/- Tăng/ Giảm âm lượng Notification Thông báo Low battery Dung lượng pin thấp Send icon in Launcher to Desktop Gửi biểu tượng trong Launcher sang Bàn làm việc Empty Trash Xóa rác Plug in Chèn vào Plug out Tháo ra Removable device connected Thiết bị có thể tháo gỡ đã kết nối Removable device removed Thiết bị có thể tháo gỡ đã bị tháo ra Error Lỗi SpeakerPage Mode Chế độ Output Volume Tần số đầu ra Volume Boost Tăng âm lượng If the volume is louder than 100%, it may distort audio and be harmful to output devices Nếu âm lượng lớn hơn 100%, nó có thể làm méo mó âm thanh và gây hại cho thiết bị đầu ra Left Trái Right Phải Output Đầu ra No output device for sound found Không tìm thấy thiết bị đầu ra cho âm thanh Left Right Balance Điều chỉnh âm lượng trái/phải Merge left and right channels into a single channel Đóng gói kênh trái và phải thành một kênh Whether the audio will be automatically paused when the current audio device is unplugged Có dừng tự động khi thiết bị âm thanh hiện tại bị tháo ra không Mono Audio Auto Pause Output Device SyncInfoListModel Sound Âm thanh Power Năng lượng Mouse chuột Update Cập nhật Screensaver Gỡ màn hình chờ System Common settings System SystemInfo Auxiliary Information SystemInfoMain About This PC System version, device information View the notice of open source software User Experience Program Join the user experience program to help improve the product End User License Agreement View the end user license agreement Privacy Policy View information about privacy policy Open Source Software Notice ThemeSelectView More Wallpapers Thêm hình nền TimeAndDate Auto sync time Đồng bộ thời gian tự động Ntp server Server Ntp System date and time Ngày và thời gian hệ thống Customize Tùy chỉnh Settings Cài đặt Server address Địa chỉ máy chủ Required Yêu cầu The ntp server address cannot be empty Địa chỉ máy chủ ntp không được để trống Use 24-hour format Sử dụng định dạng 24 giờ system time zone múi giờ hệ thống Timezone list Danh sách múi giờ Add TimeRange from từ to đến TimeoutDialog Save the display settings? Lưu cài đặt hiển thị Settings will be reverted in %1s. Cài đặt sẽ được khôi phục sau %1s. Revert Khôi phục Save Lưu TimezoneDialog Add time zone Thêm múi giờ Determine the time zone based on the current location Xác định múi giờ dựa trên vị trí hiện tại Time zone: múi giờ: Nearest City: Thành phố gần nhất: Cancel Hủy bỏ Save Lưu TouchScreen TouchScreen TouchScreen Set up here when connecting the touch screen Cài đặt ở đây khi kết nối TouchScreen Touchpad Basic Settings Cài đặt cơ bản Touchpad Touchpad Pointer Speed Tốc độ con trỏ Slow Thấp Fast Tốc độ Disable touchpad during input Tắt touchpad khi nhập Tap to Click Nhấn để nhấp chuột Natural Scrolling Quay tự nhiên Three-finger gestures Ba ngón tay cử chỉ Four-finger gestures Bốn ngón tay cử chỉ Gestures Touchscreen Touchscreen Configuring Touchscreen TouchscreenMain Common UserExperienceProgramPage Join User Experience Program Tham gia chương trình trải nghiệm người dùng Copy Link Address VerifyDialog Security Verification Xác minh bảo mật The action is sensitive, please enter the login password first Hành động này nhạy cảm, vui lòng nhập mật khẩu đăng nhập trước 8-64 characters 8-64 ký tự Forgot Password? Quên mật khẩu? Cancel Hủy Confirm Xác nhận Wacom wacom Configuring wacom WacomMain wacom Pen Mode Mouse Mode Pressure Sensitivity Light Heavy Model WallpaperPage wallpaper bìa giấy dán tường My pictures Hình ảnh của tôi System Wallpaper Bìa giấy dán tường hệ thống Solid color wallpaper Màu nền đơn sắc Customizable wallpapers Màu nền cá nhân hóa fill style phong cách đầy Automatic wallpaper change Đổi màu nền tự động never không bao giờ 30 second 30 giây 1 minute 1 phút 5 minute 5 phút 10 minute 10 phút 15 minute 15 phút 30 minute 30 phút login đăng nhập wake up đăng nhập sau khi thức dậy Live Wallpaper Màu nền động 1 hour 1 giờ System Wallpapers WallpaperSelectView unfold trổ ra Set lock screen Đặt màn hình khóa Set desktop Đặt màn hình chính show all - %1 items Add Picture WindowEffectPage Interface and Effects Giao diện và Hiệu ứng Window Settings Cài đặt cửa sổ Window rounded corners Các góc cửa sổ cong None Không có Small Nhỏ Large Lớn Enable transparent effects when moving windows Kích hoạt hiệu ứng trong suốt khi di chuyển cửa sổ Window Minimize Effect Hiệu ứng thu nhỏ cửa sổ Scale Thước Magic Lamp Đèn神灯 Opacity Độ trong suốt Low Thấp High Cao Scroll Bars Thanh cuộn Show on scrolling Hiển thị khi cuộn Keep shown Giữ hiển thị Compact Display Hiển thị gọn gàng If enabled, more content is displayed in the window. Nếu được kích hoạt, nội dung sẽ được hiển thị nhiều hơn trong cửa sổ. Title Bar Height Chiều cao thanh tiêu đề Only suitable for application window title bars drawn by the window manager. Chỉ phù hợp cho thanh tiêu đề cửa sổ của ứng dụng được vẽ bởi quản lý cửa sổ. Extremely small Rất nhỏ Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) Tiếng Trung phồn thể (Trung Quốc Hồng Kông) Traditional Chinese (Chinese Taiwan) Tiếng Trung phồn thể (Trung Quốc Đài Loan) Min Nan Chinese dcc::Locale::regionNames Taiwan China Đài Loan Trung Quốc dccV25::AccountsController Username must be between 3 and 32 characters Tên người dùng phải từ 3 đến 32 ký tự The first character must be a letter or number Ký tự đầu tiên phải là chữ cái hoặc số Your username should not only have numbers Tên người dùng của bạn không nên chỉ có số The username has been used by other user accounts Tên người dùng đã được sử dụng bởi các tài khoản người dùng khác The full name is too long Tên đầy đủ quá dài The full name has been used by other user accounts Tên đầy đủ đã được sử dụng bởi các tài khoản người dùng khác Wrong password Mật khẩu không chính xác Standard User Người dùng tiêu chuẩn Administrator Quản trị viên Customized Tùy chỉnh dccV25::AccountsWorker Your host was removed from the domain server successfully Host của bạn đã được loại khỏi máy chủ domain thành công Your host joins the domain server successfully Host của bạn đã tham gia máy chủ domain thành công Your host failed to leave the domain server Host của bạn không thể rời khỏi máy chủ domain Your host failed to join the domain server Host của bạn không thể tham gia máy chủ domain AD domain settings Cài đặt domain AD Password not match Mật khẩu không khớp dccV25::AvatarTypesModel Dimensional 3 chiều Flat Phẳng dccV25::FaceAuthController Faceprint Face Use your face to unlock the device and make settings later dccV25::FingerprintAuthController Fingerprint Place your finger Place your finger firmly on the sensor until you're asked to lift it Lift your finger Lift your finger and place it on the sensor again Lift your finger and do that again Scan Suspended Scan the edges of your fingerprint Place the edges of your fingerprint on the sensor Adjust the position to scan the edges of your fingerprint Fingerprint added dccV25::IrisAuthController Iris Use your iris to unlock the device and make settings later dccV25::KeyboardController This shortcut conflicts with [%1] Phím tắt này xung đột với [%1] dccV25::PwqualityManager Password cannot be empty Mật khẩu không được để trống Password must have at least %1 characters Mật khẩu phải có ít nhất %1 ký tự Password must be no more than %1 characters Mật khẩu không được nhiều hơn %1 ký tự Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Mật khẩu chỉ được chứa các chữ cái tiếng Anh (không phân biệt hoa thường), số hoặc các ký tự đặc biệt (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) No more than %1 palindrome characters please Không được sử dụng nhiều hơn %1 ký tự đối xứng No more than %1 monotonic characters please Không được sử dụng nhiều hơn %1 ký tự đồng điệu No more than %1 repeating characters please Không được sử dụng nhiều hơn %1 ký tự lặp lại Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) Mật khẩu phải chứa các chữ cái hoa, chữ cái thường, số và ký tự đặc biệt (~`!@#$%^&*()-_+=|{}[]:"'<>,.?/ ) Password must not contain more than 4 palindrome characters Mật khẩu không được chứa nhiều hơn 4 ký tự đối xứng Do not use common words and combinations as password Không sử dụng từ vựng và các kết hợp thông thường làm mật khẩu Create a strong password please Tạo một mật khẩu mạnh mẽ It does not meet password rules Không đáp ứng các quy tắc mật khẩu At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. dccV25::ShortcutModel System Hệ thống Window Cửa sổ Workspace Bàn làm việc AssistiveTools Công cụ hỗ trợ Custom Tùy chỉnh None Không có ================================================ FILE: translations/dde-control-center_zh_CN.ts ================================================ AccountSettings edit 编辑 Add new user 添加新用户 Set fullname 设置全名 Login settings 登录设置 Login without password 免密登录 Delete current account 删除当前账户 Group setting 用户组设置 Account groups 用户组 done 完成 Group name 用户组名称 Add group 添加用户组 Auto login 自动登录 Account Information 账户信息 Account name, account fullname, account type 账户名,全名,账户类型 Account name 账户名 Account fullname 账户全名 Account type 账户类型 The full name is too long 名称过长 Group names should be no more than 32 characters 组名不允许超出32个字符 Group names cannot only have numbers 组名不能使用纯数字 Use letters,numbers,underscores and dashes only, and must start with a letter 仅使用字母、数字、下划线和破折号,并且必需以字母开头 The group name has been used 组名与其他组名重复 quick login, Auto login, login without password 快速登录,自动登录,免密登录 Undo 撤销 Redo 重做 Cut 剪切 Copy 复制 Paste 粘贴 Select All 全选 Quick login 快速登录 Accounts Account 账户 Account manager 账户管理 AccountsMain Other accounts 其他账户 AddFaceinfoDialog Enroll Face 添加人脸数据 I have read and agree to the 我已阅读并同意 Disclaimer 《用户免责声明》 Next 下一步 Face enrolled 人脸录入完成 Failed to enroll your face 人脸录入失败 Done 完成 Cancel 取消 Retry Enroll 重新录入 Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. 人脸识别不支持活体检测,验证方式可能存在风险 为确保录入成功: 1. 保持五官清晰可见,勿遮挡(帽子/墨镜/口罩等) 2. 光线充足,避免阳光直射 "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. “生物认证”是统信软件技术有限公司提供的一种对用户进行身份认证的功能。通过“生物认证”,将采集的生物识别数据与存储在设备本地的生物识别数据进行比对,并根据比对结果来验证用户身份。 请您注意,统信软件不会收集或访问您的生物识别信息,此类信息将会存储在您的本地设备中。请您仅在您的个人设备中开启生物认证功能,并使用您本人的生物识别信息进行相关操作,并及时在该设备上禁用或清除他人的生物识别信息,否则由此给您带来的风险将由您承担。 统信软件致力于研究与提高生物认证功能的安全性、精确性、与稳定性,但是,受限于环境、设备、技术等因素和风险控制等原因,我们暂时无法保证您一定能通过生物认证,请您不要将生物认证作为登录统信操作系统的唯一途径。若您在使用生物认证时有任何问题或建议的,可以通过系统内的“服务与支持”进行反馈。 AddFingerDialog Cancel 取消 Done 完成 Enroll Finger 添加指纹数据 Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. 将要录入的手指放入指纹录入器里面,并从下往上移动手指,完成动作后请抬起您的手指 I have read and agree to the 我已阅读并同意 Disclaimer 《用户免责声明》 Next 下一步 Retry Enroll 重新录入 "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. “生物认证”是统信软件技术有限公司提供的一种对用户进行身份认证的功能。通过“生物认证”,将采集的生物识别数据与存储在设备本地的生物识别数据进行比对,并根据比对结果来验证用户身份。 请您注意,统信软件不会收集或访问您的生物识别信息,此类信息将会存储在您的本地设备中。请您仅在您的个人设备中开启生物认证功能,并使用您本人的生物识别信息进行相关操作,并及时在该设备上禁用或清除他人的生物识别信息,否则由此给您带来的风险将由您承担。 统信软件致力于研究与提高生物认证功能的安全性、精确性、与稳定性,但是,受限于环境、设备、技术等因素和风险控制等原因,我们暂时无法保证您一定能通过生物认证,请您不要将生物认证作为登录统信操作系统的唯一途径。若您在使用生物认证时有任何问题或建议的,可以通过系统内的“服务与支持”进行反馈。 AddIrisDialog Enroll Iris 添加虹膜数据 I have read and agree to the 我已阅读并同意 Disclaimer 《用户免责声明》 Next 下一步 Done 完成 Cancel 取消 Retry Enroll 重新录入 Iris enrolled 虹膜录入完成 Failed to enroll your iris 虹膜录入失败 "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. “生物认证”是统信软件技术有限公司提供的一种对用户进行身份认证的功能。通过“生物认证”,将采集的生物识别数据与存储在设备本地的生物识别数据进行比对,并根据比对结果来验证用户身份。 请您注意,统信软件不会收集或访问您的生物识别信息,此类信息将会存储在您的本地设备中。请您仅在您的个人设备中开启生物认证功能,并使用您本人的生物识别信息进行相关操作,并及时在该设备上禁用或清除他人的生物识别信息,否则由此给您带来的风险将由您承担。 统信软件致力于研究与提高生物认证功能的安全性、精确性、与稳定性,但是,受限于环境、设备、技术等因素和风险控制等原因,我们暂时无法保证您一定能通过生物认证,请您不要将生物认证作为登录统信操作系统的唯一途径。若您在使用生物认证时有任何问题或建议的,可以通过系统内的“服务与支持”进行反馈。 Please keep an eye on the device and ensure that both eyes are within the collection area 请注视设备,确保双眼在采集区域内 Authentication Biometric Authentication 生物认证 AuthenticationMain Biometric Authentication 生物认证 Face 人脸 Up to 5 facial data can be entered 最多可录入5个人脸数据 Fingerprint 指纹 Identifying user identity through scanning fingerprints 通过对指纹的扫描进行用户身份的识别 Iris 虹膜 Identity recognition through iris scanning 通过扫描虹膜进行身份识别 Use letters, numbers and underscores only, and no more than 15 characters 只能由字母、数字、中文、下划线组成,且不超过15个字符 Use letters, numbers and underscores only 只能由字母、数字、中文、下划线组成 No more than 15 characters 不得超过15个字符 This name already exists 该名称已存在 Add a new %1 ... 添加新的%1... The name cannot be empty 名称不能为空 AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first 只允许一个账户开启自动登录,请先关闭%1账户的自动登录,再进行操作 Ok 确 定 AvatarSettingsDialog Images 图片 Human 人物 Animal 动物 Scenery 静物 Illustration 创意插图 Emoji 表情符号 custom 自定义图片 Cartoon style Q版风格 Dimensional style 立体风格 Flat style 平面风格 Cancel 取消 Save 保存 BatteryPage Screen and Suspend 屏幕和待机 Turn off the monitor after 关闭显示器 Lock screen after 自动锁屏 Computer suspends after 进入待机 When the lid is closed 笔记本合盖时 When the power button is pressed 按电源按钮时 Low Battery 低电量管理 Low battery notification 低电量提醒 Auto suspend 自动待机 Auto Hibernate 自动休眠 Low battery threshold 低电量阈值 Battery Management 电池管理 Display remaining using and charging time 显示剩余使用时间及剩余充电时间 Maximum capacity 最大容量 Low battery level 低电量时 Disable 从不 BlueTooth Bluetooth settings, devices 蓝牙设置、设备管理 Bluetooth 蓝牙 BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" 蓝牙已关闭,名称显示为"%1" Bluetooth is turned on, and the name is displayed as "%1" 蓝牙已打开,名称显示为 "%1" BlueToothDeviceListView Disconnect 断开连接 Connect 连接 Send Files 发送文件 Rename 重命名 Remove Device 移除设备 Select file 选择文件 BluetoothCtl Edit 修改 Allow other Bluetooth devices to find this device 允许蓝牙设备可被发现 To use the Bluetooth function, please turn off 若要使用蓝牙功能,请先关闭 Airplane Mode 飞行模式 Bluetooth name cannot exceed 64 characters 蓝牙名称不能超过64个字符 BluetoothDeviceModel Connected 已连接 Not connected 未连接 BootPage Startup Settings 启动设置 You can click the menu to change the default startup items, or drag the image to the window to change the background image. 您可以点击菜单改变默认启动项,也可以拖拽图片到窗口改变背景图片. grub start delay 启动延时 theme 主题 After turning on the theme, you can see the theme background when you turn on the computer 开启主题后您可以在开机时看到主题背景 Boot menu verification 启动菜单验证 After opening, entering the menu editing requires a password. 开启后进入启动菜单编辑需要密码. Change Password 重设密码 Change boot menu verification password 修改启动菜单验证密码 Set the boot menu authentication password 设置启动菜单验证密码 User Name : 用户名: root root New Password : 新密码: Required 必填 Password cannot be empty 密码不能为空 Passwords do not match 密码不一致 Repeat password: 确认密码: Cancel 取消 Sure 确定 Start animation 启动动画 Adjust the size of the logo animation on the system startup interface 调整系统启动界面的logo动画尺寸大小 Camera Allow below apps to access your camera: 允许下面的应用访问您的摄像头 CharaMangerModel Fingerprint1 指纹1 Fingerprint2 指纹2 Fingerprint3 指纹3 Fingerprint4 指纹4 Fingerprint5 指纹5 Fingerprint6 指纹6 Fingerprint7 指纹7 Fingerprint8 指纹8 Fingerprint9 指纹9 Fingerprint10 指纹10 Scan failed 指纹录入失败 The fingerprint already exists 指纹已存在 Please scan other fingers 请使用其他手指录入 Unknown error 未知错误 Scan suspended 指纹录入被中断 Cannot recognize 无法识别 Moved too fast 接触时间短 Finger moved too fast, please do not lift until prompted 接触时间短,验证时请勿移动手指 Unclear fingerprint 图像模糊 Clean your finger or adjust the finger position, and try again 请清洁手指或调整触摸位置,再次按压指纹识别器 Already scanned 图像重复 Adjust the finger position to scan your fingerprint fully 请调整手指按压区域以录入更多指纹 Finger moved too fast. Please do not lift until prompted 指纹采集间隙,请勿移动手指,直到提示您抬起 Lift your finger and place it on the sensor again 请抬起手指,再次按压 Position your face inside the frame 请确保您的面部全部显示在识别区域内 Face enrolled 人脸录入完成 Position a human face please 请使用人类面容 Keep away from the camera 请远离镜头 Get closer to the camera 请靠近镜头 Do not position multiple faces inside the frame 请不要多人入镜 Make sure the camera lens is clean 请确保镜头清洁 Do not enroll in dark, bright or backlit environments 请避免在暗光、强光、逆光环境下操作 Keep your face uncovered 请保持面部无遮挡 Scan timed out 录入超时 Cancel 取消 Camera occupied! 摄像头被占用! ColorAndIcons Accent Color 活动用色 Icon Settings 图标设置 Icon Theme 图标主题 Customize your theme icon 自定义您的主题图标 Cursor Theme 光标主题 Customize your theme cursor 自定义您的主题光标 ComfirmDeleteDialog Are you sure you want to delete this account? 您确定要删除此账户吗? Delete account directory 删除账户目录 Cancel 取消 Delete 删除 ComfirmSafePage Go to settings 去设置 Cancel 取消 Common Common 通用 Repeat delay 重复延迟 Short Long Repeat rate 重复速度 Slow Fast Numeric Keypad 启用数字键盘 test here 请在此输入测试 Caps lock prompt 大写锁定提示 Double Click Speed 双击速度 Double Click Test 双击测试 Left Hand Mode 左手模式 Enable Keyboard 键盘 General 通用 Scrolling Speed 滚动速度 CommonInfoMain Boot Menu 启动菜单 Manage your boot menu 管理您的开机启动菜单 Developer root permission management 开发者Root权限管理 Developer Options 开发者选项 Developer debugging options 开发者调试选项 CommonInfoWork Large size 大尺寸 Small size 小尺寸 Failed to get root access 进入开发者模式失败 Please sign in to your Union ID first 请先登录Union ID Cannot read your PC information 无法获取硬件信息 No network connection 无网络连接 Certificate loading failed, unable to get root access 证书加载失败,无法进入开发者模式 Signature verification failed, unable to get root access 签名验证失败,无法进入开发者模式 Agree and Join User Experience Program 同意并加入用户体验计划 The Disclaimer of Developer Mode 开发者模式免责声明 Agree and Request Root Access 同意并进入开发者模式 Start setting the new boot animation, please wait for a minute 开始设置启动新动画,请稍等一会儿 Setting new boot animation finished 新的启动动画设置完成 The settings will be applied after rebooting the system 新的设置会在重启系统后生效 Restart now 立即重启 Dismiss 忽略 Restart device to finish applying Solid System Read-Only Protection settings 磐石只读保护设置需重启后才能生效 ConfirmManager Password must contain numbers and letters 密码必须包含数字和字母 Password must be between 8 and 64 characters 密码长度必须为8~64个字符 CreateAccountDialog Create a new account 创建新用户 Account type 账户类型 UserName 用户名 Required 必填 FullName 全名 Optional 选填 Cancel 取消 Create account 创建用户 Username cannot exceed 32 characters 用户名不能超过 32 个字符 Username can only contain letters, numbers, - and _ 用户名只能包含字母、数字、 - 和 _ Full name cannot exceed 32 characters 全名不能超过 32 个字符 Full name cannot contain colons 全名不能包含冒号 CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. 您还没有上传过头像,可点击或拖拽上传图片 The uploaded file type is incorrect, please upload it again 上传的文件类型不正确,请重新上传 DCC_NAMESPACE::SystemInfoModel available 可用 DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/zh/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-cn https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-cn Agree and Join User Experience Program 同意并加入用户体验计划 <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>统信软件非常重视您的隐私。因此我们制定了涵盖如何收集、使用、共享、转让、公开披露以及存储您的信息的隐私政策。</p><p>您可以<a href="%1">点击此处</a> 查看我们最新的隐私政策和/或通过访问<a href="%1"> %1</a>在线查看。请您务必认真阅读、充分理解我们针对客户隐私的做法,如果有任何疑问,请联系我们:%2。</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">开启用户体验计划视为您授权我们收集和使用您的设备及系统信息,以及应用软件信息,您可以关闭用户体验计划以拒绝我们对前述信息的收集和使用。详细说明请参照Deepin隐私政策 (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">开启用户体验计划视为您授权我们收集和使用您的设备及系统信息,以及应用软件信息,您可以关闭用户体验计划以拒绝我们对前述信息的收集和使用。了解用户体验计划,请访问: </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting 日期和时间设置 Date 日期 Year Month Day Time 时间 Cancel 取消 Confirm 确认 Datetime Time and date 时间和日期 Time and date, time zone settings 时间日期、时区设置 DatetimeMain Language and region 语言和区域 System language, regional formats 系统语言、区域格式 DatetimeModel Tomorrow 明天 Yesterday 昨天 Today 今天 %1 hours earlier than local 早 %1 小时 %1 hours later than local 晚 %1 小时 Space 空格 Week 星期/周 First day of week 一周首日 Short date 短日期 Long date 长日期 Short time 短时间 Long time 长时间 Currency symbol 货币符号 Positive currency 货币正数 Negative currency 货币负数 Decimal symbol 小数点 Digit grouping symbol 分隔符 Digit grouping 数字分组 Page size 纸张 Example 示例 DatetimeWorker Authentication is required to change NTP server 修改时间服务器需要认证 Authentication is required to set the system timezone 设置系统时区需要认证 DccColorDialog Cancel 取消 Save 保存 DccWindow Control Center provides the options for system settings. 控制中心提供操作系统的所有设置选项。 DeepinIDAccountSecurity Bind WeChat 绑定微信 By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. 通过绑定微信,您可以安全快速地登录您的%1 ID和本地账户 Unlinked 未绑定 Unbinding 解 绑 Link 去绑定 Are you sure you want to unbind WeChat? 您确定要解绑微信吗? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. 解绑微信后,您将无法使用微信扫码登录%1 ID、微信扫码登录本地账户 Let me think it over 我再想想 Local Account Binding 绑定本地账户 After binding your local account, you can use the following functions: 绑定本地账户后,您可以使用如下功能: WeChat Scan Code Login System 微信扫码登录系统 Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. 使用%1 ID绑定的微信,扫码登录本地账户 Reset password via %1 ID 通过%1 ID重置密码 Reset your local password via %1 ID in case you forget it. 在您忘记本地账户密码时,通过%1 ID重置密码 To use the above features, please go to Control Center - Accounts and turn on the corresponding options. 如需使用上述功能,请前往控制中心-账户,开启相应选项 DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync 云同步 Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. 管理您的%1 ID,将您的个人数据在不同设备之间同步。 登录%1 ID以获取浏览器、应用商店、服务与支持等众多应用的个性功能和服务。 Sign In to %1 ID 登录%1 ID DeepinIDSyncService Auto Sync 自动同步 Securely store system settings and personal data in the cloud, and keep them in sync across devices 将您的系统设置和个人信息安全地存储在云端,并在您不同的设备上保持同步 System Settings 系统设置 Last sync time: %1 最近同步时间:%1 Clear cloud data 清除云端数据 Are you sure you want to clear your system settings and personal data saved in the cloud? 确定要清除您保存在云端的系统设置和个人数据吗? Once the data is cleared, it cannot be recovered! 数据清除后将无法恢复! Cancel 取 消 Clear 清 除 DeepinIDUserInfo Synchronization Service 同步服务 Account and Security 账户与安全 Sign out 退出登录 Go to web settings 前往网页设置 The nickname must be 1~32 characters long 昵称长度必须为1~32个字符 DeepinWorker encrypt password failed 加密密码失败 Wrong password, %1 chances left 密码错误,您还可以尝试%1次 The login error has reached the limit today. You can reset the password and try again. 密码错误已达今日上限,可重置密码再试 Operation Successful 操作成功 The nickname can be modified only once a day 昵称每天仅可修改一次 Deepinid deepin ID deepin ID UOS ID UOS ID Cloud services 云服务 DeepinidModel Mainland China 中国大陆 Other regions 其他地区 The feature is not available at present, please activate your system first 当前系统未激活,暂无法使用该功能 Subject to your local laws and regulations, it is currently unavailable in your region. 受限于您当地的法律法规,同步服务暂未覆盖您所在地区,敬请期待。 Defaultapp Default App 默认程序 Set the default application for opening various types of files 设置打开各类文件的默认程序 DefaultappMain Webpage 网页 Mail 邮件 Text 文本 Music 音乐 Video 视频 Picture 图片 Terminal 终端 DetailItem Please choose the default program to open '%1' 选择打开“%1”的默认程序 add 添加 Open Desktop file 打开Desktop文件 Apps (*.desktop) 应用程序(*.desktop) All files (*) 所有文件(*) DevelopModePage Root Access 开发者模式 Request Root Access 进入开发者模式 After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. 可获得root使用权限,但同时也可能导致系统完教性遭到破坏,请谨慎使用。 Allowed 已进入 Enter 进入 Online 在线激活 Login UOS ID 登录UOS ID Offline 离线激活 Import Certificate 导入证书 Select file 选择文件 Your UOS ID has been logged in, click to enter developer mode 您的UOS ID已登录,点击进入开发者模式 Please sign in to your UOS ID first and continue 进入开发者模式需要登录UOS ID 1.Export PC Info 1.导出机器信息 Export 导出 3.Import Certificate 3.导入证书 Development and debugging options 开发调试选项 System logging level 系统日志记录级别 Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. 更改此选项可以获得更详细的日志记录,这些日志可能会降低系统性能和/或占用更多存储空间. Off 关闭 Debug 调试 Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. 更改选项处理可能需要一分钟,收到设置成功提示后,请重启设备方可生效。 To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. 如需安装非应用商店来源的应用,前往<a style='text-decoration: none;' href='Security Center'> 安全中心 </a>进行设置。 To install and run unsigned apps, please go to Security Center to change the settings. 如需安装非应用商店来源的应用,前往安全中心进行设置。 You have entered developer mode 您已进入开发者模式 OK 确定 2.please go to %1 to Download offline certificate. 2.前往%1下载离线证书. The feature is not available at present, please activate your system first. 当前系统未激活,暂无法使用该功能。 Solid System Read-Only Protection 磐石只读保护 Disabling protection unlocks system directories,This action carries a high risk of system damage. 关闭保护会解锁系统目录,可能导致系统损坏的高风险。 Enable protection to lock system directories and ensure optimal stability. 开启保护以锁定系统目录,确保最佳稳定性。 Device Bluetooth and Devices 蓝牙和其他设备 DisclaimerControl Disclaimer 《用户免责声明》 Cancel 取消 Agree 同意 Display Display 显示 Brightness,resolution,scaling 亮度、分辨率、缩放 DisplayMain 100% 100% 125% 125% 150% 150% 175% 175% 200% 200% 225% 225% 250% 250% 275% 275% 300% 300% Duplicate 复制 Extend 扩展 Default 默认 Fit 适应 Stretch 拉伸 Center 居中 Only on %1 仅%1屏 Multiple Displays Settings 多屏设置 Identify 识别 Screen rearrangement will take effect in %1s after changes 屏幕拼接将在修改完成%1s后生效 Mode 模式 Main Screen 主屏幕 Display And Layout 显示和布局 Brightness 亮度 Resolution 分辨率 Resize Desktop 桌面显示 Refresh Rate 刷新率 Rotation 方向 Standard 标准 90° 90度 180° 180度 270° 270度 The monitor only supports 100% display scaling 当前屏幕仅支持1倍缩放 Eye Comfort 护眼模式 Enable eye comfort 开启护眼模式 Adjust screen display to warmer colors, reducing screen blue light 调整屏幕显示较暖的颜色,减少屏幕蓝光 Time 时间 All day 全天 Sunset to Sunrise 日落到日出 Custom Time 自定义 from to Color Temperature 色温 %1x%2 (Recommended) %1x%2 (推荐) %1x%2 %1x%2 %1Hz (Recommended) %1赫兹 (推荐) %1Hz %1赫兹 Scaling 缩放 Dock Desktop and taskbar 桌面和任务栏 Desktop organization, taskbar mode, plugin area settings 桌面整理、任务栏模式、插件区域设置 DockMain Dock 任务栏 Mode 模式 Classic Mode 经典模式 Centered Mode 居中模式 Dock size 任务栏大小 Small Large Position on the screen 屏幕中的位置 Top Bottom Left Right Status 状态 Keep shown 一直显示 Keep hidden 一直隐藏 Smart hide 智能隐藏 Multiple Displays 多屏显示 Set the position of the taskbar on the screen 设置任务栏在屏幕中的位置 Only on main 仅主屏显示 On screen where the cursor is 跟随鼠标位置显示 Plugin Area 插件区域 Select which icons appear in the Dock 选择显示在任务栏插件区域的图标 Lock the Dock 禁用自由调节 Combine application icons 合并应用图标 FileAndFolder Allow below apps to access these files and folders: 允许下面的应用访问您的文件和文件夹 Documents 文档 Desktop 桌面 Pictures 图片 Videos 视频 Music 音乐 Downloads 下载 folder 文件夹 FontSizePage Size 字号 Standard Font 标准字体 Monospaced Font 等宽字体 GeneralPage Power Plans 性能模式 Power Saving Settings 节能设置 Auto power saving on low battery 低电量时自动开启节能模式 Low battery threshold 低电量阈值 Auto power saving on battery 使用电池时自动开启节能模式 Wakeup Settings 唤醒设置 Password is required to wake up the computer 待机恢复时需要密码 Password is required to wake up the monitor 唤醒显示器时需要密码 Shutdown Settings 关机设置 Scheduled Shutdown 定时关机 Time 时间 Repeat 重复 Once 一次 Every day 每天 Working days 工作日 Custom Time 自定义 Decrease screen brightness on power saver 节能模式时降低屏幕亮度 GestureModel Three-finger up 三指向上 Three-finger down 三指向下 Three-finger left 三指向左 Three-finger right 三指向右 Three-finger tap 三指点击 Four-finger up 四指向上 Four-finger down 四指向下 Four-finger left 四指向左 Four-finger right 四指向右 Four-finger tap 四指点击 HomePage , ... InterfaceEffectListview Optimal Performance 最佳性能 Balance 均衡 Best Visuals 最佳视觉 Disable all interface and window effects for efficient system performance. 关闭所有界面和窗口特效,保障系统高效运行 Limit some window effects for excellent visuals while maintaining smooth system performance. 限制部分窗口特效,保障出色的视觉效果,同时维持系统流畅运行 Enable all interface and window effects for the best visual experience. 启用所有界面和窗口特效,体验最佳视觉效果 Keyboard Keyboard 键盘 General Settings, input method, shortcuts 通用设置、输入法、快捷键 KeyboardMain Common 通用 LangAndFormat Language 语言 done 完成 edit 编辑 Other languages 其他语言 add 添加 Region 区域 Area 地区 Operating system and applications may provide you with local content based on your country and region 操作系统和应用可能会根据你所在的国家和地区向你提供本地内容 Operating system and applications may set date and time formats based on regional formats 操作系统和某些应用会根据区域格式设置日期和时间格式 Regional format 区域格式 LangsChooserDialog Add language 添加语言 Search 搜索 Cancel 取消 Add 添加 LoginMethod Login method 登录方式 Password, wechat, biometric authentication, security key 密码,微信扫码,生物认证,安全密钥 Password 密码 Modify password 修改密码 Validity days 有效天数 Always 长期有效 Reset password 重设密码 LogoModule Copyright© 2011-%1 Deepin Community Copyright © 2011-%1 深度社区 Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright © 2019-%1 统信软件技术有限公司 MicrophonePage Automatic Noise Suppression 噪音抑制 Input Volume 输入音量 Input Level 反馈音量 Input 输入 No input device for sound found 没有找到声音输入设备 Input Device 输入设备 Mouse Mouse and Touchpad 鼠标与触控板 Common、Mouse、Touchpad 通用、鼠标、触控板 MouseMain Common 通用 Mouse 鼠标 Touchpad 触控板 MousePage Mouse 鼠标 Pointer Speed 指针速度 Slow Fast Pointer Size 指针大小 Mouse Acceleration 鼠标加速 Disable touchpad when a mouse is connected 插入鼠标时禁用触控板 Natural Scrolling 自然滚动 Small Medium Large X-Large 极大 Some apps require logout or system restart to take effect 部分应用需注销或重启系统后生效 MyDevice My Devices 我的设备 NativeInfoPage UOS UOS Computer name 计算机名 It cannot start or end with dashes 计算机名不能以 - 开头结尾 OS Name 产品名称 Version 版本号 Edition 版本 Type 类型 bit Authorization 版本授权 System installation time 系统安装日期 Kernel 内核版本 Graphics Platform 图形平台 Processor 处理器 Memory 内存 1~63 characters please 计算机名长度必须介于1到63个字符之间 Notification DND mode, app notifications 勿扰模式、应用通知 Notification 通知 NotificationMain Do Not Disturb Settings 勿扰设置 App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. 所有应用消息横幅将会被隐藏,通知声音将会静音,您可在通知中心查看所有消息。 Enable Do Not Disturb 启用勿扰模式 When the screen is locked 在屏幕锁屏时 Number of notifications shown on the desktop 通知横幅展示数量 App Notifications 应用通知 Allow Notifications 允许通知 Display notification on desktop or show unread messages in the notification center 可以显示通知横幅,或在通知中心显示未读消息 Desktop 桌面 Lock Screen 锁屏 Notification Center 通知中心 Show message preview 显示消息预览 Play a sound 通知时提示声音 OtherDevice Other Devices 其他设备 Show Bluetooth devices without names 显示没有名称的蓝牙设备 PasswordLayout Current password 当前密码 Required 必填 Weak 强度低 Medium 强度中 Strong 强度高 Repeat Password 重复密码 Password hint 密码提示 Optional 选填 Password cannot be empty 密码不能为空 Passwords do not match 密码不一致 The hint is visible to all users. Do not include the password here. 密码提示对所有人可见,切勿包含具体密码信息 New password 新密码 New password should differ from the current one 新密码和旧密码不能相同 The password cannot be the same as the username. 密码不能与用户名一致。 PasswordModifyDialog Modify password 修改密码 Reset password 重设密码 Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. 建议密码长度8位以上,同时包含大写字母、小写字母、数字、符号中的3种密码更安全。 Resetting the password will clear the data stored in the keyring. 重设密码将会清除密钥环内已存储的数据 Cancel 取消 Personalization Personalization 个性化 PersonalizationInterface Light 浅色 Auto 自动 Dark 深色 Picker service is not available Invalid color format: %1 PersonalizationMain Theme 主题 Appearance 外观 Window effect 窗口效果 Personalize your wallpaper and screensaver 个性化您的壁纸和屏保 Screensaver 屏幕保护 Colors and icons 颜色和图标 Adjust accent color and theme icons 调整活动色和主题图标 Font and font size 字体和字号 Change system font and size 修改系统字体与字号 Wallpaper 壁纸 Select light, dark or automatic theme appearance 选择浅色、深色或自动切换主题外观 Interface and effects, rounded corners 界面和效果、窗口圆角 PersonalizationWorker Custom 自定义 PluginArea Plugin Area 插件区域 Select which icons appear in the Dock 选择显示在任务栏插件区域的图标 Power Power saving settings, screen and suspend 节能设置、屏幕和待机管理 Power 电源管理 PowerMain General 通用 Power plans, power saving settings, wakeup settings, shutdown settings 性能模式、节能设置、唤醒设置、关机设置 Plugged In 使用电源 Screen and suspend 屏幕和待机管理 On Battery 使用电池 screen and suspend, low battery, battery management 屏幕和待机管理、低电量管理、电池管理 PowerOperatorModel Shut down 关机 Suspend 待机 Hibernate 休眠 Turn off the monitor 关闭显示器 Show the shutdown Interface 进入关机界面 Do nothing 无任何操作 PowerPage Screen and Suspend 屏幕和待机 Turn off the monitor after 关闭显示器 Lock screen after 自动锁屏 Computer suspends after 进入待机 When the lid is closed 笔记本合盖时 When the power button is pressed 按电源按钮时 PowerPlansListview High Performance 高性能模式 Balance Performance 性能模式 Aggressively adjust CPU operating frequency based on CPU load condition 根据负载情况积极调整运行频率 Balanced 平衡模式 Power Saver 节能模式 Prioritize performance, which will significantly increase power consumption and heat generation 性能优先,会显著提升功耗和发热 Balancing performance and battery life, automatically adjusted according to usage 兼顾性能和续航,根据使用情况自动调节 Prioritize battery life, which the system will sacrifice some performance to reduce power consumption 续航优先,系统会牺牲一些性能表现来降低功耗 PowerWorker Minutes 分钟 Hour 小时 Never 从不 Privacy Privacy and Security 隐私和安全 Camera, folder permissions 摄像头、文件夹权限 PrivacyMain Camera 摄像头 Choose whether the application has access to the camera 选择应用是否有摄像头的访问权限 Files and Folders 文件和文件夹 Choose whether the application has access to files and folders 选择应用是否有文件和文件夹的访问权限 PrivacyPolicyPage Privacy Policy 隐私政策 Copy Link Address 复制链接地址 PwqualityManager Password cannot be empty 密码不能为空 Password must have at least %1 characters 密码长度不能少于%1个字符 Password must be no more than %1 characters 密码长度不能超过%1个字符 Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密码只能由英文(区分大小写)、数字或特殊符号(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)组成 No more than %1 palindrome characters please 回文字符长度不超过%1位 No more than %1 monotonic characters please 单调性字符不超过%1位 No more than %1 repeating characters please 重复字符不超过%1位 Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密码必须由大写字母、小写字母、数字、符号(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)三种类型组成 Password must not contain more than 4 palindrome characters 密码不得含有连续4个以上的回文字符 Do not use common words and combinations as password 密码不能是常见单词及组合 Create a strong password please 密码过于简单,请增加密码复杂度 It does not meet password rules 密码不符合安全要求 QObject Control Center 控制中心 Activated 已激活 View 查看 To be activated 待激活 Activate 激活 Expired 已过期 In trial period 试用期 Trial expired 试用期过期 dde-control-center 控制中心 Touch Screen Settings 触控屏设置 The settings of touch screen changed 已变更触控屏设置 This system wallpaper is locked. Please contact your admin. 当前系统壁纸已被锁定,请联系管理员 %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search 搜索 Default formats 默认格式 First day of week 一周第一天 Short date 短日期 Long date 长日期 Short time 短时间 Long time 长时间 Currency symbol 货币符号 Digit 数字 Paper size 纸张 Cancel 取消 Save 保存 Regional format 区域格式 RegionsChooserWindow Search 搜索 RegisterDialog Set a Password 设置密码 8-64 characters 请输入8-64位密码 Repeat the password 请再次输入密码 Cancel 取消 Confirm 确定 Passwords don't match 两次密码输入不一致 ScheduledShutdownDialog Customize repetition time 自定义重复时间 Cancel 取消 Save 保存 ScreenSaverPage Screensaver 屏幕保护 preview 全屏预览 Personalized screensaver 个性化屏保 setting 设置 idle time 闲置时间 1 minute 1分钟 5 minute 5分钟 10 minute 10分钟 15 minute 15分钟 30 minute 30分钟 1 hour 1小时 never 从不 Password required for recovery 恢复时需要密码 Picture slideshow screensaver 图片轮播屏保 System screensaver 系统屏保 SearchableListViewPopup Search 搜索 No search results 无搜索结果 ShortcutSettingDialog Add custom shortcut 添加自定义快捷键 Name: 名称: Required 必填 Command: 命令: Shortcut 快捷键 None Cancel 取消 Add 添加 The shortcut name is already in use. Choose a different name. 快捷键名称已被占用,请修改名称。 Change custom shortcut 修改自定义快捷键 please enter a shortcut key 请输入快捷键 Save 保存 click Save to make this shortcut key effective 点击保存使这个快捷键生效 click Add to make this shortcut key effective 点击添加使这个快捷键生效 Shortcuts Shortcuts 快捷键 System shortcut, custom shortcut 系统快捷键、自定义快捷键 Search shortcuts 搜索快捷键 done 完成 edit 编辑 Click 点击 Cancel 取消 or Replace 替换 Restore default 恢复默认 Add custom shortcut 添加快捷键 please enter a new shortcut key 请输入新的快捷键 Sound Sound 声音 Output, input, sound effects, devices 输入、输出、系统音效、设备管理 SoundDevicemanagesPage Output Devices 输出设备 Select whether to enable the devices 选择是否启用设备 Input Devices 输入设备 SoundEffectsPage Sound Effects 系统音效 SoundMain Settings 设置 Sound Effects 系统音效 Enable/disable sound effects 开启/关闭系统音效 Enable/disable audio devices 启用/禁用音频设备 Devices Management 设备管理 SoundModel Boot up 开机 Shut down 关机 Log out 注销 Wake up 唤醒 Volume +/- 音量调节 Notification 通知 Low battery 电量不足 Send icon in Launcher to Desktop 从启动器发送图标到桌面 Empty Trash 清空回收站 Plug in 电源接入 Plug out 电源拔出 Removable device connected 移动设备接入 Removable device removed 移动设备拔出 Error 错误提示 SpeakerPage Mode 模式 Output Volume 输出音量 Volume Boost 音量增强 If the volume is louder than 100%, it may distort audio and be harmful to output devices 音量大于100%时可能会导致音效失真,同时损害您的音频输出设备 Left Right Output 输出 No output device for sound found 没有找到声音输出设备 Left Right Balance 左右平衡 Merge left and right channels into a single channel 将左声道和右声道合并成一个声道 Whether the audio will be automatically paused when the current audio device is unplugged 外设插拔时音频输出是否自动暂停 Mono Audio 单声道音频 Auto Pause 插拔管理 Output Device 输出设备 SyncInfoListModel Sound 声音 Power 电源 Mouse 鼠标 Update 更新 Screensaver 屏幕保护 System Common settings 常用设置 System 系统 SystemInfo Auxiliary Information 辅助信息 SystemInfoMain About This PC 关于本机 System version, device information 系统版本、设备信息 View the notice of open source software 查看开源软件声明 User Experience Program 用户体验计划 Join the user experience program to help improve the product 加入用户体验计划,帮助改进产品 End User License Agreement 用户许可协议 View the end user license agreement 查看最终用户许可协议 Privacy Policy 隐私政策 View information about privacy policy 查看隐私政策相关信息 Open Source Software Notice 开源软件声明 ThemeSelectView More Wallpapers 下载更多 TimeAndDate Auto sync time 自动同步配置 Ntp server 服务器 System date and time 系统日期和时间 Customize 自定义 Settings 设置 Server address 服务器地址 Required 必填 The ntp server address cannot be empty 时间服务器地址不能为空 Use 24-hour format 24小时制 system time zone 系统时区 Timezone list 时区列表 Add 添加 TimeRange from to TimeoutDialog Save the display settings? 是否要保存显示设置? Settings will be reverted in %1s. 如无任何操作将在%1秒后还原。 Revert 还原 Save 保存 TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: 时区: Nearest City: Cancel 取消 Save 保存 TouchScreen TouchScreen 触控屏 Set up here when connecting the touch screen 连接触摸屏时在此处设置 Touchpad Basic Settings 基础设置 Touchpad 触控板 Pointer Speed 指针速度 Slow Fast Disable touchpad during input 输入时禁用触控板 Tap to Click 轻触以点击 Natural Scrolling 自然滚动 Three-finger gestures 三指手势 Four-finger gestures 四指手势 Gestures 手势 Touchscreen Touchscreen 触控屏 Configuring Touchscreen 触控屏设置 TouchscreenMain Common 通用 UserExperienceProgramPage Join User Experience Program 加入用户体验计划 Copy Link Address 复制链接地址 VerifyDialog Security Verification 安全验证 The action is sensitive, please enter the login password first 您正在进行敏感操作,请进行登录密码认证 8-64 characters 请输入8-64位密码 Forgot Password? 忘记密码? Cancel 取消 Confirm 确定 Wacom wacom 数位板 Configuring wacom 数位板选项设置 WacomMain wacom 数位板 Pen Mode 笔模式 Mouse Mode 鼠标模式 Pressure Sensitivity 压杆力度 Light Heavy Model 模式 WallpaperPage wallpaper 壁纸 My pictures 我的图片 System Wallpaper 系统壁纸 Solid color wallpaper 纯色壁纸 Customizable wallpapers 自定义 fill style 填充方式 Automatic wallpaper change 自动切换壁纸 never 从不 30 second 30秒 1 minute 1分钟 5 minute 5分钟 10 minute 10分钟 15 minute 15分钟 30 minute 30分钟 login 登录时 wake up 唤醒时 Live Wallpaper 动态壁纸 1 hour 1小时 System Wallpapers 系统壁纸 WallpaperSelectView unfold 收起 Set lock screen 设置锁屏 Set desktop 设置桌面 show all - %1 items 显示全部-%1张 Add Picture 添加图片 WindowEffectPage Interface and Effects 界面效果 Window Settings 窗口设置 Window rounded corners 窗口圆角 None Small Large Enable transparent effects when moving windows 窗口移动时启用透明特效 Window Minimize Effect 最小化时效果 Scale 缩放 Magic Lamp 魔灯 Opacity 不透明度调节 Low High Scroll Bars 滚动条 Show on scrolling 滚动时显示 Keep shown 一直显示 Compact Display 紧凑模式 If enabled, more content is displayed in the window. 开启后,窗口将显示更多内容 Title Bar Height 标题栏高度 Only suitable for application window title bars drawn by the window manager. 仅适用于窗口管理器绘制的应用标题栏 Extremely small 极小 Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) 繁体中文(中国香港) Traditional Chinese (Chinese Taiwan) 繁体中文(中国台湾) Min Nan Chinese 闽南语 dcc::Locale::regionNames Taiwan China 中国台湾 dccV25::AccountsController Username must be between 3 and 32 characters 用户名长度必须介于 3 到 32 个字符之间 The first character must be a letter or number 必须字母或者数字开头 Your username should not only have numbers 用户名不能仅仅是数字 The username has been used by other user accounts 用户名和其他用户名重复 The full name is too long 全名太长了 The full name has been used by other user accounts 全名和其他用户名重复 Wrong password 密码错误 Standard User 标准用户 Administrator 管理员 Customized 自定义 dccV25::AccountsWorker Your host was removed from the domain server successfully 您的主机成功退出了域服务器 Your host joins the domain server successfully 您的主机成功加入了域服务器 Your host failed to leave the domain server 您的主机退出域服务器失败 Your host failed to join the domain server 您的主机加入域服务器失败 AD domain settings AD域设置 Password not match 密码不一致 dccV25::AvatarTypesModel Dimensional 立体风格 Flat 平面风格 dccV25::FaceAuthController Faceprint 面纹 Face 人脸 Use your face to unlock the device and make settings later 使用人脸数据解锁您的设备,之后还可进行更多设置 dccV25::FingerprintAuthController Fingerprint 指纹 Place your finger 放置手指 Place your finger firmly on the sensor until you're asked to lift it 请以手指压指纹收集器,然后根据提示抬起 Lift your finger 抬起手指 Lift your finger and place it on the sensor again 请抬起手指,再次按压 Lift your finger and do that again 请抬起手指,再次按压 Scan Suspended 录入中断 Scan the edges of your fingerprint 录入边缘指纹 Place the edges of your fingerprint on the sensor 请以手指边缘压指纹收集器,然后根据提示抬起 Adjust the position to scan the edges of your fingerprint 请调整按压区域,继续录入边缘指纹 Fingerprint added 成功添加指纹 dccV25::IrisAuthController Iris 虹膜 Use your iris to unlock the device and make settings later 使用虹膜数据解锁您的设备,之后还可进行更多设置 dccV25::KeyboardController This shortcut conflicts with [%1] 此快捷键与[%1]冲突 dccV25::PwqualityManager Password cannot be empty 密码不能为空 Password must have at least %1 characters 密码长度不能少于%1个字符 Password must be no more than %1 characters 密码长度不能超过%1个字符 Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密码只能由英文(区分大小写)、数字或特殊符号(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)组成 No more than %1 palindrome characters please 回文字符长度不超过%1位 No more than %1 monotonic characters please 单调性字符不超过%1位 No more than %1 repeating characters please 重复字符不超过%1位 Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密码必须由大写字母、小写字母、数字、符号(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)三种类型组成 Password must not contain more than 4 palindrome characters 密码不得含有连续4个以上的回文字符 Do not use common words and combinations as password 密码不能是常见单词及组合 Create a strong password please 密码过于简单,请增加密码复杂度 It does not meet password rules 密码不符合安全要求 At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. 至少同时包含小写字母、大写字母、数字和符号中的%1种,且密码不能与用户名一致。 dccV25::ShortcutModel System 系统 Window 窗口 Workspace 工作区 AssistiveTools 辅助功能 Custom 自定义 None ================================================ FILE: translations/dde-control-center_zh_HK.ts ================================================ AccountSettings edit 編輯 Add new user 添加新用户 Set fullname 設置全名 Login settings 登錄設置 Login without password 免密登錄 Delete current account 刪除當前賬户 Group setting 用户組設置 Account groups 用户組 done 完成 Group name 用户組名稱 Add group 添加用户組 Auto login 自動登錄 Account Information 賬户信息 Account name, account fullname, account type 賬户名,全名,賬户類型 Account name 賬户名 Account fullname 賬户全名 Account type 賬户類型 The full name is too long 名稱過長 Group names should be no more than 32 characters 組名不允許超出32個字符 Group names cannot only have numbers 組名不能使用純數字 Use letters,numbers,underscores and dashes only, and must start with a letter 僅使用字母、數字、下劃線和破折號,並且必需以字母開頭 The group name has been used 組名與其他組名重複 quick login, Auto login, login without password 快速登錄,自動登錄,免密登錄 Undo 撤銷 Redo 重做 Cut 剪切 Copy 複製 Paste 粘貼 Select All 全選 Quick login 快速登錄 Accounts Account 賬户 Account manager 賬户管理 AccountsMain Other accounts 其他賬户 AddFaceinfoDialog Enroll Face 添加人臉數據 I have read and agree to the 我已閲讀並同意 Disclaimer 《用户免責聲明》 Next 下一步 Face enrolled 人臉錄入完成 Failed to enroll your face 人臉錄入失敗 Done 完成 Cancel 取消 Retry Enroll 重新錄入 Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. 人臉識別不支持活體檢測,驗證方式可能存在風險 為確保錄入成功: 1. 保持五官清晰可見,勿遮擋(帽子/墨鏡/口罩等) 2. 光線充足,避免陽光直射 "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. 「生物認證」是統信軟件技術有限公司提供的一種對用户進行身份認證的功能。通過「生物認證」,將採集的生物識別數據與存儲在設備本地的生物識別數據進行比對,並根據比對結果來驗證用户身份。 請您注意,統信軟件不會收集或訪問您的生物識別信息,此類信息將會存儲在您的本地設備中。請您僅在您的個人設備中開啓生物認證功能,並使用您本人的生物識別信息進行相關操作,並及時在該設備上禁用或清除他人的生物識別信息,否則由此給您帶來的風險將由您承擔。 統信軟件致力於研究與提高生物認證功能的安全性、精確性、與穩定性,但是,受限於環境、設備、技術等因素和風險控制等原因,我們暫時無法保證您一定能通過生物認證,請您不要將生物認證作為登錄統信作業系統的唯一途徑。若您在使用生物認證時有任何問題或建議的,可以通過系統內的「服務與支持」進行反饋。 AddFingerDialog Cancel 取消 Done 完成 Enroll Finger 添加指紋數據 Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. 將要錄入的手指放入指紋錄入器裏面,並從下往上移動手指,完成動作後請擡起您的手指 I have read and agree to the 我已閲讀並同意 Disclaimer 《用户免責聲明》 Next 下一步 Retry Enroll 重新錄入 "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. 「生物認證」是統信軟件技術有限公司提供的一種對用户進行身份認證的功能。通過「生物認證」,將採集的生物識別數據與存儲在設備本地的生物識別數據進行比對,並根據比對結果來驗證用户身份。 請您注意,統信軟件不會收集或訪問您的生物識別信息,此類信息將會存儲在您的本地設備中。請您僅在您的個人設備中開啓生物認證功能,並使用您本人的生物識別信息進行相關操作,並及時在該設備上禁用或清除他人的生物識別信息,否則由此給您帶來的風險將由您承擔。 統信軟件致力於研究與提高生物認證功能的安全性、精確性、與穩定性,但是,受限於環境、設備、技術等因素和風險控制等原因,我們暫時無法保證您一定能通過生物認證,請您不要將生物認證作為登錄統信作業系統的唯一途徑。若您在使用生物認證時有任何問題或建議的,可以通過系統內的「服務與支持」進行反饋。 AddIrisDialog Enroll Iris 添加虹膜數據 I have read and agree to the 我已閲讀並同意 Disclaimer 《用户免責聲明》 Next 下一步 Done 完成 Cancel 取消 Retry Enroll 重新錄入 Iris enrolled 虹膜錄入完成 Failed to enroll your iris 虹膜錄入失敗 "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. 「生物認證」是統信軟件技術有限公司提供的一種對用户進行身份認證的功能。通過「生物認證」,將採集的生物識別數據與存儲在設備本地的生物識別數據進行比對,並根據比對結果來驗證用户身份。 請您注意,統信軟件不會收集或訪問您的生物識別信息,此類信息將會存儲在您的本地設備中。請您僅在您的個人設備中開啓生物認證功能,並使用您本人的生物識別信息進行相關操作,並及時在該設備上禁用或清除他人的生物識別信息,否則由此給您帶來的風險將由您承擔。 統信軟件致力於研究與提高生物認證功能的安全性、精確性、與穩定性,但是,受限於環境、設備、技術等因素和風險控制等原因,我們暫時無法保證您一定能通過生物認證,請您不要將生物認證作為登錄統信作業系統的唯一途徑。若您在使用生物認證時有任何問題或建議的,可以通過系統內的「服務與支持」進行反饋。 Please keep an eye on the device and ensure that both eyes are within the collection area 請注視設備,確保雙眼在採集區域內 Authentication Biometric Authentication 生物認證 AuthenticationMain Biometric Authentication 生物認證 Face 人臉 Up to 5 facial data can be entered 最多可錄入5個人臉數據 Fingerprint 指紋 Identifying user identity through scanning fingerprints 通過對指紋的掃描進行用户身份的識別 Iris 虹膜 Identity recognition through iris scanning 通過掃描虹膜進行身份識別 Use letters, numbers and underscores only, and no more than 15 characters 只能由字母、數字、中文、下劃線組成,且不超過15個字符 Use letters, numbers and underscores only 只能由字母、數字、中文、下劃線組成 No more than 15 characters 不得超過15個字符 This name already exists 該名稱已存在 Add a new %1 ... 添加新的%1... The name cannot be empty 名稱不能為空 AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first 只允許一個賬户開啓自動登錄,請先關閉%1賬户的自動登錄,再進行操作 Ok 確 定 AvatarSettingsDialog Images 圖片 Human 人物 Animal 動物 Scenery 靜物 Illustration 創意插圖 Emoji 表情符號 custom 自定義圖片 Cartoon style Q版風格 Dimensional style 立體風格 Flat style 平面風格 Cancel 取消 Save 保存 BatteryPage Screen and Suspend 屏幕和待機 Turn off the monitor after 關閉顯示器 Lock screen after 自動鎖屏 Computer suspends after 進入待機 When the lid is closed 筆記本合蓋時 When the power button is pressed 按電源按鈕時 Low Battery 低電量管理 Low battery notification 低電量提醒 Auto suspend 自動待機 Auto Hibernate 自動休眠 Low battery threshold 低電量閾值 Battery Management 電池管理 Display remaining using and charging time 顯示剩餘使用時間及剩餘充電時間 Maximum capacity 最大容量 Low battery level 低電量時 Disable 從不 BlueTooth Bluetooth settings, devices 藍牙設置、設備管理 Bluetooth 藍牙 BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" 藍牙已關閉,名稱顯示為"%1" Bluetooth is turned on, and the name is displayed as "%1" 藍牙已打開,名稱顯示為 "%1" BlueToothDeviceListView Disconnect 斷開連接 Connect 連接 Send Files 發送文件 Rename 重命名 Remove Device 移除設備 Select file 選擇文件 BluetoothCtl Edit 修改 Allow other Bluetooth devices to find this device 允許其他藍牙設備找到該設備 To use the Bluetooth function, please turn off 如需使用藍牙功能,請關閉 Airplane Mode 飛行模式 Bluetooth name cannot exceed 64 characters 藍牙名稱不能超過64個字符 BluetoothDeviceModel Connected 已連接 Not connected 未連接 BootPage Startup Settings 啓動設置 You can click the menu to change the default startup items, or drag the image to the window to change the background image. 您可以點擊菜單改變默認啓動項,也可以拖拽圖片到窗口改變背景圖片. grub start delay 啓動延時 theme 主題 After turning on the theme, you can see the theme background when you turn on the computer 開啓主題後您可以在開機時看到主題背景 Boot menu verification 啓動菜單驗證 After opening, entering the menu editing requires a password. 開啓後進入啓動菜單編輯需要密碼. Change Password 修改密碼 Change boot menu verification password 修改啓動菜單驗證密碼 Set the boot menu authentication password 設置啓動菜單驗證密碼 User Name : 用户名: root root New Password : 新密碼: Required 必填 Password cannot be empty 密碼不能為空 Passwords do not match 密碼不一致 Repeat password: 確認密碼: Cancel 取消 Sure 確定 Start animation 啓動動畫 Adjust the size of the logo animation on the system startup interface 調整系統啓動界面的logo動畫尺寸大小 Camera Allow below apps to access your camera: 允許下面的應用訪問您的攝像頭 CharaMangerModel Fingerprint1 指紋1 Fingerprint2 指紋2 Fingerprint3 指紋3 Fingerprint4 指紋4 Fingerprint5 指紋5 Fingerprint6 指紋6 Fingerprint7 指紋7 Fingerprint8 指紋8 Fingerprint9 指紋9 Fingerprint10 指紋10 Scan failed 指紋錄入失敗 The fingerprint already exists 指紋已存在 Please scan other fingers 請使用其他手指錄入 Unknown error 未知錯誤 Scan suspended 指紋錄入被中斷 Cannot recognize 無法識別 Moved too fast 接觸時間短 Finger moved too fast, please do not lift until prompted 接觸時間短,驗證時請勿移動手指 Unclear fingerprint 圖像模糊 Clean your finger or adjust the finger position, and try again 請清潔手指或調整觸摸位置,再次按壓指紋識別器 Already scanned 圖像重複 Adjust the finger position to scan your fingerprint fully 請調整手指按壓區域以錄入更多指紋 Finger moved too fast. Please do not lift until prompted 指紋採集間隙,請勿移動手指,直到提示您擡起 Lift your finger and place it on the sensor again 請擡起手指,再次按壓 Position your face inside the frame 請確保您的面部全部顯示在識別區域內 Face enrolled 人臉錄入完成 Position a human face please 請使用人類面容 Keep away from the camera 請遠離鏡頭 Get closer to the camera 請靠近鏡頭 Do not position multiple faces inside the frame 請不要多人入鏡 Make sure the camera lens is clean 請確保鏡頭清潔 Do not enroll in dark, bright or backlit environments 請避免在暗光、強光、逆光環境下操作 Keep your face uncovered 請保持面部無遮擋 Scan timed out 錄入超時 Cancel 取消 Camera occupied! 攝像頭被佔用! ColorAndIcons Accent Color 活動用色 Icon Settings 圖標設置 Icon Theme 圖標主題 Customize your theme icon 自定義您的主題圖標 Cursor Theme 光標主題 Customize your theme cursor 自定義您的主題光標 ComfirmDeleteDialog Are you sure you want to delete this account? 您確定要刪除此賬户嗎? Delete account directory 刪除賬户目錄 Cancel 取消 Delete 刪除 ComfirmSafePage Go to settings 去設置 Cancel 取消 Common Common 通用 Repeat delay 重複延遲 Short Long Repeat rate 重複速度 Slow Fast Numeric Keypad 啓用數字鍵盤 test here 請在此輸入測試 Caps lock prompt 大寫鎖定提示 Double Click Speed 雙擊速度 Double Click Test 雙擊測試 Left Hand Mode 左手模式 Enable Keyboard 鍵盤 General 通用 Scrolling Speed 滾動速度 CommonInfoMain Boot Menu 啓動菜單 Manage your boot menu 管理您的開機啓動菜單 Developer root permission management 開發者Root權限管理 Developer Options 開發者選項 Developer debugging options 開發者調試選項 CommonInfoWork Large size 大尺寸 Small size 小尺寸 Failed to get root access 進入開發者模式失敗 Please sign in to your Union ID first 請先登錄Union ID Cannot read your PC information 無法獲取硬件信息 No network connection 無網絡連接 Certificate loading failed, unable to get root access 證書加載失敗,無法進入開發者模式 Signature verification failed, unable to get root access 簽名驗證失敗,無法進入開發者模式 Agree and Join User Experience Program 同意並加入用户體驗計劃 The Disclaimer of Developer Mode 開發者模式免責聲明 Agree and Request Root Access 同意並進入開發者模式 Start setting the new boot animation, please wait for a minute 開始設置啓動新動畫,請稍等一會兒 Setting new boot animation finished 新的啓動動畫設置完成 The settings will be applied after rebooting the system 新的設置會在重啓系統後生效 Restart now 立即重啓 Dismiss 忽略 Restart device to finish applying Solid System Read-Only Protection settings 磐石只讀保護設置需重啓後纔能生效 ConfirmManager Password must contain numbers and letters 密碼必須包含數字和字母 Password must be between 8 and 64 characters 密碼長度必須為8~64個字符 CreateAccountDialog Create a new account 創建新用户 Account type 賬户類型 UserName 用户名 Required 必填 FullName 全名 Optional 選填 Cancel 取消 Create account 創建用户 Username cannot exceed 32 characters 用户名不能超過 32 個字符 Username can only contain letters, numbers, - and _ 用户名只能包含字母、數字、 - 和 _ Full name cannot exceed 32 characters 全名不能超過 32 個字符 Full name cannot contain colons 全名不能包含冒號 CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. 您還沒有上傳過頭像,可點擊或拖拽上傳圖片 The uploaded file type is incorrect, please upload it again 上傳的文件類型不正確,請重新上傳 DCC_NAMESPACE::SystemInfoModel available 可用 DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/zh/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-hk https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-hk Agree and Join User Experience Program 同意並加入用户體驗計劃 <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>統信軟件非常重視您的私隱。因此我們制定了涵蓋如何收集、使用、共享、轉讓、公開披露以及存儲您的信息的私隱政策。</p><p>您可以<a href="%1">點擊此處</a> 查看我們最新的私隱政策和/或通過訪問 <a href="%1"> %1</a>在線查看。請您務必認真閲讀、充分理解我們針對客户私隱的做法,如果有任何疑問,請聯繫我們:%2。</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">開啓用户體驗計劃視為您授權我們收集和使用您的設備及系統信息,以及應用軟件信息,您可以關閉用户體驗計劃以拒絕我們對前述信息的收集和使用。詳細説明請參照Deepin私隱政策 (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">開啓用户體驗計劃視為您授權我們收集和使用您的設備及系統信息,以及應用軟件信息,您可以關閉用户體驗計劃以拒絕我們對前述信息的收集和使用。瞭解用户體驗計劃,請訪問: </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting 日期和時間設置 Date 日期 Year Month Day Time 時間 Cancel 取消 Confirm 確認 Datetime Time and date 時間和日期 Time and date, time zone settings 時間日期、時區設置 DatetimeMain Language and region 語言和區域 System language, regional formats 系統語言、區域格式 DatetimeModel Tomorrow 明天 Yesterday 昨天 Today 今天 %1 hours earlier than local 早 %1 小時 %1 hours later than local 晚 %1 小時 Space 空格 Week 星期/周 First day of week 一週首日 Short date 短日期 Long date 長日期 Short time 短時間 Long time 長時間 Currency symbol 貨幣符號 Positive currency 貨幣正數 Negative currency 貨幣負數 Decimal symbol 小數點 Digit grouping symbol 分隔符 Digit grouping 數字分組 Page size 紙張 Example 示例 DatetimeWorker Authentication is required to change NTP server 修改時間伺服器需要認證 Authentication is required to set the system timezone 設置系統時區需要認證 DccColorDialog Cancel 取消 Save 保存 DccWindow Control Center provides the options for system settings. 控制中心提供作業系統的所有設置選項。 DeepinIDAccountSecurity Bind WeChat 綁定微信 By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. 通過綁定微信,您可以安全快速地登錄您的%1 ID和本地賬户 Unlinked 未綁定 Unbinding 解 綁 Link 去綁定 Are you sure you want to unbind WeChat? 您確定要解綁微信嗎? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. 解綁微信後,您將無法使用微信掃碼登錄%1 ID、微信掃碼登錄本地賬户 Let me think it over 我再想想 Local Account Binding 綁定本地賬户 After binding your local account, you can use the following functions: 綁定本地賬户後,您可以使用如下功能: WeChat Scan Code Login System 微信掃碼登錄系統 Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. 使用%1 ID綁定的微信,掃碼登錄本地賬户 Reset password via %1 ID 通過%1 ID重置密碼 Reset your local password via %1 ID in case you forget it. 在您忘記本地賬户密碼時,通過%1 ID重置密碼 To use the above features, please go to Control Center - Accounts and turn on the corresponding options. 如需使用上述功能,請前往控制中心-賬户,開啓相應選項 DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync 雲同步 Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. 管理您的%1 ID,將您的個人數據在不同設備之間同步。 登錄%1 ID以獲取瀏覽器、應用商店、服務與支持等眾多應用的個性功能和服務。 Sign In to %1 ID 登錄%1 ID DeepinIDSyncService Auto Sync 自動同步 Securely store system settings and personal data in the cloud, and keep them in sync across devices 將您的系統設置和個人信息安全地存儲在雲端,並在您不同的設備上保持同步 System Settings 系統設置 Last sync time: %1 最近同步時間:%1 Clear cloud data 清除雲端數據 Are you sure you want to clear your system settings and personal data saved in the cloud? 確定要清除您保存在雲端的系統設置和個人數據嗎? Once the data is cleared, it cannot be recovered! 數據清除後將無法恢復! Cancel 取 消 Clear 清 除 DeepinIDUserInfo Synchronization Service 同步服務 Account and Security 賬户與安全 Sign out 退出登錄 Go to web settings 前往網頁設置 The nickname must be 1~32 characters long 暱稱長度必須為1~32個字符 DeepinWorker encrypt password failed 加密密碼失敗 Wrong password, %1 chances left 密碼錯誤,您還可以嘗試%1次 The login error has reached the limit today. You can reset the password and try again. 密碼錯誤已達今日上限,可重置密碼再試 Operation Successful 操作成功 The nickname can be modified only once a day 暱稱每天僅可修改一次 Deepinid deepin ID deepin ID UOS ID UOS ID Cloud services 雲服務 DeepinidModel Mainland China 中國大陸 Other regions 其他地區 The feature is not available at present, please activate your system first 當前系統未激活,暫無法使用該功能 Subject to your local laws and regulations, it is currently unavailable in your region. 受限於您當地的法律法規,同步服務暫未覆蓋您所在地區,敬請期待。 Defaultapp Default App 默認程序 Set the default application for opening various types of files 設置打開各類文件的默認程序 DefaultappMain Webpage 網頁 Mail 郵件 Text 文本 Music 音樂 Video 視頻 Picture 圖片 Terminal 終端 DetailItem Please choose the default program to open '%1' 選擇打開「%1」的默認程序 add 添加 Open Desktop file 打開Desktop文件 Apps (*.desktop) 應用程式(*.desktop) All files (*) 所有文件(*) DevelopModePage Root Access 開發者模式 Request Root Access 進入開發者模式 After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. 可獲得root使用權限,但同時也可能導致系統完教性遭到破壞,請謹慎使用。 Allowed 已進入 Enter 進入 Online 在線激活 Login UOS ID 登錄UOS ID Offline 離線激活 Import Certificate 導入證書 Select file 選擇文件 Your UOS ID has been logged in, click to enter developer mode 您的UOS ID已登錄,點擊進入開發者模式 Please sign in to your UOS ID first and continue 進入開發者模式需要登錄UOS ID 1.Export PC Info 1.導出機器信息 Export 導出 3.Import Certificate 3.導入證書 Development and debugging options 開發調試選項 System logging level 系統日誌記錄級別 Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. 更改此選項可以獲得更詳細的日誌記錄,這些日誌可能會降低系統性能和/或佔用更多存儲空間. Off 關閉 Debug 調試 Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. 更改選項處理可能需要一分鐘,收到設置成功提示後,請重啓設備方可生效。 To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. 如需安裝非應用商店來源的應用,前往<a style='text-decoration: none;' href='Security Center'> 安全中心 </a>進行設置。 To install and run unsigned apps, please go to Security Center to change the settings. 如需安裝非應用商店來源的應用,前往安全中心進行設置。 You have entered developer mode 您已進入開發者模式 OK 確定 2.please go to %1 to Download offline certificate. 2.前往%1下載離線證書. The feature is not available at present, please activate your system first. 當前系統未激活,暫無法使用該功能。 Solid System Read-Only Protection 磐石只讀保護 Disabling protection unlocks system directories,This action carries a high risk of system damage. 關閉保護會解鎖系統目錄,可能導致系統損壞的高風險。 Enable protection to lock system directories and ensure optimal stability. 開啓保護以鎖定系統目錄,確保最佳穩定性。 Device Bluetooth and Devices 藍牙和其他設備 DisclaimerControl Disclaimer 《用户免責聲明》 Cancel 取消 Agree 同意 Display Display 顯示 Brightness,resolution,scaling 亮度、解像度、縮放 DisplayMain 100% 100% 125% 125% 150% 150% 175% 175% 200% 200% 225% 225% 250% 250% 275% 275% 300% 300% Duplicate 複製 Extend 擴展 Default 默認 Fit 適應 Stretch 拉伸 Center 居中 Only on %1 僅%1屏 Multiple Displays Settings 多屏設置 Identify 識別 Screen rearrangement will take effect in %1s after changes 屏幕拼接將在修改完成%1s後生效 Mode 模式 Main Screen 主屏幕 Display And Layout 顯示和佈局 Brightness 亮度 Resolution 解像度 Resize Desktop 桌面顯示 Refresh Rate 刷新率 Rotation 方向 Standard 標準 90° 90度 180° 180度 270° 270度 The monitor only supports 100% display scaling 當前屏幕僅支持1倍縮放 Eye Comfort 護眼模式 Enable eye comfort 開啓護眼模式 Adjust screen display to warmer colors, reducing screen blue light 調整屏幕顯示較暖的顏色,減少屏幕藍光 Time 時間 All day 全天 Sunset to Sunrise 日落到日出 Custom Time 自定義 from to Color Temperature 色温 %1x%2 (Recommended) %1x%2 (推薦) %1x%2 %1x%2 %1Hz (Recommended) %1赫茲 (推薦) %1Hz %1赫茲 Scaling 縮放 Dock Desktop and taskbar 桌面和任務欄 Desktop organization, taskbar mode, plugin area settings 桌面整理、任務欄模式、插件區域設置 DockMain Dock 任務欄 Mode 模式 Classic Mode 經典模式 Centered Mode 居中模式 Dock size 任務欄大小 Small Large Position on the screen 屏幕中的位置 Top Bottom Left Right Status 狀態 Keep shown 一直顯示 Keep hidden 一直隱藏 Smart hide 智能隱藏 Multiple Displays 多屏顯示 Set the position of the taskbar on the screen 設置任務欄在屏幕中的位置 Only on main 僅主屏顯示 On screen where the cursor is 跟隨鼠標位置顯示 Plugin Area 插件區域 Select which icons appear in the Dock 選擇顯示在任務欄插件區域的圖標 Lock the Dock 禁用自由調節 Combine application icons 合併應用圖標 FileAndFolder Allow below apps to access these files and folders: 允許下面的應用訪問您的文件和文件夾 Documents 文檔 Desktop 桌面 Pictures 圖片 Videos 視頻 Music 音樂 Downloads 下載 folder 文件夾 FontSizePage Size 字號 Standard Font 標準字體 Monospaced Font 等寬字體 GeneralPage Power Plans 性能模式 Power Saving Settings 節能設置 Auto power saving on low battery 低電量時自動開啓節能模式 Low battery threshold 低電量閾值 Auto power saving on battery 使用電池時自動開啓節能模式 Wakeup Settings 喚醒設置 Password is required to wake up the computer 待機恢復時需要密碼 Password is required to wake up the monitor 喚醒顯示器時需要密碼 Shutdown Settings 關機設置 Scheduled Shutdown 定時關機 Time 時間 Repeat 重複 Once 一次 Every day 每天 Working days 工作日 Custom Time 自定義 Decrease screen brightness on power saver 節能模式時降低屏幕亮度 GestureModel Three-finger up 三指向上 Three-finger down 三指向下 Three-finger left 三指向左 Three-finger right 三指向右 Three-finger tap 三指點擊 Four-finger up 四指向上 Four-finger down 四指向下 Four-finger left 四指向左 Four-finger right 四指向右 Four-finger tap 四指點擊 HomePage , ... InterfaceEffectListview Optimal Performance 最佳性能 Balance 均衡 Best Visuals 最佳視覺 Disable all interface and window effects for efficient system performance. 關閉所有界面和窗口特效,保障系統高效運行 Limit some window effects for excellent visuals while maintaining smooth system performance. 限制部分窗口特效,保障出色的視覺效果,同時維持系統流暢運行 Enable all interface and window effects for the best visual experience. 啓用所有界面和窗口特效,體驗最佳視覺效果 Keyboard Keyboard 鍵盤 General Settings, input method, shortcuts 通用設置、輸入法、快捷鍵 KeyboardMain Common 通用 LangAndFormat Language 語言 done 完成 edit 編輯 Other languages 其他語言 add 添加 Region 區域 Area 地區 Operating system and applications may provide you with local content based on your country and region 作業系統和應用可能會根據你所在的國家和地區向你提供本地內容 Operating system and applications may set date and time formats based on regional formats 作業系統和某些應用會根據區域格式設置日期和時間格式 Regional format 區域格式 LangsChooserDialog Add language 添加語言 Search 搜索 Cancel 取消 Add 添加 LoginMethod Login method 登錄方式 Password, wechat, biometric authentication, security key 密碼,微信掃碼,生物認證,安全密鑰 Password 密碼 Modify password 修改密碼 Validity days 有效天數 Always 長期有效 Reset password 重置密碼 LogoModule Copyright© 2011-%1 Deepin Community Copyright © 2011-%1 深度社區 Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright © 2019-%1 統信軟件技術有限公司 MicrophonePage Automatic Noise Suppression 噪音抑制 Input Volume 輸入音量 Input Level 反饋音量 Input 輸入 No input device for sound found 沒有找到聲音輸入設備 Input Device 輸入設備 Mouse Mouse and Touchpad 鼠標與觸控板 Common、Mouse、Touchpad 通用、鼠標、觸控板 MouseMain Common 通用 Mouse 鼠標 Touchpad 觸控板 MousePage Mouse 鼠標 Pointer Speed 指針速度 Slow Fast Pointer Size 指針大小 Mouse Acceleration 鼠標加速 Disable touchpad when a mouse is connected 插入鼠標時禁用觸摸板 Natural Scrolling 自然滾動 Small Medium Large X-Large 極大 Some apps require logout or system restart to take effect 部分應用需註銷或重啓系統後生效 MyDevice My Devices 我的設備 NativeInfoPage UOS UOS Computer name 計算機名 It cannot start or end with dashes 計算機名不能以 - 開頭結尾 OS Name 產品名稱 Version 版本號 Edition 版本 Type 類型 bit Authorization 版本授權 System installation time 系統安裝日期 Kernel 內核版本 Graphics Platform 圖形平台 Processor 處理器 Memory 內存 1~63 characters please 計算機名長度必須介於1到63個字符之間 Notification DND mode, app notifications 勿擾模式、應用通知 Notification 通知 NotificationMain Do Not Disturb Settings 勿擾設置 App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. 所有應用消息橫幅將會被隱藏,通知聲音將會靜音,您可在通知中心查看所有消息。 Enable Do Not Disturb 啓用勿擾模式 When the screen is locked 在屏幕鎖屏時 Number of notifications shown on the desktop 通知橫幅展示數量 App Notifications 應用通知 Allow Notifications 允許通知 Display notification on desktop or show unread messages in the notification center 可以顯示通知橫幅,或在通知中心顯示未讀消息 Desktop 桌面 Lock Screen 鎖屏 Notification Center 通知中心 Show message preview 顯示消息預覽 Play a sound 通知時提示聲音 OtherDevice Other Devices 其他設備 Show Bluetooth devices without names 顯示沒有名稱的藍牙設備 PasswordLayout Current password 當前密碼 Required 必填 Weak 強度低 Medium 強度中 Strong 強度高 Repeat Password 重複密碼 Password hint 密碼提示 Optional 選填 Password cannot be empty 密碼不能為空 Passwords do not match 密碼不一致 The hint is visible to all users. Do not include the password here. 密碼提示對所有人可見,切勿包含具體密碼信息 New password 新密碼 New password should differ from the current one 新密碼和舊密碼不能相同 The password cannot be the same as the username. 密碼不能與用户名一致。 PasswordModifyDialog Modify password 修改密碼 Reset password 重置密碼 Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. 建議密碼長度8位以上,同時包含大寫字母、小寫字母、數字、符號中的3種密碼更安全。 Resetting the password will clear the data stored in the keyring. 重設密碼將會清除密鑰環內已存儲的數據 Cancel 取消 Personalization Personalization 個性化 PersonalizationInterface Light 淺色 Auto 自動 Dark 深色 Picker service is not available Invalid color format: %1 PersonalizationMain Theme 主題 Appearance 外觀 Window effect 窗口效果 Personalize your wallpaper and screensaver 個性化您的壁紙和屏保 Screensaver 屏幕保護 Colors and icons 顏色和圖標 Adjust accent color and theme icons 調整活動色和主題圖標 Font and font size 字體和字號 Change system font and size 修改系統字體與字號 Wallpaper 壁紙 Select light, dark or automatic theme appearance 選擇淺色、深色或自動切換主題外觀 Interface and effects, rounded corners 界面和效果、窗口圓角 PersonalizationWorker Custom 自定義 PluginArea Plugin Area 插件區域 Select which icons appear in the Dock 選擇顯示在任務欄插件區域的圖標 Power Power saving settings, screen and suspend 節能設置、屏幕和待機管理 Power 電源管理 PowerMain General 通用 Power plans, power saving settings, wakeup settings, shutdown settings 性能模式、節能設置、喚醒設置、關機設置 Plugged In 使用電源 Screen and suspend 屏幕和待機管理 On Battery 使用電池 screen and suspend, low battery, battery management 屏幕和待機管理、低電量管理、電池管理 PowerOperatorModel Shut down 關機 Suspend 待機 Hibernate 休眠 Turn off the monitor 關閉顯示器 Show the shutdown Interface 進入關機界面 Do nothing 無任何操作 PowerPage Screen and Suspend 屏幕和待機 Turn off the monitor after 關閉顯示器 Lock screen after 自動鎖屏 Computer suspends after 進入待機 When the lid is closed 筆記本合蓋時 When the power button is pressed 按電源按鈕時 PowerPlansListview High Performance 高性能模式 Balance Performance 性能模式 Aggressively adjust CPU operating frequency based on CPU load condition 根據負載情況積極調整運行頻率 Balanced 平衡模式 Power Saver 節能模式 Prioritize performance, which will significantly increase power consumption and heat generation 性能優先,會顯著提升功耗和發熱 Balancing performance and battery life, automatically adjusted according to usage 兼顧性能和續航,根據使用情況自動調節 Prioritize battery life, which the system will sacrifice some performance to reduce power consumption 續航優先,系統會犧牲一些性能表現來降低功耗 PowerWorker Minutes 分鐘 Hour 小時 Never 從不 Privacy Privacy and Security 私隱和安全 Camera, folder permissions 攝像頭、文件夾權限 PrivacyMain Camera 攝像頭 Choose whether the application has access to the camera 選擇應用是否有攝像頭的訪問權限 Files and Folders 文件和文件夾 Choose whether the application has access to files and folders 選擇應用是否有文件和文件夾的訪問權限 PrivacyPolicyPage Privacy Policy 私隱政策 Copy Link Address 複製連結地址 PwqualityManager Password cannot be empty 密碼不能為空 Password must have at least %1 characters 密碼長度不能少於%1個字符 Password must be no more than %1 characters 密碼長度不能超過%1個字符 Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密碼只能由英文(區分大小寫)、數字或特殊符號(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)組成 No more than %1 palindrome characters please 迴文字符長度不超過%1位 No more than %1 monotonic characters please 單調性字符不超過%1位 No more than %1 repeating characters please 重複字符不超過%1位 Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密碼必須由大寫字母、小寫字母、數字、符號(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)三種類型組成 Password must not contain more than 4 palindrome characters 密碼不得含有連續4個以上的迴文字符 Do not use common words and combinations as password 密碼不能是常見單詞及組合 Create a strong password please 密碼過於簡單,請增加密碼複雜度 It does not meet password rules 密碼不符合安全要求 QObject Control Center 控制中心 Activated 已激活 View 查看 To be activated 待激活 Activate 激活 Expired 已過期 In trial period 試用期 Trial expired 試用期過期 dde-control-center 控制中心 Touch Screen Settings 觸控屏設置 The settings of touch screen changed 已變更觸控屏設置 This system wallpaper is locked. Please contact your admin. 當前系統壁紙已被鎖定,請聯繫管理員 %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search 搜索 Default formats 默認格式 First day of week 一週第一天 Short date 短日期 Long date 長日期 Short time 短時間 Long time 長時間 Currency symbol 貨幣符號 Digit 數字 Paper size 紙張 Cancel 取消 Save 保存 Regional format 區域格式 RegionsChooserWindow Search 搜索 RegisterDialog Set a Password 設置密碼 8-64 characters 請輸入8-64位密碼 Repeat the password 請再次輸入密碼 Cancel 取消 Confirm 確定 Passwords don't match 兩次密碼輸入不一致 ScheduledShutdownDialog Customize repetition time 自定義重複時間 Cancel 取消 Save 保存 ScreenSaverPage Screensaver 屏幕保護 preview 全屏預覽 Personalized screensaver 個性化屏保 setting 設置 idle time 閒置時間 1 minute 1分鐘 5 minute 5分鐘 10 minute 10分鐘 15 minute 15分鐘 30 minute 30分鐘 1 hour 1小時 never 從不 Password required for recovery 恢復時需要密碼 Picture slideshow screensaver 圖片輪播屏保 System screensaver 系統屏保 SearchableListViewPopup Search 搜索 No search results 無搜索結果 ShortcutSettingDialog Add custom shortcut 添加自定義快捷鍵 Name: 名稱: Required 必填 Command: 命令: Shortcut 快捷鍵 None Cancel 取消 Add 添加 The shortcut name is already in use. Choose a different name. 快捷鍵名稱已被佔用,請修改名稱。 Change custom shortcut 修改自定義快捷鍵 please enter a shortcut key 請輸入快捷鍵 Save 保存 click Save to make this shortcut key effective 點擊保存使這個快捷鍵生效 click Add to make this shortcut key effective 點擊添加使這個快捷鍵生效 Shortcuts Shortcuts 快捷鍵 System shortcut, custom shortcut 系統快捷鍵、自定義快捷鍵 Search shortcuts 搜索快捷鍵 done 完成 edit 編輯 Click 點擊 Cancel 取消 or Replace 替換 Restore default 恢復默認 Add custom shortcut 添加快捷鍵 please enter a new shortcut key 請輸入新的快捷鍵 Sound Sound 聲音 Output, input, sound effects, devices 輸入、輸出、系統音效、設備管理 SoundDevicemanagesPage Output Devices 輸出設備 Select whether to enable the devices 選擇是否啓用設備 Input Devices 輸入設備 SoundEffectsPage Sound Effects 系統音效 SoundMain Settings 設置 Sound Effects 系統音效 Enable/disable sound effects 開啓/關閉系統音效 Enable/disable audio devices 啓用/禁用音頻設備 Devices Management 設備管理 SoundModel Boot up 開機 Shut down 關機 Log out 註銷 Wake up 喚醒 Volume +/- 音量調節 Notification 通知 Low battery 電量不足 Send icon in Launcher to Desktop 從啓動器發送圖標到桌面 Empty Trash 清空回收站 Plug in 電源接入 Plug out 電源拔出 Removable device connected 流動裝置接入 Removable device removed 流動裝置拔出 Error 錯誤提示 SpeakerPage Mode 模式 Output Volume 輸出音量 Volume Boost 音量增強 If the volume is louder than 100%, it may distort audio and be harmful to output devices 音量大於100%時可能會導致音效失真,同時損害您的音頻輸出設備 Left Right Output 輸出 No output device for sound found 沒有找到聲音輸出設備 Left Right Balance 左右平衡 Merge left and right channels into a single channel 將左聲道和右聲道合併成一個聲道 Whether the audio will be automatically paused when the current audio device is unplugged 外設插拔時音頻輸出是否自動暫停 Mono Audio 單聲道音頻 Auto Pause 插拔管理 Output Device 輸出設備 SyncInfoListModel Sound 聲音 Power 電源 Mouse 鼠標 Update 更新 Screensaver 屏幕保護 System Common settings 常用設置 System 系統 SystemInfo Auxiliary Information 輔助信息 SystemInfoMain About This PC 關於本機 System version, device information 系統版本、設備信息 View the notice of open source software 查看開源軟件聲明 User Experience Program 用户體驗計劃 Join the user experience program to help improve the product 加入用户體驗計劃,幫助改進產品 End User License Agreement 用户許可協議 View the end user license agreement 查看最終用户許可協議 Privacy Policy 私隱政策 View information about privacy policy 查看私隱政策相關信息 Open Source Software Notice 開源軟件聲明 ThemeSelectView More Wallpapers 下載更多 TimeAndDate Auto sync time 自動同步配置 Ntp server 伺服器 System date and time 系統日期和時間 Customize 自定義 Settings 設置 Server address 伺服器地址 Required 必填 The ntp server address cannot be empty 時間伺服器地址不能為空 Use 24-hour format 24小時制 system time zone 系統時區 Timezone list 時區列表 Add 添加 TimeRange from to TimeoutDialog Save the display settings? 是否要保存顯示設置? Settings will be reverted in %1s. 如無任何操作將在%1秒後還原。 Revert 還原 Save 保存 TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel 取消 Save 保存 TouchScreen TouchScreen 觸控屏 Set up here when connecting the touch screen 連接觸摸屏時在此處設置 Touchpad Basic Settings 基礎設置 Touchpad 觸控板 Pointer Speed 指針速度 Slow Fast Disable touchpad during input 輸入時禁用觸摸板 Tap to Click 輕觸以點擊 Natural Scrolling 自然滾動 Three-finger gestures 三指手勢 Four-finger gestures 四指手勢 Gestures 手勢 Touchscreen Touchscreen 觸控屏 Configuring Touchscreen 觸控屏設置 TouchscreenMain Common 通用 UserExperienceProgramPage Join User Experience Program 加入用户體驗計劃 Copy Link Address 複製連結地址 VerifyDialog Security Verification 安全驗證 The action is sensitive, please enter the login password first 您正在進行敏感操作,請進行登錄密碼認證 8-64 characters 請輸入8-64位密碼 Forgot Password? 忘記密碼? Cancel 取消 Confirm 確定 Wacom wacom 數位板 Configuring wacom 數位板選項設置 WacomMain wacom 數位板 Pen Mode 筆模式 Mouse Mode 鼠標模式 Pressure Sensitivity 壓桿力度 Light Heavy Model 模式 WallpaperPage wallpaper 壁紙 My pictures 我的圖片 System Wallpaper 系統壁紙 Solid color wallpaper 純色壁紙 Customizable wallpapers 自定義 fill style 填充方式 Automatic wallpaper change 自動切換壁紙 never 從不 30 second 30秒 1 minute 1分鐘 5 minute 5分鐘 10 minute 10分鐘 15 minute 15分鐘 30 minute 30分鐘 login 登錄時 wake up 喚醒時 Live Wallpaper 動態壁紙 1 hour 1小時 System Wallpapers 系統壁紙 WallpaperSelectView unfold 收起 Set lock screen 設置鎖屏 Set desktop 設置桌面 show all - %1 items 顯示全部-%1張 Add Picture 添加圖片 WindowEffectPage Interface and Effects 界面效果 Window Settings 窗口設置 Window rounded corners 窗口圓角 None Small Large Enable transparent effects when moving windows 窗口移動時啓用透明特效 Window Minimize Effect 最小化時效果 Scale 縮放 Magic Lamp 魔燈 Opacity 不透明度調節 Low High Scroll Bars 滾動條 Show on scrolling 滾動時顯示 Keep shown 一直顯示 Compact Display 緊湊模式 If enabled, more content is displayed in the window. 開啓後,窗口將顯示更多內容 Title Bar Height 標題欄高度 Only suitable for application window title bars drawn by the window manager. 僅適用於窗口管理器繪製的應用標題欄 Extremely small 極小 Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) 繁體中文(中國香港) Traditional Chinese (Chinese Taiwan) 繁體中文(中國台灣) Min Nan Chinese 閩南語 dcc::Locale::regionNames Taiwan China 中國台灣 dccV25::AccountsController Username must be between 3 and 32 characters 用户名長度必須介於 3 到 32 個字符之間 The first character must be a letter or number 必須字母或者數字開頭 Your username should not only have numbers 用户名不能僅僅是數字 The username has been used by other user accounts 用户名和其他用户名重複 The full name is too long 全名太長了 The full name has been used by other user accounts 全名和其他用户名重複 Wrong password 密碼錯誤 Standard User 標準用户 Administrator 管理員 Customized 自定義 dccV25::AccountsWorker Your host was removed from the domain server successfully 您的主機成功退出了域伺服器 Your host joins the domain server successfully 您的主機成功加入了域伺服器 Your host failed to leave the domain server 您的主機退出域伺服器失敗 Your host failed to join the domain server 您的主機加入域伺服器失敗 AD domain settings AD域設置 Password not match 密碼不一致 dccV25::AvatarTypesModel Dimensional 立體風格 Flat 平面風格 dccV25::FaceAuthController Faceprint 面紋 Face 人臉 Use your face to unlock the device and make settings later 使用人臉數據解鎖您的設備,之後還可進行更多設置 dccV25::FingerprintAuthController Fingerprint 指紋 Place your finger 放置手指 Place your finger firmly on the sensor until you're asked to lift it 請以手指壓指紋收集器,然後根據提示擡起 Lift your finger 擡起手指 Lift your finger and place it on the sensor again 請擡起手指,再次按壓 Lift your finger and do that again 請擡起手指,再次按壓 Scan Suspended 錄入中斷 Scan the edges of your fingerprint 錄入邊緣指紋 Place the edges of your fingerprint on the sensor 請以手指邊緣壓指紋收集器,然後根據提示擡起 Adjust the position to scan the edges of your fingerprint 請調整按壓區域,繼續錄入邊緣指紋 Fingerprint added 成功添加指紋 dccV25::IrisAuthController Iris 虹膜 Use your iris to unlock the device and make settings later 使用虹膜數據解鎖您的設備,之後還可進行更多設置 dccV25::KeyboardController This shortcut conflicts with [%1] 此快捷鍵與[%1]衝突 dccV25::PwqualityManager Password cannot be empty 密碼不能為空 Password must have at least %1 characters 密碼長度不能少於%1個字符 Password must be no more than %1 characters 密碼長度不能超過%1個字符 Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密碼只能由英文(區分大小寫)、數字或特殊符號(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)組成 No more than %1 palindrome characters please 迴文字符長度不超過%1位 No more than %1 monotonic characters please 單調性字符不超過%1位 No more than %1 repeating characters please 重複字符不超過%1位 Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密碼必須由大寫字母、小寫字母、數字、符號(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)三種類型組成 Password must not contain more than 4 palindrome characters 密碼不得含有連續4個以上的迴文字符 Do not use common words and combinations as password 密碼不能是常見單詞及組合 Create a strong password please 密碼過於簡單,請增加密碼複雜度 It does not meet password rules 密碼不符合安全要求 At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. 至少同時包含小寫字母、大寫字母、數字和符號中的%1種,且密碼不能與用户名一致。 dccV25::ShortcutModel System 系統 Window 窗口 Workspace 工作區 AssistiveTools 輔助功能 Custom 自定義 None ================================================ FILE: translations/dde-control-center_zh_TW.ts ================================================ AccountSettings edit 編輯 Add new user 新增新使用者 Set fullname 設定全名 Login settings 登入設定 Login without password 免密登入 Delete current account 刪除當前帳戶 Group setting 使用者組設定 Account groups 使用者組 done 完成 Group name 使用者組名稱 Add group 新增使用者組 Auto login 自動登入 Account Information 帳戶資訊 Account name, account fullname, account type 帳戶名,全名,帳戶型別 Account name 帳戶名 Account fullname 帳戶全名 Account type 帳戶型別 The full name is too long 名稱過長 Group names should be no more than 32 characters 組名不允許超出32個字元 Group names cannot only have numbers 組名不能使用純數字 Use letters,numbers,underscores and dashes only, and must start with a letter 僅使用字母、數字、下劃線和破折號,並且必需以字母開頭 The group name has been used 組名與其他組名重複 quick login, Auto login, login without password 快速登入,自動登入,免密登入 Undo 撤銷 Redo 重做 Cut 剪下 Copy 複製 Paste 粘貼 Select All 全選 Quick login 快速登入 Accounts Account 帳戶 Account manager 帳戶管理 AccountsMain Other accounts 其他帳戶 AddFaceinfoDialog Enroll Face 新增人臉資料 I have read and agree to the 我已閱讀並同意 Disclaimer 《使用者免責宣告》 Next 下一步 Face enrolled 人臉錄入完成 Failed to enroll your face 人臉錄入失敗 Done 完成 Cancel 取消 Retry Enroll 重新錄入 Face recognition does not support liveness detection, and the verification method may carry risks. To ensure successful entry: 1. Keep your facial features clearly visible and do not cover them (hats, sunglasses, masks, etc.). 2. Ensure sufficient lighting and avoid direct sunlight. 人臉識別不支援活體檢測,驗證方式可能存在風險 為確保錄入成功: 1. 保持五官清晰可見,勿遮擋(帽子/墨鏡/口罩等) 2. 光線充足,避免陽光直射 "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. 「生物認證」是統信軟體技術有限公司提供的一種對使用者進行身份認證的功能。通過「生物認證」,將採集的生物識別資料與儲存在裝置本地的生物識別資料進行比對,並根據比對結果來驗證使用者身份。 請您注意,統信軟體不會收集或訪問您的生物識別資訊,此類資訊將會儲存在您的本地裝置中。請您僅在您的個人裝置中開啟生物認證功能,並使用您本人的生物識別資訊進行相關操作,並及時在該裝置上停用或清除他人的生物識別資訊,否則由此給您帶來的風險將由您承擔。 統信軟體致力於研究與提高生物認證功能的安全性、精確性、與穩定性,但是,受限於環境、裝置、技術等因素和風險控制等原因,我們暫時無法保證您一定能通過生物認證,請您不要將生物認證作為登入統信作業系統的唯一途徑。若您在使用生物認證時有任何問題或建議的,可以通過系統內的「服務與支援」進行反饋。 AddFingerDialog Cancel 取消 Done 完成 Enroll Finger 新增指紋資料 Place the finger to be entered into the fingerprint sensor and move it from bottom to top. After completing the action, please lift your finger. 將要錄入的手指放入指紋錄入器裡面,並從下往上移動手指,完成動作後請擡起您的手指 I have read and agree to the 我已閱讀並同意 Disclaimer 《使用者免責宣告》 Next 下一步 Retry Enroll 重新錄入 "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. 「生物認證」是統信軟體技術有限公司提供的一種對使用者進行身份認證的功能。通過「生物認證」,將採集的生物識別資料與儲存在裝置本地的生物識別資料進行比對,並根據比對結果來驗證使用者身份。 請您注意,統信軟體不會收集或訪問您的生物識別資訊,此類資訊將會儲存在您的本地裝置中。請您僅在您的個人裝置中開啟生物認證功能,並使用您本人的生物識別資訊進行相關操作,並及時在該裝置上停用或清除他人的生物識別資訊,否則由此給您帶來的風險將由您承擔。 統信軟體致力於研究與提高生物認證功能的安全性、精確性、與穩定性,但是,受限於環境、裝置、技術等因素和風險控制等原因,我們暫時無法保證您一定能通過生物認證,請您不要將生物認證作為登入統信作業系統的唯一途徑。若您在使用生物認證時有任何問題或建議的,可以通過系統內的「服務與支援」進行反饋。 AddIrisDialog Enroll Iris 新增虹膜資料 I have read and agree to the 我已閱讀並同意 Disclaimer 《使用者免責宣告》 Next 下一步 Done 完成 Cancel 取消 Retry Enroll 重新錄入 Iris enrolled 虹膜錄入完成 Failed to enroll your iris 虹膜錄入失敗 "Biometric authentication" is a function for user identity authentication provided by UnionTech Software Technology Co., Ltd. Through "biometric authentication", the biometric data collected will be compared with that stored in the device, and the user identity will be verified based on the comparison result. Please be noted that UnionTech Software Technology Co., Ltd. will not collect or access your biometric information, which will be stored on your local device. Please only enable the biometric authentication in your personal device and use your own biometric information for related operations, and promptly disable or delete other people's biometric information on that device, otherwise you will bear the risk arising therefrom. UnionTech Software Technology Co., Ltd. is committed to research and improve the security, accuracy and stability of biometric authentication. However, due to environmental, equipment, technical and other factors and risk control, there is no guarantee that you will pass the biometric authentication temporarily. Therefore, please do not take biometric authentication as the only way to log in to UOS. If you have any questions or suggestions when using the biometric authentication, you can give feedback through "Service and Support" in the UOS. 「生物認證」是統信軟體技術有限公司提供的一種對使用者進行身份認證的功能。通過「生物認證」,將採集的生物識別資料與儲存在裝置本地的生物識別資料進行比對,並根據比對結果來驗證使用者身份。 請您注意,統信軟體不會收集或訪問您的生物識別資訊,此類資訊將會儲存在您的本地裝置中。請您僅在您的個人裝置中開啟生物認證功能,並使用您本人的生物識別資訊進行相關操作,並及時在該裝置上停用或清除他人的生物識別資訊,否則由此給您帶來的風險將由您承擔。 統信軟體致力於研究與提高生物認證功能的安全性、精確性、與穩定性,但是,受限於環境、裝置、技術等因素和風險控制等原因,我們暫時無法保證您一定能通過生物認證,請您不要將生物認證作為登入統信作業系統的唯一途徑。若您在使用生物認證時有任何問題或建議的,可以通過系統內的「服務與支援」進行反饋。 Please keep an eye on the device and ensure that both eyes are within the collection area 請注視裝置,確保雙眼在採集區域內 Authentication Biometric Authentication 生物認證 AuthenticationMain Biometric Authentication 生物認證 Face 人臉 Up to 5 facial data can be entered 最多可錄入5個人臉資料 Fingerprint 指紋 Identifying user identity through scanning fingerprints 通過對指紋的掃描進行使用者身份的識別 Iris 虹膜 Identity recognition through iris scanning 通過掃描虹膜進行身份識別 Use letters, numbers and underscores only, and no more than 15 characters 只能由字母、數字、中文、下劃線組成,且不超過15個字元 Use letters, numbers and underscores only 只能由字母、數字、中文、下劃線組成 No more than 15 characters 不得超過15個字元 This name already exists 該名稱已存在 Add a new %1 ... 新增新的%1... The name cannot be empty 名稱不能為空 AutoLoginWarningDialog "Auto Login" can be enabled for only one account, please disable it for the account "%1" first 只允許一個帳戶開啟自動登入,請先關閉%1帳戶的自動登入,再進行操作 Ok 確 定 AvatarSettingsDialog Images 圖片 Human 人物 Animal 動物 Scenery 靜物 Illustration 創意插圖 Emoji 表情符號 custom 自定義圖片 Cartoon style Q版風格 Dimensional style 立體風格 Flat style 平面風格 Cancel 取消 Save 儲存 BatteryPage Screen and Suspend 螢幕和待機 Turn off the monitor after 關閉顯示器 Lock screen after 自動鎖屏 Computer suspends after 進入待機 When the lid is closed 筆記本合蓋時 When the power button is pressed 按電源按鈕時 Low Battery 低電量管理 Low battery notification 低電量提醒 Auto suspend 自動待機 Auto Hibernate 自動休眠 Low battery threshold 低電量閾值 Battery Management 電池管理 Display remaining using and charging time 顯示剩餘使用時間及剩餘充電時間 Maximum capacity 最大容量 Low battery level 低電量時 Disable 從不 BlueTooth Bluetooth settings, devices 藍牙設定、裝置管理 Bluetooth 藍牙 BlueToothAdaptersModel Bluetooth is turned off, and the name is displayed as "%1" 藍牙已關閉,名稱顯示為"%1" Bluetooth is turned on, and the name is displayed as "%1" 藍牙已打開,名稱顯示為 "%1" BlueToothDeviceListView Disconnect 斷開連線 Connect 連線 Send Files 傳送檔案 Rename 重新命名 Remove Device 移除裝置 Select file 選擇檔案 BluetoothCtl Edit 修改 Allow other Bluetooth devices to find this device 允許其他藍牙裝置找到該裝置 To use the Bluetooth function, please turn off 如需使用藍牙功能,請關閉 Airplane Mode 飛航模式 Bluetooth name cannot exceed 64 characters 藍牙名稱不能超過64個字元 BluetoothDeviceModel Connected 已連線 Not connected 未連線 BootPage Startup Settings 啟動設定 You can click the menu to change the default startup items, or drag the image to the window to change the background image. 您可以點選菜單改變預設啟動項,也可以拖拽圖片到視窗改變背景圖片. grub start delay 啟動延時 theme 主題 After turning on the theme, you can see the theme background when you turn on the computer 開啟主題後您可以在開機時看到主題背景 Boot menu verification 啟動菜單驗證 After opening, entering the menu editing requires a password. 開啟後進入啟動菜單編輯需要密碼. Change Password 修改密碼 Change boot menu verification password 修改啟動菜單驗證密碼 Set the boot menu authentication password 設定啟動菜單驗證密碼 User Name : 使用者名稱: root root New Password : 新密碼: Required 必填 Password cannot be empty 密碼不能為空 Passwords do not match 密碼不一致 Repeat password: 確認密碼: Cancel 取消 Sure 確定 Start animation 啟動動畫 Adjust the size of the logo animation on the system startup interface 調整系統啟動介面的logo動畫尺寸大小 Camera Allow below apps to access your camera: 允許下麵的應用訪問您的攝像頭 CharaMangerModel Fingerprint1 指紋1 Fingerprint2 指紋2 Fingerprint3 指紋3 Fingerprint4 指紋4 Fingerprint5 指紋5 Fingerprint6 指紋6 Fingerprint7 指紋7 Fingerprint8 指紋8 Fingerprint9 指紋9 Fingerprint10 指紋10 Scan failed 指紋錄入失敗 The fingerprint already exists 指紋已存在 Please scan other fingers 請使用其他手指錄入 Unknown error 未知錯誤 Scan suspended 指紋錄入被中斷 Cannot recognize 無法識別 Moved too fast 接觸時間短 Finger moved too fast, please do not lift until prompted 接觸時間短,驗證時請勿移動手指 Unclear fingerprint 影像模糊 Clean your finger or adjust the finger position, and try again 請清潔手指或調整觸控位置,再次按壓指紋識別器 Already scanned 影像重複 Adjust the finger position to scan your fingerprint fully 請調整手指按壓區域以錄入更多指紋 Finger moved too fast. Please do not lift until prompted 指紋採集間隙,請勿移動手指,直到提示您擡起 Lift your finger and place it on the sensor again 請擡起手指,再次按壓 Position your face inside the frame 請確保您的面部全部顯示在識別區域內 Face enrolled 人臉錄入完成 Position a human face please 請使用人類面容 Keep away from the camera 請遠離鏡頭 Get closer to the camera 請靠近鏡頭 Do not position multiple faces inside the frame 請不要多人入鏡 Make sure the camera lens is clean 請確保鏡頭清潔 Do not enroll in dark, bright or backlit environments 請避免在暗光、強光、逆光環境下操作 Keep your face uncovered 請保持面部無遮擋 Scan timed out 錄入超時 Cancel 取消 Camera occupied! 攝像頭被佔用! ColorAndIcons Accent Color 活動用色 Icon Settings 圖示設定 Icon Theme 圖示主題 Customize your theme icon 自定義您的主題圖示 Cursor Theme 游標主題 Customize your theme cursor 自定義您的主題游標 ComfirmDeleteDialog Are you sure you want to delete this account? 您確定要刪除此帳戶嗎? Delete account directory 刪除帳戶目錄 Cancel 取消 Delete 刪除 ComfirmSafePage Go to settings 去設定 Cancel 取消 Common Common 通用 Repeat delay 重複延遲 Short Long Repeat rate 重複速度 Slow Fast Numeric Keypad 啟用數字鍵盤 test here 請在此輸入測試 Caps lock prompt 大寫鎖定提示 Double Click Speed 雙擊速度 Double Click Test 雙擊測試 Left Hand Mode 左手模式 Enable Keyboard 鍵盤 General 通用 Scrolling Speed 滾動速度 CommonInfoMain Boot Menu 啟動菜單 Manage your boot menu 管理您的開機啟動菜單 Developer root permission management 開發者Root許可權管理 Developer Options 開發者選項 Developer debugging options 開發者除錯選項 CommonInfoWork Large size 大尺寸 Small size 小尺寸 Failed to get root access 進入開發者模式失敗 Please sign in to your Union ID first 請先登入Union ID Cannot read your PC information 無法獲取硬體資訊 No network connection 無網路連線 Certificate loading failed, unable to get root access 證書載入失敗,無法進入開發者模式 Signature verification failed, unable to get root access 簽名驗證失敗,無法進入開發者模式 Agree and Join User Experience Program 同意並加入使用者體驗計劃 The Disclaimer of Developer Mode 開發者模式免責宣告 Agree and Request Root Access 同意並進入開發者模式 Start setting the new boot animation, please wait for a minute 開始設定啟動新動畫,請稍等一會兒 Setting new boot animation finished 新的啟動動畫設定完成 The settings will be applied after rebooting the system 新的設定會在重啟系統後生效 Restart now 立即重啟 Dismiss 忽略 Restart device to finish applying Solid System Read-Only Protection settings 磐石只讀保護設定需重啟後纔能生效 ConfirmManager Password must contain numbers and letters 密碼必須包含數字和字母 Password must be between 8 and 64 characters 密碼長度必須為8~64個字元 CreateAccountDialog Create a new account 建立新使用者 Account type 帳戶型別 UserName 使用者名稱 Required 必填 FullName 全名 Optional 選填 Cancel 取消 Create account 建立使用者 Username cannot exceed 32 characters 使用者名稱不能超過 32 個字元 Username can only contain letters, numbers, - and _ 使用者名稱只能包含字母、數字、 - 和 _ Full name cannot exceed 32 characters 全名不能超過 32 個字元 Full name cannot contain colons 全名不能包含冒號 CustomAvatarCropper small big CustomAvatarEmpatyArea You haven't uploaded an avatar yet. Click or drag and drop to upload an image. 您還沒有上傳過頭像,可點選或拖拽上傳圖片 The uploaded file type is incorrect, please upload it again 上傳的檔案型別不正確,請重新上傳 DCC_NAMESPACE::SystemInfoModel available 可用 DCC_NAMESPACE::SystemInfoWork https://www.deepin.org/en/agreement/privacy/ https://www.deepin.org/zh/agreement/privacy/ https://www.uniontech.com/agreement/privacy-en https://www.uniontech.com/agreement/privacy-tw https://www.uniontech.com/agreement/experience-en https://www.uniontech.com/agreement/experience-tw Agree and Join User Experience Program 同意並加入使用者體驗計劃 <p>We are deeply aware of the importance of your personal information to you. So we have the Privacy Policy that covers how we collect, use, share, transfer, publicly disclose, and store your information.</p><p>You can <a href="%1">click here</a> to view our latest privacy policy and/or view it online by visiting <a href="%1"> %1</a>. Please read carefully and fully understand our practices on customer privacy. If you have any questions, please contact us at: %2.</p> <p>統信軟體非常重視您的隱私。因此我們制定了涵蓋如何收集、使用、共享、轉讓、公開披露以及儲存您的資訊的隱私政策。</p><p>您可以<a href="%1">點選此處</a> 檢視我們最新的隱私政策和/或通過訪問<a href="%1"> %1</a>線上檢視。請您務必認真閱讀、充分理解我們針對客戶隱私的做法,如果有任何疑問,請聯絡我們:%2。</p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, do not join User Experience Program. For details, please refer to Deepin Privacy Policy (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">開啟使用者體驗計劃視為您授權我們收集和使用您的裝置及系統資訊,以及應用軟體資訊,您可以關閉使用者體驗計劃以拒絕我們對前述資訊的收集和使用。詳細說明請參照Deepin隱私政策 (</span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">).</span></p> <p><span style="color:%2;">Joining User Experience Program means that you grant and authorize us to collect and use the information of your device, system and applications. If you refuse our collection and use of the aforementioned information, please do not join it. For the details of User Experience Program, please visit </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> <p><span style="color:%2;">開啟使用者體驗計劃視為您授權我們收集和使用您的裝置及系統資訊,以及應用軟體資訊,您可以關閉使用者體驗計劃以拒絕我們對前述資訊的收集和使用。瞭解使用者體驗計劃,請訪問: </span><a href="%1" style="text-decoration: none;">%1</a><span style="color:%2;">.</span></p> DateTimeSettingDialog Date and time setting 日期和時間設定 Date 日期 Year Month Day Time 時間 Cancel 取消 Confirm 確認 Datetime Time and date 時間和日期 Time and date, time zone settings 時間日期、時區設定 DatetimeMain Language and region 語言和區域 System language, regional formats 系統語言、區域格式 DatetimeModel Tomorrow 明天 Yesterday 昨天 Today 今天 %1 hours earlier than local 早 %1 小時 %1 hours later than local 晚 %1 小時 Space 空格 Week 星期/周 First day of week 一週首日 Short date 短日期 Long date 長日期 Short time 短時間 Long time 長時間 Currency symbol 貨幣符號 Positive currency 貨幣正數 Negative currency 貨幣負數 Decimal symbol 小數點 Digit grouping symbol 分隔符 Digit grouping 數字分組 Page size 紙張 Example 範例 DatetimeWorker Authentication is required to change NTP server 修改時間伺服器需要認證 Authentication is required to set the system timezone 設定系統時區需要認證 DccColorDialog Cancel 取消 Save 儲存 DccWindow Control Center provides the options for system settings. 控制中心提供作業系統的所有設定選項。 DeepinIDAccountSecurity Bind WeChat 繫結微信 By binding WeChat, you can securely and quickly log in to your %1 ID and local accounts. 通過繫結微信,您可以安全快速地登入您的%1 ID和本地帳戶 Unlinked 未繫結 Unbinding 解 綁 Link 去繫結 Are you sure you want to unbind WeChat? 您確定要解綁微信嗎? After unbinding WeChat, you will not be able to use WeChat to scan the QR code to log in to %1 ID or local account. 解綁微信後,您將無法使用微信掃碼登入%1 ID、微信掃碼登入本地帳戶 Let me think it over 我再想想 Local Account Binding 繫結本地帳戶 After binding your local account, you can use the following functions: 繫結本地帳戶後,您可以使用如下功能: WeChat Scan Code Login System 微信掃碼登入系統 Use WeChat, which is bound to your %1 ID, to scan code to log in to your local account. 使用%1 ID繫結的微信,掃碼登入本地帳戶 Reset password via %1 ID 通過%1 ID重置密碼 Reset your local password via %1 ID in case you forget it. 在您忘記本地帳戶密碼時,通過%1 ID重置密碼 To use the above features, please go to Control Center - Accounts and turn on the corresponding options. 如需使用上述功能,請前往控制中心-帳戶,開啟相應選項 DeepinIDInterface deepin deepin UOS UOS DeepinIDLogin Cloud Sync 雲同步 Manage your %1 ID and sync your personal data across devices. Sign in to %1 ID to get personalized features and services of Browser, App Store, and more. 管理您的%1 ID,將您的個人資料在不同裝置之間同步。 登入%1 ID以獲取瀏覽器、應用商店、服務與支援等眾多應用的個性功能和服務。 Sign In to %1 ID 登入%1 ID DeepinIDSyncService Auto Sync 自動同步 Securely store system settings and personal data in the cloud, and keep them in sync across devices 將您的系統設定和個人資訊安全地儲存在雲端,並在您不同的裝置上保持同步 System Settings 系統設定 Last sync time: %1 最近同步時間:%1 Clear cloud data 清除雲端資料 Are you sure you want to clear your system settings and personal data saved in the cloud? 確定要清除您儲存在雲端的系統設定和個人資料嗎? Once the data is cleared, it cannot be recovered! 資料清除後將無法恢復! Cancel 取 消 Clear 清 除 DeepinIDUserInfo Synchronization Service 同步服務 Account and Security 帳戶與安全 Sign out 退出登入 Go to web settings 前往網頁設定 The nickname must be 1~32 characters long 暱稱長度必須為1~32個字元 DeepinWorker encrypt password failed 加密密碼失敗 Wrong password, %1 chances left 密碼錯誤,您還可以嘗試%1次 The login error has reached the limit today. You can reset the password and try again. 密碼錯誤已達今日上限,可重置密碼再試 Operation Successful 操作成功 The nickname can be modified only once a day 暱稱每天僅可修改一次 Deepinid deepin ID deepin ID UOS ID UOS ID Cloud services 雲服務 DeepinidModel Mainland China 中國大陸 Other regions 其他地區 The feature is not available at present, please activate your system first 當前系統未啟用,暫無法使用該功能 Subject to your local laws and regulations, it is currently unavailable in your region. 受限於您當地的法律法規,同步服務暫未覆蓋您所在地區,敬請期待。 Defaultapp Default App 預設程式 Set the default application for opening various types of files 設定打開各類檔案的預設程式 DefaultappMain Webpage 網頁 Mail 郵件 Text 文字 Music 音樂 Video 影片 Picture 圖片 Terminal 終端 DetailItem Please choose the default program to open '%1' 選擇打開「%1」的預設程式 add 新增 Open Desktop file 打開Desktop檔案 Apps (*.desktop) 應用程式(*.desktop) All files (*) 所有檔案(*) DevelopModePage Root Access 開發者模式 Request Root Access 進入開發者模式 After entering the developer mode, you can obtain root permissions, but it may also damage the system integrity, so please use it with caution. 可獲得root使用許可權,但同時也可能導致系統完教性遭到破壞,請謹慎使用。 Allowed 已進入 Enter 進入 Online 線上啟用 Login UOS ID 登入UOS ID Offline 離線啟用 Import Certificate 匯入證書 Select file 選擇檔案 Your UOS ID has been logged in, click to enter developer mode 您的UOS ID已登入,點選進入開發者模式 Please sign in to your UOS ID first and continue 進入開發者模式需要登入UOS ID 1.Export PC Info 1.匯出機器資訊 Export 匯出 3.Import Certificate 3.匯入證書 Development and debugging options 開發除錯選項 System logging level 系統日誌記錄級別 Changing the options results in more detailed logging that may degrade system performance and/or take up more storage space. 更改此選項可以獲得更詳細的日誌記錄,這些日誌可能會降低系統性能和/或佔用更多儲存空間. Off 關閉 Debug 除錯 Changing the option may take up to a minute to process, after receiving a successful setting prompt, please reboot the device to take effect. 更改選項處理可能需要一分鐘,收到設定成功提示後,請重啟裝置方可生效。 To install and run unsigned apps, please go to <a style='text-decoration: none;' href='Security Center'> Security Center </a> to change the settings. 如需安裝非應用商店來源的應用,前往<a style='text-decoration: none;' href='Security Center'> 安全中心 </a>進行設定。 To install and run unsigned apps, please go to Security Center to change the settings. 如需安裝非應用商店來源的應用,前往安全中心進行設定。 You have entered developer mode 您已進入開發者模式 OK 確定 2.please go to %1 to Download offline certificate. 2.前往%1下載離線證書. The feature is not available at present, please activate your system first. 當前系統未啟用,暫無法使用該功能。 Solid System Read-Only Protection 磐石只讀保護 Disabling protection unlocks system directories,This action carries a high risk of system damage. 關閉保護會解鎖系統目錄,可能導致系統損壞的高風險。 Enable protection to lock system directories and ensure optimal stability. 開啟保護以鎖定系統目錄,確保最佳穩定性。 Device Bluetooth and Devices 藍牙和其他裝置 DisclaimerControl Disclaimer 《使用者免責宣告》 Cancel 取消 Agree 同意 Display Display 顯示 Brightness,resolution,scaling 亮度、解析度、縮放 DisplayMain 100% 100% 125% 125% 150% 150% 175% 175% 200% 200% 225% 225% 250% 250% 275% 275% 300% 300% Duplicate 複製 Extend 擴展 Default 預設 Fit 適應 Stretch 拉伸 Center 居中 Only on %1 僅%1屏 Multiple Displays Settings 多屏設定 Identify 識別 Screen rearrangement will take effect in %1s after changes 螢幕拼接將在修改完成%1s後生效 Mode 模式 Main Screen 主螢幕 Display And Layout 顯示和佈局 Brightness 亮度 Resolution 解析度 Resize Desktop 桌面顯示 Refresh Rate 重新整理率 Rotation 方向 Standard 標準 90° 90度 180° 180度 270° 270度 The monitor only supports 100% display scaling 當前螢幕僅支援1倍縮放 Eye Comfort 護眼模式 Enable eye comfort 開啟護眼模式 Adjust screen display to warmer colors, reducing screen blue light 調整螢幕顯示較暖的顏色,減少螢幕藍光 Time 時間 All day 全天 Sunset to Sunrise 日落到日出 Custom Time 自定義 from to Color Temperature 色溫 %1x%2 (Recommended) %1x%2 (推薦) %1x%2 %1x%2 %1Hz (Recommended) %1赫茲 (推薦) %1Hz %1赫茲 Scaling 縮放 Dock Desktop and taskbar 桌面和工作列 Desktop organization, taskbar mode, plugin area settings 桌面整理、工作列模式、外掛區域設定 DockMain Dock 工作列 Mode 模式 Classic Mode 經典模式 Centered Mode 居中模式 Dock size 工作列大小 Small Large Position on the screen 螢幕中的位置 Top Bottom Left Right Status 狀態 Keep shown 一直顯示 Keep hidden 一直隱藏 Smart hide 智慧隱藏 Multiple Displays 多屏顯示 Set the position of the taskbar on the screen 設定工作列在螢幕中的位置 Only on main 僅主屏顯示 On screen where the cursor is 跟隨滑鼠位置顯示 Plugin Area 外掛區域 Select which icons appear in the Dock 選擇顯示在工作列外掛區域的圖示 Lock the Dock 停用自由調節 Combine application icons 合併應用圖標 FileAndFolder Allow below apps to access these files and folders: 允許下麵的應用訪問您的檔案和資料夾 Documents 文件 Desktop 桌面 Pictures 圖片 Videos 影片 Music 音樂 Downloads 下載 folder 資料夾 FontSizePage Size 字號 Standard Font 標準字型 Monospaced Font 等寬字型 GeneralPage Power Plans 效能模式 Power Saving Settings 節能設定 Auto power saving on low battery 低電量時自動開啟節能模式 Low battery threshold 低電量閾值 Auto power saving on battery 使用電池時自動開啟節能模式 Wakeup Settings 喚醒設定 Password is required to wake up the computer 待機恢復時需要密碼 Password is required to wake up the monitor 喚醒顯示器時需要密碼 Shutdown Settings 關機設定 Scheduled Shutdown 定時關機 Time 時間 Repeat 重複 Once 一次 Every day 每天 Working days 工作日 Custom Time 自定義 Decrease screen brightness on power saver 節能模式時降低螢幕亮度 GestureModel Three-finger up 三指向上 Three-finger down 三指向下 Three-finger left 三指向左 Three-finger right 三指向右 Three-finger tap 三指點選 Four-finger up 四指向上 Four-finger down 四指向下 Four-finger left 四指向左 Four-finger right 四指向右 Four-finger tap 四指點選 HomePage , ... InterfaceEffectListview Optimal Performance 最佳效能 Balance 均衡 Best Visuals 最佳視覺 Disable all interface and window effects for efficient system performance. 關閉所有介面和視窗特效,保障系統高效執行 Limit some window effects for excellent visuals while maintaining smooth system performance. 限制部分視窗特效,保障出色的視覺效果,同時維持系統流暢執行 Enable all interface and window effects for the best visual experience. 啟用所有介面和視窗特效,體驗最佳視覺效果 Keyboard Keyboard 鍵盤 General Settings, input method, shortcuts 通用設定、輸入法、快捷鍵 KeyboardMain Common 通用 LangAndFormat Language 語言 done 完成 edit 編輯 Other languages 其他語言 add 新增 Region 區域 Area 地區 Operating system and applications may provide you with local content based on your country and region 作業系統和應用可能會根據你所在的國家和地區向你提供本地內容 Operating system and applications may set date and time formats based on regional formats 作業系統和某些應用會根據區域格式設定日期和時間格式 Regional format 區域格式 LangsChooserDialog Add language 新增語言 Search 搜尋 Cancel 取消 Add 新增 LoginMethod Login method 登入方式 Password, wechat, biometric authentication, security key 密碼,微信掃碼,生物認證,安全金鑰 Password 密碼 Modify password 修改密碼 Validity days 有效天數 Always 長期有效 Reset password 重置密碼 LogoModule Copyright© 2011-%1 Deepin Community Copyright © 2011-%1 深度社區 Copyright© 2019-%1 UnionTech Software Technology Co., LTD Copyright © 2019-%1 統信軟體技術有限公司 MicrophonePage Automatic Noise Suppression 噪音抑制 Input Volume 輸入音量 Input Level 反饋音量 Input 輸入 No input device for sound found 沒有找到聲音輸入裝置 Input Device 輸入裝置 Mouse Mouse and Touchpad 滑鼠與觸控板 Common、Mouse、Touchpad 通用、滑鼠、觸控板 MouseMain Common 通用 Mouse 滑鼠 Touchpad 觸控板 MousePage Mouse 滑鼠 Pointer Speed 指標速度 Slow Fast Pointer Size 指標大小 Mouse Acceleration 滑鼠加速 Disable touchpad when a mouse is connected 插入滑鼠時停用觸控板 Natural Scrolling 自然滾動 Small Medium Large X-Large 極大 Some apps require logout or system restart to take effect 部分應用需登出或重啟系統後生效 MyDevice My Devices 我的裝置 NativeInfoPage UOS UOS Computer name 計算機名 It cannot start or end with dashes 計算機名不能以 - 開頭結尾 OS Name 產品名稱 Version 版本號 Edition 版本 Type 型別 bit Authorization 版本授權 System installation time 系統安裝日期 Kernel 核心版本 Graphics Platform 圖形平臺 Processor 處理器 Memory 記憶體 1~63 characters please 計算機名長度必須介於1到63個字元之間 Notification DND mode, app notifications 勿擾模式、應用通知 Notification 通知 NotificationMain Do Not Disturb Settings 勿擾設定 App notifications will not be shown on desktop and the sounds will be silenced, but you can view all messages in the notification center. 所有應用消息橫幅將會被隱藏,通知聲音將會靜音,您可在通知中心檢視所有消息。 Enable Do Not Disturb 啟用勿擾模式 When the screen is locked 在螢幕鎖屏時 Number of notifications shown on the desktop 通知橫幅展示數量 App Notifications 應用通知 Allow Notifications 允許通知 Display notification on desktop or show unread messages in the notification center 可以顯示通知橫幅,或在通知中心顯示未讀消息 Desktop 桌面 Lock Screen 鎖屏 Notification Center 通知中心 Show message preview 顯示消息預覽 Play a sound 通知時提示聲音 OtherDevice Other Devices 其他裝置 Show Bluetooth devices without names 顯示沒有名稱的藍牙裝置 PasswordLayout Current password 當前密碼 Required 必填 Weak 強度低 Medium 強度中 Strong 強度高 Repeat Password 重複密碼 Password hint 密碼提示 Optional 選填 Password cannot be empty 密碼不能為空 Passwords do not match 密碼不一致 The hint is visible to all users. Do not include the password here. 密碼提示對所有人可見,切勿包含具體密碼資訊 New password 新密碼 New password should differ from the current one 新的密碼必須不同於目前密碼 The password cannot be the same as the username. 密碼不能與使用者名稱一致。 PasswordModifyDialog Modify password 修改密碼 Reset password 重置密碼 Password length should be at least 8 characters, and the password should contain a combination of at least 3 of the following: uppercase letters, lowercase letters, numbers, and symbols. This type of password is more secure. 建議密碼長度8位以上,同時包含大寫字母、小寫字母、數字、符號中的3種密碼更安全 Resetting the password will clear the data stored in the keyring. 重設密碼將會清除金鑰環內已儲存的資料 Cancel 取消 Personalization Personalization 個性化 PersonalizationInterface Light 淺色 Auto 自動 Dark 深色 Picker service is not available Invalid color format: %1 PersonalizationMain Theme 主題 Appearance 外觀 Window effect 視窗效果 Personalize your wallpaper and screensaver 個性化您的壁紙和屏保 Screensaver 螢幕保護 Colors and icons 顏色和圖示 Adjust accent color and theme icons 調整活動色和主題圖示 Font and font size 字型和字號 Change system font and size 修改系統字型與字號 Wallpaper 壁紙 Select light, dark or automatic theme appearance 選擇淺色、深色或自動切換主題外觀 Interface and effects, rounded corners 介面和效果、視窗圓角 PersonalizationWorker Custom 自定義 PluginArea Plugin Area 外掛區域 Select which icons appear in the Dock 選擇顯示在工作列外掛區域的圖示 Power Power saving settings, screen and suspend 節能設定、螢幕和待機管理 Power 電源管理 PowerMain General 通用 Power plans, power saving settings, wakeup settings, shutdown settings 效能模式、節能設定、喚醒設定、關機設定 Plugged In 使用電源 Screen and suspend 螢幕和待機管理 On Battery 使用電池 screen and suspend, low battery, battery management 螢幕和待機管理、低電量管理、電池管理 PowerOperatorModel Shut down 關機 Suspend 待機 Hibernate 休眠 Turn off the monitor 關閉顯示器 Show the shutdown Interface 進入關機介面 Do nothing 無任何操作 PowerPage Screen and Suspend 螢幕和待機 Turn off the monitor after 關閉顯示器 Lock screen after 自動鎖屏 Computer suspends after 進入待機 When the lid is closed 筆記本合蓋時 When the power button is pressed 按電源按鈕時 PowerPlansListview High Performance 高效能模式 Balance Performance 效能模式 Aggressively adjust CPU operating frequency based on CPU load condition 根據負載情況積極調整執行頻率 Balanced 平衡模式 Power Saver 節能模式 Prioritize performance, which will significantly increase power consumption and heat generation 效能優先,會顯著提升功耗和發熱 Balancing performance and battery life, automatically adjusted according to usage 兼顧效能和續航,根據使用情況自動調節 Prioritize battery life, which the system will sacrifice some performance to reduce power consumption 續航優先,系統會犧牲一些效能表現來降低功耗 PowerWorker Minutes 分鐘 Hour 小時 Never 從不 Privacy Privacy and Security 隱私和安全 Camera, folder permissions 攝像頭、資料夾許可權 PrivacyMain Camera 攝像頭 Choose whether the application has access to the camera 選擇應用是否有攝像頭的訪問許可權 Files and Folders 檔案和資料夾 Choose whether the application has access to files and folders 選擇應用是否有檔案和資料夾的訪問許可權 PrivacyPolicyPage Privacy Policy 隱私政策 Copy Link Address 複製連結地址 PwqualityManager Password cannot be empty 密碼不能為空 Password must have at least %1 characters 密碼長度不能少於%1個字元 Password must be no more than %1 characters 密碼長度不能超過%1個字元 Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密碼只能由英文(區分大小寫)、數字或特殊符號(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)組成 No more than %1 palindrome characters please 迴文字元長度不超過%1位 No more than %1 monotonic characters please 單調性字元不超過%1位 No more than %1 repeating characters please 重複字元不超過%1位 Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密碼必須由大寫字母、小寫字母、數字、符號(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)三種類型組成 Password must not contain more than 4 palindrome characters 密碼不得含有連續4個以上的迴文字元 Do not use common words and combinations as password 密碼不能是常見單詞及組合 Create a strong password please 密碼過於簡單,請增加密碼複雜度 It does not meet password rules 密碼不符合安全要求 QObject Control Center 控制中心 Activated 已啟用 View 檢視 To be activated 待啟用 Activate 啟用 Expired 已過期 In trial period 試用期 Trial expired 試用期過期 dde-control-center 控制中心 Touch Screen Settings 觸控屏設定 The settings of touch screen changed 已變更觸控屏設定 This system wallpaper is locked. Please contact your admin. 當前系統壁紙已被鎖定,請聯絡管理員 %1 (%2) Language and region name, e.g. Chinese (China) %1 (%2) RegionFormatDialog Search 搜尋 Default formats 預設格式 First day of week 一週第一天 Short date 短日期 Long date 長日期 Short time 短時間 Long time 長時間 Currency symbol 貨幣符號 Digit 數字 Paper size 紙張 Cancel 取消 Save 儲存 Regional format 區域格式 RegionsChooserWindow Search 搜尋 RegisterDialog Set a Password 設定密碼 8-64 characters 請輸入8-64位密碼 Repeat the password 請再次輸入密碼 Cancel 取消 Confirm 確定 Passwords don't match 兩次密碼輸入不一致 ScheduledShutdownDialog Customize repetition time 自定義重複時間 Cancel 取消 Save 儲存 ScreenSaverPage Screensaver 螢幕保護 preview 全屏預覽 Personalized screensaver 個性化屏保 setting 設定 idle time 閒置時間 1 minute 1分鐘 5 minute 5分鐘 10 minute 10分鐘 15 minute 15分鐘 30 minute 30分鐘 1 hour 1小時 never 從不 Password required for recovery 恢復時需要密碼 Picture slideshow screensaver 圖片輪播屏保 System screensaver 系統屏保 SearchableListViewPopup Search 搜尋 No search results 無搜尋結果 ShortcutSettingDialog Add custom shortcut 新增自定義快捷鍵 Name: 名稱: Required 必填 Command: 命令: Shortcut 快捷鍵 None Cancel 取消 Add 新增 The shortcut name is already in use. Choose a different name. 快捷鍵名稱已被佔用,請修改名稱。 Change custom shortcut 修改自定義快捷鍵 please enter a shortcut key 請輸入快捷鍵 Save 儲存 click Save to make this shortcut key effective 點選儲存使這個快捷鍵生效 click Add to make this shortcut key effective 點選新增使這個快捷鍵生效 Shortcuts Shortcuts 快捷鍵 System shortcut, custom shortcut 系統快捷鍵、自定義快捷鍵 Search shortcuts 搜尋快捷鍵 done 完成 edit 編輯 Click 點選 Cancel 取消 or Replace 替換 Restore default 恢復預設 Add custom shortcut 新增快捷鍵 please enter a new shortcut key 請輸入新的快捷鍵 Sound Sound 聲音 Output, input, sound effects, devices 輸入、輸出、系統音效、裝置管理 SoundDevicemanagesPage Output Devices 輸出裝置 Select whether to enable the devices 選擇是否啟用裝置 Input Devices 輸入裝置 SoundEffectsPage Sound Effects 系統音效 SoundMain Settings 設定 Sound Effects 系統音效 Enable/disable sound effects 開啟/關閉系統音效 Enable/disable audio devices 啟用/停用音訊裝置 Devices Management 裝置管理 SoundModel Boot up 開機 Shut down 關機 Log out 登出 Wake up 喚醒 Volume +/- 音量調節 Notification 通知 Low battery 電量不足 Send icon in Launcher to Desktop 從啟動器傳送圖示到桌面 Empty Trash 清空回收站 Plug in 電源接入 Plug out 電源拔出 Removable device connected 行動裝置接入 Removable device removed 行動裝置拔出 Error 錯誤提示 SpeakerPage Mode 模式 Output Volume 輸出音量 Volume Boost 音量增強 If the volume is louder than 100%, it may distort audio and be harmful to output devices 音量大於100%時可能會導致音效失真,同時損害您的音訊輸出裝置 Left Right Output 輸出 No output device for sound found 沒有找到聲音輸出裝置 Left Right Balance 左右平衡 Merge left and right channels into a single channel 將左聲道和右聲道合併成一個聲道 Whether the audio will be automatically paused when the current audio device is unplugged 外設插拔時音訊輸出是否自動暫停 Mono Audio 單聲道音訊 Auto Pause 插拔管理 Output Device 輸出裝置 SyncInfoListModel Sound 聲音 Power 電源 Mouse 滑鼠 Update 更新 Screensaver 螢幕保護 System Common settings 常用設定 System 系統 SystemInfo Auxiliary Information 輔助資訊 SystemInfoMain About This PC 關於本機 System version, device information 系統版本、裝置資訊 View the notice of open source software 檢視開源軟體宣告 User Experience Program 使用者體驗計劃 Join the user experience program to help improve the product 加入使用者體驗計劃,幫助改進產品 End User License Agreement 使用者許可協議 View the end user license agreement 檢視終端使用者許可協議 Privacy Policy 隱私政策 View information about privacy policy 檢視隱私政策相關資訊 Open Source Software Notice 開源軟體宣告 ThemeSelectView More Wallpapers 下載更多 TimeAndDate Auto sync time 自動同步配置 Ntp server 伺服器 System date and time 系統日期和時間 Customize 自定義 Settings 設定 Server address 伺服器地址 Required 必填 The ntp server address cannot be empty 時間伺服器地址不能為空 Use 24-hour format 24小時制 system time zone 系統時區 Timezone list 時區列表 Add 新增 TimeRange from to TimeoutDialog Save the display settings? 是否要儲存顯示設定? Settings will be reverted in %1s. 如無任何操作將在%1秒後還原。 Revert 還原 Save 儲存 TimezoneDialog Add time zone Determine the time zone based on the current location Time zone: Nearest City: Cancel 取消 Save 儲存 TouchScreen TouchScreen 觸控屏 Set up here when connecting the touch screen 連線觸控螢幕時在此處設定 Touchpad Basic Settings 基礎設定 Touchpad 觸控板 Pointer Speed 指標速度 Slow Fast Disable touchpad during input 輸入時停用觸控板 Tap to Click 輕觸以點選 Natural Scrolling 自然滾動 Three-finger gestures 三指手勢 Four-finger gestures 四指手勢 Gestures 手勢 Touchscreen Touchscreen 觸控屏 Configuring Touchscreen 觸控屏設定 TouchscreenMain Common 通用 UserExperienceProgramPage Join User Experience Program 加入使用者體驗計劃 Copy Link Address 複製連結地址 VerifyDialog Security Verification 安全驗證 The action is sensitive, please enter the login password first 您正在進行敏感操作,請進行登入密碼認證 8-64 characters 請輸入8-64位密碼 Forgot Password? 忘記密碼? Cancel 取消 Confirm 確定 Wacom wacom 數位板 Configuring wacom 數位板選項設定 WacomMain wacom 數位板 Pen Mode 筆模式 Mouse Mode 滑鼠模式 Pressure Sensitivity 壓桿力度 Light Heavy Model 模式 WallpaperPage wallpaper 壁紙 My pictures 我的圖片 System Wallpaper 系統壁紙 Solid color wallpaper 純色壁紙 Customizable wallpapers 自定義 fill style 填充方式 Automatic wallpaper change 自動切換壁紙 never 從不 30 second 30秒 1 minute 1分鐘 5 minute 5分鐘 10 minute 10分鐘 15 minute 15分鐘 30 minute 30分鐘 login 登入時 wake up 喚醒時 Live Wallpaper 動態壁紙 1 hour 1小時 System Wallpapers 系統壁紙 WallpaperSelectView unfold 收起 Set lock screen 設定鎖屏 Set desktop 設定桌面 show all - %1 items 顯示全部-%1張 Add Picture 新增圖片 WindowEffectPage Interface and Effects 介面效果 Window Settings 視窗設定 Window rounded corners 視窗圓角 None Small Large Enable transparent effects when moving windows 視窗移動時啟用透明特效 Window Minimize Effect 最小化時效果 Scale 縮放 Magic Lamp 魔燈 Opacity 不透明度調節 Low High Scroll Bars 捲軸 Show on scrolling 滾動時顯示 Keep shown 一直顯示 Compact Display 緊湊模式 If enabled, more content is displayed in the window. 開啟後,視窗將顯示更多內容 Title Bar Height 標題欄高度 Only suitable for application window title bars drawn by the window manager. 僅適用於視窗管理器繪製的應用標題欄 Extremely small 極小 Medium describe size of window rounded corners Medium describe height of window title bar dcc::Locale::dialectNames Traditional Chinese (Chinese Hong Kong) 繁體中文(中國香港) Traditional Chinese (Chinese Taiwan) 繁體中文(中國台灣) Min Nan Chinese 閩南語 dcc::Locale::regionNames Taiwan China 中國臺灣 dccV25::AccountsController Username must be between 3 and 32 characters 使用者名稱長度必須介於 3 到 32 個字元之間 The first character must be a letter or number 必須字母或者數字開頭 Your username should not only have numbers 使用者名稱不能僅僅是數字 The username has been used by other user accounts 使用者名稱和其他使用者名稱重複 The full name is too long 全名太長了 The full name has been used by other user accounts 全名和其他使用者名稱重複 Wrong password 密碼錯誤 Standard User 標準使用者 Administrator 管理員 Customized 自定義 dccV25::AccountsWorker Your host was removed from the domain server successfully 您的主機成功退出了域伺服器 Your host joins the domain server successfully 您的主機成功加入了域伺服器 Your host failed to leave the domain server 您的主機退出域伺服器失敗 Your host failed to join the domain server 您的主機加入域伺服器失敗 AD domain settings AD域設定 Password not match 密碼不一致 dccV25::AvatarTypesModel Dimensional 立體風格 Flat 平面風格 dccV25::FaceAuthController Faceprint 麵紋 Face 人臉 Use your face to unlock the device and make settings later 使用人臉資料解鎖您的裝置,之後還可進行更多設定 dccV25::FingerprintAuthController Fingerprint 指紋 Place your finger 放置手指 Place your finger firmly on the sensor until you're asked to lift it 請以手指壓指紋收集器,然後根據提示擡起 Lift your finger 擡起手指 Lift your finger and place it on the sensor again 請擡起手指,再次按壓 Lift your finger and do that again 請擡起手指,再次按壓 Scan Suspended 錄入中斷 Scan the edges of your fingerprint 錄入邊緣指紋 Place the edges of your fingerprint on the sensor 請以手指邊緣壓指紋收集器,然後根據提示擡起 Adjust the position to scan the edges of your fingerprint 請調整按壓區域,繼續錄入邊緣指紋 Fingerprint added 成功新增指紋 dccV25::IrisAuthController Iris 虹膜 Use your iris to unlock the device and make settings later 使用虹膜資料解鎖您的裝置,之後還可進行更多設定 dccV25::KeyboardController This shortcut conflicts with [%1] 此快捷鍵與[%1]衝突 dccV25::PwqualityManager Password cannot be empty 密碼不能為空 Password must have at least %1 characters 密碼長度不能少於%1個字元 Password must be no more than %1 characters 密碼長度不能超過%1個字元 Password can only contain English letters (case-sensitive), numbers or special symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密碼只能由英文(區分大小寫)、數字或特殊符號(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)組成 No more than %1 palindrome characters please 迴文字元長度不超過%1位 No more than %1 monotonic characters please 單調性字元不超過%1位 No more than %1 repeating characters please 重複字元不超過%1位 Password must contain uppercase letters, lowercase letters, numbers and symbols (~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/) 密碼必須由大寫字母、小寫字母、數字、符號(~`!@#$%^&*()-_+=|\{}[]:"'<>,.?/)三種類型組成 Password must not contain more than 4 palindrome characters 密碼不得含有連續4個以上的迴文字元 Do not use common words and combinations as password 密碼不能是常見單詞及組合 Create a strong password please 密碼過於簡單,請增加密碼複雜度 It does not meet password rules 密碼不符合安全要求 At least include %1 types among lowercase letters, uppercase letters, numbers, and symbols, and the password cannot be the same as the username. 至少同時包含小寫字母、大寫字母、數字和符號中的%1種,且密碼不能與使用者名稱一致。 dccV25::ShortcutModel System 系統 Window 視窗 Workspace 工作區 AssistiveTools 輔助功能 Custom 自定義 None ================================================ FILE: translations/desktop/desktop.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ady.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_af.ts ================================================ desktopControl CenterBeheersentrumDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_af_ZA.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ak.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_am.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_am_ET.ts ================================================ desktopControl Centerመቆጣጠሪያ ማእከልDeepin Control Centerዲፕኢን መቆጣጠሪያ ማእከልDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ar.ts ================================================ desktopControl Centerمركز التحكمDeepin Control Centerمركز تحكم ديبينDeepin Desktop Environment Control Centerمركز تحكم بيئة سطح مكتب Deepin ================================================ FILE: translations/desktop/desktop_ar_EG.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ast.ts ================================================ desktopControl CenterCentru de controlDeepin Control CenterCentru de control DeepinDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_az.ts ================================================ desktopControl Centerİdarə Etmə MərkəziDeepin Control CenterDeepin İdarəetmə MərkəziDeepin Desktop Environment Control CenterDeepin İş Masası Mühiti İdarəetmə Mərkəzi ================================================ FILE: translations/desktop/desktop_bg.ts ================================================ desktopControl CenterКонтролен центърDeepin Control CenterКонтролен център на DeepinDeepin Desktop Environment Control CenterКонтролен център на работната среда Deepin ================================================ FILE: translations/desktop/desktop_bn.ts ================================================ desktopControl Centerনিয়ন্ত্রণ কেন্দ্রDeepin Control Centerডিপিন কন্ট্রোল সেন্টারDeepin Desktop Environment Control Centerডিপিন ডেস্কটপ এনভাইরনমেন্ট নিয়ন্ত্রণ কেন্দ্র ================================================ FILE: translations/desktop/desktop_bo.ts ================================================ desktopControl Centerཚོད་འཛིན་ལྟེ་གནས།Deepin Control Centerགཏིང་ཚད་ཚོད་འཛིན་ལྟེ་གནས།Deepin Desktop Environment Control Centerགཏིང་ཚད་ཅོག་ངོས་ཁོར་ཡུག་ཚོད་འཛིན་ལྟེ་གནས། ================================================ FILE: translations/desktop/desktop_bqi.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_br.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ca.ts ================================================ desktopControl CenterCentre de controlDeepin Control CenterCentre de control del DeepinDeepin Desktop Environment Control CenterCentre de control de l'entorn d'escriptori del Deepin ================================================ FILE: translations/desktop/desktop_cgg.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_cs.ts ================================================ desktopControl CenterOvládací panelyDeepin Control CenterOvládací panely pro DeepinDeepin Desktop Environment Control CenterOvládací panely pracovního prostředí Deepin ================================================ FILE: translations/desktop/desktop_da.ts ================================================ desktopControl CenterKontrolcenterDeepin Control CenterDeepin kontrolcenterDeepin Desktop Environment Control CenterKontrolcenter for Deepin-skrivebordsmiljø ================================================ FILE: translations/desktop/desktop_de.ts ================================================ desktopControl CenterKontrollzentrumDeepin Control CenterDeepin KontrollzentrumDeepin Desktop Environment Control CenterDeepin Desktop-Umgebung Kontrollzentrum ================================================ FILE: translations/desktop/desktop_el.ts ================================================ desktopControl CenterΚέντρο ΕλέγχουDeepin Control CenterDeepin Κέντρο ΕλέγχουDeepin Desktop Environment Control CenterΚέντρο Ελέγχου Περιβάλλοντος Εγασίας Deepin ================================================ FILE: translations/desktop/desktop_el_GR.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_en.ts ================================================ desktopControl CenterControl CenterDeepin Control CenterDeepin Control CenterDeepin Desktop Environment Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_en_AU.ts ================================================ desktopControl CenterControl CenterDeepin Control CenterDeepin Control CenterDeepin Desktop Environment Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_en_GB.ts ================================================ desktopControl CenterControl CenterDeepin Control CenterDeepin Control CenterDeepin Desktop Environment Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_en_NO.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_en_US.ts ================================================ desktopControl CenterControl CenterDeepin Control CenterDeepin Control CenterDeepin Desktop Environment Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_eo.ts ================================================ desktopControl Centerkontroloj centroDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_es.ts ================================================ desktopControl CenterCentro de controlDeepin Control CenterCentro de control de DeepinDeepin Desktop Environment Control CenterCentro de control del entorno de escritorio Deepin ================================================ FILE: translations/desktop/desktop_et.ts ================================================ desktopControl CenterJuhtpaneelDeepin Control CenterDeepin juhtpaneelDeepin Desktop Environment Control CenterDeepin töölaua juhtpaneel ================================================ FILE: translations/desktop/desktop_eu.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_fa.ts ================================================ desktopControl Centerمرکز کنترلDeepin Control Centerمرکز کنترل دیپینDeepin Desktop Environment Control Centerمرکز کنترل محیط دسکتاپ دیپین ================================================ FILE: translations/desktop/desktop_fi.ts ================================================ desktopControl CenterOhjauspaneliDeepin Control CenterDeepin ohjauspaneeliDeepin Desktop Environment Control CenterDeepin ohjauspaneeli ================================================ FILE: translations/desktop/desktop_fil.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_fr.ts ================================================ desktopControl CenterCentre de contrôleDeepin Control CenterCentre de contrôle DeepinDeepin Desktop Environment Control CenterCentre de contrôle de l’environnement de bureau Deepin ================================================ FILE: translations/desktop/desktop_gl.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_gl_ES.ts ================================================ desktopControl CenterCentro de ControlDeepin Control CenterCentro de control de DeepinDeepin Desktop Environment Control CenterCentro de control de ambiente de escritorio Deepin ================================================ FILE: translations/desktop/desktop_he.ts ================================================ desktopControl Centerמרכז בקרהDeepin Control Centerמרכז הבקרה של DeepinDeepin Desktop Environment Control Centerמרכז управления סביבת שולחן העבודה Deepin ================================================ FILE: translations/desktop/desktop_hi_IN.ts ================================================ desktopControl Centerनियंत्रण केंद्रDeepin Control Centerडीपइन नियंत्रण केंद्रDeepin Desktop Environment Control Centerडीपिन डेस्कटॉप वातावरण नियंत्रण केंद्र ================================================ FILE: translations/desktop/desktop_hr.ts ================================================ desktopControl CenterSredište upravljanjaDeepin Control CenterDeepin kontrolni centarDeepin Desktop Environment Control CenterKontrolni centar Deepin radnog okruženja ================================================ FILE: translations/desktop/desktop_hu.ts ================================================ desktopControl CenterVezérlőpultDeepin Control CenterDeepin® VezérlőpultDeepin Desktop Environment Control CenterDeepin® Asztali Környezet Vezérlőpult ================================================ FILE: translations/desktop/desktop_hy.ts ================================================ desktopControl CenterՂեկավարման ԿենտրոնDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_id.ts ================================================ desktopControl CenterPusat KontrolDeepin Control CenterPusat Kontrol DeepinDeepin Desktop Environment Control CenterPusat Kontrol Lingkungan Desktop Deepin ================================================ FILE: translations/desktop/desktop_id_ID.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_it.ts ================================================ desktopControl CenterCentro di ControlloDeepin Control CenterCentro di Controllo di DeepinDeepin Desktop Environment Control CenterCentro di Controllo del Deepin Desktop Environment ================================================ FILE: translations/desktop/desktop_ja.ts ================================================ desktopControl CenterコントロールセンターDeepin Control CenterDeepin コントロールセンターDeepin Desktop Environment Control CenterDeepin デスクトップ環境のコントロールセンター ================================================ FILE: translations/desktop/desktop_ka.ts ================================================ desktopControl Centerმართვის ცენტრიDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_kab.ts ================================================ desktopControl CenterAmmas n usenqedDeepin Control CenterAmmas n usenqed n DeepinDeepin Desktop Environment Control CenterAmmas n usenqed n twennaḍt n tnarit n Deepin ================================================ FILE: translations/desktop/desktop_kk.ts ================================================ desktopControl CenterКөрсөткүч центріDeepin Control CenterDeepin Көрсөткүч центріDeepin Desktop Environment Control CenterDeepin Аreamаялық міндеттерінің Көрсөткүч центрі ================================================ FILE: translations/desktop/desktop_km_KH.ts ================================================ desktopControl Centerមជ្ឈមណ្ឌលបញ្ជាDeepin Control Centerមជ្ឈមណ្ឌលបញ្ជា DeepinDeepin Desktop Environment Control Centerមជ្ឈមណ្ឌលបញ្ជាបរិស្ថានផ្ទៃតុ Deepin ================================================ FILE: translations/desktop/desktop_kn_IN.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ko.ts ================================================ desktopControl Center제어 센터Deepin Control CenterDeepin 제어 센터Deepin Desktop Environment Control CenterDeepin 바탕화면 환경 제어 센터 ================================================ FILE: translations/desktop/desktop_ku.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ku_IQ.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ky.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ky@Arab.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_la.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_lo.ts ================================================ desktopControl CenterສູນຄວບຄຸມDeepin Control Centerສູນຄວບຄຸມ DeepinDeepin Desktop Environment Control Centerdeepin ສູນຄວບຄຸມສະພາບແວດລ້ອມ desktop ================================================ FILE: translations/desktop/desktop_lt.ts ================================================ desktopControl CenterValdymo centrasDeepin Control CenterDeepin valdymo centrasDeepin Desktop Environment Control CenterDeepin darbalaukio aplinkos valdymo centras ================================================ FILE: translations/desktop/desktop_lv.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ml.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_mn.ts ================================================ desktopControl CenterУдирдлагын хэсэгDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_mr.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ms.ts ================================================ desktopControl CenterPusat KawalanDeepin Control CenterPusat Kawalan DeepinDeepin Desktop Environment Control CenterPusat Kawalan Persekitaran Atas Meja Deepin ================================================ FILE: translations/desktop/desktop_nb.ts ================================================ desktopControl CenterKontrollsenterDeepin Control CenterDeepin kontrollsenterDeepin Desktop Environment Control CenterDeepin Desktop Environment Kontrollsenter ================================================ FILE: translations/desktop/desktop_ne.ts ================================================ desktopControl Centerनियन्त्रण केन्द्रDeepin Control CenterDesktop Control CenterDeepin Desktop Environment Control Centerडीपिन डेस्कटप वातावरण नियन्त्रण केन्द्र ================================================ FILE: translations/desktop/desktop_nl.ts ================================================ desktopControl CenterInstellingencentrumDeepin Control CenterDeepin SysteeminstellingenDeepin Desktop Environment Control CenterDeepin Systeeminstellingen ================================================ FILE: translations/desktop/desktop_pa.ts ================================================ desktopControl Centerਕੰਟਰੋਲ ਸੈਂਟਰDeepin Control CenterDeepin Desktop Environment Control Centerਡੀਪਿਨ ਡੈਸਕਟਾਪ ਇੰਵਾਇਰਨਮੈਂਟ ਕੰਟਰੋਲ ਸੈਂਟਰ ================================================ FILE: translations/desktop/desktop_pam.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_pl.ts ================================================ desktopControl CenterCentrum kontroliDeepin Control CenterCentrum kontroli DeepinDeepin Desktop Environment Control CenterCentrum kontroli środowiska Deepin ================================================ FILE: translations/desktop/desktop_ps.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_pt.ts ================================================ desktopControl CenterCentro de ControloDeepin Control CenterCentro de Controlo DeepinDeepin Desktop Environment Control CenterCentro de Controlo do Ambiente de trabalho Deepin ================================================ FILE: translations/desktop/desktop_pt_BR.ts ================================================ desktopControl CenterConfiguraçõesDeepin Control CenterConfiguraçõesDeepin Desktop Environment Control CenterConfigurações do Deepin Desktop Environment ================================================ FILE: translations/desktop/desktop_ro.ts ================================================ desktopControl CenterCentru ControlDeepin Control CenterPanou de Control DeepinDeepin Desktop Environment Control CenterCentru Control Mediu Desktop Deepin ================================================ FILE: translations/desktop/desktop_ru.ts ================================================ desktopControl CenterЦентр УправленияDeepin Control CenterЦентр Управления DeepinDeepin Desktop Environment Control CenterЦентр управления окружением рабочего стола Deepin ================================================ FILE: translations/desktop/desktop_ru_UA.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_sc.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_si.ts ================================================ desktopControl Centerපාලන මධ්‍යස්ථානයDeepin Control CenterDeepin පාලන මධ්‍යස්ථානයDeepin Desktop Environment Control CenterDeepin ඩෙස්ක්ටොප් පරිසර පාලන මධ්‍යස්ථානය ================================================ FILE: translations/desktop/desktop_sk.ts ================================================ desktopControl CenterOvládacie centrumDeepin Control CenterDeepin Ovládacie centrumDeepin Desktop Environment Control CenterOvládacie centrum Deepin Desktop Environment ================================================ FILE: translations/desktop/desktop_sl.ts ================================================ desktopControl CenterNadzorni centerDeepin Control CenterNadzorni center DeepinDeepin Desktop Environment Control CenterDeepin Desktop Enviroment nadzorni center ================================================ FILE: translations/desktop/desktop_sq.ts ================================================ desktopControl CenterQendër KontrolliDeepin Control CenterQendër Kontrolli DeepinDeepin Desktop Environment Control CenterQendër Kontrolli e Mjedisit Desktop Deepin ================================================ FILE: translations/desktop/desktop_sr.ts ================================================ desktopControl CenterКонтролни ЦентарDeepin Control CenterДипин Контролни ЦентарDeepin Desktop Environment Control CenterДипин Радно Окружење Контролни Центар ================================================ FILE: translations/desktop/desktop_sv.ts ================================================ desktopControl CenterKontrollcenterDeepin Control CenterDeepin KontrollcenterDeepin Desktop Environment Control CenterDeepin Desktop Environment Kontrollcenter ================================================ FILE: translations/desktop/desktop_sv_SE.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_sw.ts ================================================ desktopControl CenterKituo cha ulinziDeepin Control CenterDeepin Desktop Environment Control CenterKituo cha ulinzi za eneo la kazi ya Deepin ================================================ FILE: translations/desktop/desktop_ta.ts ================================================ desktopControl Centerகட்டுப்பாட்டு மையம்Deepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_te.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_th.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_tr.ts ================================================ desktopControl CenterKontrol MerkeziDeepin Control CenterDeepin Kontrol MerkeziDeepin Desktop Environment Control CenterDeepin Masaüstü Ortamı Kontrol Merkezi ================================================ FILE: translations/desktop/desktop_tzm.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_ug.ts ================================================ desktopControl Centerكونترول مەركىزى Deepin Control CenterDeepin كونترول مەركىزىDeepin Desktop Environment Control Centerئېكران مۇھىتى كونترول قىلىش مەركىزى ================================================ FILE: translations/desktop/desktop_uk.ts ================================================ desktopControl CenterЦентр керуванняDeepin Control CenterЦентр керування DeepinDeepin Desktop Environment Control CenterЦентр керування стільничним середовищем Deepin ================================================ FILE: translations/desktop/desktop_ur.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_uz.ts ================================================ desktopControl CenterDeepin Control CenterDeepin Desktop Environment Control Center ================================================ FILE: translations/desktop/desktop_vi.ts ================================================ desktopControl CenterTrung tâm kiểm soátDeepin Control CenterTrung tâm Điều khiển DeepinDeepin Desktop Environment Control CenterĐiều khiển Deepin Desktop Environment ================================================ FILE: translations/desktop/desktop_zh_CN.ts ================================================ desktopControl Center控制中心Deepin Control Center深度控制中心 Deepin Desktop Environment Control Center深度桌面环境控制中心 ================================================ FILE: translations/desktop/desktop_zh_HK.ts ================================================ desktopControl Center控制中心Deepin Control CenterDeepin 控制中心Deepin Desktop Environment Control CenterDeepin 控制中心 ================================================ FILE: translations/desktop/desktop_zh_TW.ts ================================================ desktopControl Center控制中心Deepin Control CenterDeepin 控制中心Deepin Desktop Environment Control CenterDeepin 桌面環境的控制中心